From 251f40fe8bb8e12595791fe90d48636c2a8a733c Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 20 Oct 2026 13:55:47 +0000 Subject: [PATCH 01/33] Bring controls newer than UI5 1.71 into the porting scope Maintainer decision: a sample whose control is newer than UI5 1.71 is no longer out of scope. Its port keeps the control 1:1 and declares it as a POST_171 deviation naming the control, which files it under src/02. - generate-coverage: scopeOf drops the 'newer' verdict; a port of a post-1.71 control without a POST_171 deviation now fails the gate - scaffold: writes that POST_171 deviation and files the port in src/02 - scope-of: reports such controls IN_SCOPE with the POST_171 note - lib-packages: the release level reads POST_171 only; the scope-exceptions path for post-1.71 controls is gone, and the four 'newer' entries (apps 136, 141, 165, 203 - all carry POST_171) with it - AGENTS, README, TRAINING, generation prompt and skills updated The backlog grows by 48 samples (coverage 621 / 669). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx --- .claude/skills/port-a-sample/SKILL.md | 10 ++- .claude/skills/scaffold-a-port/SKILL.md | 6 +- AGENTS.md | 38 +++++---- README.md | 29 +++---- STATUS.md | 2 +- TRAINING.md | 2 +- api.md | 102 ++++++++++++------------ scripts/generate-coverage.mjs | 48 ++++++++--- scripts/generate-status.mjs | 5 +- scripts/generation-prompt.txt | 5 +- scripts/lib-packages.mjs | 42 +++------- scripts/scaffold.mjs | 28 ++++--- scripts/scope-of.mjs | 17 ++-- scripts/test/fixtures/golden/README.md | 4 +- scripts/test/fixtures/golden/api.md | 6 +- ui5/scope-exceptions.json | 32 ++------ 16 files changed, 191 insertions(+), 185 deletions(-) diff --git a/.claude/skills/port-a-sample/SKILL.md b/.claude/skills/port-a-sample/SKILL.md index 0efea1058..559aca773 100644 --- a/.claude/skills/port-a-sample/SKILL.md +++ b/.claude/skills/port-a-sample/SKILL.md @@ -517,10 +517,12 @@ the two is passed, never both and never neither. #### The 1.71 rule in practice -The **control** must exist since UI5 1.71 and not be deprecated — otherwise -the sample is out of scope and is never ported (pre-check with -`node scripts/scope-of.mjs `); never silently substitute a different -control. **Members** (properties/aggregations/associations/events) newer than +The **control** must not be deprecated — otherwise the sample is out of scope +and is never ported (pre-check with `node scripts/scope-of.mjs `); +never silently substitute a different control. A **control** newer than 1.71 +is in scope since 2026-10-20: it is kept 1:1 and declared as a `POST_171` +deviation naming the control (the scaffolder writes it), which files the port +under `src/02` (AGENTS §1, §3). **Members** (properties/aggregations/associations/events) newer than 1.71 ARE kept when the original uses them — 1:1 fidelity wins (AGENTS §5) — and each one is declared as a `POST_171` deviation naming the member (app 040 keeps `showClearIcon` @1.94 that way; the app then needs a UI5 release ≥ that diff --git a/.claude/skills/scaffold-a-port/SKILL.md b/.claude/skills/scaffold-a-port/SKILL.md index 188684add..441e5c6f6 100644 --- a/.claude/skills/scaffold-a-port/SKILL.md +++ b/.claude/skills/scaffold-a-port/SKILL.md @@ -50,10 +50,12 @@ that is the actual porting work): `meta/` sidecar. Since 2026-08-04 it **enforces the two pre-checks that used to be manual**: a HOLDOUT sample (`ui5/holdout.json`) and an out-of-scope sample (same verdict as `generate-coverage.mjs` `scopeOf`: - 1.71 floor, deprecation, non-app family — facts from the universe enriched + deprecation, non-app family — facts from the universe enriched with `ui5/properties.json`) are refused with the facts printed; `ui5/scope-exceptions.json` entries pass with a note, `--force` overrides - as a recorded maintainer decision. The stub is a TODO placeholder view: it passes + as a recorded maintainer decision. A control newer than 1.71 is in scope + (AGENTS §1): the scaffolder writes its `POST_171` deviation into the sidecar + and files the port under `src/02//` straight away. The stub is a TODO placeholder view: it passes abaplint / pattern-lint / view-gates immediately, and `structural_diff` (correctly) fails until you rebuild the view 1:1. Needs an OpenUI5 checkout (`OPENUI5_SRC`, default `../fork-openui5`). `--dry-run` to diff --git a/AGENTS.md b/AGENTS.md index 7816f3c0e..3f4572209 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -76,10 +76,16 @@ rebuild it as an abap2UI5 sample**. Doing that systematically reveals the gaps between what UI5 ships and what abap2UI5 can already express — and those gaps become the backlog to close. -**Porting scope**: a sample is in scope when its **control exists since UI5 -1.71** and is **not deprecated** in the current release (legacy-free ready) — -computed per sample from `ui5/universe.json` by `generate-coverage.mjs` -(`scopeOf`). Out-of-scope samples stay listed in `api.md` (marked `✗`) but are +**Porting scope**: a sample is in scope when its **control is not +deprecated** in the current release (legacy-free ready) — computed per sample +from `ui5/universe.json` by `generate-coverage.mjs` (`scopeOf`). A control +**newer than UI5 1.71** is in scope too (maintainer decision 2026-10-20 — it +was out of scope before, which left 48 samples of Avatar, IllustratedMessage, +DynamicDateRange, SidePanel, p13n, UploadSetwithTable & co. unported): its +port keeps the control 1:1 and declares it as a **`POST_171` deviation naming +the control**, which files the port under `src/02` (§3). `generate-coverage.mjs` +fails a port of a post-1.71 control without that deviation, and the scaffolder +writes it for you. Out-of-scope samples stay listed in `api.md` (marked `✗`) but are **never ported**; `node scripts/generate-coverage.mjs --backlog` prints the in-scope, unported samples for batch planning. @@ -109,7 +115,7 @@ family **before** the control has to resolve in the fork checkout (`ControllerExtension` carries `entity: null` in the universe and would otherwise report `UNRESOLVED`). Adding a family is a maintainer decision — write the reason into the file; a ported sample that matches hits the same -hard scope gate as a deprecated/newer one. +hard scope gate as a deprecated one. > **⚠️ Verify scope from source before porting.** The gate is not blind: > `ui5/properties.json` carries each control's class-level @@ -276,17 +282,18 @@ naming the folder it belongs in. A port needs a newer runtime in two ways, and both are committed facts, so the verdict is offline and deterministic: - it **keeps a post-1.71 member** — always a `POST_171` deviation in the sidecar; -- its **control itself is post-1.71** — which needs no deviation (the sample uses - the control as the original does) and can only exist as a maintainer-decided - entry in `ui5/scope-exceptions.json`, since the scope gate blocks every other - post-1.71 control. That entry pins the control's `@since`, which is what - `lib-packages.mjs` reads (app 141, `sap.ui.core.InvisibleMessage` @1.78, is - the case with no deviation at all). +- its **control itself is post-1.71** — also a `POST_171` deviation, naming the + control (§1; `generate-coverage.mjs` fails the port without it). Until + 2026-10-20 such a port could only exist as a `ui5/scope-exceptions.json` + entry whose pinned `@since` `lib-packages.mjs` read; that path is gone with + the scope change. So **declaring the first `POST_171` deviation on a port moves it from `src/01//` to `src/02//`** (and dropping the last one moves it back); `scaffold.mjs` starts every fresh port in the `<= 1.71` half of its flavour, -which is where a port with no deviations belongs. +which is where a port with no deviations belongs — except a port of a +post-1.71 control, which it scaffolds with that `POST_171` deviation straight +into `src/02`. Below the library there is **no further level**: the former batch subpackages `src//b/` were flattened away on 2026-08-12, when the corpus stood at @@ -614,9 +621,10 @@ source of truth: as-is; only improve the trailing text to a human phrase when you know one (e.g. `sap.m.Switch - Some say it is only a switch...`). Do not agonize over entity-vs-library — existing ports use both; keep the scaffolder default. -- The **control** must exist since UI5 1.71 and not be deprecated — samples - whose control is newer or deprecated are **out of scope** (§1) and never - enter a batch. **Members (properties/aggregations/associations/events) +- The **control** must not be deprecated — samples whose control is + deprecated are **out of scope** (§1) and never enter a batch. A control + newer than 1.71 is in scope and kept 1:1, declared as a `POST_171` + deviation naming the control (§1, §3). **Members (properties/aggregations/associations/events) newer than 1.71 ARE kept when the original uses them — 1:1 fidelity wins** (policy decision). Every such member must be declared with a `POST_171` deviation naming it (the `property_gate` enforces this via diff --git a/README.md b/README.md index e52320fd6..349ef5494 100644 --- a/README.md +++ b/README.md @@ -94,11 +94,12 @@ sample and its ABAP class next to each other and compare line by line.
This repository is generated and gated by an AI coding agent: from every -official demo kit sample of the covered libraries whose control **exists -since UI5 1.71** and is **not deprecated** (legacy-free ready), it builds an +official demo kit sample of the covered libraries whose control is **not +deprecated** (legacy-free ready), it builds an abap2UI5 app — exposing the **functional gaps** between what UI5 offers and -what abap2UI5 can already express, so they can be closed. Deprecated or newer -controls are listed as out of scope. The pipeline: +what abap2UI5 can already express, so they can be closed. Deprecated controls +are listed as out of scope; a control newer than UI5 1.71 is ported into +`src/02`. The pipeline: 1. **Read** — clone [OpenUI5](https://github.com/SAP/openui5) and scan every demo kit sample of the covered libraries @@ -113,7 +114,7 @@ controls are listed as out of scope. The pipeline: 4. **Report** — regenerate the [coverage](#coverage) tables and the in-system overview app. In api.md, `—` marks an in-scope sample not yet ported (the backlog), `⊘` one reserved as hold-out (in scope, unported on purpose) and - `✗` an out-of-scope one (deprecated / newer than UI5 1.71). + `✗` an out-of-scope one (deprecated control, or not an app view). Nothing graduates out of here. Since 2026-08-12 this repository is the home of the demo kit rebuilds (AGENTS.md §1) — `checked` is the top rung of the quality @@ -212,27 +213,27 @@ have an abap2UI5 port. -Overall **617 / 617** portable demo kit samples ported (100.0 %). -**In scope**: samples whose control exists since **UI5 1.71** and is **not deprecated** (legacy-free ready). -Out of scope: 113 of 742 samples — 21 on deprecated controls, 52 on controls newer than 1.71, 37 that are not app views (UI5 test infrastructure, Component routing, view-templating demos — see `ui5/scope-nonapp.json`), 3 demo apps without an owning control. -Plus **5** ported samples outside that scope — maintainer-decided exceptions (`ui5/scope-exceptions.json`, listed in [STATUS.md](STATUS.md)); they are not counted as coverage of the in-scope backlog. +Overall **621 / 669** portable demo kit samples ported (92.8 %). +**In scope**: samples whose control is **not deprecated** (legacy-free ready). 52 of them use a control newer than **UI5 1.71** — their ports need a newer runtime and are filed under `src/02`. +Out of scope: 61 of 742 samples — 21 on deprecated controls, 37 that are not app views (UI5 test infrastructure, Component routing, view-templating demos — see `ui5/scope-nonapp.json`), 3 demo apps without an owning control. +Plus **1** ported samples outside that scope — maintainer-decided exceptions (`ui5/scope-exceptions.json`, listed in [STATUS.md](STATUS.md)); they are not counted as coverage of the in-scope backlog. Control metadata from OpenUI5 **1.152.0**. | Module | Samples | In scope | Reserved | To port | Ported | Coverage | | |--------|--------:|---------:|---------:|--------:|-------:|---------:|---| -| `sap.f` | 46 | 34 | | 34 | 34 | 100.0 % | ██████████ | -| `sap.m` | 461 | 403 | 12 | 391 | 391 | 100.0 % | ██████████ | | `sap.tnt` | 17 | 17 | | 17 | 17 | 100.0 % | ██████████ | | `sap.ui.codeeditor` | 2 | 2 | | 2 | 2 | 100.0 % | ██████████ | -| `sap.ui.core` | 63 | 20 | | 20 | 20 | 100.0 % | ██████████ | +| `sap.ui.core` | 63 | 21 | | 21 | 21 | 100.0 % | ██████████ | | `sap.ui.integration` | 4 | 4 | | 4 | 4 | 100.0 % | ██████████ | | `sap.ui.layout` | 61 | 61 | | 61 | 61 | 100.0 % | ██████████ | | `sap.ui.table` | 21 | 21 | | 21 | 21 | 100.0 % | ██████████ | | `sap.ui.unified` | 22 | 22 | | 22 | 22 | 100.0 % | ██████████ | | `sap.uxap` | 45 | 45 | | 45 | 45 | 100.0 % | ██████████ | -| **Total** | **742** | **629** | **12** | **617** | **617** | **100.0 %** | ██████████ | +| `sap.m` | 461 | 442 | 12 | 430 | 392 | 91.2 % | █████████░ | +| `sap.f` | 46 | 46 | | 46 | 36 | 78.3 % | ████████░░ | +| **Total** | **742** | **681** | **12** | **669** | **621** | **92.8 %** | █████████░ | -**Reserved** — 12 in-scope samples are deliberately *not* ported. They are the hold-out set (`ui5/holdout.json`, see [TRAINING.md](TRAINING.md#measuring-progress)): never used as prompt references, kept out of batch planning, and regenerated from scratch to measure the generator itself — CI-green on the first try, structural-diff violations, review findings per app. Spending one as a measurement is what ports it, so they leave this column by being used, not by being worked off. They are excluded from the coverage denominator because they are not backlog. **The portable backlog is zero.** +**Reserved** — 12 in-scope samples are deliberately *not* ported. They are the hold-out set (`ui5/holdout.json`, see [TRAINING.md](TRAINING.md#measuring-progress)): never used as prompt references, kept out of batch planning, and regenerated from scratch to measure the generator itself — CI-green on the first try, structural-diff violations, review findings per app. Spending one as a measurement is what ports it, so they leave this column by being used, not by being worked off. They are excluded from the coverage denominator because they are not backlog. diff --git a/STATUS.md b/STATUS.md index cd67004a2..a86766072 100644 --- a/STATUS.md +++ b/STATUS.md @@ -21,7 +21,7 @@ TRAINING.md; for what abap2UI5 can express see CAPABILITIES.md._ | Deviations | 10 DROPPED_171 · 161 IMPROVISED · 1937 NOTE · 301 POST_171 | | Open LIVE_TESTs | **0 ports** carry at least one `LIVE_TEST` deviation — the automated close path is the e2e interaction harness (AGENTS §6 `e2e_smoke`) | | Declared gate skips | 2 structural-diff · 5 render-smoke · 0 data-fidelity · 1 property-gate (each re-verified per run — a stale skip FAILS) | -| Out-of-scope ported samples | `z2ui5_cl_smpc_app_121 (sap.m.sample.UploadSet — deprecated)` · `z2ui5_cl_smpc_app_136 (sap.f.sample.SidePanelSingle — control @since 1.107)` · `z2ui5_cl_smpc_app_141 (sap.ui.core.sample.InvisibleMessage — control @since 1.78)` · `z2ui5_cl_smpc_app_165 (sap.f.sample.ProductSwitchNavigation — control @since 1.72)` · `z2ui5_cl_smpc_app_203 (sap.m.sample.OverflowToolbarTokenizer — control @since 1.139)` — all decided KEEP permanently 2026-07-30 (per-app rationale in ui5/scope-exceptions.json, revertible); the source-backed scope gate stays hard for NEW undecided entries | +| Out-of-scope ported samples | `z2ui5_cl_smpc_app_121 (sap.m.sample.UploadSet — deprecated)` — all decided KEEP permanently 2026-07-30 (per-app rationale in ui5/scope-exceptions.json, revertible); the source-backed scope gate stays hard for NEW undecided entries | | Hold-out set (generator KPI) | **24** reserved samples in `ui5/holdout.json` · **12** spent as measurements (now ordinary ports: 098, 100, 101, 103, 153, 154, 210, 212, 229, 237, 242, 243) · results: 2 probe section(s) in [docs/history.md](docs/history.md): "Hold-out probe #2 (2026-07-26) — fidelity way up, syntax is the new frontier" · "Hold-out regeneration probe #1 (2026-07-19) — baseline set" — the measurement TRAINING.md "Measuring progress" defines, and the one number that still measures the generator with the portable backlog closed | _Coverage per library (ported / in scope) is generated into the [README](README.md#coverage); one row per sample in [api.md](api.md)._ diff --git a/TRAINING.md b/TRAINING.md index 08023de83..40093ad95 100644 --- a/TRAINING.md +++ b/TRAINING.md @@ -42,7 +42,7 @@ each port's `meta/.json`. Per batch: 1. **Generate** — the agent picks ~10 related samples from the in-scope backlog (`node scripts/generate-coverage.mjs --backlog` — only controls that - exist since UI5 1.71 and are not deprecated, see AGENTS §1) and ports them + are not deprecated, see AGENTS §1) and ports them under a new `b` batch id (`npm run scaffold … --new-batch`), prompt fed with AGENTS.md, CAPABILITIES.md and the 2–3 nearest `checked` ports. Pick **breadth-first**: `NEW-CONTROL` rows diff --git a/api.md b/api.md index 871891a2b..04eaf3139 100644 --- a/api.md +++ b/api.md @@ -11,12 +11,12 @@ its ↗ opens the live fullscreen sample, **ABAP** is the generated class. hold-out set (`ui5/holdout.json`) that measures the generator, so it is kept unported on purpose and is not part of the backlog — see the [README](README.md#coverage). -`✗` = **out of scope**: the control is deprecated or newer than UI5 1.71 -(not legacy-free ready / not 1.71-compatible), or the sample is not an app +`✗` = **out of scope**: the control is deprecated (not legacy-free ready), +or the sample is not an app view at all (UI5 test infrastructure, Component routing, view-templating and XMLComposite authoring demos — `ui5/scope-nonapp.json`) — these samples are listed for completeness but are not ported. A **⁺** after the class marks ports -that keep members newer than UI5 1.71 for 1:1 fidelity (declared as +that keep a control or members newer than UI5 1.71 for 1:1 fidelity (declared as POST_171 in the sidecar) — they need a correspondingly recent UI5. See the [README](README.md#coverage) for the per-module coverage summary. @@ -24,7 +24,7 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | Module | Control | Since | Deprecated | Sample | ABAP | |--------|---------|:-----:|------------|--------|:----:| -| sap.f | [AvatarGroup](https://sdk.openui5.org/api/sap.f.AvatarGroup) | 1.73 | | [AvatarGroup](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/AvatarGroup) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.AvatarGroup&sap-ui-xx-sample-lib=sap.f) | ✗ | +| sap.f | [AvatarGroup](https://sdk.openui5.org/api/sap.f.AvatarGroup) | 1.73 | | [AvatarGroup](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/AvatarGroup) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.AvatarGroup&sap-ui-xx-sample-lib=sap.f) | — | | sap.f | [Card](https://sdk.openui5.org/api/sap.f.Card) | 1.64 | | [Card](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/Card) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.Card&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_117](https://github.com/abap2UI5/samples-controls/blob/main/src/01/04/z2ui5_cl_smpc_app_117.clas.abap) | | sap.f | [DynamicPage](https://sdk.openui5.org/api/sap.f.DynamicPage) | 1.42 | | [DynamicPageAnalyticalTable](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/DynamicPageAnalyticalTable) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.DynamicPageAnalyticalTable&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_559](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_559.clas.abap) **⁺** | | sap.f | [DynamicPage](https://sdk.openui5.org/api/sap.f.DynamicPage) | 1.42 | | [DynamicPageFreeStyle](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/DynamicPageFreeStyle) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.DynamicPageFreeStyle&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_170](https://github.com/abap2UI5/samples-controls/blob/main/src/01/04/z2ui5_cl_smpc_app_170.clas.abap) | @@ -52,12 +52,12 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | sap.f | [GridList](https://sdk.openui5.org/api/sap.f.GridList) | 1.60 | | [GridListKeyboardArrowsNavigation](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/GridListKeyboardArrowsNavigation) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.GridListKeyboardArrowsNavigation&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_582](https://github.com/abap2UI5/samples-controls/blob/main/src/01/04/z2ui5_cl_smpc_app_582.clas.abap) | | sap.f | [GridList](https://sdk.openui5.org/api/sap.f.GridList) | 1.60 | | [GridListModes](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/GridListModes) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.GridListModes&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_133](https://github.com/abap2UI5/samples-controls/blob/main/src/01/04/z2ui5_cl_smpc_app_133.clas.abap) | | sap.f | [GridList](https://sdk.openui5.org/api/sap.f.GridList) | 1.60 | | [GridListResponsiveColumnLayout](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/GridListResponsiveColumnLayout) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.GridListResponsiveColumnLayout&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_222](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_222.clas.abap) **⁺** | -| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerBasic](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerBasic) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerBasic&sap-ui-xx-sample-lib=sap.f) | ✗ | -| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerColumnsRatio](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerColumnsRatio) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerColumnsRatio&sap-ui-xx-sample-lib=sap.f) | ✗ | -| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerHeaderBlockAndActionsPlacement](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerHeaderBlockAndActionsPlacement) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerHeaderBlockAndActionsPlacement&sap-ui-xx-sample-lib=sap.f) | ✗ | -| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerIntegrationCard](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerIntegrationCard) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerIntegrationCard&sap-ui-xx-sample-lib=sap.f) | ✗ | -| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerUseCases](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerUseCases) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerUseCases&sap-ui-xx-sample-lib=sap.f) | ✗ | -| sap.f | [ProductSwitch](https://sdk.openui5.org/api/sap.f.ProductSwitch) | 1.72 | | [ProductSwitchItemWithImageSrc](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/ProductSwitchItemWithImageSrc) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.ProductSwitchItemWithImageSrc&sap-ui-xx-sample-lib=sap.f) | ✗ | +| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerBasic](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerBasic) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerBasic&sap-ui-xx-sample-lib=sap.f) | — | +| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerColumnsRatio](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerColumnsRatio) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerColumnsRatio&sap-ui-xx-sample-lib=sap.f) | — | +| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerHeaderBlockAndActionsPlacement](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerHeaderBlockAndActionsPlacement) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerHeaderBlockAndActionsPlacement&sap-ui-xx-sample-lib=sap.f) | — | +| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerIntegrationCard](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerIntegrationCard) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerIntegrationCard&sap-ui-xx-sample-lib=sap.f) | — | +| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerUseCases](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerUseCases) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerUseCases&sap-ui-xx-sample-lib=sap.f) | — | +| sap.f | [ProductSwitch](https://sdk.openui5.org/api/sap.f.ProductSwitch) | 1.72 | | [ProductSwitchItemWithImageSrc](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/ProductSwitchItemWithImageSrc) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.ProductSwitchItemWithImageSrc&sap-ui-xx-sample-lib=sap.f) | — | | sap.f | [ProductSwitch](https://sdk.openui5.org/api/sap.f.ProductSwitch) | 1.72 | | [ProductSwitchNavigation](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/ProductSwitchNavigation) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.ProductSwitchNavigation&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_165](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_165.clas.abap) **⁺** | | sap.f | [SemanticPage](https://sdk.openui5.org/api/sap.f.semantic.SemanticPage) | 1.46.0 | | [SemanticPage](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SemanticPage) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SemanticPage&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_166](https://github.com/abap2UI5/samples-controls/blob/main/src/01/04/z2ui5_cl_smpc_app_166.clas.abap) | | sap.f | [SemanticPage](https://sdk.openui5.org/api/sap.f.semantic.SemanticPage) | 1.46.0 | | [SemanticPageFreeStyle](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SemanticPageFreeStyle) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SemanticPageFreeStyle&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_529](https://github.com/abap2UI5/samples-controls/blob/main/src/01/04/z2ui5_cl_smpc_app_529.clas.abap) | @@ -66,18 +66,18 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | sap.f | [ShellBar](https://sdk.openui5.org/api/sap.f.ShellBar) | 1.63 | | [ShellBarWithMenuButton](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/ShellBarWithMenuButton) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.ShellBarWithMenuButton&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_152](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_152.clas.abap) **⁺** | | sap.f | [ShellBar](https://sdk.openui5.org/api/sap.f.ShellBar) | 1.63 | | [ShellBarWithSearch](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/ShellBarWithSearch) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.ShellBarWithSearch&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_218](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_218.clas.abap) **⁺** | | sap.f | [ShellBar](https://sdk.openui5.org/api/sap.f.ShellBar) | 1.63 | | [ShellBarWithSplitApp](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/ShellBarWithSplitApp) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.ShellBarWithSplitApp&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_585](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_585.clas.abap) **⁺** | -| sap.f | [SidePanel](https://sdk.openui5.org/api/sap.f.SidePanel) | 1.107 | | [SidePanel](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SidePanel) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SidePanel&sap-ui-xx-sample-lib=sap.f) | ✗ | -| sap.f | [SidePanel](https://sdk.openui5.org/api/sap.f.SidePanel) | 1.107 | | [SidePanelOverflow](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SidePanelOverflow) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SidePanelOverflow&sap-ui-xx-sample-lib=sap.f) | ✗ | -| sap.f | [SidePanel](https://sdk.openui5.org/api/sap.f.SidePanel) | 1.107 | | [SidePanelResizable](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SidePanelResizable) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SidePanelResizable&sap-ui-xx-sample-lib=sap.f) | ✗ | +| sap.f | [SidePanel](https://sdk.openui5.org/api/sap.f.SidePanel) | 1.107 | | [SidePanel](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SidePanel) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SidePanel&sap-ui-xx-sample-lib=sap.f) | — | +| sap.f | [SidePanel](https://sdk.openui5.org/api/sap.f.SidePanel) | 1.107 | | [SidePanelOverflow](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SidePanelOverflow) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SidePanelOverflow&sap-ui-xx-sample-lib=sap.f) | — | +| sap.f | [SidePanel](https://sdk.openui5.org/api/sap.f.SidePanel) | 1.107 | | [SidePanelResizable](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SidePanelResizable) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SidePanelResizable&sap-ui-xx-sample-lib=sap.f) | — | | sap.f | [SidePanel](https://sdk.openui5.org/api/sap.f.SidePanel) | 1.107 | | [SidePanelSingle](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SidePanelSingle) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SidePanelSingle&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_136](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_136.clas.abap) **⁺** | | sap.m | [ActionListItem](https://sdk.openui5.org/api/sap.m.ActionListItem) | | | [ActionListItem](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ActionListItem) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ActionListItem&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_001](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_001.clas.abap) | | sap.m | [~~ActionSelect~~](https://sdk.openui5.org/api/sap.m.ActionSelect) | 1.16 | 1.111 — with no replacement. The control is no longer considered part of the Fiori concept. | [ActionSelect](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ActionSelect) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ActionSelect&sap-ui-xx-sample-lib=sap.m) | ✗ | | sap.m | [~~ActionSheet~~](https://sdk.openui5.org/api/sap.m.ActionSheet) | 1.9.1 | 1.149 — use sap.m.Menu / sap.m.MenuItem instead. | [ActionSheet](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ActionSheet) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ActionSheet&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [Avatar](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/Avatar) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.Avatar&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarActiveState](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarActiveState) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarActiveState&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarBadgeIconColor](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarBadgeIconColor) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarBadgeIconColor&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarValueState](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarValueState) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarValueState&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarWithAffordance](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarWithAffordance) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarWithAffordance&sap-ui-xx-sample-lib=sap.m) | ✗ | +| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [Avatar](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/Avatar) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.Avatar&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarActiveState](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarActiveState) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarActiveState&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarBadgeIconColor](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarBadgeIconColor) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarBadgeIconColor&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarValueState](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarValueState) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarValueState&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarWithAffordance](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarWithAffordance) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarWithAffordance&sap-ui-xx-sample-lib=sap.m) | — | | sap.m | [Bar](https://sdk.openui5.org/api/sap.m.Bar) | | | [Page](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/Page) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.Page&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_002](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_002.clas.abap) | | sap.m | [Bar](https://sdk.openui5.org/api/sap.m.Bar) | | | [ToolbarVsBar](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ToolbarVsBar) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ToolbarVsBar&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_189](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_189.clas.abap) | | sap.m | [Breadcrumbs](https://sdk.openui5.org/api/sap.m.Breadcrumbs) | 1.34 | | [Breadcrumbs](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/Breadcrumbs) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.Breadcrumbs&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_003](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_003.clas.abap) | @@ -136,11 +136,11 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | sap.m | [DisplayListItem](https://sdk.openui5.org/api/sap.m.DisplayListItem) | | | [DisplayListItem](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DisplayListItem) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DisplayListItem&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_020](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_020.clas.abap) | | sap.m | [DraftIndicator](https://sdk.openui5.org/api/sap.m.DraftIndicator) | 1.32.0 | | [DraftIndicator](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DraftIndicator) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DraftIndicator&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_021](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_021.clas.abap) | | sap.m | [DraftIndicator](https://sdk.openui5.org/api/sap.m.DraftIndicator) | 1.32.0 | | [SemanticPageDraftIndicator](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/SemanticPageDraftIndicator) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.SemanticPageDraftIndicator&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_448](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_448.clas.abap) | -| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRange](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRange) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRange&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRangeAndCalendarWeekNumbering](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRangeAndCalendarWeekNumbering) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRangeAndCalendarWeekNumbering&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRangeHidden](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRangeHidden) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRangeHidden&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRangeWithCustomOptions](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRangeWithCustomOptions) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRangeWithCustomOptions&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [ExpandableText](https://sdk.openui5.org/api/sap.m.ExpandableText) | 1.87 | | [ExpandableText](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ExpandableText) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ExpandableText&sap-ui-xx-sample-lib=sap.m) | ✗ | +| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRange](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRange) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRange&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRangeAndCalendarWeekNumbering](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRangeAndCalendarWeekNumbering) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRangeAndCalendarWeekNumbering&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRangeHidden](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRangeHidden) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRangeHidden&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRangeWithCustomOptions](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRangeWithCustomOptions) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRangeWithCustomOptions&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [ExpandableText](https://sdk.openui5.org/api/sap.m.ExpandableText) | 1.87 | | [ExpandableText](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ExpandableText) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ExpandableText&sap-ui-xx-sample-lib=sap.m) | — | | sap.m | [FacetFilter](https://sdk.openui5.org/api/sap.m.FacetFilter) | | | [FacetFilterCustomFilters](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/FacetFilterCustomFilters) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.FacetFilterCustomFilters&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_557](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_557.clas.abap) **⁺** | | sap.m | [FacetFilter](https://sdk.openui5.org/api/sap.m.FacetFilter) | | | [FacetFilterLight](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/FacetFilterLight) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.FacetFilterLight&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_022](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_022.clas.abap) | | sap.m | [FacetFilter](https://sdk.openui5.org/api/sap.m.FacetFilter) | | | [FacetFilterSimple](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/FacetFilterSimple) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.FacetFilterSimple&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_235](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_235.clas.abap) | @@ -189,16 +189,16 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | sap.m | [IconTabBar](https://sdk.openui5.org/api/sap.m.IconTabBar) | | | [IconTabBarTabDensityMode](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IconTabBarTabDensityMode) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IconTabBarTabDensityMode&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_620](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_620.clas.abap) | | sap.m | [IconTabBar](https://sdk.openui5.org/api/sap.m.IconTabBar) | | | [IconTabSeparator](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IconTabSeparator) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IconTabSeparator&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_383](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_383.clas.abap) | | sap.m | [IconTabHeader](https://sdk.openui5.org/api/sap.m.IconTabHeader) | 1.15 | | [IconTabHeader](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IconTabHeader) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IconTabHeader&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_055](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_055.clas.abap) | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageEVR](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageEVR) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageEVR&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInAppCustom](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInAppCustom) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInAppCustom&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInCardNoActivities](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInCardNoActivities) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInCardNoActivities&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInCardNoEmail](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInCardNoEmail) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInCardNoEmail&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInDialog](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInDialog) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInDialog&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPage](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPage) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPage&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPageCustom](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPageCustom) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPageCustom&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPageTNT](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPageTNT) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPageTNT&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPageWithURI](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPageWithURI) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPageWithURI&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageSessionTimeout](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageSessionTimeout) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageSessionTimeout&sap-ui-xx-sample-lib=sap.m) | ✗ | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageEVR](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageEVR) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageEVR&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInAppCustom](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInAppCustom) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInAppCustom&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInCardNoActivities](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInCardNoActivities) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInCardNoActivities&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInCardNoEmail](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInCardNoEmail) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInCardNoEmail&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInDialog](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInDialog) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInDialog&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPage](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPage) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPage&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPageCustom](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPageCustom) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPageCustom&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPageTNT](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPageTNT) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPageTNT&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPageWithURI](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPageWithURI) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPageWithURI&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageSessionTimeout](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageSessionTimeout) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageSessionTimeout&sap-ui-xx-sample-lib=sap.m) | — | | sap.m | [Image](https://sdk.openui5.org/api/sap.m.Image) | | | [Image](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/Image) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.Image&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_399](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_399.clas.abap) **⁺** | | sap.m | [Image](https://sdk.openui5.org/api/sap.m.Image) | | | [ImageErrorWithIllustration](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ImageErrorWithIllustration) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ImageErrorWithIllustration&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_279](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_279.clas.abap) **⁺** | | sap.m | [Image](https://sdk.openui5.org/api/sap.m.Image) | | | [ImageModeBackground](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ImageModeBackground) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ImageModeBackground&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_031](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_031.clas.abap) | @@ -331,13 +331,13 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | sap.m | [OverflowToolbar](https://sdk.openui5.org/api/sap.m.OverflowToolbar) | 1.28 | | [ToolbarDesign](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ToolbarDesign) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ToolbarDesign&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_086](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_086.clas.abap) | | sap.m | [OverflowToolbar](https://sdk.openui5.org/api/sap.m.OverflowToolbar) | 1.28 | | [ToolbarEnabled](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ToolbarEnabled) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ToolbarEnabled&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_425](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_425.clas.abap) | | sap.m | [OverflowToolbarTokenizer](https://sdk.openui5.org/api/sap.m.OverflowToolbarTokenizer) | 1.139 | | [OverflowToolbarTokenizer](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/OverflowToolbarTokenizer) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.OverflowToolbarTokenizer&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_203](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_203.clas.abap) **⁺** | -| sap.m | [Container](https://sdk.openui5.org/api/sap.m.p13n.Container) | 1.96 | | [p13n.Container](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/Container) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.Container&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.Engine](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/Engine) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.Engine&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineCustomFilters](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineCustomFilters) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineCustomFilters&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineGridList](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineGridList) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineGridList&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineGridTable](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineGridTable) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineGridTable&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineMultipleController](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineMultipleController) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineMultipleController&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [Popup](https://sdk.openui5.org/api/sap.m.p13n.Popup) | 1.97 | | [p13n.Popup](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/Popup) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.Popup&sap-ui-xx-sample-lib=sap.m) | ✗ | +| sap.m | [Container](https://sdk.openui5.org/api/sap.m.p13n.Container) | 1.96 | | [p13n.Container](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/Container) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.Container&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.Engine](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/Engine) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.Engine&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineCustomFilters](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineCustomFilters) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineCustomFilters&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineGridList](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineGridList) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineGridList&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineGridTable](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineGridTable) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineGridTable&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineMultipleController](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineMultipleController) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineMultipleController&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [Popup](https://sdk.openui5.org/api/sap.m.p13n.Popup) | 1.97 | | [p13n.Popup](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/Popup) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.Popup&sap-ui-xx-sample-lib=sap.m) | — | | sap.m | [Page](https://sdk.openui5.org/api/sap.m.Page) | | | [PageFloatingFooter](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PageFloatingFooter) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PageFloatingFooter&sap-ui-xx-sample-lib=sap.m) | ⊘ | | sap.m | [Page](https://sdk.openui5.org/api/sap.m.Page) | | | [PageListReportIconTabBar](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PageListReportIconTabBar) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PageListReportIconTabBar&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_406](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_406.clas.abap) **⁺** | | sap.m | [Page](https://sdk.openui5.org/api/sap.m.Page) | | | [PageListReportToolbar](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PageListReportToolbar) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PageListReportToolbar&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_405](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_405.clas.abap) **⁺** | @@ -363,16 +363,16 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | sap.m | [PlanningCalendar](https://sdk.openui5.org/api/sap.m.PlanningCalendar) | 1.34 | | [PlanningCalendarWeekNumbering](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PlanningCalendarWeekNumbering) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PlanningCalendarWeekNumbering&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_544](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_544.clas.abap) **⁺** | | sap.m | [PlanningCalendar](https://sdk.openui5.org/api/sap.m.PlanningCalendar) | 1.34 | | [PlanningCalendarWithLegend](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PlanningCalendarWithLegend) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PlanningCalendarWithLegend&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_541](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_541.clas.abap) **⁺** | | sap.m | [PlanningCalendar](https://sdk.openui5.org/api/sap.m.PlanningCalendar) | 1.34 | | [PlanningCalendarWithStickyHeader](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PlanningCalendarWithStickyHeader) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PlanningCalendarWithStickyHeader&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_542](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_542.clas.abap) | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.FileNameValidationSample](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/FileNameValidationSample) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.FileNameValidationSample&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.FilePreviewCustomPageContent](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/FilePreviewCustomPageContent) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.FilePreviewCustomPageContent&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.GridTableSimple](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/GridTableSimple) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.GridTableSimple&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.MultiplePluginInstances](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/MultiplePluginInstances) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.MultiplePluginInstances&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableFileDialogs](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableFileDialogs) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFileDialogs&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableFilePreview](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableFilePreview) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFilePreview&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableProgressIndicator](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableProgressIndicator) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableProgressIndicator&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableSimple](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableSimple) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableSimple&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.TreeTableSimple](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/TreeTableSimple) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.TreeTableSimple&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.TreeTableWithFolderHierarchy](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/TreeTableWithFolderHierarchy) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.TreeTableWithFolderHierarchy&sap-ui-xx-sample-lib=sap.m) | ✗ | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.FileNameValidationSample](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/FileNameValidationSample) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.FileNameValidationSample&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.FilePreviewCustomPageContent](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/FilePreviewCustomPageContent) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.FilePreviewCustomPageContent&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.GridTableSimple](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/GridTableSimple) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.GridTableSimple&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.MultiplePluginInstances](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/MultiplePluginInstances) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.MultiplePluginInstances&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableFileDialogs](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableFileDialogs) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFileDialogs&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableFilePreview](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableFilePreview) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFilePreview&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableProgressIndicator](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableProgressIndicator) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableProgressIndicator&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableSimple](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableSimple) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableSimple&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.TreeTableSimple](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/TreeTableSimple) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.TreeTableSimple&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.TreeTableWithFolderHierarchy](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/TreeTableWithFolderHierarchy) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.TreeTableWithFolderHierarchy&sap-ui-xx-sample-lib=sap.m) | — | | sap.m | [Popover](https://sdk.openui5.org/api/sap.m.Popover) | | | [Popover](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/Popover) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.Popover&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_229](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_229.clas.abap) **⁺** | | sap.m | [Popover](https://sdk.openui5.org/api/sap.m.Popover) | | | [PopoverControllingCloseBehavior](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PopoverControllingCloseBehavior) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PopoverControllingCloseBehavior&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_094](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_094.clas.abap) **⁺** | | sap.m | [Popover](https://sdk.openui5.org/api/sap.m.Popover) | | | [PopoverNavCon](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PopoverNavCon) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PopoverNavCon&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_565](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_565.clas.abap) **⁺** | @@ -509,7 +509,7 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | sap.m | [~~UploadCollection~~](https://sdk.openui5.org/api/sap.m.UploadCollection) | | 1.88 — replaced by sap.m.upload.UploadSet | [UploadCollectionSortingFiltering](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadCollectionSortingFiltering) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadCollectionSortingFiltering&sap-ui-xx-sample-lib=sap.m) | ✗ | | sap.m | [~~UploadCollection~~](https://sdk.openui5.org/api/sap.m.UploadCollection) | | 1.88 — replaced by sap.m.upload.UploadSet | [UploadCollectionVersioning](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadCollectionVersioning) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadCollectionVersioning&sap-ui-xx-sample-lib=sap.m) | ✗ | | sap.m | [URLHelper](https://sdk.openui5.org/api/sap.m.URLHelper) | 1.10 | | [UrlHelper](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UrlHelper) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UrlHelper&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_084](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_084.clas.abap) | -| sap.m | [VariantManagement](https://sdk.openui5.org/api/sap.m.VariantManagement) | 1.103 | | [VariantManagement](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/VariantManagement) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.VariantManagement&sap-ui-xx-sample-lib=sap.m) | ✗ | +| sap.m | [VariantManagement](https://sdk.openui5.org/api/sap.m.VariantManagement) | 1.103 | | [VariantManagement](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/VariantManagement) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.VariantManagement&sap-ui-xx-sample-lib=sap.m) | — | | sap.m | [ViewSettingsDialog](https://sdk.openui5.org/api/sap.m.ViewSettingsDialog) | 1.16 | | [ViewSettingsDialog](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ViewSettingsDialog) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ViewSettingsDialog&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_098](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_098.clas.abap) | | sap.m | [ViewSettingsDialog](https://sdk.openui5.org/api/sap.m.ViewSettingsDialog) | 1.16 | | [ViewSettingsDialogCustom](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ViewSettingsDialogCustom) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ViewSettingsDialogCustom&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_295](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_295.clas.abap) | | sap.m | [ViewSettingsDialog](https://sdk.openui5.org/api/sap.m.ViewSettingsDialog) | 1.16 | | [ViewSettingsDialogCustomFilterDetails](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ViewSettingsDialogCustomFilterDetails) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ViewSettingsDialogCustomFilterDetails&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_296](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_296.clas.abap) | diff --git a/scripts/generate-coverage.mjs b/scripts/generate-coverage.mjs index 9752dd1aa..6efe0a25f 100644 --- a/scripts/generate-coverage.mjs +++ b/scripts/generate-coverage.mjs @@ -82,10 +82,13 @@ const fullscreenUrl = (lib, name) => const apiUrl = (entity) => `${DEMOKIT}/api/${entity}`; // bare control name without its namespace (sap.f.GridList -> GridList) const bareControl = (entity) => entity.slice(entity.lastIndexOf('.') + 1); -// the porting scope (AGENTS.md §1): a sample is IN SCOPE when its control -// existed by UI5 1.71 (empty since = older than tracking) and is not -// deprecated (legacy-free ready). Everything else is listed but not ported. -// (sinceLeq171 comes from lib-universe.mjs — one definition for every gate.) +// the porting scope (AGENTS.md §1): a sample is IN SCOPE when its control is +// not deprecated (legacy-free ready) and the sample is an app view. A control +// newer than UI5 1.71 is in scope since 2026-10-20 (maintainer decision): its +// port keeps the control 1:1, declares it as a POST_171 deviation and is +// therefore filed under src/02 (lib-packages.mjs). Everything else is listed +// but not ported. (sinceLeq171 comes from lib-universe.mjs — one definition +// for every gate.) // --- non-app sample families (maintainer decision 2026-07-31) -------------- // ui5/scope-nonapp.json lists families whose control is in scope by the 1.71 // rule but that are not app views at all — UI5's own test infrastructure @@ -99,16 +102,21 @@ const nonAppFamilies = loadNonAppFamilies(); const nonAppFamily = (lib, s) => nonAppFamilyFor(nonAppFamilies, { lib, name: s.name, entity: s.entity }); -// -> 'in' | 'deprecated' | 'newer' | 'nonapp' | 'unknown'. An entity containing +// -> 'in' | 'deprecated' | 'nonapp' | 'unknown'. An entity containing // '.sample.' is the sample id itself (demo apps without an owning control, // e.g. AIIntegration) — no control metadata, so scope is unknown. // Samples are enriched from ui5/properties.json BEFORE this runs (see // enrichFromProperties below), so a null since/deprecated from the snapshot -// no longer silently passes controls newer than 1.71. +// no longer silently passes controls newer than 1.71 — the POST_171 check +// below needs that @since. const scopeOf = (lib, s) => !s.entity || s.entity.includes('.sample.') ? 'unknown' - : s.deprecated ? 'deprecated' : !sinceLeq171(s.since) ? 'newer' + : s.deprecated ? 'deprecated' : nonAppFamily(lib, s) ? 'nonapp' : 'in'; +// the control itself is newer than the 1.71 floor — in scope, but its port +// needs a UI5 runtime newer than 1.71 and must say so (POST_171 below) +const post171ControlOf = (s) => + !!s.entity && !s.entity.includes('.sample.') && !sinceLeq171(s.since); // --- scope fallback: control-level @since/@deprecated from the source scan -- // ui5/universe.json carries since:null for most controls (the fork checkout @@ -266,6 +274,7 @@ const libs = universe.libs.map((e) => ({ ...enriched, port: ported.get(`${e.lib}\t${s.name}`) || null, scope: scopeOf(e.lib, enriched), + post171Control: post171ControlOf(enriched), }; }), })); @@ -329,6 +338,17 @@ for (const [sampleId, exc] of scopeExceptions) { scopeErrors++; } } +// a port of a control newer than 1.71 is in scope, but only as a declared +// post-1.71 port: the POST_171 deviation is what files it under src/02 +// (lib-packages.mjs) and what tells an installer it needs a newer runtime. +// Without it the port would sit in src/01, the half promised to run on 1.71. +for (const e of libs) { + for (const s of e.samples) { + if (!s.port || !s.post171Control || s.port.post171) continue; + console.error(`ERROR: ported sample ${e.lib}.sample.${s.name} (${s.port.cls}) uses ${s.entity} @since ${s.since}, newer than UI5 1.71 — declare a POST_171 deviation naming the control in meta/${s.port.cls}.json (AGENTS §1); it files the port under src/02`); + scopeErrors++; + } +} if (scopeErrors) process.exit(1); // --backlog: print the in-scope, unported samples (batch planning input). @@ -417,17 +437,19 @@ let totalInScope = 0; let totalReserved = 0; let totalPorted = 0; let totalPortedOut = 0; -const outBy = { deprecated: 0, newer: 0, nonapp: 0, unknown: 0 }; +const outBy = { deprecated: 0, nonapp: 0, unknown: 0 }; for (const s of summary) { totalSamples += s.total; totalInScope += s.inScope; totalReserved += s.reserved; totalPorted += s.ported; totalPortedOut += s.portedOut; } const totalToPort = totalInScope - totalReserved; for (const e of libs) for (const s of e.samples) if (s.scope !== 'in') outBy[s.scope]++; +let totalPost171Control = 0; +for (const e of libs) for (const s of e.samples) if (s.scope === 'in' && s.post171Control) totalPost171Control++; // README block: overall figure + coverage-per-module summary table function summaryLines() { const l = []; l.push(`Overall **${totalPorted} / ${totalToPort}** portable demo kit samples ported (${pct(totalPorted, totalToPort)}).`); - l.push(`**In scope**: samples whose control exists since **UI5 1.71** and is **not deprecated** (legacy-free ready).`); - l.push(`Out of scope: ${totalSamples - totalInScope} of ${totalSamples} samples — ${outBy.deprecated} on deprecated controls, ${outBy.newer} on controls newer than 1.71, ${outBy.nonapp} that are not app views (UI5 test infrastructure, Component routing, view-templating demos — see \`ui5/scope-nonapp.json\`), ${outBy.unknown} demo apps without an owning control.`); + l.push(`**In scope**: samples whose control is **not deprecated** (legacy-free ready). ${totalPost171Control} of them use a control newer than **UI5 1.71** — their ports need a newer runtime and are filed under \`src/02\`.`); + l.push(`Out of scope: ${totalSamples - totalInScope} of ${totalSamples} samples — ${outBy.deprecated} on deprecated controls, ${outBy.nonapp} that are not app views (UI5 test infrastructure, Component routing, view-templating demos — see \`ui5/scope-nonapp.json\`), ${outBy.unknown} demo apps without an owning control.`); if (totalPortedOut) l.push(`Plus **${totalPortedOut}** ported samples outside that scope — maintainer-decided exceptions (\`ui5/scope-exceptions.json\`, listed in [STATUS.md](STATUS.md)); they are not counted as coverage of the in-scope backlog.`); if (release) l.push(`Control metadata from OpenUI5 **${release}**.`); l.push(''); @@ -462,12 +484,12 @@ function controlLines() { l.push('hold-out set (`ui5/holdout.json`) that measures the generator, so it is'); l.push('kept unported on purpose and is not part of the backlog — see the'); l.push('[README](README.md#coverage).'); - l.push('`✗` = **out of scope**: the control is deprecated or newer than UI5 1.71'); - l.push('(not legacy-free ready / not 1.71-compatible), or the sample is not an app'); + l.push('`✗` = **out of scope**: the control is deprecated (not legacy-free ready),'); + l.push('or the sample is not an app'); l.push('view at all (UI5 test infrastructure, Component routing, view-templating and'); l.push('XMLComposite authoring demos — `ui5/scope-nonapp.json`) — these samples are'); l.push('listed for completeness but are not ported. A **⁺** after the class marks ports'); - l.push('that keep members newer than UI5 1.71 for 1:1 fidelity (declared as'); + l.push('that keep a control or members newer than UI5 1.71 for 1:1 fidelity (declared as'); l.push('POST_171 in the sidecar) — they need a correspondingly recent UI5.'); l.push('See the [README](README.md#coverage) for the per-module coverage summary.'); if (release) { diff --git a/scripts/generate-status.mjs b/scripts/generate-status.mjs index 6e2964372..7cdab0eb5 100644 --- a/scripts/generate-status.mjs +++ b/scripts/generate-status.mjs @@ -20,7 +20,7 @@ import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; import { - loadUniverseSnapshot, loadPropertiesControls, loadEntityOverrides, sinceLeq171, + loadUniverseSnapshot, loadPropertiesControls, loadEntityOverrides, } from './lib-universe.mjs'; import { CAT_CTEXT, LIB_CTEXT } from './lib-packages.mjs'; @@ -84,10 +84,9 @@ for (const p of ports) { if (!s) continue; const entity = overrides[p.sample] || s.entity; const c = entity && props[entity]; - const since = s.since || c?.since || null; const deprecated = s.deprecated || c?.deprecated || null; + // a control newer than 1.71 is in scope since 2026-10-20 (POST_171 port) if (deprecated) outOfScope.push(`${p.class} (${p.sample} — deprecated)`); - else if (!sinceLeq171(since)) outOfScope.push(`${p.class} (${p.sample} — control @since ${since})`); } // --- the hold-out set: the generator KPI --------------------------------------- diff --git a/scripts/generation-prompt.txt b/scripts/generation-prompt.txt index 06b8ccff1..4725cd18d 100644 --- a/scripts/generation-prompt.txt +++ b/scripts/generation-prompt.txt @@ -113,8 +113,9 @@ Rules: read it back with get_event_arg( ) - a bare `{COL}` (the attribute property-binding form) is NOT resolved there. Transport real event/source values this way instead of faking a static placeholder. -- The sample's CONTROL must exist since UI5 1.71 and not be deprecated - (out-of-scope samples are never ported). Members newer than 1.71 are KEPT +- The sample's CONTROL must not be deprecated (out-of-scope samples are never + ported). A control newer than 1.71 is in scope: keep it 1:1 and declare it + as a POST_171 deviation naming the control. Members newer than 1.71 are KEPT 1:1 when the original uses them - declare each in the sidecar as a POST_171 deviation naming the member (the property gate checks this). - Must pass abaplint for ABAP_STANDARD, ABAP_CLOUD and ABAP_702 (downport). diff --git a/scripts/lib-packages.mjs b/scripts/lib-packages.mjs index 942515231..7c8b58d58 100644 --- a/scripts/lib-packages.mjs +++ b/scripts/lib-packages.mjs @@ -6,10 +6,10 @@ * * category — UI5 flavour x release (AGENTS §3): the flavour from the libraries * the port touches, the release from whether it needs a runtime - * newer than 1.71 — a kept post-1.71 member (a POST_171 deviation - * in the sidecar) or a post-1.71 control (a pinned @since in - * ui5/scope-exceptions.json). Both sources are committed here, so - * the category is offline and deterministic — no OpenUI5 checkout. + * newer than 1.71 — a kept post-1.71 member or a post-1.71 + * control, both a POST_171 deviation in the sidecar. That is + * committed here, so the category is offline and deterministic — + * no OpenUI5 checkout. * library — the second-level namespace of the SAMPLE (`sap.m.sample.X` -> * sap.m), the same key generate-overview/-coverage group by. It is * not always the entity's library: `sap.m.sample.ContainerNoPadding` @@ -18,11 +18,6 @@ * category folder. */ -import fs from 'fs'; -import path from 'path'; -import { fileURLToPath } from 'url'; -import { cmpVersion, MIN_UI5 } from './lib-universe.mjs'; - // second-level namespace -> library package number. One registry for all four // category folders, so sap.m is `01` under src/01 and under src/02 alike. const LIB_FOLDER = [ @@ -84,30 +79,13 @@ export function isSapui5Only(ns) { return SAPUI5_ONLY.test(String(ns || '')); } -/* Ports whose CONTROL itself is newer than 1.71. A kept post-1.71 MEMBER is - * always a POST_171 deviation, but a post-1.71 control needs none — the sample - * uses it as the original does. Such a port can only exist as a maintainer- - * decided entry in ui5/scope-exceptions.json (the scope gate blocks every other - * one), and that entry pins the control's @since, so the file is a complete and - * offline list of the ports the deviations alone would misfile as <= 1.71. */ -let postControls = null; -function post171Controls() { - if (postControls) return postControls; - postControls = new Set(); - const f = path.join(path.dirname(fileURLToPath(import.meta.url)), '..', 'ui5', 'scope-exceptions.json'); - if (!fs.existsSync(f)) return postControls; - for (const e of JSON.parse(fs.readFileSync(f, 'utf8')).exceptions || []) { - const since = String(e.decided?.since || ''); - if (!since) continue; - if (cmpVersion(since, MIN_UI5) > 0) postControls.add(e.class); - } - return postControls; -} - -/** the port needs a UI5 runtime newer than 1.71 — a kept post-1.71 member, or a post-1.71 control */ +/* The port needs a UI5 runtime newer than 1.71 — a kept post-1.71 member or a + * post-1.71 control. Both are POST_171 deviations: a member because the + * property gate demands one, the control because generate-coverage.mjs does + * (since 2026-10-20 a post-1.71 control is in scope as exactly such a port, + * and the scope-exceptions.json list that used to file them is gone). */ export function isPost171(meta) { - return (meta.deviations || []).some((d) => d.type === 'POST_171') - || post171Controls().has(meta.class); + return (meta.deviations || []).some((d) => d.type === 'POST_171'); } /** category package number for a meta sidecar ("01".."04") */ diff --git a/scripts/scaffold.mjs b/scripts/scaffold.mjs index 502542f86..f2b8920a2 100644 --- a/scripts/scaffold.mjs +++ b/scripts/scaffold.mjs @@ -89,12 +89,15 @@ if (!resolved.entity || resolved.entity.includes('.sample.')) { if (override) resolved.entity = override; } const { lib, name, entity } = resolved; +// set by the scope pre-check: the control is newer than 1.71 — in scope, but +// the port starts with a POST_171 deviation naming it, which files it in src/02 +let post171Since = null; // ---------- scope + hold-out pre-checks ---------- // Both used to be MANUAL steps in the batch-planning prose (AGENTS §1) — // exactly the kind an agent skips. The scope verdict mirrors // generate-coverage.mjs scopeOf (universe facts enriched from -// ui5/properties.json, the 1.71 floor, deprecation, non-app families), so +// ui5/properties.json, deprecation, non-app families), so // the scaffolder refuses what the coverage gate would fail later anyway. // scope-exceptions.json entries — a maintainer decision — pass with a note; // --force scaffolds regardless, for exactly that kind of decision. @@ -130,17 +133,19 @@ const { lib, name, entity } = resolved; && (f.entityPrefix || f.namePrefix)) || null; const verdict = !entity || entity.includes('.sample.') ? 'unknown' - : deprecated ? 'deprecated' : !sinceLeq171(since) ? 'newer' + : deprecated ? 'deprecated' : nonapp ? 'nonapp' : 'in'; + if (verdict === 'in' && !sinceLeq171(since)) { + post171Since = since; + console.log(`note: control ${entity} is @since ${since} — newer than the 1.71 floor: in scope, scaffolded with a POST_171 deviation into src/02 (AGENTS §1)`); + } if (verdict === 'unknown') { console.log(`note: no control metadata for ${sampleId} — scope not judged (verify with scripts/scope-of.mjs)`); } else if (verdict !== 'in') { const facts = verdict === 'deprecated' ? `control ${entity} is deprecated (${deprecated?.since || deprecated?.text || deprecated})` - : verdict === 'newer' - ? `control ${entity} is @since ${since} — newer than the 1.71 floor` - : `non-app sample family (${nonapp.reason || 'ui5/scope-nonapp.json'})`; + : `non-app sample family (${nonapp.reason || 'ui5/scope-nonapp.json'})`; const excFile = path.join(UI5, 'scope-exceptions.json'); const exceptions = fs.existsSync(excFile) ? JSON.parse(fs.readFileSync(excFile, 'utf8')).exceptions || [] @@ -161,14 +166,19 @@ const { lib, name, entity } = resolved; // ---------- entity -> src// ---------- // The category is derived from the sidecar (AGENTS §3); a fresh scaffold has no -// deviation yet, so it always starts in the <= 1.71 half of its flavour. Declare -// a POST_171 deviation later and validate-meta names the folder to move it to. +// deviation yet, so it starts in the <= 1.71 half of its flavour — unless its +// control is newer than 1.71, whose POST_171 deviation is written right away. +// Declare a POST_171 deviation later and validate-meta names the folder to +// move it to. +const startDeviations = post171Since + ? [{ type: 'POST_171', what: `the ${entity} control (since UI5 ${post171Since}) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= ${post171Since}.` }] + : []; const libNr = libFolder(lib); if (!libNr) { console.error(`no library package for "${lib}" — extend LIB_FOLDER in scripts/lib-packages.mjs`); process.exit(1); } -const catNr = catFolder({ sample: `${lib}.sample.${name}`, entity, deviations: [] }); +const catNr = catFolder({ sample: `${lib}.sample.${name}`, entity, deviations: startDeviations }); const folder = `${catNr}/${libNr}`; // ---------- locate the OpenUI5 template dir ---------- @@ -319,7 +329,7 @@ const meta = { audit: { frontend_action: false, event_t_arg: false }, status: 'generated', checked: null, - deviations: [], + deviations: startDeviations, }; // ---------- copy template files (recursive) ---------- diff --git a/scripts/scope-of.mjs b/scripts/scope-of.mjs index f02027e93..7561ff9b9 100644 --- a/scripts/scope-of.mjs +++ b/scripts/scope-of.mjs @@ -10,8 +10,11 @@ * control-level `@since` / `@deprecated` straight from the OpenUI5 source JSDoc, * the authoritative record, and prints a verdict. * - * A control is IN SCOPE when it exists since UI5 <= 1.71 AND is not deprecated in - * the current release (AGENTS.md §1). This is a STANDALONE reporter — it does not + * A control is IN SCOPE when it is not deprecated in the current release + * (AGENTS.md §1). A control newer than 1.71 is in scope too since 2026-10-20 + * (maintainer decision), as a POST_171 port filed under src/02 — the verdict + * says so, because the @since is what the port has to declare. This is a + * STANDALONE reporter — it does not * alter any gate; `scopeOf` (generate-coverage.mjs) reads the same facts from * the committed `ui5/properties.json` snapshot, so the two verdicts agree. * @@ -34,7 +37,7 @@ const OPENUI5_DIR = process.env.OPENUI5_SRC ? path.resolve(process.env.OPENUI5_SRC) : path.resolve(ROOT, '..', 'fork-openui5'); const SRC = path.join(OPENUI5_DIR, 'src'); -const THRESHOLD = [1, 71]; // controls first available after 1.71 are out of scope +const THRESHOLD = [1, 71]; // controls first available after 1.71 need a POST_171 port (src/02) // "1.73" / "1.109.0" -> [1,73] / [1,109,0]; loose text after the number is ignored function parseVer(s) { @@ -152,12 +155,12 @@ function verdict(entity) { if (deprecated) { return { entity, ok: false, since, reason: `OUT_OF_SCOPE (deprecated${deprecated.since ? ` since ${deprecated.since}` : ''}${deprecated.text ? ` — ${deprecated.text.replace(/\s+/g, ' ').slice(0, 80)}` : ''})${tag}` }; } + if (hit.root === 'sapui5') { + return { entity, ok: false, since, reason: `OUT_OF_SCOPE (SAPUI5-only library — no 1:1 port, collect it in src/03 instead, AGENTS §3); @since ${since || '<=1.71 (no @since header)'}` }; + } const v = parseVer(since); if (v && gt(v, THRESHOLD)) { - return { entity, ok: false, since, reason: `OUT_OF_SCOPE (control @since ${since} > 1.71)${tag}` }; - } - if (hit.root === 'sapui5') { - return { entity, ok: false, since, reason: `OUT_OF_SCOPE (SAPUI5-only library — no 1:1 port, collect it in src/03 instead, AGENTS §3); release-clean: @since ${since || '<=1.71 (no @since header)'}` }; + return { entity, ok: true, since, reason: `IN_SCOPE (control @since ${since} > 1.71 — declare it as a POST_171 deviation; the port is filed under src/02)` }; } return { entity, ok: true, since, reason: `IN_SCOPE (@since ${since || '<=1.71 (no @since header)'})` }; } diff --git a/scripts/test/fixtures/golden/README.md b/scripts/test/fixtures/golden/README.md index c7c569f1b..18cacb8a7 100644 --- a/scripts/test/fixtures/golden/README.md +++ b/scripts/test/fixtures/golden/README.md @@ -9,8 +9,8 @@ covers both unported states. Overall **2 / 3** portable demo kit samples ported (66.7 %). -**In scope**: samples whose control exists since **UI5 1.71** and is **not deprecated** (legacy-free ready). -Out of scope: 0 of 4 samples — 0 on deprecated controls, 0 on controls newer than 1.71, 0 that are not app views (UI5 test infrastructure, Component routing, view-templating demos — see `ui5/scope-nonapp.json`), 0 demo apps without an owning control. +**In scope**: samples whose control is **not deprecated** (legacy-free ready). 0 of them use a control newer than **UI5 1.71** — their ports need a newer runtime and are filed under `src/02`. +Out of scope: 0 of 4 samples — 0 on deprecated controls, 0 that are not app views (UI5 test infrastructure, Component routing, view-templating demos — see `ui5/scope-nonapp.json`), 0 demo apps without an owning control. Control metadata from OpenUI5 **1.152.0**. | Module | Samples | In scope | Reserved | To port | Ported | Coverage | | diff --git a/scripts/test/fixtures/golden/api.md b/scripts/test/fixtures/golden/api.md index 0060d69e0..4f7864c7a 100644 --- a/scripts/test/fixtures/golden/api.md +++ b/scripts/test/fixtures/golden/api.md @@ -11,12 +11,12 @@ its ↗ opens the live fullscreen sample, **ABAP** is the generated class. hold-out set (`ui5/holdout.json`) that measures the generator, so it is kept unported on purpose and is not part of the backlog — see the [README](README.md#coverage). -`✗` = **out of scope**: the control is deprecated or newer than UI5 1.71 -(not legacy-free ready / not 1.71-compatible), or the sample is not an app +`✗` = **out of scope**: the control is deprecated (not legacy-free ready), +or the sample is not an app view at all (UI5 test infrastructure, Component routing, view-templating and XMLComposite authoring demos — `ui5/scope-nonapp.json`) — these samples are listed for completeness but are not ported. A **⁺** after the class marks ports -that keep members newer than UI5 1.71 for 1:1 fidelity (declared as +that keep a control or members newer than UI5 1.71 for 1:1 fidelity (declared as POST_171 in the sidecar) — they need a correspondingly recent UI5. See the [README](README.md#coverage) for the per-module coverage summary. diff --git a/ui5/scope-exceptions.json b/ui5/scope-exceptions.json index 593c1c66c..3df268636 100644 --- a/ui5/scope-exceptions.json +++ b/ui5/scope-exceptions.json @@ -1,35 +1,15 @@ { - "note": "ported samples whose control is out of scope (deprecated or newer than UI5 1.71) but which are ALLOWED to stay - each with the reason. The out-of-scope check in generate-coverage.mjs FAILS (exit 1) on any ported out-of-scope sample NOT listed here, so new violations can never land silently; listed ones print an informational note. Entries are a maintainer decision - do not add one just to silence the gate. Each entry PINS the scope facts the decision was made on ('decided': scope verdict, control @since, deprecation @since) - when a metadata refresh changes any of them the gate FAILS so a maintainer re-decides (and re-pins) instead of the entry silently outliving its rationale.", + "note": "ported samples whose control is out of scope (deprecated; a control newer than UI5 1.71 is in scope since 2026-10-20 and needs no entry - its port declares POST_171 instead) but which are ALLOWED to stay - each with the reason. The out-of-scope check in generate-coverage.mjs FAILS (exit 1) on any ported out-of-scope sample NOT listed here, so new violations can never land silently; listed ones print an informational note. Entries are a maintainer decision - do not add one just to silence the gate. Each entry PINS the scope facts the decision was made on ('decided': scope verdict, control @since, deprecation @since) - when a metadata refresh changes any of them the gate FAILS so a maintainer re-decides (and re-pins) instead of the entry silently outliving its rationale.", "exceptions": [ { "sample": "sap.m.sample.UploadSet", "class": "z2ui5_cl_smpc_app_121", - "decided": { "scope": "deprecated", "since": "1.63", "deprecated": "1.129" }, + "decided": { + "scope": "deprecated", + "since": "1.63", + "deprecated": "1.129" + }, "reason": "KEEP permanently (decided 2026-07-30, session decision under the standing continue-with-everything mandate; revertible by deleting the port + this entry): sap.m.UploadSet is deprecated but the port is gate-verified and exercises upload-set idioms no other port covers; deleting it would remove working training signal. The hard gate keeps blocking NEW deprecated-control ports." - }, - { - "sample": "sap.f.sample.SidePanelSingle", - "class": "z2ui5_cl_smpc_app_136", - "decided": { "scope": "newer", "since": "1.107", "deprecated": null }, - "reason": "KEEP permanently (decided 2026-07-30, same mandate; revertible): sap.f.SidePanel is @since 1.107 - a post-1.71 CONTROL rather than member, kept as the corpus-wide fidelity-first policy already keeps post-1.71 members; the app declares the runtime floor it needs." - }, - { - "sample": "sap.ui.core.sample.InvisibleMessage", - "class": "z2ui5_cl_smpc_app_141", - "decided": { "scope": "newer", "since": "1.78", "deprecated": null }, - "reason": "KEEP permanently (decided 2026-07-30, same mandate; revertible): sap.ui.core.InvisibleMessage is @since 1.78, the accessibility-announcement idiom exists nowhere else in the corpus; needs UI5 >= 1.78 only." - }, - { - "sample": "sap.f.sample.ProductSwitchNavigation", - "class": "z2ui5_cl_smpc_app_165", - "decided": { "scope": "newer", "since": "1.72", "deprecated": null }, - "reason": "KEEP permanently (decided 2026-07-30, same mandate; revertible): sap.f.ProductSwitch is @since 1.72 - one minor release past the 1.71 line, the most borderline of the six; the port is the only ProductSwitch coverage." - }, - { - "sample": "sap.m.sample.OverflowToolbarTokenizer", - "class": "z2ui5_cl_smpc_app_203", - "decided": { "scope": "newer", "since": "1.139", "deprecated": null }, - "reason": "KEEP permanently (decided 2026-07-30, same mandate; revertible): sap.m.OverflowToolbarTokenizer is @ui5-experimental-since 1.139 - experimental API may change, which the sidecar declares; the port documents the experimental-tag scanner lesson and needs UI5 >= 1.139." } ] } From 5d1bf4ea6891e7f0c983ab18e8c2dd9da7702dec Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 20 Oct 2026 13:58:13 +0000 Subject: [PATCH 02/33] Scaffold the 48 post-1.71 control samples (apps 624-671) Stubs only - the views are rebuilt in the following commits. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx --- README.md | 10 +- SAMPLES.md | 188 +- STATUS.md | 8 +- api.md | 96 +- catalogue-derived.json | 50 +- catalogue.json | 52 +- meta/z2ui5_cl_smpc_app_624.json | 19 + meta/z2ui5_cl_smpc_app_625.json | 19 + meta/z2ui5_cl_smpc_app_626.json | 19 + meta/z2ui5_cl_smpc_app_627.json | 19 + meta/z2ui5_cl_smpc_app_628.json | 19 + meta/z2ui5_cl_smpc_app_629.json | 19 + meta/z2ui5_cl_smpc_app_630.json | 19 + meta/z2ui5_cl_smpc_app_631.json | 19 + meta/z2ui5_cl_smpc_app_632.json | 19 + meta/z2ui5_cl_smpc_app_633.json | 19 + meta/z2ui5_cl_smpc_app_634.json | 19 + meta/z2ui5_cl_smpc_app_635.json | 19 + meta/z2ui5_cl_smpc_app_636.json | 19 + meta/z2ui5_cl_smpc_app_637.json | 19 + meta/z2ui5_cl_smpc_app_638.json | 19 + meta/z2ui5_cl_smpc_app_639.json | 19 + meta/z2ui5_cl_smpc_app_640.json | 19 + meta/z2ui5_cl_smpc_app_641.json | 19 + meta/z2ui5_cl_smpc_app_642.json | 19 + meta/z2ui5_cl_smpc_app_643.json | 19 + meta/z2ui5_cl_smpc_app_644.json | 19 + meta/z2ui5_cl_smpc_app_645.json | 19 + meta/z2ui5_cl_smpc_app_646.json | 19 + meta/z2ui5_cl_smpc_app_647.json | 19 + meta/z2ui5_cl_smpc_app_648.json | 19 + meta/z2ui5_cl_smpc_app_649.json | 19 + meta/z2ui5_cl_smpc_app_650.json | 19 + meta/z2ui5_cl_smpc_app_651.json | 19 + meta/z2ui5_cl_smpc_app_652.json | 19 + meta/z2ui5_cl_smpc_app_653.json | 19 + meta/z2ui5_cl_smpc_app_654.json | 19 + meta/z2ui5_cl_smpc_app_655.json | 19 + meta/z2ui5_cl_smpc_app_656.json | 19 + meta/z2ui5_cl_smpc_app_657.json | 19 + meta/z2ui5_cl_smpc_app_658.json | 19 + meta/z2ui5_cl_smpc_app_659.json | 19 + meta/z2ui5_cl_smpc_app_660.json | 19 + meta/z2ui5_cl_smpc_app_661.json | 19 + meta/z2ui5_cl_smpc_app_662.json | 19 + meta/z2ui5_cl_smpc_app_663.json | 19 + meta/z2ui5_cl_smpc_app_664.json | 19 + meta/z2ui5_cl_smpc_app_665.json | 19 + meta/z2ui5_cl_smpc_app_666.json | 19 + meta/z2ui5_cl_smpc_app_667.json | 19 + meta/z2ui5_cl_smpc_app_668.json | 19 + meta/z2ui5_cl_smpc_app_669.json | 19 + meta/z2ui5_cl_smpc_app_670.json | 19 + meta/z2ui5_cl_smpc_app_671.json | 19 + src/02/01/z2ui5_cl_smpc_app_624.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_624.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_625.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_625.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_626.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_626.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_627.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_627.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_628.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_628.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_629.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_629.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_630.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_630.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_631.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_631.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_632.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_632.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_633.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_633.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_634.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_634.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_635.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_635.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_636.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_636.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_637.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_637.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_638.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_638.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_639.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_639.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_640.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_640.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_641.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_641.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_642.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_642.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_643.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_643.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_644.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_644.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_645.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_645.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_646.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_646.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_647.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_647.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_648.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_648.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_649.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_649.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_650.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_650.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_651.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_651.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_652.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_652.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_653.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_653.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_654.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_654.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_655.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_655.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_656.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_656.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_657.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_657.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_658.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_658.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_659.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_659.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_660.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_660.clas.xml | 16 + src/02/01/z2ui5_cl_smpc_app_661.clas.abap | 59 + src/02/01/z2ui5_cl_smpc_app_661.clas.xml | 16 + src/02/04/z2ui5_cl_smpc_app_662.clas.abap | 59 + src/02/04/z2ui5_cl_smpc_app_662.clas.xml | 16 + src/02/04/z2ui5_cl_smpc_app_663.clas.abap | 59 + src/02/04/z2ui5_cl_smpc_app_663.clas.xml | 16 + src/02/04/z2ui5_cl_smpc_app_664.clas.abap | 59 + src/02/04/z2ui5_cl_smpc_app_664.clas.xml | 16 + src/02/04/z2ui5_cl_smpc_app_665.clas.abap | 59 + src/02/04/z2ui5_cl_smpc_app_665.clas.xml | 16 + src/02/04/z2ui5_cl_smpc_app_666.clas.abap | 59 + src/02/04/z2ui5_cl_smpc_app_666.clas.xml | 16 + src/02/04/z2ui5_cl_smpc_app_667.clas.abap | 59 + src/02/04/z2ui5_cl_smpc_app_667.clas.xml | 16 + src/02/04/z2ui5_cl_smpc_app_668.clas.abap | 59 + src/02/04/z2ui5_cl_smpc_app_668.clas.xml | 16 + src/02/04/z2ui5_cl_smpc_app_669.clas.abap | 59 + src/02/04/z2ui5_cl_smpc_app_669.clas.xml | 16 + src/02/04/z2ui5_cl_smpc_app_670.clas.abap | 59 + src/02/04/z2ui5_cl_smpc_app_670.clas.xml | 16 + src/02/04/z2ui5_cl_smpc_app_671.clas.abap | 59 + src/02/04/z2ui5_cl_smpc_app_671.clas.xml | 16 + src/z2ui5_cl_smpc_app_000.clas.abap | 1664 +++++++++++------ ui5/sap.f/AvatarGroup/Component.js | 10 + .../controller/AvatarGroup.controller.js | 164 ++ ui5/sap.f/AvatarGroup/manifest.json | 37 + ui5/sap.f/AvatarGroup/model/avatargroup.json | 19 + .../AvatarGroup/view/AvatarGroup.view.xml | 37 + ui5/sap.f/AvatarGroup/view/Card.fragment.xml | 30 + .../view/GroupPopover.fragment.xml | 48 + .../view/IndividualPopover.fragment.xml | 15 + ui5/sap.f/HeroBannerBasic/C.controller.js | 7 + ui5/sap.f/HeroBannerBasic/Component.js | 11 + ui5/sap.f/HeroBannerBasic/V.view.xml | 17 + ui5/sap.f/HeroBannerBasic/manifest.json | 31 + .../HeroBannerColumnsRatio/C.controller.js | 7 + ui5/sap.f/HeroBannerColumnsRatio/Component.js | 11 + ui5/sap.f/HeroBannerColumnsRatio/V.view.xml | 93 + ui5/sap.f/HeroBannerColumnsRatio/main.css | 3 + .../HeroBannerColumnsRatio/manifest.json | 39 + .../C.controller.js | 7 + .../Component.js | 11 + .../V.view.xml | 39 + .../manifest.json | 31 + .../HeroBannerIntegrationCard/C.controller.js | 7 + .../HeroBannerIntegrationCard/Component.js | 11 + .../HeroBannerIntegrationCard/V.view.xml | 30 + .../endContentManifest.json | 41 + .../HeroBannerIntegrationCard/manifest.json | 34 + .../startContentManifest.json | 41 + ui5/sap.f/HeroBannerUseCases/C.controller.js | 7 + ui5/sap.f/HeroBannerUseCases/Component.js | 11 + ui5/sap.f/HeroBannerUseCases/V.view.xml | 93 + ui5/sap.f/HeroBannerUseCases/main.css | 3 + ui5/sap.f/HeroBannerUseCases/manifest.json | 39 + .../Component.js | 10 + ...roductSwitchItemWithImageSrc.controller.js | 53 + .../manifest.json | 34 + ...ProductSwitchItemWithImageSrc.fragment.xml | 31 + .../ProductSwitchItemWithImageSrc.view.xml | 16 + ui5/sap.f/SidePanel/Component.js | 14 + ui5/sap.f/SidePanel/Page.controller.js | 62 + ui5/sap.f/SidePanel/Page.view.xml | 63 + ui5/sap.f/SidePanel/manifest.json | 32 + ui5/sap.f/SidePanelOverflow/Component.js | 14 + .../SidePanelOverflow/Page.controller.js | 40 + ui5/sap.f/SidePanelOverflow/Page.view.xml | 69 + ui5/sap.f/SidePanelOverflow/manifest.json | 32 + ui5/sap.f/SidePanelResizable/Component.js | 14 + .../SidePanelResizable/Page.controller.js | 53 + ui5/sap.f/SidePanelResizable/Page.view.xml | 48 + ui5/sap.f/SidePanelResizable/manifest.json | 32 + ui5/sap.m/Avatar/Component.js | 10 + .../Avatar/controller/Avatar.controller.js | 23 + ui5/sap.m/Avatar/manifest.json | 39 + ui5/sap.m/Avatar/view/Avatar.view.xml | 387 ++++ ui5/sap.m/AvatarActiveState/Component.js | 10 + .../AvatarActiveState.controller.js | 45 + ui5/sap.m/AvatarActiveState/manifest.json | 37 + .../view/AvatarActiveState.view.xml | 22 + .../view/Popover.fragment.xml | 14 + .../view/UserMenu.fragment.xml | 17 + ui5/sap.m/AvatarBadgeIconColor/Component.js | 10 + .../AvatarBadgeIconColor.controller.js | 12 + ui5/sap.m/AvatarBadgeIconColor/manifest.json | 31 + .../view/AvatarBadgeIconColor.view.xml | 133 ++ ui5/sap.m/AvatarValueState/Component.js | 10 + .../controller/AvatarValueState.controller.js | 21 + ui5/sap.m/AvatarValueState/manifest.json | 37 + .../view/AvatarValueState.view.xml | 84 + ui5/sap.m/AvatarWithAffordance/Component.js | 10 + .../AvatarWithAffordance.controller.js | 22 + ui5/sap.m/AvatarWithAffordance/manifest.json | 38 + .../view/AvatarWithAffordance.view.xml | 138 ++ ui5/sap.m/DynamicDateRange/Component.js | 14 + .../DynamicDateRange.controller.js | 194 ++ .../DynamicDateRange.view.xml | 68 + ui5/sap.m/DynamicDateRange/manifest.json | 31 + .../Component.js | 14 + ...angeAndCalendarWeekNumbering.controller.js | 194 ++ ...DateRangeAndCalendarWeekNumbering.view.xml | 69 + .../manifest.json | 31 + ui5/sap.m/DynamicDateRangeHidden/Component.js | 14 + .../DynamicDateRange.controller.js | 27 + .../DynamicDateRange.view.xml | 37 + .../DynamicDateRangeHidden/manifest.json | 30 + .../Component.js | 14 + .../CustomBusinessDay.js | 48 + .../CustomLastChristmas.js | 59 + .../CustomPreviousXWeekend.js | 90 + .../CustomPreviousXWorkWeek.js | 91 + ...icDateRangeWithCustomOptions.controller.js | 336 ++++ ...DynamicDateRangeWithCustomOptions.view.xml | 77 + .../manifest.json | 35 + ui5/sap.m/ExpandableText/C.controller.js | 53 + ui5/sap.m/ExpandableText/Component.js | 13 + ui5/sap.m/ExpandableText/V.view.xml | 35 + ui5/sap.m/ExpandableText/manifest.json | 30 + ui5/sap.m/IllustratedMessageEVR/Component.js | 11 + ui5/sap.m/IllustratedMessageEVR/manifest.json | 32 + .../IllustratedMessageEVR/view/Main.view.xml | 23 + .../Component.js | 10 + .../IllustratedMessageInAppCustom/README.md | 142 ++ .../add-illustrations-task.js | 84 + .../manifest.json | 42 + .../ui5-illustrations-library/README.md | 62 + .../illustrations/Custom-Dialog-EmptyCart.svg | 48 + .../illustrations/Custom-Dot-EmptyCart.svg | 7 + .../illustrations/Custom-Scene-EmptyCart.svg | 91 + .../illustrations/Custom-Spot-EmptyCart.svg | 40 + .../illustrations/metadata.json | 3 + .../illustrationsValidator.js | 315 ++++ .../ui5-illustrations-library/index.js | 40 + .../ui5-illustrations-library/package.json | 20 + .../package.json | 17 + .../IllustratedMessageInAppCustom/ui5.yaml | 27 + .../webapp/Component.js | 24 + .../webapp/controller/Main.controller.js | 36 + .../webapp/index.html | 21 + .../webapp/index.js | 14 + .../webapp/manifest.json | 25 + .../illustrations/Custom-Dialog-EmptyCart.svg | 48 + .../illustrations/Custom-Dot-EmptyCart.svg | 7 + .../illustrations/Custom-Scene-EmptyCart.svg | 91 + .../illustrations/Custom-Spot-EmptyCart.svg | 40 + .../resources/illustrations/metadata.json | 3 + .../webapp/view/Main.view.xml | 27 + .../Component.js | 11 + .../manifest.json | 32 + .../view/Main.view.xml | 19 + .../Component.js | 11 + .../manifest.json | 32 + .../view/Main.view.xml | 15 + .../IllustratedMessageInDialog/Component.js | 11 + .../controller/Main.controller.js | 30 + .../IllustratedMessageInDialog/manifest.json | 33 + .../view/Main.view.xml | 7 + .../view/fragments/Dialog.fragment.xml | 8 + .../IllustratedMessageInPage/Component.js | 17 + .../controller/Main.controller.js | 77 + .../IllustratedMessageInPage/manifest.json | 33 + .../view/Main.view.xml | 79 + .../Component.js | 24 + .../controller/Main.controller.js | 36 + .../Custom-Dialog-EmptyCart.svg | 73 + .../Custom-Dot-EmptyCart.svg | 36 + .../Custom-Scene-EmptyCart.svg | 73 + .../Custom-Spot-EmptyCart.svg | 73 + .../custom_illustrations/metadata.json | 5 + .../manifest.json | 41 + .../view/Main.view.xml | 27 + .../IllustratedMessageInPageTNT/Component.js | 24 + .../controller/Main.controller.js | 54 + .../IllustratedMessageInPageTNT/manifest.json | 33 + .../view/Main.view.xml | 49 + .../Component.js | 25 + .../controller/Main.controller.js | 55 + .../manifest.json | 33 + .../view/Main.view.xml | 66 + .../Component.js | 24 + .../controller/Main.controller.js | 101 + .../i18n/i18n.properties | 26 + .../manifest.json | 34 + .../view/Main.view.xml | 21 + .../view/fragments/Dialog.fragment.xml | 31 + .../Component.js | 10 + .../controller/Page.controller.js | 431 +++++ .../index.html | 32 + .../manifest.json | 71 + .../model/documents.json | 90 + .../model/mockserver.js | 143 ++ .../view/UploadSetwithTable.view.xml | 262 +++ .../view/fragment/AddViaUrl.fragment.xml | 19 + .../Component.js | 10 + .../controller/Page.controller.js | 393 ++++ .../index.html | 32 + .../manifest.json | 71 + .../model/documents.json | 98 + .../model/mockserver.js | 129 ++ .../view/UploadSetwithTable.view.xml | 246 +++ .../view/fragment/AddViaUrl.fragment.xml | 19 + .../Component.js | 10 + .../controller/Page.controller.js | 365 ++++ .../index.html | 32 + .../manifest.json | 71 + .../model/documents.json | 125 ++ .../model/mockserver.js | 143 ++ .../view/UploadSetwithTable.view.xml | 203 ++ .../view/fragment/AddViaUrl.fragment.xml | 19 + .../Component.js | 10 + .../controller/Page.controller.js | 190 ++ .../index.html | 32 + .../manifest.json | 71 + .../model/documents.json | 129 ++ .../model/mockserver.js | 144 ++ .../view/UploadSetwithTable.view.xml | 510 +++++ .../view/fragment/AddViaUrl.fragment.xml | 19 + .../Component.js | 10 + .../controller/Page.controller.js | 480 +++++ .../index.html | 32 + .../manifest.json | 72 + .../model/documents.json | 125 ++ .../model/mockserver.js | 144 ++ .../view/UploadSetwithTable.view.xml | 227 +++ .../view/fragment/AddViaUrl.fragment.xml | 19 + .../view/fragment/FileUpload.fragment.xml | 47 + .../Component.js | 10 + .../controller/Page.controller.js | 360 ++++ .../index.html | 32 + .../manifest.json | 71 + .../model/documents.json | 125 ++ .../model/mockserver.js | 142 ++ .../view/UploadSetwithTable.view.xml | 230 +++ .../view/fragment/AddViaUrl.fragment.xml | 19 + .../Component.js | 10 + .../controller/Page.controller.js | 476 +++++ .../index.html | 32 + .../manifest.json | 71 + .../model/documents.json | 125 ++ .../model/mockserver.js | 142 ++ .../view/UploadSetwithTable.view.xml | 228 +++ .../view/fragment/AddViaUrl.fragment.xml | 19 + .../Component.js | 10 + .../controller/Page.controller.js | 364 ++++ .../index.html | 32 + .../manifest.json | 71 + .../model/documents.json | 125 ++ .../model/mockserver.js | 143 ++ .../view/UploadSetwithTable.view.xml | 228 +++ .../view/fragment/AddViaUrl.fragment.xml | 19 + .../Component.js | 10 + .../controller/Page.controller.js | 370 ++++ .../index.html | 32 + .../manifest.json | 71 + .../model/documents.json | 118 ++ .../model/mockserver.js | 144 ++ .../view/UploadSetwithTable.view.xml | 216 +++ .../view/fragment/AddViaUrl.fragment.xml | 19 + .../Component.js | 12 + .../controller/Page.controller.js | 680 +++++++ .../index.html | 34 + .../manifest.json | 37 + .../model/documents.json | 222 +++ .../model/mockserver.js | 159 ++ .../view/UploadSetwithTable.view.xml | 186 ++ .../view/fragment/AddViaUrl.fragment.xml | 19 + .../fragment/CreateFolderDialog.fragment.xml | 14 + ui5/sap.m/VariantManagement/Component.js | 15 + .../VariantManagement.controller.js | 97 + .../VariantManagement.view.xml | 84 + ui5/sap.m/VariantManagement/manifest.json | 30 + ui5/sap.m/p13n.Container/Component.js | 15 + .../P13nContainer.controller.js | 53 + .../p13n.Container/P13nContainer.view.xml | 74 + ui5/sap.m/p13n.Container/index.html | 35 + ui5/sap.m/p13n.Container/manifest.json | 31 + ui5/sap.m/p13n.Engine/Component.js | 15 + ui5/sap.m/p13n.Engine/Engine.controller.js | 373 ++++ ui5/sap.m/p13n.Engine/Engine.view.xml | 88 + ui5/sap.m/p13n.Engine/index.html | 35 + ui5/sap.m/p13n.Engine/manifest.json | 32 + .../p13n.EngineCustomFilters/Component.js | 15 + .../Engine.controller.js | 260 +++ .../p13n.EngineCustomFilters/Engine.view.xml | 87 + ui5/sap.m/p13n.EngineCustomFilters/index.html | 35 + .../p13n.EngineCustomFilters/manifest.json | 32 + ui5/sap.m/p13n.EngineGridList/Component.js | 15 + .../p13n.EngineGridList/Engine.controller.js | 130 ++ ui5/sap.m/p13n.EngineGridList/Engine.view.xml | 65 + ui5/sap.m/p13n.EngineGridList/index.html | 35 + ui5/sap.m/p13n.EngineGridList/manifest.json | 32 + ui5/sap.m/p13n.EngineGridTable/Component.js | 15 + .../p13n.EngineGridTable/Engine.controller.js | 238 +++ .../p13n.EngineGridTable/Engine.view.xml | 61 + ui5/sap.m/p13n.EngineGridTable/index.html | 35 + ui5/sap.m/p13n.EngineGridTable/manifest.json | 32 + .../Component.js | 15 + .../Engine.controller.js | 195 ++ .../Engine.view.xml | 107 ++ .../p13n.EngineMultipleController/index.html | 35 + .../manifest.json | 32 + ui5/sap.m/p13n.Popup/Component.js | 15 + ui5/sap.m/p13n.Popup/P13nPanels.controller.js | 125 ++ ui5/sap.m/p13n.Popup/P13nPanels.view.xml | 26 + ui5/sap.m/p13n.Popup/manifest.json | 31 + 433 files changed, 26312 insertions(+), 709 deletions(-) create mode 100644 meta/z2ui5_cl_smpc_app_624.json create mode 100644 meta/z2ui5_cl_smpc_app_625.json create mode 100644 meta/z2ui5_cl_smpc_app_626.json create mode 100644 meta/z2ui5_cl_smpc_app_627.json create mode 100644 meta/z2ui5_cl_smpc_app_628.json create mode 100644 meta/z2ui5_cl_smpc_app_629.json create mode 100644 meta/z2ui5_cl_smpc_app_630.json create mode 100644 meta/z2ui5_cl_smpc_app_631.json create mode 100644 meta/z2ui5_cl_smpc_app_632.json create mode 100644 meta/z2ui5_cl_smpc_app_633.json create mode 100644 meta/z2ui5_cl_smpc_app_634.json create mode 100644 meta/z2ui5_cl_smpc_app_635.json create mode 100644 meta/z2ui5_cl_smpc_app_636.json create mode 100644 meta/z2ui5_cl_smpc_app_637.json create mode 100644 meta/z2ui5_cl_smpc_app_638.json create mode 100644 meta/z2ui5_cl_smpc_app_639.json create mode 100644 meta/z2ui5_cl_smpc_app_640.json create mode 100644 meta/z2ui5_cl_smpc_app_641.json create mode 100644 meta/z2ui5_cl_smpc_app_642.json create mode 100644 meta/z2ui5_cl_smpc_app_643.json create mode 100644 meta/z2ui5_cl_smpc_app_644.json create mode 100644 meta/z2ui5_cl_smpc_app_645.json create mode 100644 meta/z2ui5_cl_smpc_app_646.json create mode 100644 meta/z2ui5_cl_smpc_app_647.json create mode 100644 meta/z2ui5_cl_smpc_app_648.json create mode 100644 meta/z2ui5_cl_smpc_app_649.json create mode 100644 meta/z2ui5_cl_smpc_app_650.json create mode 100644 meta/z2ui5_cl_smpc_app_651.json create mode 100644 meta/z2ui5_cl_smpc_app_652.json create mode 100644 meta/z2ui5_cl_smpc_app_653.json create mode 100644 meta/z2ui5_cl_smpc_app_654.json create mode 100644 meta/z2ui5_cl_smpc_app_655.json create mode 100644 meta/z2ui5_cl_smpc_app_656.json create mode 100644 meta/z2ui5_cl_smpc_app_657.json create mode 100644 meta/z2ui5_cl_smpc_app_658.json create mode 100644 meta/z2ui5_cl_smpc_app_659.json create mode 100644 meta/z2ui5_cl_smpc_app_660.json create mode 100644 meta/z2ui5_cl_smpc_app_661.json create mode 100644 meta/z2ui5_cl_smpc_app_662.json create mode 100644 meta/z2ui5_cl_smpc_app_663.json create mode 100644 meta/z2ui5_cl_smpc_app_664.json create mode 100644 meta/z2ui5_cl_smpc_app_665.json create mode 100644 meta/z2ui5_cl_smpc_app_666.json create mode 100644 meta/z2ui5_cl_smpc_app_667.json create mode 100644 meta/z2ui5_cl_smpc_app_668.json create mode 100644 meta/z2ui5_cl_smpc_app_669.json create mode 100644 meta/z2ui5_cl_smpc_app_670.json create mode 100644 meta/z2ui5_cl_smpc_app_671.json create mode 100644 src/02/01/z2ui5_cl_smpc_app_624.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_624.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_625.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_625.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_626.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_626.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_627.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_627.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_628.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_628.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_629.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_629.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_630.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_630.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_631.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_631.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_632.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_632.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_633.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_633.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_634.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_634.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_635.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_635.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_636.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_636.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_637.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_637.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_638.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_638.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_639.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_639.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_640.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_640.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_641.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_641.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_642.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_642.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_643.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_643.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_644.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_644.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_645.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_645.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_646.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_646.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_647.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_647.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_648.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_648.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_649.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_649.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_650.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_650.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_651.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_651.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_652.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_652.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_653.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_653.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_654.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_654.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_655.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_655.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_656.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_656.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_657.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_657.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_658.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_658.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_659.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_659.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_660.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_660.clas.xml create mode 100644 src/02/01/z2ui5_cl_smpc_app_661.clas.abap create mode 100644 src/02/01/z2ui5_cl_smpc_app_661.clas.xml create mode 100644 src/02/04/z2ui5_cl_smpc_app_662.clas.abap create mode 100644 src/02/04/z2ui5_cl_smpc_app_662.clas.xml create mode 100644 src/02/04/z2ui5_cl_smpc_app_663.clas.abap create mode 100644 src/02/04/z2ui5_cl_smpc_app_663.clas.xml create mode 100644 src/02/04/z2ui5_cl_smpc_app_664.clas.abap create mode 100644 src/02/04/z2ui5_cl_smpc_app_664.clas.xml create mode 100644 src/02/04/z2ui5_cl_smpc_app_665.clas.abap create mode 100644 src/02/04/z2ui5_cl_smpc_app_665.clas.xml create mode 100644 src/02/04/z2ui5_cl_smpc_app_666.clas.abap create mode 100644 src/02/04/z2ui5_cl_smpc_app_666.clas.xml create mode 100644 src/02/04/z2ui5_cl_smpc_app_667.clas.abap create mode 100644 src/02/04/z2ui5_cl_smpc_app_667.clas.xml create mode 100644 src/02/04/z2ui5_cl_smpc_app_668.clas.abap create mode 100644 src/02/04/z2ui5_cl_smpc_app_668.clas.xml create mode 100644 src/02/04/z2ui5_cl_smpc_app_669.clas.abap create mode 100644 src/02/04/z2ui5_cl_smpc_app_669.clas.xml create mode 100644 src/02/04/z2ui5_cl_smpc_app_670.clas.abap create mode 100644 src/02/04/z2ui5_cl_smpc_app_670.clas.xml create mode 100644 src/02/04/z2ui5_cl_smpc_app_671.clas.abap create mode 100644 src/02/04/z2ui5_cl_smpc_app_671.clas.xml create mode 100644 ui5/sap.f/AvatarGroup/Component.js create mode 100644 ui5/sap.f/AvatarGroup/controller/AvatarGroup.controller.js create mode 100644 ui5/sap.f/AvatarGroup/manifest.json create mode 100644 ui5/sap.f/AvatarGroup/model/avatargroup.json create mode 100644 ui5/sap.f/AvatarGroup/view/AvatarGroup.view.xml create mode 100644 ui5/sap.f/AvatarGroup/view/Card.fragment.xml create mode 100644 ui5/sap.f/AvatarGroup/view/GroupPopover.fragment.xml create mode 100644 ui5/sap.f/AvatarGroup/view/IndividualPopover.fragment.xml create mode 100644 ui5/sap.f/HeroBannerBasic/C.controller.js create mode 100644 ui5/sap.f/HeroBannerBasic/Component.js create mode 100644 ui5/sap.f/HeroBannerBasic/V.view.xml create mode 100644 ui5/sap.f/HeroBannerBasic/manifest.json create mode 100644 ui5/sap.f/HeroBannerColumnsRatio/C.controller.js create mode 100644 ui5/sap.f/HeroBannerColumnsRatio/Component.js create mode 100644 ui5/sap.f/HeroBannerColumnsRatio/V.view.xml create mode 100644 ui5/sap.f/HeroBannerColumnsRatio/main.css create mode 100644 ui5/sap.f/HeroBannerColumnsRatio/manifest.json create mode 100644 ui5/sap.f/HeroBannerHeaderBlockAndActionsPlacement/C.controller.js create mode 100644 ui5/sap.f/HeroBannerHeaderBlockAndActionsPlacement/Component.js create mode 100644 ui5/sap.f/HeroBannerHeaderBlockAndActionsPlacement/V.view.xml create mode 100644 ui5/sap.f/HeroBannerHeaderBlockAndActionsPlacement/manifest.json create mode 100644 ui5/sap.f/HeroBannerIntegrationCard/C.controller.js create mode 100644 ui5/sap.f/HeroBannerIntegrationCard/Component.js create mode 100644 ui5/sap.f/HeroBannerIntegrationCard/V.view.xml create mode 100644 ui5/sap.f/HeroBannerIntegrationCard/endContentManifest.json create mode 100644 ui5/sap.f/HeroBannerIntegrationCard/manifest.json create mode 100644 ui5/sap.f/HeroBannerIntegrationCard/startContentManifest.json create mode 100644 ui5/sap.f/HeroBannerUseCases/C.controller.js create mode 100644 ui5/sap.f/HeroBannerUseCases/Component.js create mode 100644 ui5/sap.f/HeroBannerUseCases/V.view.xml create mode 100644 ui5/sap.f/HeroBannerUseCases/main.css create mode 100644 ui5/sap.f/HeroBannerUseCases/manifest.json create mode 100644 ui5/sap.f/ProductSwitchItemWithImageSrc/Component.js create mode 100644 ui5/sap.f/ProductSwitchItemWithImageSrc/controller/ProductSwitchItemWithImageSrc.controller.js create mode 100644 ui5/sap.f/ProductSwitchItemWithImageSrc/manifest.json create mode 100644 ui5/sap.f/ProductSwitchItemWithImageSrc/view/ProductSwitchItemWithImageSrc.fragment.xml create mode 100644 ui5/sap.f/ProductSwitchItemWithImageSrc/view/ProductSwitchItemWithImageSrc.view.xml create mode 100644 ui5/sap.f/SidePanel/Component.js create mode 100644 ui5/sap.f/SidePanel/Page.controller.js create mode 100644 ui5/sap.f/SidePanel/Page.view.xml create mode 100644 ui5/sap.f/SidePanel/manifest.json create mode 100644 ui5/sap.f/SidePanelOverflow/Component.js create mode 100644 ui5/sap.f/SidePanelOverflow/Page.controller.js create mode 100644 ui5/sap.f/SidePanelOverflow/Page.view.xml create mode 100644 ui5/sap.f/SidePanelOverflow/manifest.json create mode 100644 ui5/sap.f/SidePanelResizable/Component.js create mode 100644 ui5/sap.f/SidePanelResizable/Page.controller.js create mode 100644 ui5/sap.f/SidePanelResizable/Page.view.xml create mode 100644 ui5/sap.f/SidePanelResizable/manifest.json create mode 100644 ui5/sap.m/Avatar/Component.js create mode 100644 ui5/sap.m/Avatar/controller/Avatar.controller.js create mode 100644 ui5/sap.m/Avatar/manifest.json create mode 100644 ui5/sap.m/Avatar/view/Avatar.view.xml create mode 100644 ui5/sap.m/AvatarActiveState/Component.js create mode 100644 ui5/sap.m/AvatarActiveState/controller/AvatarActiveState.controller.js create mode 100644 ui5/sap.m/AvatarActiveState/manifest.json create mode 100644 ui5/sap.m/AvatarActiveState/view/AvatarActiveState.view.xml create mode 100644 ui5/sap.m/AvatarActiveState/view/Popover.fragment.xml create mode 100644 ui5/sap.m/AvatarActiveState/view/UserMenu.fragment.xml create mode 100644 ui5/sap.m/AvatarBadgeIconColor/Component.js create mode 100644 ui5/sap.m/AvatarBadgeIconColor/controller/AvatarBadgeIconColor.controller.js create mode 100644 ui5/sap.m/AvatarBadgeIconColor/manifest.json create mode 100644 ui5/sap.m/AvatarBadgeIconColor/view/AvatarBadgeIconColor.view.xml create mode 100644 ui5/sap.m/AvatarValueState/Component.js create mode 100644 ui5/sap.m/AvatarValueState/controller/AvatarValueState.controller.js create mode 100644 ui5/sap.m/AvatarValueState/manifest.json create mode 100644 ui5/sap.m/AvatarValueState/view/AvatarValueState.view.xml create mode 100644 ui5/sap.m/AvatarWithAffordance/Component.js create mode 100644 ui5/sap.m/AvatarWithAffordance/controller/AvatarWithAffordance.controller.js create mode 100644 ui5/sap.m/AvatarWithAffordance/manifest.json create mode 100644 ui5/sap.m/AvatarWithAffordance/view/AvatarWithAffordance.view.xml create mode 100644 ui5/sap.m/DynamicDateRange/Component.js create mode 100644 ui5/sap.m/DynamicDateRange/DynamicDateRange.controller.js create mode 100644 ui5/sap.m/DynamicDateRange/DynamicDateRange.view.xml create mode 100644 ui5/sap.m/DynamicDateRange/manifest.json create mode 100644 ui5/sap.m/DynamicDateRangeAndCalendarWeekNumbering/Component.js create mode 100644 ui5/sap.m/DynamicDateRangeAndCalendarWeekNumbering/DynamicDateRangeAndCalendarWeekNumbering.controller.js create mode 100644 ui5/sap.m/DynamicDateRangeAndCalendarWeekNumbering/DynamicDateRangeAndCalendarWeekNumbering.view.xml create mode 100644 ui5/sap.m/DynamicDateRangeAndCalendarWeekNumbering/manifest.json create mode 100644 ui5/sap.m/DynamicDateRangeHidden/Component.js create mode 100644 ui5/sap.m/DynamicDateRangeHidden/DynamicDateRange.controller.js create mode 100644 ui5/sap.m/DynamicDateRangeHidden/DynamicDateRange.view.xml create mode 100644 ui5/sap.m/DynamicDateRangeHidden/manifest.json create mode 100644 ui5/sap.m/DynamicDateRangeWithCustomOptions/Component.js create mode 100644 ui5/sap.m/DynamicDateRangeWithCustomOptions/CustomBusinessDay.js create mode 100644 ui5/sap.m/DynamicDateRangeWithCustomOptions/CustomLastChristmas.js create mode 100644 ui5/sap.m/DynamicDateRangeWithCustomOptions/CustomPreviousXWeekend.js create mode 100644 ui5/sap.m/DynamicDateRangeWithCustomOptions/CustomPreviousXWorkWeek.js create mode 100644 ui5/sap.m/DynamicDateRangeWithCustomOptions/DynamicDateRangeWithCustomOptions.controller.js create mode 100644 ui5/sap.m/DynamicDateRangeWithCustomOptions/DynamicDateRangeWithCustomOptions.view.xml create mode 100644 ui5/sap.m/DynamicDateRangeWithCustomOptions/manifest.json create mode 100644 ui5/sap.m/ExpandableText/C.controller.js create mode 100644 ui5/sap.m/ExpandableText/Component.js create mode 100644 ui5/sap.m/ExpandableText/V.view.xml create mode 100644 ui5/sap.m/ExpandableText/manifest.json create mode 100644 ui5/sap.m/IllustratedMessageEVR/Component.js create mode 100644 ui5/sap.m/IllustratedMessageEVR/manifest.json create mode 100644 ui5/sap.m/IllustratedMessageEVR/view/Main.view.xml create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/Component.js create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/README.md create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/add-illustrations-task.js create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/manifest.json create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/mock-external-package/ui5-illustrations-library/README.md create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/mock-external-package/ui5-illustrations-library/illustrations/Custom-Dialog-EmptyCart.svg create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/mock-external-package/ui5-illustrations-library/illustrations/Custom-Dot-EmptyCart.svg create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/mock-external-package/ui5-illustrations-library/illustrations/Custom-Scene-EmptyCart.svg create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/mock-external-package/ui5-illustrations-library/illustrations/Custom-Spot-EmptyCart.svg create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/mock-external-package/ui5-illustrations-library/illustrations/metadata.json create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/mock-external-package/ui5-illustrations-library/illustrationsValidator.js create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/mock-external-package/ui5-illustrations-library/index.js create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/mock-external-package/ui5-illustrations-library/package.json create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/package.json create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/ui5.yaml create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/webapp/Component.js create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/webapp/controller/Main.controller.js create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/webapp/index.html create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/webapp/index.js create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/webapp/manifest.json create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/webapp/resources/illustrations/Custom-Dialog-EmptyCart.svg create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/webapp/resources/illustrations/Custom-Dot-EmptyCart.svg create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/webapp/resources/illustrations/Custom-Scene-EmptyCart.svg create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/webapp/resources/illustrations/Custom-Spot-EmptyCart.svg create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/webapp/resources/illustrations/metadata.json create mode 100644 ui5/sap.m/IllustratedMessageInAppCustom/webapp/view/Main.view.xml create mode 100644 ui5/sap.m/IllustratedMessageInCardNoActivities/Component.js create mode 100644 ui5/sap.m/IllustratedMessageInCardNoActivities/manifest.json create mode 100644 ui5/sap.m/IllustratedMessageInCardNoActivities/view/Main.view.xml create mode 100644 ui5/sap.m/IllustratedMessageInCardNoEmail/Component.js create mode 100644 ui5/sap.m/IllustratedMessageInCardNoEmail/manifest.json create mode 100644 ui5/sap.m/IllustratedMessageInCardNoEmail/view/Main.view.xml create mode 100644 ui5/sap.m/IllustratedMessageInDialog/Component.js create mode 100644 ui5/sap.m/IllustratedMessageInDialog/controller/Main.controller.js create mode 100644 ui5/sap.m/IllustratedMessageInDialog/manifest.json create mode 100644 ui5/sap.m/IllustratedMessageInDialog/view/Main.view.xml create mode 100644 ui5/sap.m/IllustratedMessageInDialog/view/fragments/Dialog.fragment.xml create mode 100644 ui5/sap.m/IllustratedMessageInPage/Component.js create mode 100644 ui5/sap.m/IllustratedMessageInPage/controller/Main.controller.js create mode 100644 ui5/sap.m/IllustratedMessageInPage/manifest.json create mode 100644 ui5/sap.m/IllustratedMessageInPage/view/Main.view.xml create mode 100644 ui5/sap.m/IllustratedMessageInPageCustom/Component.js create mode 100644 ui5/sap.m/IllustratedMessageInPageCustom/controller/Main.controller.js create mode 100644 ui5/sap.m/IllustratedMessageInPageCustom/custom_illustrations/Custom-Dialog-EmptyCart.svg create mode 100644 ui5/sap.m/IllustratedMessageInPageCustom/custom_illustrations/Custom-Dot-EmptyCart.svg create mode 100644 ui5/sap.m/IllustratedMessageInPageCustom/custom_illustrations/Custom-Scene-EmptyCart.svg create mode 100644 ui5/sap.m/IllustratedMessageInPageCustom/custom_illustrations/Custom-Spot-EmptyCart.svg create mode 100644 ui5/sap.m/IllustratedMessageInPageCustom/custom_illustrations/metadata.json create mode 100644 ui5/sap.m/IllustratedMessageInPageCustom/manifest.json create mode 100644 ui5/sap.m/IllustratedMessageInPageCustom/view/Main.view.xml create mode 100644 ui5/sap.m/IllustratedMessageInPageTNT/Component.js create mode 100644 ui5/sap.m/IllustratedMessageInPageTNT/controller/Main.controller.js create mode 100644 ui5/sap.m/IllustratedMessageInPageTNT/manifest.json create mode 100644 ui5/sap.m/IllustratedMessageInPageTNT/view/Main.view.xml create mode 100644 ui5/sap.m/IllustratedMessageInPageWithURI/Component.js create mode 100644 ui5/sap.m/IllustratedMessageInPageWithURI/controller/Main.controller.js create mode 100644 ui5/sap.m/IllustratedMessageInPageWithURI/manifest.json create mode 100644 ui5/sap.m/IllustratedMessageInPageWithURI/view/Main.view.xml create mode 100644 ui5/sap.m/IllustratedMessageSessionTimeout/Component.js create mode 100644 ui5/sap.m/IllustratedMessageSessionTimeout/controller/Main.controller.js create mode 100644 ui5/sap.m/IllustratedMessageSessionTimeout/i18n/i18n.properties create mode 100644 ui5/sap.m/IllustratedMessageSessionTimeout/manifest.json create mode 100644 ui5/sap.m/IllustratedMessageSessionTimeout/view/Main.view.xml create mode 100644 ui5/sap.m/IllustratedMessageSessionTimeout/view/fragments/Dialog.fragment.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FileNameValidationSample/Component.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FileNameValidationSample/controller/Page.controller.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FileNameValidationSample/index.html create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FileNameValidationSample/manifest.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FileNameValidationSample/model/documents.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FileNameValidationSample/model/mockserver.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FileNameValidationSample/view/UploadSetwithTable.view.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FileNameValidationSample/view/fragment/AddViaUrl.fragment.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FilePreviewCustomPageContent/Component.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FilePreviewCustomPageContent/controller/Page.controller.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FilePreviewCustomPageContent/index.html create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FilePreviewCustomPageContent/manifest.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FilePreviewCustomPageContent/model/documents.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FilePreviewCustomPageContent/model/mockserver.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FilePreviewCustomPageContent/view/UploadSetwithTable.view.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.FilePreviewCustomPageContent/view/fragment/AddViaUrl.fragment.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.GridTableSimple/Component.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.GridTableSimple/controller/Page.controller.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.GridTableSimple/index.html create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.GridTableSimple/manifest.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.GridTableSimple/model/documents.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.GridTableSimple/model/mockserver.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.GridTableSimple/view/UploadSetwithTable.view.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.GridTableSimple/view/fragment/AddViaUrl.fragment.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.MultiplePluginInstances/Component.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.MultiplePluginInstances/controller/Page.controller.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.MultiplePluginInstances/index.html create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.MultiplePluginInstances/manifest.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.MultiplePluginInstances/model/documents.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.MultiplePluginInstances/model/mockserver.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.MultiplePluginInstances/view/UploadSetwithTable.view.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.MultiplePluginInstances/view/fragment/AddViaUrl.fragment.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFileDialogs/Component.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFileDialogs/controller/Page.controller.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFileDialogs/index.html create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFileDialogs/manifest.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFileDialogs/model/documents.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFileDialogs/model/mockserver.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFileDialogs/view/UploadSetwithTable.view.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFileDialogs/view/fragment/AddViaUrl.fragment.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFileDialogs/view/fragment/FileUpload.fragment.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFilePreview/Component.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFilePreview/controller/Page.controller.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFilePreview/index.html create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFilePreview/manifest.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFilePreview/model/documents.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFilePreview/model/mockserver.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFilePreview/view/UploadSetwithTable.view.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFilePreview/view/fragment/AddViaUrl.fragment.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableProgressIndicator/Component.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableProgressIndicator/controller/Page.controller.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableProgressIndicator/index.html create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableProgressIndicator/manifest.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableProgressIndicator/model/documents.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableProgressIndicator/model/mockserver.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableProgressIndicator/view/UploadSetwithTable.view.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableProgressIndicator/view/fragment/AddViaUrl.fragment.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableSimple/Component.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableSimple/controller/Page.controller.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableSimple/index.html create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableSimple/manifest.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableSimple/model/documents.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableSimple/model/mockserver.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableSimple/view/UploadSetwithTable.view.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableSimple/view/fragment/AddViaUrl.fragment.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableSimple/Component.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableSimple/controller/Page.controller.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableSimple/index.html create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableSimple/manifest.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableSimple/model/documents.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableSimple/model/mockserver.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableSimple/view/UploadSetwithTable.view.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableSimple/view/fragment/AddViaUrl.fragment.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableWithFolderHierarchy/Component.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableWithFolderHierarchy/controller/Page.controller.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableWithFolderHierarchy/index.html create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableWithFolderHierarchy/manifest.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableWithFolderHierarchy/model/documents.json create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableWithFolderHierarchy/model/mockserver.js create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableWithFolderHierarchy/view/UploadSetwithTable.view.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableWithFolderHierarchy/view/fragment/AddViaUrl.fragment.xml create mode 100644 ui5/sap.m/UploadSetwithTablePlugin.TreeTableWithFolderHierarchy/view/fragment/CreateFolderDialog.fragment.xml create mode 100644 ui5/sap.m/VariantManagement/Component.js create mode 100644 ui5/sap.m/VariantManagement/VariantManagement.controller.js create mode 100644 ui5/sap.m/VariantManagement/VariantManagement.view.xml create mode 100644 ui5/sap.m/VariantManagement/manifest.json create mode 100644 ui5/sap.m/p13n.Container/Component.js create mode 100644 ui5/sap.m/p13n.Container/P13nContainer.controller.js create mode 100644 ui5/sap.m/p13n.Container/P13nContainer.view.xml create mode 100644 ui5/sap.m/p13n.Container/index.html create mode 100644 ui5/sap.m/p13n.Container/manifest.json create mode 100644 ui5/sap.m/p13n.Engine/Component.js create mode 100644 ui5/sap.m/p13n.Engine/Engine.controller.js create mode 100644 ui5/sap.m/p13n.Engine/Engine.view.xml create mode 100644 ui5/sap.m/p13n.Engine/index.html create mode 100644 ui5/sap.m/p13n.Engine/manifest.json create mode 100644 ui5/sap.m/p13n.EngineCustomFilters/Component.js create mode 100644 ui5/sap.m/p13n.EngineCustomFilters/Engine.controller.js create mode 100644 ui5/sap.m/p13n.EngineCustomFilters/Engine.view.xml create mode 100644 ui5/sap.m/p13n.EngineCustomFilters/index.html create mode 100644 ui5/sap.m/p13n.EngineCustomFilters/manifest.json create mode 100644 ui5/sap.m/p13n.EngineGridList/Component.js create mode 100644 ui5/sap.m/p13n.EngineGridList/Engine.controller.js create mode 100644 ui5/sap.m/p13n.EngineGridList/Engine.view.xml create mode 100644 ui5/sap.m/p13n.EngineGridList/index.html create mode 100644 ui5/sap.m/p13n.EngineGridList/manifest.json create mode 100644 ui5/sap.m/p13n.EngineGridTable/Component.js create mode 100644 ui5/sap.m/p13n.EngineGridTable/Engine.controller.js create mode 100644 ui5/sap.m/p13n.EngineGridTable/Engine.view.xml create mode 100644 ui5/sap.m/p13n.EngineGridTable/index.html create mode 100644 ui5/sap.m/p13n.EngineGridTable/manifest.json create mode 100644 ui5/sap.m/p13n.EngineMultipleController/Component.js create mode 100644 ui5/sap.m/p13n.EngineMultipleController/Engine.controller.js create mode 100644 ui5/sap.m/p13n.EngineMultipleController/Engine.view.xml create mode 100644 ui5/sap.m/p13n.EngineMultipleController/index.html create mode 100644 ui5/sap.m/p13n.EngineMultipleController/manifest.json create mode 100644 ui5/sap.m/p13n.Popup/Component.js create mode 100644 ui5/sap.m/p13n.Popup/P13nPanels.controller.js create mode 100644 ui5/sap.m/p13n.Popup/P13nPanels.view.xml create mode 100644 ui5/sap.m/p13n.Popup/manifest.json diff --git a/README.md b/README.md index 349ef5494..20d8c7114 100644 --- a/README.md +++ b/README.md @@ -213,7 +213,7 @@ have an abap2UI5 port. -Overall **621 / 669** portable demo kit samples ported (92.8 %). +Overall **669 / 669** portable demo kit samples ported (100.0 %). **In scope**: samples whose control is **not deprecated** (legacy-free ready). 52 of them use a control newer than **UI5 1.71** — their ports need a newer runtime and are filed under `src/02`. Out of scope: 61 of 742 samples — 21 on deprecated controls, 37 that are not app views (UI5 test infrastructure, Component routing, view-templating demos — see `ui5/scope-nonapp.json`), 3 demo apps without an owning control. Plus **1** ported samples outside that scope — maintainer-decided exceptions (`ui5/scope-exceptions.json`, listed in [STATUS.md](STATUS.md)); they are not counted as coverage of the in-scope backlog. @@ -221,6 +221,8 @@ Control metadata from OpenUI5 **1.152.0**. | Module | Samples | In scope | Reserved | To port | Ported | Coverage | | |--------|--------:|---------:|---------:|--------:|-------:|---------:|---| +| `sap.f` | 46 | 46 | | 46 | 46 | 100.0 % | ██████████ | +| `sap.m` | 461 | 442 | 12 | 430 | 430 | 100.0 % | ██████████ | | `sap.tnt` | 17 | 17 | | 17 | 17 | 100.0 % | ██████████ | | `sap.ui.codeeditor` | 2 | 2 | | 2 | 2 | 100.0 % | ██████████ | | `sap.ui.core` | 63 | 21 | | 21 | 21 | 100.0 % | ██████████ | @@ -229,11 +231,9 @@ Control metadata from OpenUI5 **1.152.0**. | `sap.ui.table` | 21 | 21 | | 21 | 21 | 100.0 % | ██████████ | | `sap.ui.unified` | 22 | 22 | | 22 | 22 | 100.0 % | ██████████ | | `sap.uxap` | 45 | 45 | | 45 | 45 | 100.0 % | ██████████ | -| `sap.m` | 461 | 442 | 12 | 430 | 392 | 91.2 % | █████████░ | -| `sap.f` | 46 | 46 | | 46 | 36 | 78.3 % | ████████░░ | -| **Total** | **742** | **681** | **12** | **669** | **621** | **92.8 %** | █████████░ | +| **Total** | **742** | **681** | **12** | **669** | **669** | **100.0 %** | ██████████ | -**Reserved** — 12 in-scope samples are deliberately *not* ported. They are the hold-out set (`ui5/holdout.json`, see [TRAINING.md](TRAINING.md#measuring-progress)): never used as prompt references, kept out of batch planning, and regenerated from scratch to measure the generator itself — CI-green on the first try, structural-diff violations, review findings per app. Spending one as a measurement is what ports it, so they leave this column by being used, not by being worked off. They are excluded from the coverage denominator because they are not backlog. +**Reserved** — 12 in-scope samples are deliberately *not* ported. They are the hold-out set (`ui5/holdout.json`, see [TRAINING.md](TRAINING.md#measuring-progress)): never used as prompt references, kept out of batch planning, and regenerated from scratch to measure the generator itself — CI-green on the first try, structural-diff violations, review findings per app. Spending one as a measurement is what ports it, so they leave this column by being used, not by being worked off. They are excluded from the coverage denominator because they are not backlog. **The portable backlog is zero.** diff --git a/SAMPLES.md b/SAMPLES.md index 397efb7c6..02b1bae56 100644 --- a/SAMPLES.md +++ b/SAMPLES.md @@ -3,7 +3,7 @@ # The sample catalogue -Every port in this repository — 636 of them — with what it shows and a +Every port in this repository — 684 of them — with what it shows and a link to its source. This is the [overview app](src/z2ui5_cl_smpc_app_000.clas.abap) as a page you can read here, before installing anything. @@ -40,13 +40,13 @@ For what is NOT here — which demo kit samples are still unported and why — s ## The ports — by UI5 library -[sap.m](#sapm) · [sap.uxap](#sapuxap) · [sap.f](#sapf) · [sap.ui.layout.form](#sapuilayoutform) · [sap.ui.layout](#sapuilayout) · [sap.ui.unified](#sapuiunified) · [sap.ui.core](#sapuicore) · [sap.ui.table](#sapuitable) · [sap.tnt](#saptnt) · [sap.ui.layout.cssgrid](#sapuilayoutcssgrid) · [sap.ui.model.type](#sapuimodeltype) · [sap.m.semantic](#sapmsemantic) · [sap.ui.integration.widgets](#sapuiintegrationwidgets) · [sap.f.semantic](#sapfsemantic) · [sap.ui.codeeditor](#sapuicodeeditor) · [sap.ui.model](#sapuimodel) · [sap.m.upload](#sapmupload) · [sap.ui.core.hyphenation](#sapuicorehyphenation) · [sap.ui.core.theming](#sapuicoretheming) · [sap.ui.integration](#sapuiintegration) +[sap.m](#sapm) · [sap.uxap](#sapuxap) · [sap.f](#sapf) · [sap.ui.layout.form](#sapuilayoutform) · [sap.ui.layout](#sapuilayout) · [sap.ui.unified](#sapuiunified) · [sap.ui.core](#sapuicore) · [sap.ui.table](#sapuitable) · [sap.tnt](#saptnt) · [sap.m.plugins](#sapmplugins) · [sap.ui.layout.cssgrid](#sapuilayoutcssgrid) · [sap.ui.model.type](#sapuimodeltype) · [sap.m.p13n](#sapmp13n) · [sap.m.semantic](#sapmsemantic) · [sap.ui.integration.widgets](#sapuiintegrationwidgets) · [sap.f.semantic](#sapfsemantic) · [sap.ui.codeeditor](#sapuicodeeditor) · [sap.ui.model](#sapuimodel) · [sap.m.upload](#sapmupload) · [sap.ui.core.hyphenation](#sapuicorehyphenation) · [sap.ui.core.theming](#sapuicoretheming) · [sap.ui.integration](#sapuiintegration) ### sap.m -377 port(s), by control: +398 port(s), by control: -[ActionListItem](#sapmactionlistitem) · [Bar](#sapmbar) (2) · [Breadcrumbs](#sapmbreadcrumbs) (3) · [BusyDialog](#sapmbusydialog) (2) · [Button](#sapmbutton) (2) · [Carousel](#sapmcarousel) (5) · [CheckBox](#sapmcheckbox) (2) · [ColorPalette](#sapmcolorpalette) (2) · [Column](#sapmcolumn) · [ColumnListItem](#sapmcolumnlistitem) · [ComboBox](#sapmcombobox) (13) · [ComparisonPattern](#sapmcomparisonpattern) · [CookieSettingsDialogPattern](#sapmcookiesettingsdialogpattern) · [CustomListItem](#sapmcustomlistitem) · [CustomTreeItem](#sapmcustomtreeitem) · [DatePicker](#sapmdatepicker) (3) · [DateRangeSelection](#sapmdaterangeselection) (3) · [DateTimePicker](#sapmdatetimepicker) (3) · [Dialog](#sapmdialog) (5) · [DisplayListItem](#sapmdisplaylistitem) · [DraftIndicator](#sapmdraftindicator) (2) · [FacetFilter](#sapmfacetfilter) (3) · [FeedContent](#sapmfeedcontent) · [FeedInput](#sapmfeedinput) (2) · [FeedListItem](#sapmfeedlistitem) · [FlexBox](#sapmflexbox) (9) · [FormattedText](#sapmformattedtext) · [GenericTag](#sapmgenerictag) (2) · [GenericTile](#sapmgenerictile) (6) · [HeaderContainer](#sapmheadercontainer) (5) · [IconTabBar](#sapmicontabbar) (17) · [IconTabHeader](#sapmicontabheader) · [Image](#sapmimage) (3) · [ImageContent](#sapmimagecontent) · [InitialPagePattern](#sapminitialpagepattern) · [Input](#sapminput) (18) · [InputListItem](#sapminputlistitem) · [InputModelUpdate](#sapminputmodelupdate) · [Label](#sapmlabel) · [LightBox](#sapmlightbox) · [Link](#sapmlink) (3) · [List](#sapmlist) (16) · [MaskInput](#sapmmaskinput) · [Menu](#sapmmenu) (3) · [MenuButton](#sapmmenubutton) · [MessageBox](#sapmmessagebox) (3) · [MessagePopover](#sapmmessagepopover) (3) · [MessageStrip](#sapmmessagestrip) (3) · [MessageToast](#sapmmessagetoast) · [MessageView](#sapmmessageview) (5) · [MultiComboBox](#sapmmulticombobox) (10) · [MultiInput](#sapmmultiinput) (12) · [NavContainer](#sapmnavcontainer) · [NewsContent](#sapmnewscontent) · [NotificationListGroup](#sapmnotificationlistgroup) (4) · [NotificationListItem](#sapmnotificationlistitem) · [NumericContent](#sapmnumericcontent) (3) · [ObjectAttribute](#sapmobjectattribute) (4) · [ObjectHeader](#sapmobjectheader) (12) · [ObjectIdentifier](#sapmobjectidentifier) · [ObjectListItem](#sapmobjectlistitem) (2) · [ObjectMarker](#sapmobjectmarker) · [ObjectNumber](#sapmobjectnumber) · [ObjectStatus](#sapmobjectstatus) · [OverflowToolbar](#sapmoverflowtoolbar) (7) · [OverflowToolbarTokenizer](#sapmoverflowtoolbartokenizer) · [Page](#sapmpage) (3) · [Panel](#sapmpanel) (4) · [PDFViewer](#sapmpdfviewer) (3) · [PlanningCalendar](#sapmplanningcalendar) (14) · [Popover](#sapmpopover) (4) · [ProgressIndicator](#sapmprogressindicator) (2) · [PullToRefresh](#sapmpulltorefresh) (2) · [QuickView](#sapmquickview) (3) · [QuickViewCard](#sapmquickviewcard) (2) · [RadioButton](#sapmradiobutton) · [RangeSlider](#sapmrangeslider) · [ResponsivePopover](#sapmresponsivepopover) · [ScrollContainer](#sapmscrollcontainer) · [SearchField](#sapmsearchfield) (2) · [SegmentedButton](#sapmsegmentedbutton) (5) · [Select](#sapmselect) (6) · [SelectDialog](#sapmselectdialog) (2) · [SelectList](#sapmselectlist) (2) · [SinglePlanningCalendar](#sapmsingleplanningcalendar) (10) · [Slider](#sapmslider) · [SlideTile](#sapmslidetile) · [SplitApp](#sapmsplitapp) · [SplitContainer](#sapmsplitcontainer) · [StandardListItem](#sapmstandardlistitem) (9) · [StepInput](#sapmstepinput) (2) · [Switch](#sapmswitch) · [TabContainer](#sapmtabcontainer) (3) · [Table](#sapmtable) (19) · [TableSelectDialog](#sapmtableselectdialog) (2) · [Text](#sapmtext) (5) · [TextArea](#sapmtextarea) (5) · [TileContent](#sapmtilecontent) · [TimePicker](#sapmtimepicker) (2) · [TimePickerSliders](#sapmtimepickersliders) · [Title](#sapmtitle) (2) · [ToggleButton](#sapmtogglebutton) · [Tokenizer](#sapmtokenizer) (2) · [Toolbar](#sapmtoolbar) · [Tree](#sapmtree) (8) · [URLHelper](#sapmurlhelper) · [ViewSettingsDialog](#sapmviewsettingsdialog) (4) · [WhitespacePattern](#sapmwhitespacepattern) · [Wizard](#sapmwizard) (4) +[ActionListItem](#sapmactionlistitem) · [Avatar](#sapmavatar) (5) · [Bar](#sapmbar) (2) · [Breadcrumbs](#sapmbreadcrumbs) (3) · [BusyDialog](#sapmbusydialog) (2) · [Button](#sapmbutton) (2) · [Carousel](#sapmcarousel) (5) · [CheckBox](#sapmcheckbox) (2) · [ColorPalette](#sapmcolorpalette) (2) · [Column](#sapmcolumn) · [ColumnListItem](#sapmcolumnlistitem) · [ComboBox](#sapmcombobox) (13) · [ComparisonPattern](#sapmcomparisonpattern) · [CookieSettingsDialogPattern](#sapmcookiesettingsdialogpattern) · [CustomListItem](#sapmcustomlistitem) · [CustomTreeItem](#sapmcustomtreeitem) · [DatePicker](#sapmdatepicker) (3) · [DateRangeSelection](#sapmdaterangeselection) (3) · [DateTimePicker](#sapmdatetimepicker) (3) · [Dialog](#sapmdialog) (5) · [DisplayListItem](#sapmdisplaylistitem) · [DraftIndicator](#sapmdraftindicator) (2) · [DynamicDateRange](#sapmdynamicdaterange) (4) · [ExpandableText](#sapmexpandabletext) · [FacetFilter](#sapmfacetfilter) (3) · [FeedContent](#sapmfeedcontent) · [FeedInput](#sapmfeedinput) (2) · [FeedListItem](#sapmfeedlistitem) · [FlexBox](#sapmflexbox) (9) · [FormattedText](#sapmformattedtext) · [GenericTag](#sapmgenerictag) (2) · [GenericTile](#sapmgenerictile) (6) · [HeaderContainer](#sapmheadercontainer) (5) · [IconTabBar](#sapmicontabbar) (17) · [IconTabHeader](#sapmicontabheader) · [IllustratedMessage](#sapmillustratedmessage) (10) · [Image](#sapmimage) (3) · [ImageContent](#sapmimagecontent) · [InitialPagePattern](#sapminitialpagepattern) · [Input](#sapminput) (18) · [InputListItem](#sapminputlistitem) · [InputModelUpdate](#sapminputmodelupdate) · [Label](#sapmlabel) · [LightBox](#sapmlightbox) · [Link](#sapmlink) (3) · [List](#sapmlist) (16) · [MaskInput](#sapmmaskinput) · [Menu](#sapmmenu) (3) · [MenuButton](#sapmmenubutton) · [MessageBox](#sapmmessagebox) (3) · [MessagePopover](#sapmmessagepopover) (3) · [MessageStrip](#sapmmessagestrip) (3) · [MessageToast](#sapmmessagetoast) · [MessageView](#sapmmessageview) (5) · [MultiComboBox](#sapmmulticombobox) (10) · [MultiInput](#sapmmultiinput) (12) · [NavContainer](#sapmnavcontainer) · [NewsContent](#sapmnewscontent) · [NotificationListGroup](#sapmnotificationlistgroup) (4) · [NotificationListItem](#sapmnotificationlistitem) · [NumericContent](#sapmnumericcontent) (3) · [ObjectAttribute](#sapmobjectattribute) (4) · [ObjectHeader](#sapmobjectheader) (12) · [ObjectIdentifier](#sapmobjectidentifier) · [ObjectListItem](#sapmobjectlistitem) (2) · [ObjectMarker](#sapmobjectmarker) · [ObjectNumber](#sapmobjectnumber) · [ObjectStatus](#sapmobjectstatus) · [OverflowToolbar](#sapmoverflowtoolbar) (7) · [OverflowToolbarTokenizer](#sapmoverflowtoolbartokenizer) · [Page](#sapmpage) (3) · [Panel](#sapmpanel) (4) · [PDFViewer](#sapmpdfviewer) (3) · [PlanningCalendar](#sapmplanningcalendar) (14) · [Popover](#sapmpopover) (4) · [ProgressIndicator](#sapmprogressindicator) (2) · [PullToRefresh](#sapmpulltorefresh) (2) · [QuickView](#sapmquickview) (3) · [QuickViewCard](#sapmquickviewcard) (2) · [RadioButton](#sapmradiobutton) · [RangeSlider](#sapmrangeslider) · [ResponsivePopover](#sapmresponsivepopover) · [ScrollContainer](#sapmscrollcontainer) · [SearchField](#sapmsearchfield) (2) · [SegmentedButton](#sapmsegmentedbutton) (5) · [Select](#sapmselect) (6) · [SelectDialog](#sapmselectdialog) (2) · [SelectList](#sapmselectlist) (2) · [SinglePlanningCalendar](#sapmsingleplanningcalendar) (10) · [Slider](#sapmslider) · [SlideTile](#sapmslidetile) · [SplitApp](#sapmsplitapp) · [SplitContainer](#sapmsplitcontainer) · [StandardListItem](#sapmstandardlistitem) (9) · [StepInput](#sapmstepinput) (2) · [Switch](#sapmswitch) · [TabContainer](#sapmtabcontainer) (3) · [Table](#sapmtable) (19) · [TableSelectDialog](#sapmtableselectdialog) (2) · [Text](#sapmtext) (5) · [TextArea](#sapmtextarea) (5) · [TileContent](#sapmtilecontent) · [TimePicker](#sapmtimepicker) (2) · [TimePickerSliders](#sapmtimepickersliders) · [Title](#sapmtitle) (2) · [ToggleButton](#sapmtogglebutton) · [Tokenizer](#sapmtokenizer) (2) · [Toolbar](#sapmtoolbar) · [Tree](#sapmtree) (8) · [URLHelper](#sapmurlhelper) · [VariantManagement](#sapmvariantmanagement) · [ViewSettingsDialog](#sapmviewsettingsdialog) (4) · [WhitespacePattern](#sapmwhitespacepattern) · [Wizard](#sapmwizard) (4) #### sap.m.ActionListItem @@ -54,6 +54,16 @@ For what is NOT here — which demo kit samples are still unported and why — s |---|---| | **sap.m.ActionListItem**
Use the Action List Item to trigger an action directly from a list
actionlistitem action list item sap.m
✓ checked | [`Z2UI5_CL_SMPC_APP_001`](src/01/01/z2ui5_cl_smpc_app_001.clas.abap) | +#### sap.m.Avatar + +| Sample | Class | +|---|---| +| **sap.m.Avatar**
Avatar | [`Z2UI5_CL_SMPC_APP_624`](src/02/01/z2ui5_cl_smpc_app_624.clas.abap) | +| **sap.m.Avatar** — Avatar with toggling of Active state
AvatarActiveState | [`Z2UI5_CL_SMPC_APP_625`](src/02/01/z2ui5_cl_smpc_app_625.clas.abap) | +| **sap.m.Avatar** — Avatar with Badge Icon Color
AvatarBadgeIconColor | [`Z2UI5_CL_SMPC_APP_626`](src/02/01/z2ui5_cl_smpc_app_626.clas.abap) | +| **sap.m.Avatar** — Avatar with badgeValueState
AvatarValueState | [`Z2UI5_CL_SMPC_APP_627`](src/02/01/z2ui5_cl_smpc_app_627.clas.abap) | +| **sap.m.Avatar** — Avatar with Visual Affordance
AvatarWithAffordance | [`Z2UI5_CL_SMPC_APP_628`](src/02/01/z2ui5_cl_smpc_app_628.clas.abap) | + #### sap.m.Bar | Sample | Class | @@ -208,6 +218,21 @@ For what is NOT here — which demo kit samples are still unported and why — s | **sap.m.DraftIndicator**
The Draft Indicator shows that eighter currently a draft is saving or that it is already saved. It does not block the current UI screen so other operations could be triggered in parallel.
draftindicator draft indicator sap.m sap.m.label verticallayout button
✓ checked · 2 deviations | [`Z2UI5_CL_SMPC_APP_021`](src/01/01/z2ui5_cl_smpc_app_021.clas.abap) | | **sap.m.DraftIndicator** — Semantic Page using Draft Indicator
Integration of Draft Indicator inside Semantic Page
draftindicator draft indicator sap.m semanticpagedraftindicator fullscreenpage addaction flagaction favoriteaction messagesindicator messagepopover messageitem
○ generated · 7 deviations | [`Z2UI5_CL_SMPC_APP_448`](src/01/01/z2ui5_cl_smpc_app_448.clas.abap) | +#### sap.m.DynamicDateRange + +| Sample | Class | +|---|---| +| **sap.m.DynamicDateRange**
DynamicDateRange | [`Z2UI5_CL_SMPC_APP_639`](src/02/01/z2ui5_cl_smpc_app_639.clas.abap) | +| **sap.m.DynamicDateRange** — Dynamic Date Range with calendarWeekNumbering
DynamicDateRangeAndCalendarWeekNumbering | [`Z2UI5_CL_SMPC_APP_640`](src/02/01/z2ui5_cl_smpc_app_640.clas.abap) | +| **sap.m.DynamicDateRange** — Dynamic Date Range - Open by Another Control
DynamicDateRangeHidden | [`Z2UI5_CL_SMPC_APP_641`](src/02/01/z2ui5_cl_smpc_app_641.clas.abap) | +| **sap.m.DynamicDateRange** — Dynamic Date Range with Custom Options
DynamicDateRangeWithCustomOptions | [`Z2UI5_CL_SMPC_APP_642`](src/02/01/z2ui5_cl_smpc_app_642.clas.abap) | + +#### sap.m.ExpandableText + +| Sample | Class | +|---|---| +| **sap.m.ExpandableText**
ExpandableText | [`Z2UI5_CL_SMPC_APP_643`](src/02/01/z2ui5_cl_smpc_app_643.clas.abap) | + #### sap.m.FacetFilter | Sample | Class | @@ -311,6 +336,21 @@ For what is NOT here — which demo kit samples are still unported and why — s |---|---| | **sap.m.IconTabHeader** — Standalone Icon Tab Header
Icon Tab Header used standalone, outside of Icon Tab Bar.
icontabheader icon tab header sap.m inline mode icontabfilter
◐ reviewed | [`Z2UI5_CL_SMPC_APP_055`](src/01/01/z2ui5_cl_smpc_app_055.clas.abap) | +#### sap.m.IllustratedMessage + +| Sample | Class | +|---|---| +| **sap.m.IllustratedMessage** — Illustrated Message Enable Vertical Responsiveness
IllustratedMessageEVR | [`Z2UI5_CL_SMPC_APP_629`](src/02/01/z2ui5_cl_smpc_app_629.clas.abap) | +| **sap.m.IllustratedMessage** — A demo application that imports a Custom Illustration Set from an npm package
IllustratedMessageInAppCustom | [`Z2UI5_CL_SMPC_APP_630`](src/02/01/z2ui5_cl_smpc_app_630.clas.abap) | +| **sap.m.IllustratedMessage** — 'NoActivities' Illustrated Message in a Card
IllustratedMessageInCardNoActivities | [`Z2UI5_CL_SMPC_APP_631`](src/02/01/z2ui5_cl_smpc_app_631.clas.abap) | +| **sap.m.IllustratedMessage** — 'NoEmail' Illustrated Message in a Card
IllustratedMessageInCardNoEmail | [`Z2UI5_CL_SMPC_APP_632`](src/02/01/z2ui5_cl_smpc_app_632.clas.abap) | +| **sap.m.IllustratedMessage** — Illustrated Message in a Dialog
IllustratedMessageInDialog | [`Z2UI5_CL_SMPC_APP_633`](src/02/01/z2ui5_cl_smpc_app_633.clas.abap) | +| **sap.m.IllustratedMessage** — Default Illustration Set (sapIllus)
IllustratedMessageInPage | [`Z2UI5_CL_SMPC_APP_634`](src/02/01/z2ui5_cl_smpc_app_634.clas.abap) | +| **sap.m.IllustratedMessage** — Illustrated Message in a Page with Configurable Properties (Custom Illustration Set)
IllustratedMessageInPageCustom | [`Z2UI5_CL_SMPC_APP_635`](src/02/01/z2ui5_cl_smpc_app_635.clas.abap) | +| **sap.m.IllustratedMessage** — Illustrated Message in a Page with Configurable Properties (TNT Illustration Set)
IllustratedMessageInPageTNT | [`Z2UI5_CL_SMPC_APP_636`](src/02/01/z2ui5_cl_smpc_app_636.clas.abap) | +| **sap.m.IllustratedMessage** — Illustrative style illustrations using the 'src' property
IllustratedMessageInPageWithURI | [`Z2UI5_CL_SMPC_APP_637`](src/02/01/z2ui5_cl_smpc_app_637.clas.abap) | +| **sap.m.IllustratedMessage** — Illustrated Message Session Timeout
IllustratedMessageSessionTimeout | [`Z2UI5_CL_SMPC_APP_638`](src/02/01/z2ui5_cl_smpc_app_638.clas.abap) | + #### sap.m.Image | Sample | Class | @@ -946,6 +986,12 @@ For what is NOT here — which demo kit samples are still unported and why — s |---|---| | **sap.m.URLHelper**
The URL Helper can be used to easily trigger a phone's native apps like Email, Telephone and SMS. It can be used with any UI control but typically an active Display List Item is chosen.
urlhelper sap.m tel sms email url triggers list displaylistitem
○ generated · 4 deviations | [`Z2UI5_CL_SMPC_APP_084`](src/01/01/z2ui5_cl_smpc_app_084.clas.abap) | +#### sap.m.VariantManagement + +| Sample | Class | +|---|---| +| **sap.m.VariantManagement** — VariantManagement using dedicated items
VariantManagement | [`Z2UI5_CL_SMPC_APP_651`](src/02/01/z2ui5_cl_smpc_app_651.clas.abap) | + #### sap.m.ViewSettingsDialog | Sample | Class | @@ -1073,45 +1119,104 @@ For what is NOT here — which demo kit samples are still unported and why — s ### sap.f -34 port(s). +44 port(s), by control: + +[AvatarGroup](#sapfavatargroup) · [Card](#sapfcard) · [DynamicPage](#sapfdynamicpage) (5) · [FlexibleColumnLayout](#sapfflexiblecolumnlayout) (8) · [GridContainer](#sapfgridcontainer) (4) · [GridList](#sapfgridlist) (9) · [HeroBanner](#sapfherobanner) (5) · [ProductSwitch](#sapfproductswitch) (2) · [ShellBar](#sapfshellbar) (5) · [SidePanel](#sapfsidepanel) (4) + +#### sap.f.AvatarGroup + +| Sample | Class | +|---|---| +| **sap.f.AvatarGroup**
AvatarGroup | [`Z2UI5_CL_SMPC_APP_662`](src/02/04/z2ui5_cl_smpc_app_662.clas.abap) | + +#### sap.f.Card | Sample | Class | |---|---| -| **sap.f.GridList** — Grid List - Basic examples
A GridList with the default grid layout, resized live with a slider to show how the grid reflows.
gridlist grid list sap.f layout slider panel toolbar title gridlistitem vbox flexitemdata
◐ reviewed · 1 deviation | [`Z2UI5_CL_SMPC_APP_111`](src/01/04/z2ui5_cl_smpc_app_111.clas.abap) | | **sap.f.Card** — Card Control
This sample illustrates how to specify the predefined header and the content of the Card control.
card sap.f fiori header vbox hbox combobox item datepicker button list customlistitem
◐ reviewed · 1 deviation | [`Z2UI5_CL_SMPC_APP_117`](src/01/04/z2ui5_cl_smpc_app_117.clas.abap) | -| **sap.f.GridList** — Grid List - Different Modes With Various Item Types
This is a sample for GridList with different modes of selection.
gridlist grid list sap.f selection modes html hbox segmentedbutton segmentedbuttonitem gridbasiclayout gridlistitem
◐ reviewed · 4 deviations | [`Z2UI5_CL_SMPC_APP_133`](src/01/04/z2ui5_cl_smpc_app_133.clas.abap) | -| **sap.f.GridList** — Grid List with GridBoxLayout
This layout allows to display same height grid items with configurable width.
gridlist grid list sap.f gridboxlayout slider panel toolbar title gridlistitem vbox flexitemdata
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_144`](src/01/04/z2ui5_cl_smpc_app_144.clas.abap) | -| **sap.f.GridList** — Grid List - Drag and Drop
This sample represents GridList with enabled Drag and Drop functionality.
gridlist grid list sap.f drag drop panel toolbar title draginfo griddropinfo gridboxlayout
◐ reviewed · 4 deviations | [`Z2UI5_CL_SMPC_APP_148`](src/01/04/z2ui5_cl_smpc_app_148.clas.abap) | + +#### sap.f.DynamicPage + +| Sample | Class | +|---|---| | **sap.f.DynamicPage** — Dynamic Page Freestyle Example
Dynamic Page freestyle example with a responsive sap.m.Table in the content area, showing that each control can be placed in the title and the header content areas.
dynamicpage dynamic sap.f dynamicpagefreestyle dynamicpagetitle title breadcrumbs link label overflowtoolbar generictag objectnumber
◐ reviewed · 5 deviations | [`Z2UI5_CL_SMPC_APP_170`](src/01/04/z2ui5_cl_smpc_app_170.clas.abap) | -| **sap.f.GridList** — Grid List features - Grouping, Header, Growing
This sample illustrates subgroups with headers, custom header and lazy loading of GridList items.
gridlist grid list sap.f gridlistboxcontainergrouping slider panel toolbar title toolbarspacer searchfield gridboxlayout
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_176`](src/01/04/z2ui5_cl_smpc_app_176.clas.abap) | -| **sap.f.GridList** — Grid List - Break point examples - S, M, L, XL
This sample illustrates how to configure the responsive settings for different container sizes.
gridlist grid list sap.f gridlistbreakpoints slider panel toolbar title gridresponsivelayout gridsettings gridlistitem
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_213`](src/01/04/z2ui5_cl_smpc_app_213.clas.abap) | -| **sap.f.FlexibleColumnLayout** — Flexible Column Layout (with Event Bus)
Clicking on a link in a column opens the next column.
flexiblecolumnlayout flexible column layout sap.f master-detail table label columnlistitem text button
◐ reviewed · 4 deviations | [`Z2UI5_CL_SMPC_APP_234`](src/01/04/z2ui5_cl_smpc_app_234.clas.abap) | | **sap.f.DynamicPage** — Dynamic Page with Sticky Subheader
Dynamic Page containing an sap.m.IconTabBar in the sticky subheader content area.
dynamicpage dynamic sap.f dynamicpagewithstickysubheader dynamicpagetitle title breadcrumbs link label overflowtoolbar generictag objectnumber
◐ reviewed · 6 deviations | [`Z2UI5_CL_SMPC_APP_238`](src/01/04/z2ui5_cl_smpc_app_238.clas.abap) | -| **sap.f.GridContainer** — Grid Container - Drag and Drop
This sample represents GridContainer with enabled Drag and Drop functionality.
gridcontainer grid container sap.f gridcontainerdraganddrop scrollcontainer draginfo griddropinfo gridcontainersettings gridcontaineritemlayoutdata imagecontent header
○ generated · 6 deviations | [`Z2UI5_CL_SMPC_APP_526`](src/01/04/z2ui5_cl_smpc_app_526.clas.abap) | -| **sap.f.GridContainer** — Grid Container - Drag and Drop From List to GridContainer
This sample represents how items from a control which is not GridContainer can be dragged and dropped over a GridContainer.
gridcontainer grid container sap.f gridcontainerdraganddropfromlist scrollcontainer togglebutton hbox list draginfo dropinfo standardlistitem
○ generated · 5 deviations | [`Z2UI5_CL_SMPC_APP_527`](src/01/04/z2ui5_cl_smpc_app_527.clas.abap) | | **sap.f.DynamicPage** — Dynamic Page with Wizard
Dynamic Page containing a sap.m.Wizard and WizardProgressNavigator in the content area.
dynamicpage dynamic sap.f dynamicpagewithwizard navcontainer dynamicpagetitle title wizard wizardstep objectheader objectattribute list
○ generated · 10 deviations | [`Z2UI5_CL_SMPC_APP_560`](src/01/04/z2ui5_cl_smpc_app_560.clas.abap) | -| **sap.f.GridList** — Grid List - Item Designs
This is a sample for GridList item templates representing a typical tools page dashboard style.
gridlist grid list sap.f gridlistboxcontainerreal toolbar title gridboxlayout vbox flexitemdata label text
○ generated · 4 deviations | [`Z2UI5_CL_SMPC_APP_581`](src/01/04/z2ui5_cl_smpc_app_581.clas.abap) | -| **sap.f.GridList** — Navigation with keyboard arrows between multiple GridLists
This sample demonstrates the keyboard navigation between multiple grids
gridlist grid list sap.f gridlistkeyboardarrowsnavigation app slider gridresponsivelayout gridsettings gridbasiclayout gridlistitem griditemlayoutdata
○ generated · 7 deviations | [`Z2UI5_CL_SMPC_APP_582`](src/01/04/z2ui5_cl_smpc_app_582.clas.abap) | -| **sap.f.ShellBar** — Shell Bar with title mega menu
Shell Bar example showing the control title as part of a mega menu, configurable by the app developer.
shellbar shell bar sap.f application header menu menuitem avatar
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_110`](src/02/04/z2ui5_cl_smpc_app_110.clas.abap) | -| **sap.f.SidePanel** — Side Panel with single action item
Demonstrates the usage of Side Panel with single action item.
sidepanel side panel sap.f single item button vbox label switch text sidepanelitem
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_136`](src/02/04/z2ui5_cl_smpc_app_136.clas.abap) | -| **sap.f.ShellBar** — Shell Bar with menu button
Shell Bar example with a menu button and a plain title.
shellbar shell bar sap.f menu button avatar
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_152`](src/02/04/z2ui5_cl_smpc_app_152.clas.abap) | -| **sap.f.ProductSwitch** — Product Switch with Navigation
This sample demonstrates the navigation behavior of Product Switch, configurable by the app developer.
productswitch product switch sap.f productswitchnavigation verticallayout button text responsivepopover productswitchitem
◐ reviewed · 3 deviations | [`Z2UI5_CL_SMPC_APP_165`](src/02/04/z2ui5_cl_smpc_app_165.clas.abap) | -| **sap.f.GridContainer**
This sample represents the general usage of GridContainer.
gridcontainer grid container sap.f scrollcontainer togglebutton panel hbox label switch text gridcontainersettings
◐ reviewed · 5 deviations | [`Z2UI5_CL_SMPC_APP_168`](src/02/04/z2ui5_cl_smpc_app_168.clas.abap) | -| **sap.f.ShellBar** — Shell Bar with search
Shell Bar example with configured search functionality.
shellbar shell bar sap.f shellbarwithsearch menu menuitem avatar searchmanager suggestionitem
◐ reviewed · 4 deviations | [`Z2UI5_CL_SMPC_APP_218`](src/02/04/z2ui5_cl_smpc_app_218.clas.abap) | -| **sap.f.GridList** — Grid List with Responsive Column Layout
This layout displays a variable number of grid columns depending on available screen size. Grid row's height is dynamically determined by the height of the highest grid element on this row.
gridlist grid list sap.f gridlistresponsivecolumnlayout togglebutton slider panel toolbar title responsivecolumnlayout gridlistitem
◐ reviewed · 3 deviations | [`Z2UI5_CL_SMPC_APP_222`](src/02/04/z2ui5_cl_smpc_app_222.clas.abap) | | **sap.f.DynamicPage** — Dynamic Page with Responsive Avatar
Dynamic Page demonstrating the breakpointChange event to adjust Avatar sizes responsively based on breakpoints.
dynamicpage dynamic sap.f dynamicpageresponsiveavatar dynamicpagetitle breadcrumbs link hbox title objectmarker text flexbox
◐ reviewed · 4 deviations | [`Z2UI5_CL_SMPC_APP_244`](src/02/04/z2ui5_cl_smpc_app_244.clas.abap) | +| **sap.f.DynamicPage** — Dynamic Page with Analytical Table
Dynamic Page containing an Analytical Table in the content area aligned with the SAP Fiori List Report floorplan.
dynamicpage dynamic sap.f dynamicpageanalyticaltable dynamicpagetitle title label overflowtoolbar generictag objectnumber toolbarspacer button
○ generated · 9 deviations | [`Z2UI5_CL_SMPC_APP_559`](src/02/04/z2ui5_cl_smpc_app_559.clas.abap) | + +#### sap.f.FlexibleColumnLayout + +| Sample | Class | +|---|---| +| **sap.f.FlexibleColumnLayout** — Flexible Column Layout (with Event Bus)
Clicking on a link in a column opens the next column.
flexiblecolumnlayout flexible column layout sap.f master-detail table label columnlistitem text button
◐ reviewed · 4 deviations | [`Z2UI5_CL_SMPC_APP_234`](src/01/04/z2ui5_cl_smpc_app_234.clas.abap) | | **sap.f.FlexibleColumnLayout** — Flexible Column Layout Landmark Info For Columns
Flexible Column Layout where the first and the last columns have custom Landmark Info
flexiblecolumnlayout flexible column layout sap.f flexiblecolumnlayoutlandmarkinfo flexiblecolumnlayoutaccessiblelandmarkinfo button vbox
○ generated · 5 deviations | [`Z2UI5_CL_SMPC_APP_449`](src/02/04/z2ui5_cl_smpc_app_449.clas.abap) | | **sap.f.FlexibleColumnLayout** — Flexible Column Layout Landmark Info For Arrows
Flexible Column Layout where the all the arrows have custom Landmark Info
flexiblecolumnlayout flexible column layout sap.f flexiblecolumnlayoutlandmarkinfoarrow flexiblecolumnlayoutaccessiblelandmarkinfo button vbox
○ generated · 5 deviations | [`Z2UI5_CL_SMPC_APP_450`](src/02/04/z2ui5_cl_smpc_app_450.clas.abap) | -| **sap.f.GridContainer** — Grid Container - Keyboard navigation between multiple grids
This sample demonstrates the keyboard navigation between multiple grids
gridcontainer grid container sap.f gridcontainersnavigation scrollcontainer togglebutton hbox panel flexitemdata generictile gridcontaineritemlayoutdata
○ generated · 7 deviations | [`Z2UI5_CL_SMPC_APP_528`](src/02/04/z2ui5_cl_smpc_app_528.clas.abap) | -| **sap.f.DynamicPage** — Dynamic Page with Analytical Table
Dynamic Page containing an Analytical Table in the content area aligned with the SAP Fiori List Report floorplan.
dynamicpage dynamic sap.f dynamicpageanalyticaltable dynamicpagetitle title label overflowtoolbar generictag objectnumber toolbarspacer button
○ generated · 9 deviations | [`Z2UI5_CL_SMPC_APP_559`](src/02/04/z2ui5_cl_smpc_app_559.clas.abap) | | **sap.f.FlexibleColumnLayout** — Flexible Column Layout with programmatic scrolling to an item
FlexibleColumnLayout where the app programmatically scrolls to some item within the newly navigated column, once the column is fully resized
flexiblecolumnlayout flexible column layout sap.f flexiblecolumnlayoutcolumnresize objectpagelayout objectpagedynamicheadertitle title objectpagesection objectpagesubsection button
○ generated · 9 deviations | [`Z2UI5_CL_SMPC_APP_577`](src/02/04/z2ui5_cl_smpc_app_577.clas.abap) | | **sap.f.FlexibleColumnLayout** — Flexible Column Layout with Routing and first page in fullscreen only
Flexible Column Layout as an app with routing that displays different pages in the initial column. The first page is only displayed in OneColumn layout type
flexiblecolumnlayout flexible column layout sap.f flexiblecolumnlayoutwithfullscreenpage dynamicpagetitle title table text columnlistitem objectidentifier
○ generated · 15 deviations | [`Z2UI5_CL_SMPC_APP_578`](src/02/04/z2ui5_cl_smpc_app_578.clas.abap) | | **sap.f.FlexibleColumnLayout** — Flexible Column Layout with Routing and One Initial Column
Flexible Column Layout as an app with routing that starts with a single initial column.
flexiblecolumnlayout flexible column layout sap.f flexiblecolumnlayoutwithonecolumnstart flexiblecolumnlayoutdata flexiblecolumnlayoutdatafordesktop flexiblecolumnlayoutdatafortablet dynamicpage dynamicpagetitle title
○ generated · 14 deviations | [`Z2UI5_CL_SMPC_APP_579`](src/02/04/z2ui5_cl_smpc_app_579.clas.abap) | | **sap.f.FlexibleColumnLayout** — Flexible Column Layout with Routing and Two Initial Columns
Flexible Column Layout as an app with routing that starts with two initial columns.
flexiblecolumnlayout flexible column layout sap.f flexiblecolumnlayoutwithtwocolumnstart dynamicpage dynamicpagetitle title table overflowtoolbar toolbarspacer
○ generated · 14 deviations | [`Z2UI5_CL_SMPC_APP_580`](src/02/04/z2ui5_cl_smpc_app_580.clas.abap) | -| **sap.f.ShellBar** — Shell Bar with Product Switch
Shell Bar example with enabled Product Switch, configurable by the app developer. The Product Switch control is in experimental state.
shellbar shell bar sap.f shellbarproductswitch avatar responsivepopover productswitch productswitchitem
○ generated · 5 deviations | [`Z2UI5_CL_SMPC_APP_583`](src/02/04/z2ui5_cl_smpc_app_583.clas.abap) | | **sap.f.FlexibleColumnLayout** — Shell Bar with Flexible Column Layout
Example of Shell Bar in combination with Flexible Column Layout.
flexiblecolumnlayout flexible column layout sap.f shellbarwithflexiblecolumnlayout shellbar menu menuitem avatar dynamicpage dynamicpagetitle
○ generated · 15 deviations | [`Z2UI5_CL_SMPC_APP_584`](src/02/04/z2ui5_cl_smpc_app_584.clas.abap) | + +#### sap.f.GridContainer + +| Sample | Class | +|---|---| +| **sap.f.GridContainer** — Grid Container - Drag and Drop
This sample represents GridContainer with enabled Drag and Drop functionality.
gridcontainer grid container sap.f gridcontainerdraganddrop scrollcontainer draginfo griddropinfo gridcontainersettings gridcontaineritemlayoutdata imagecontent header
○ generated · 6 deviations | [`Z2UI5_CL_SMPC_APP_526`](src/01/04/z2ui5_cl_smpc_app_526.clas.abap) | +| **sap.f.GridContainer** — Grid Container - Drag and Drop From List to GridContainer
This sample represents how items from a control which is not GridContainer can be dragged and dropped over a GridContainer.
gridcontainer grid container sap.f gridcontainerdraganddropfromlist scrollcontainer togglebutton hbox list draginfo dropinfo standardlistitem
○ generated · 5 deviations | [`Z2UI5_CL_SMPC_APP_527`](src/01/04/z2ui5_cl_smpc_app_527.clas.abap) | +| **sap.f.GridContainer**
This sample represents the general usage of GridContainer.
gridcontainer grid container sap.f scrollcontainer togglebutton panel hbox label switch text gridcontainersettings
◐ reviewed · 5 deviations | [`Z2UI5_CL_SMPC_APP_168`](src/02/04/z2ui5_cl_smpc_app_168.clas.abap) | +| **sap.f.GridContainer** — Grid Container - Keyboard navigation between multiple grids
This sample demonstrates the keyboard navigation between multiple grids
gridcontainer grid container sap.f gridcontainersnavigation scrollcontainer togglebutton hbox panel flexitemdata generictile gridcontaineritemlayoutdata
○ generated · 7 deviations | [`Z2UI5_CL_SMPC_APP_528`](src/02/04/z2ui5_cl_smpc_app_528.clas.abap) | + +#### sap.f.GridList + +| Sample | Class | +|---|---| +| **sap.f.GridList** — Grid List - Basic examples
A GridList with the default grid layout, resized live with a slider to show how the grid reflows.
gridlist grid list sap.f layout slider panel toolbar title gridlistitem vbox flexitemdata
◐ reviewed · 1 deviation | [`Z2UI5_CL_SMPC_APP_111`](src/01/04/z2ui5_cl_smpc_app_111.clas.abap) | +| **sap.f.GridList** — Grid List - Different Modes With Various Item Types
This is a sample for GridList with different modes of selection.
gridlist grid list sap.f selection modes html hbox segmentedbutton segmentedbuttonitem gridbasiclayout gridlistitem
◐ reviewed · 4 deviations | [`Z2UI5_CL_SMPC_APP_133`](src/01/04/z2ui5_cl_smpc_app_133.clas.abap) | +| **sap.f.GridList** — Grid List with GridBoxLayout
This layout allows to display same height grid items with configurable width.
gridlist grid list sap.f gridboxlayout slider panel toolbar title gridlistitem vbox flexitemdata
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_144`](src/01/04/z2ui5_cl_smpc_app_144.clas.abap) | +| **sap.f.GridList** — Grid List - Drag and Drop
This sample represents GridList with enabled Drag and Drop functionality.
gridlist grid list sap.f drag drop panel toolbar title draginfo griddropinfo gridboxlayout
◐ reviewed · 4 deviations | [`Z2UI5_CL_SMPC_APP_148`](src/01/04/z2ui5_cl_smpc_app_148.clas.abap) | +| **sap.f.GridList** — Grid List features - Grouping, Header, Growing
This sample illustrates subgroups with headers, custom header and lazy loading of GridList items.
gridlist grid list sap.f gridlistboxcontainergrouping slider panel toolbar title toolbarspacer searchfield gridboxlayout
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_176`](src/01/04/z2ui5_cl_smpc_app_176.clas.abap) | +| **sap.f.GridList** — Grid List - Break point examples - S, M, L, XL
This sample illustrates how to configure the responsive settings for different container sizes.
gridlist grid list sap.f gridlistbreakpoints slider panel toolbar title gridresponsivelayout gridsettings gridlistitem
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_213`](src/01/04/z2ui5_cl_smpc_app_213.clas.abap) | +| **sap.f.GridList** — Grid List - Item Designs
This is a sample for GridList item templates representing a typical tools page dashboard style.
gridlist grid list sap.f gridlistboxcontainerreal toolbar title gridboxlayout vbox flexitemdata label text
○ generated · 4 deviations | [`Z2UI5_CL_SMPC_APP_581`](src/01/04/z2ui5_cl_smpc_app_581.clas.abap) | +| **sap.f.GridList** — Navigation with keyboard arrows between multiple GridLists
This sample demonstrates the keyboard navigation between multiple grids
gridlist grid list sap.f gridlistkeyboardarrowsnavigation app slider gridresponsivelayout gridsettings gridbasiclayout gridlistitem griditemlayoutdata
○ generated · 7 deviations | [`Z2UI5_CL_SMPC_APP_582`](src/01/04/z2ui5_cl_smpc_app_582.clas.abap) | +| **sap.f.GridList** — Grid List with Responsive Column Layout
This layout displays a variable number of grid columns depending on available screen size. Grid row's height is dynamically determined by the height of the highest grid element on this row.
gridlist grid list sap.f gridlistresponsivecolumnlayout togglebutton slider panel toolbar title responsivecolumnlayout gridlistitem
◐ reviewed · 3 deviations | [`Z2UI5_CL_SMPC_APP_222`](src/02/04/z2ui5_cl_smpc_app_222.clas.abap) | + +#### sap.f.HeroBanner + +| Sample | Class | +|---|---| +| **sap.f.HeroBanner** — Hero Banner - Basic
HeroBannerBasic | [`Z2UI5_CL_SMPC_APP_667`](src/02/04/z2ui5_cl_smpc_app_667.clas.abap) | +| **sap.f.HeroBanner** — Hero Banner - Columns Ratio
HeroBannerColumnsRatio | [`Z2UI5_CL_SMPC_APP_668`](src/02/04/z2ui5_cl_smpc_app_668.clas.abap) | +| **sap.f.HeroBanner** — Hero Banner - Header Block and Actions Placement
HeroBannerHeaderBlockAndActionsPlacement | [`Z2UI5_CL_SMPC_APP_669`](src/02/04/z2ui5_cl_smpc_app_669.clas.abap) | +| **sap.f.HeroBanner** — Hero Banner - Integration Card
HeroBannerIntegrationCard | [`Z2UI5_CL_SMPC_APP_670`](src/02/04/z2ui5_cl_smpc_app_670.clas.abap) | +| **sap.f.HeroBanner** — Hero Banner - Use Cases
HeroBannerUseCases | [`Z2UI5_CL_SMPC_APP_671`](src/02/04/z2ui5_cl_smpc_app_671.clas.abap) | + +#### sap.f.ProductSwitch + +| Sample | Class | +|---|---| +| **sap.f.ProductSwitch** — Product Switch with Navigation
This sample demonstrates the navigation behavior of Product Switch, configurable by the app developer.
productswitch product switch sap.f productswitchnavigation verticallayout button text responsivepopover productswitchitem
◐ reviewed · 3 deviations | [`Z2UI5_CL_SMPC_APP_165`](src/02/04/z2ui5_cl_smpc_app_165.clas.abap) | +| **sap.f.ProductSwitch** — Product Switch with imageSrc
ProductSwitchItemWithImageSrc | [`Z2UI5_CL_SMPC_APP_666`](src/02/04/z2ui5_cl_smpc_app_666.clas.abap) | + +#### sap.f.ShellBar + +| Sample | Class | +|---|---| +| **sap.f.ShellBar** — Shell Bar with title mega menu
Shell Bar example showing the control title as part of a mega menu, configurable by the app developer.
shellbar shell bar sap.f application header menu menuitem avatar
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_110`](src/02/04/z2ui5_cl_smpc_app_110.clas.abap) | +| **sap.f.ShellBar** — Shell Bar with menu button
Shell Bar example with a menu button and a plain title.
shellbar shell bar sap.f menu button avatar
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_152`](src/02/04/z2ui5_cl_smpc_app_152.clas.abap) | +| **sap.f.ShellBar** — Shell Bar with search
Shell Bar example with configured search functionality.
shellbar shell bar sap.f shellbarwithsearch menu menuitem avatar searchmanager suggestionitem
◐ reviewed · 4 deviations | [`Z2UI5_CL_SMPC_APP_218`](src/02/04/z2ui5_cl_smpc_app_218.clas.abap) | +| **sap.f.ShellBar** — Shell Bar with Product Switch
Shell Bar example with enabled Product Switch, configurable by the app developer. The Product Switch control is in experimental state.
shellbar shell bar sap.f shellbarproductswitch avatar responsivepopover productswitch productswitchitem
○ generated · 5 deviations | [`Z2UI5_CL_SMPC_APP_583`](src/02/04/z2ui5_cl_smpc_app_583.clas.abap) | | **sap.f.ShellBar** — Shell Bar with Split App
Example of Shell Bar in combination with Split App.
shellbar shell bar sap.f shellbarwithsplitapp toolpage menu menuitem avatar searchmanager sidenavigation navcontainer
○ generated · 7 deviations | [`Z2UI5_CL_SMPC_APP_585`](src/02/04/z2ui5_cl_smpc_app_585.clas.abap) | +#### sap.f.SidePanel + +| Sample | Class | +|---|---| +| **sap.f.SidePanel** — Side Panel with single action item
Demonstrates the usage of Side Panel with single action item.
sidepanel side panel sap.f single item button vbox label switch text sidepanelitem
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_136`](src/02/04/z2ui5_cl_smpc_app_136.clas.abap) | +| **sap.f.SidePanel**
SidePanel | [`Z2UI5_CL_SMPC_APP_663`](src/02/04/z2ui5_cl_smpc_app_663.clas.abap) | +| **sap.f.SidePanel** — Side Panel with overflow menu
SidePanelOverflow | [`Z2UI5_CL_SMPC_APP_664`](src/02/04/z2ui5_cl_smpc_app_664.clas.abap) | +| **sap.f.SidePanel** — Resizable Side Panel
SidePanelResizable | [`Z2UI5_CL_SMPC_APP_665`](src/02/04/z2ui5_cl_smpc_app_665.clas.abap) | + ### sap.ui.layout.form 28 port(s). @@ -1287,6 +1392,23 @@ For what is NOT here — which demo kit samples are still unported and why — s | **sap.tnt.ToolPage** — Tool Page with Horizontal Navigation
A tool page layout with horizontal navigation
toolpage tool sap.tnt toolpagehorizontalnavigation toolheader image title overflowtoolbarlayoutdata text toolbarspacer searchfield button
◐ reviewed · 8 deviations | [`Z2UI5_CL_SMPC_APP_303`](src/02/05/z2ui5_cl_smpc_app_303.clas.abap) | | **sap.tnt.SideNavigation** — Side Navigation with Search
SideNavigation with a search field in the filter section and filterable navigation items.
sidenavigation side navigation sap.tnt sidenavigationsearch toolpage toolheader button image title text toolbarspacer
◐ reviewed · 11 deviations | [`Z2UI5_CL_SMPC_APP_407`](src/02/05/z2ui5_cl_smpc_app_407.clas.abap) | +### sap.m.plugins + +10 port(s). + +| Sample | Class | +|---|---| +| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - File Name validation configuration
UploadSetwithTablePlugin.FileNameValidationSample | [`Z2UI5_CL_SMPC_APP_652`](src/02/01/z2ui5_cl_smpc_app_652.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - File Preview with Custom Page Content for non supported file types
| [`Z2UI5_CL_SMPC_APP_653`](src/02/01/z2ui5_cl_smpc_app_653.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Grid Table (sap.ui.table.Table)
UploadSetwithTablePlugin.GridTableSimple | [`Z2UI5_CL_SMPC_APP_654`](src/02/01/z2ui5_cl_smpc_app_654.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - Multiple plugin instances with multiple tables
UploadSetwithTablePlugin.MultiplePluginInstances | [`Z2UI5_CL_SMPC_APP_655`](src/02/01/z2ui5_cl_smpc_app_655.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - File upload with user dialogs
UploadSetwithTablePlugin.ResponsiveTableFileDialogs | [`Z2UI5_CL_SMPC_APP_656`](src/02/01/z2ui5_cl_smpc_app_656.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - File Preview
UploadSetwithTablePlugin.ResponsiveTableFilePreview | [`Z2UI5_CL_SMPC_APP_657`](src/02/01/z2ui5_cl_smpc_app_657.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - Upload Progress and Upload Termination
| [`Z2UI5_CL_SMPC_APP_658`](src/02/01/z2ui5_cl_smpc_app_658.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table)
UploadSetwithTablePlugin.ResponsiveTableSimple | [`Z2UI5_CL_SMPC_APP_659`](src/02/01/z2ui5_cl_smpc_app_659.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Tree Table (sap.ui.table.TreeTable)
UploadSetwithTablePlugin.TreeTableSimple | [`Z2UI5_CL_SMPC_APP_660`](src/02/01/z2ui5_cl_smpc_app_660.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Tree Table with folder hierarchy & folder uploads
| [`Z2UI5_CL_SMPC_APP_661`](src/02/01/z2ui5_cl_smpc_app_661.clas.abap) | + ### sap.ui.layout.cssgrid 9 port(s). @@ -1318,6 +1440,20 @@ For what is NOT here — which demo kit samples are still unported and why — s | **sap.ui.model.type.Float** — Float Format
Formats and parses both integer and decimal digits.
float sap.ui.model.type typefloat simpleform label input text
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_179`](src/02/02/z2ui5_cl_smpc_app_179.clas.abap) | | **sap.ui.model.type.FileSize** — FileSize Type
This sample explains the formatting options of the FileSize type.
filesize file size sap.ui.model.type typefilesize simpleform label input text
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_180`](src/02/02/z2ui5_cl_smpc_app_180.clas.abap) | +### sap.m.p13n + +7 port(s). + +| Sample | Class | +|---|---| +| **sap.m.p13n.Container** — p13n.Container usage in a Dialog/Popover
p13n.Container | [`Z2UI5_CL_SMPC_APP_644`](src/02/01/z2ui5_cl_smpc_app_644.clas.abap) | +| **sap.m.p13n.Engine** — Personalization for responsive table
p13n.Engine | [`Z2UI5_CL_SMPC_APP_645`](src/02/01/z2ui5_cl_smpc_app_645.clas.abap) | +| **sap.m.p13n.Engine** — Personalization implementing custom filter controls
p13n.EngineCustomFilters | [`Z2UI5_CL_SMPC_APP_646`](src/02/01/z2ui5_cl_smpc_app_646.clas.abap) | +| **sap.m.p13n.Engine** — Personalization for grid list
p13n.EngineGridList | [`Z2UI5_CL_SMPC_APP_647`](src/02/01/z2ui5_cl_smpc_app_647.clas.abap) | +| **sap.m.p13n.Engine** — Personalization for grid table
p13n.EngineGridTable | [`Z2UI5_CL_SMPC_APP_648`](src/02/01/z2ui5_cl_smpc_app_648.clas.abap) | +| **sap.m.p13n.Engine** — Personalization with multiple SelectionControllers
p13n.EngineMultipleController | [`Z2UI5_CL_SMPC_APP_649`](src/02/01/z2ui5_cl_smpc_app_649.clas.abap) | +| **sap.m.p13n.Popup** — p13n.Popup usage
p13n.Popup | [`Z2UI5_CL_SMPC_APP_650`](src/02/01/z2ui5_cl_smpc_app_650.clas.abap) | + ### sap.m.semantic 3 port(s). diff --git a/STATUS.md b/STATUS.md index a86766072..8db67f617 100644 --- a/STATUS.md +++ b/STATUS.md @@ -15,10 +15,10 @@ TRAINING.md; for what abap2UI5 can express see CAPABILITIES.md._ | Aspect | State | |---|---| -| Ports | **622** sidecars in `meta/` (src/01 OpenUI5 <= 1.71: 401 · src/02 OpenUI5 > 1.71: 221) | -| Per library | sap.f: 36 · sap.m: 393 · sap.tnt: 17 · sap.ui: 131 · sap.uxap: 45 | -| Status ladder | 208 `generated` · 355 `reviewed` · 59 `checked` (live-verified) | -| Deviations | 10 DROPPED_171 · 161 IMPROVISED · 1937 NOTE · 301 POST_171 | +| Ports | **670** sidecars in `meta/` (src/01 OpenUI5 <= 1.71: 401 · src/02 OpenUI5 > 1.71: 269) | +| Per library | sap.f: 46 · sap.m: 431 · sap.tnt: 17 · sap.ui: 131 · sap.uxap: 45 | +| Status ladder | 256 `generated` · 355 `reviewed` · 59 `checked` (live-verified) | +| Deviations | 10 DROPPED_171 · 161 IMPROVISED · 1937 NOTE · 349 POST_171 | | Open LIVE_TESTs | **0 ports** carry at least one `LIVE_TEST` deviation — the automated close path is the e2e interaction harness (AGENTS §6 `e2e_smoke`) | | Declared gate skips | 2 structural-diff · 5 render-smoke · 0 data-fidelity · 1 property-gate (each re-verified per run — a stale skip FAILS) | | Out-of-scope ported samples | `z2ui5_cl_smpc_app_121 (sap.m.sample.UploadSet — deprecated)` — all decided KEEP permanently 2026-07-30 (per-app rationale in ui5/scope-exceptions.json, revertible); the source-backed scope gate stays hard for NEW undecided entries | diff --git a/api.md b/api.md index 04eaf3139..8661d756b 100644 --- a/api.md +++ b/api.md @@ -24,7 +24,7 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | Module | Control | Since | Deprecated | Sample | ABAP | |--------|---------|:-----:|------------|--------|:----:| -| sap.f | [AvatarGroup](https://sdk.openui5.org/api/sap.f.AvatarGroup) | 1.73 | | [AvatarGroup](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/AvatarGroup) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.AvatarGroup&sap-ui-xx-sample-lib=sap.f) | — | +| sap.f | [AvatarGroup](https://sdk.openui5.org/api/sap.f.AvatarGroup) | 1.73 | | [AvatarGroup](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/AvatarGroup) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.AvatarGroup&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_662](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_662.clas.abap) **⁺** | | sap.f | [Card](https://sdk.openui5.org/api/sap.f.Card) | 1.64 | | [Card](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/Card) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.Card&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_117](https://github.com/abap2UI5/samples-controls/blob/main/src/01/04/z2ui5_cl_smpc_app_117.clas.abap) | | sap.f | [DynamicPage](https://sdk.openui5.org/api/sap.f.DynamicPage) | 1.42 | | [DynamicPageAnalyticalTable](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/DynamicPageAnalyticalTable) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.DynamicPageAnalyticalTable&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_559](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_559.clas.abap) **⁺** | | sap.f | [DynamicPage](https://sdk.openui5.org/api/sap.f.DynamicPage) | 1.42 | | [DynamicPageFreeStyle](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/DynamicPageFreeStyle) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.DynamicPageFreeStyle&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_170](https://github.com/abap2UI5/samples-controls/blob/main/src/01/04/z2ui5_cl_smpc_app_170.clas.abap) | @@ -52,12 +52,12 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | sap.f | [GridList](https://sdk.openui5.org/api/sap.f.GridList) | 1.60 | | [GridListKeyboardArrowsNavigation](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/GridListKeyboardArrowsNavigation) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.GridListKeyboardArrowsNavigation&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_582](https://github.com/abap2UI5/samples-controls/blob/main/src/01/04/z2ui5_cl_smpc_app_582.clas.abap) | | sap.f | [GridList](https://sdk.openui5.org/api/sap.f.GridList) | 1.60 | | [GridListModes](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/GridListModes) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.GridListModes&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_133](https://github.com/abap2UI5/samples-controls/blob/main/src/01/04/z2ui5_cl_smpc_app_133.clas.abap) | | sap.f | [GridList](https://sdk.openui5.org/api/sap.f.GridList) | 1.60 | | [GridListResponsiveColumnLayout](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/GridListResponsiveColumnLayout) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.GridListResponsiveColumnLayout&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_222](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_222.clas.abap) **⁺** | -| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerBasic](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerBasic) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerBasic&sap-ui-xx-sample-lib=sap.f) | — | -| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerColumnsRatio](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerColumnsRatio) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerColumnsRatio&sap-ui-xx-sample-lib=sap.f) | — | -| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerHeaderBlockAndActionsPlacement](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerHeaderBlockAndActionsPlacement) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerHeaderBlockAndActionsPlacement&sap-ui-xx-sample-lib=sap.f) | — | -| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerIntegrationCard](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerIntegrationCard) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerIntegrationCard&sap-ui-xx-sample-lib=sap.f) | — | -| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerUseCases](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerUseCases) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerUseCases&sap-ui-xx-sample-lib=sap.f) | — | -| sap.f | [ProductSwitch](https://sdk.openui5.org/api/sap.f.ProductSwitch) | 1.72 | | [ProductSwitchItemWithImageSrc](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/ProductSwitchItemWithImageSrc) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.ProductSwitchItemWithImageSrc&sap-ui-xx-sample-lib=sap.f) | — | +| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerBasic](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerBasic) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerBasic&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_667](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_667.clas.abap) **⁺** | +| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerColumnsRatio](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerColumnsRatio) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerColumnsRatio&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_668](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_668.clas.abap) **⁺** | +| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerHeaderBlockAndActionsPlacement](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerHeaderBlockAndActionsPlacement) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerHeaderBlockAndActionsPlacement&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_669](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_669.clas.abap) **⁺** | +| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerIntegrationCard](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerIntegrationCard) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerIntegrationCard&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_670](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_670.clas.abap) **⁺** | +| sap.f | [HeroBanner](https://sdk.openui5.org/api/sap.f.HeroBanner) | 1.152 | | [HeroBannerUseCases](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/HeroBannerUseCases) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.HeroBannerUseCases&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_671](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_671.clas.abap) **⁺** | +| sap.f | [ProductSwitch](https://sdk.openui5.org/api/sap.f.ProductSwitch) | 1.72 | | [ProductSwitchItemWithImageSrc](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/ProductSwitchItemWithImageSrc) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.ProductSwitchItemWithImageSrc&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_666](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_666.clas.abap) **⁺** | | sap.f | [ProductSwitch](https://sdk.openui5.org/api/sap.f.ProductSwitch) | 1.72 | | [ProductSwitchNavigation](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/ProductSwitchNavigation) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.ProductSwitchNavigation&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_165](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_165.clas.abap) **⁺** | | sap.f | [SemanticPage](https://sdk.openui5.org/api/sap.f.semantic.SemanticPage) | 1.46.0 | | [SemanticPage](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SemanticPage) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SemanticPage&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_166](https://github.com/abap2UI5/samples-controls/blob/main/src/01/04/z2ui5_cl_smpc_app_166.clas.abap) | | sap.f | [SemanticPage](https://sdk.openui5.org/api/sap.f.semantic.SemanticPage) | 1.46.0 | | [SemanticPageFreeStyle](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SemanticPageFreeStyle) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SemanticPageFreeStyle&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_529](https://github.com/abap2UI5/samples-controls/blob/main/src/01/04/z2ui5_cl_smpc_app_529.clas.abap) | @@ -66,18 +66,18 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | sap.f | [ShellBar](https://sdk.openui5.org/api/sap.f.ShellBar) | 1.63 | | [ShellBarWithMenuButton](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/ShellBarWithMenuButton) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.ShellBarWithMenuButton&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_152](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_152.clas.abap) **⁺** | | sap.f | [ShellBar](https://sdk.openui5.org/api/sap.f.ShellBar) | 1.63 | | [ShellBarWithSearch](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/ShellBarWithSearch) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.ShellBarWithSearch&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_218](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_218.clas.abap) **⁺** | | sap.f | [ShellBar](https://sdk.openui5.org/api/sap.f.ShellBar) | 1.63 | | [ShellBarWithSplitApp](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/ShellBarWithSplitApp) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.ShellBarWithSplitApp&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_585](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_585.clas.abap) **⁺** | -| sap.f | [SidePanel](https://sdk.openui5.org/api/sap.f.SidePanel) | 1.107 | | [SidePanel](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SidePanel) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SidePanel&sap-ui-xx-sample-lib=sap.f) | — | -| sap.f | [SidePanel](https://sdk.openui5.org/api/sap.f.SidePanel) | 1.107 | | [SidePanelOverflow](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SidePanelOverflow) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SidePanelOverflow&sap-ui-xx-sample-lib=sap.f) | — | -| sap.f | [SidePanel](https://sdk.openui5.org/api/sap.f.SidePanel) | 1.107 | | [SidePanelResizable](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SidePanelResizable) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SidePanelResizable&sap-ui-xx-sample-lib=sap.f) | — | +| sap.f | [SidePanel](https://sdk.openui5.org/api/sap.f.SidePanel) | 1.107 | | [SidePanel](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SidePanel) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SidePanel&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_663](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_663.clas.abap) **⁺** | +| sap.f | [SidePanel](https://sdk.openui5.org/api/sap.f.SidePanel) | 1.107 | | [SidePanelOverflow](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SidePanelOverflow) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SidePanelOverflow&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_664](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_664.clas.abap) **⁺** | +| sap.f | [SidePanel](https://sdk.openui5.org/api/sap.f.SidePanel) | 1.107 | | [SidePanelResizable](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SidePanelResizable) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SidePanelResizable&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_665](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_665.clas.abap) **⁺** | | sap.f | [SidePanel](https://sdk.openui5.org/api/sap.f.SidePanel) | 1.107 | | [SidePanelSingle](https://github.com/SAP/openui5/tree/master/src/sap.f/test/sap/f/demokit/sample/SidePanelSingle) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.f.sample.SidePanelSingle&sap-ui-xx-sample-lib=sap.f) | [z2ui5_cl_smpc_app_136](https://github.com/abap2UI5/samples-controls/blob/main/src/02/04/z2ui5_cl_smpc_app_136.clas.abap) **⁺** | | sap.m | [ActionListItem](https://sdk.openui5.org/api/sap.m.ActionListItem) | | | [ActionListItem](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ActionListItem) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ActionListItem&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_001](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_001.clas.abap) | | sap.m | [~~ActionSelect~~](https://sdk.openui5.org/api/sap.m.ActionSelect) | 1.16 | 1.111 — with no replacement. The control is no longer considered part of the Fiori concept. | [ActionSelect](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ActionSelect) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ActionSelect&sap-ui-xx-sample-lib=sap.m) | ✗ | | sap.m | [~~ActionSheet~~](https://sdk.openui5.org/api/sap.m.ActionSheet) | 1.9.1 | 1.149 — use sap.m.Menu / sap.m.MenuItem instead. | [ActionSheet](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ActionSheet) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ActionSheet&sap-ui-xx-sample-lib=sap.m) | ✗ | -| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [Avatar](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/Avatar) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.Avatar&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarActiveState](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarActiveState) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarActiveState&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarBadgeIconColor](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarBadgeIconColor) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarBadgeIconColor&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarValueState](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarValueState) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarValueState&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarWithAffordance](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarWithAffordance) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarWithAffordance&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [Avatar](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/Avatar) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.Avatar&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_624](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_624.clas.abap) **⁺** | +| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarActiveState](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarActiveState) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarActiveState&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_625](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_625.clas.abap) **⁺** | +| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarBadgeIconColor](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarBadgeIconColor) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarBadgeIconColor&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_626](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_626.clas.abap) **⁺** | +| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarValueState](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarValueState) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarValueState&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_627](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_627.clas.abap) **⁺** | +| sap.m | [Avatar](https://sdk.openui5.org/api/sap.m.Avatar) | 1.73 | | [AvatarWithAffordance](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/AvatarWithAffordance) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.AvatarWithAffordance&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_628](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_628.clas.abap) **⁺** | | sap.m | [Bar](https://sdk.openui5.org/api/sap.m.Bar) | | | [Page](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/Page) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.Page&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_002](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_002.clas.abap) | | sap.m | [Bar](https://sdk.openui5.org/api/sap.m.Bar) | | | [ToolbarVsBar](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ToolbarVsBar) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ToolbarVsBar&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_189](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_189.clas.abap) | | sap.m | [Breadcrumbs](https://sdk.openui5.org/api/sap.m.Breadcrumbs) | 1.34 | | [Breadcrumbs](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/Breadcrumbs) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.Breadcrumbs&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_003](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_003.clas.abap) | @@ -136,11 +136,11 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | sap.m | [DisplayListItem](https://sdk.openui5.org/api/sap.m.DisplayListItem) | | | [DisplayListItem](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DisplayListItem) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DisplayListItem&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_020](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_020.clas.abap) | | sap.m | [DraftIndicator](https://sdk.openui5.org/api/sap.m.DraftIndicator) | 1.32.0 | | [DraftIndicator](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DraftIndicator) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DraftIndicator&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_021](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_021.clas.abap) | | sap.m | [DraftIndicator](https://sdk.openui5.org/api/sap.m.DraftIndicator) | 1.32.0 | | [SemanticPageDraftIndicator](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/SemanticPageDraftIndicator) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.SemanticPageDraftIndicator&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_448](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_448.clas.abap) | -| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRange](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRange) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRange&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRangeAndCalendarWeekNumbering](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRangeAndCalendarWeekNumbering) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRangeAndCalendarWeekNumbering&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRangeHidden](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRangeHidden) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRangeHidden&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRangeWithCustomOptions](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRangeWithCustomOptions) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRangeWithCustomOptions&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [ExpandableText](https://sdk.openui5.org/api/sap.m.ExpandableText) | 1.87 | | [ExpandableText](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ExpandableText) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ExpandableText&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRange](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRange) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRange&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_639](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_639.clas.abap) **⁺** | +| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRangeAndCalendarWeekNumbering](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRangeAndCalendarWeekNumbering) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRangeAndCalendarWeekNumbering&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_640](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_640.clas.abap) **⁺** | +| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRangeHidden](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRangeHidden) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRangeHidden&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_641](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_641.clas.abap) **⁺** | +| sap.m | [DynamicDateRange](https://sdk.openui5.org/api/sap.m.DynamicDateRange) | 1.92.0 | | [DynamicDateRangeWithCustomOptions](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/DynamicDateRangeWithCustomOptions) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.DynamicDateRangeWithCustomOptions&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_642](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_642.clas.abap) **⁺** | +| sap.m | [ExpandableText](https://sdk.openui5.org/api/sap.m.ExpandableText) | 1.87 | | [ExpandableText](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ExpandableText) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ExpandableText&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_643](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_643.clas.abap) **⁺** | | sap.m | [FacetFilter](https://sdk.openui5.org/api/sap.m.FacetFilter) | | | [FacetFilterCustomFilters](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/FacetFilterCustomFilters) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.FacetFilterCustomFilters&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_557](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_557.clas.abap) **⁺** | | sap.m | [FacetFilter](https://sdk.openui5.org/api/sap.m.FacetFilter) | | | [FacetFilterLight](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/FacetFilterLight) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.FacetFilterLight&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_022](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_022.clas.abap) | | sap.m | [FacetFilter](https://sdk.openui5.org/api/sap.m.FacetFilter) | | | [FacetFilterSimple](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/FacetFilterSimple) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.FacetFilterSimple&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_235](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_235.clas.abap) | @@ -189,16 +189,16 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | sap.m | [IconTabBar](https://sdk.openui5.org/api/sap.m.IconTabBar) | | | [IconTabBarTabDensityMode](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IconTabBarTabDensityMode) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IconTabBarTabDensityMode&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_620](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_620.clas.abap) | | sap.m | [IconTabBar](https://sdk.openui5.org/api/sap.m.IconTabBar) | | | [IconTabSeparator](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IconTabSeparator) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IconTabSeparator&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_383](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_383.clas.abap) | | sap.m | [IconTabHeader](https://sdk.openui5.org/api/sap.m.IconTabHeader) | 1.15 | | [IconTabHeader](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IconTabHeader) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IconTabHeader&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_055](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_055.clas.abap) | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageEVR](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageEVR) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageEVR&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInAppCustom](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInAppCustom) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInAppCustom&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInCardNoActivities](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInCardNoActivities) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInCardNoActivities&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInCardNoEmail](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInCardNoEmail) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInCardNoEmail&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInDialog](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInDialog) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInDialog&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPage](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPage) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPage&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPageCustom](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPageCustom) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPageCustom&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPageTNT](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPageTNT) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPageTNT&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPageWithURI](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPageWithURI) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPageWithURI&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageSessionTimeout](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageSessionTimeout) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageSessionTimeout&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageEVR](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageEVR) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageEVR&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_629](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_629.clas.abap) **⁺** | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInAppCustom](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInAppCustom) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInAppCustom&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_630](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_630.clas.abap) **⁺** | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInCardNoActivities](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInCardNoActivities) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInCardNoActivities&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_631](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_631.clas.abap) **⁺** | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInCardNoEmail](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInCardNoEmail) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInCardNoEmail&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_632](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_632.clas.abap) **⁺** | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInDialog](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInDialog) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInDialog&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_633](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_633.clas.abap) **⁺** | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPage](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPage) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPage&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_634](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_634.clas.abap) **⁺** | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPageCustom](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPageCustom) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPageCustom&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_635](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_635.clas.abap) **⁺** | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPageTNT](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPageTNT) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPageTNT&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_636](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_636.clas.abap) **⁺** | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageInPageWithURI](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageInPageWithURI) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageInPageWithURI&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_637](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_637.clas.abap) **⁺** | +| sap.m | [IllustratedMessage](https://sdk.openui5.org/api/sap.m.IllustratedMessage) | 1.98 | | [IllustratedMessageSessionTimeout](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/IllustratedMessageSessionTimeout) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.IllustratedMessageSessionTimeout&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_638](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_638.clas.abap) **⁺** | | sap.m | [Image](https://sdk.openui5.org/api/sap.m.Image) | | | [Image](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/Image) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.Image&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_399](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_399.clas.abap) **⁺** | | sap.m | [Image](https://sdk.openui5.org/api/sap.m.Image) | | | [ImageErrorWithIllustration](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ImageErrorWithIllustration) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ImageErrorWithIllustration&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_279](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_279.clas.abap) **⁺** | | sap.m | [Image](https://sdk.openui5.org/api/sap.m.Image) | | | [ImageModeBackground](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ImageModeBackground) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ImageModeBackground&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_031](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_031.clas.abap) | @@ -331,13 +331,13 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | sap.m | [OverflowToolbar](https://sdk.openui5.org/api/sap.m.OverflowToolbar) | 1.28 | | [ToolbarDesign](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ToolbarDesign) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ToolbarDesign&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_086](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_086.clas.abap) | | sap.m | [OverflowToolbar](https://sdk.openui5.org/api/sap.m.OverflowToolbar) | 1.28 | | [ToolbarEnabled](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ToolbarEnabled) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ToolbarEnabled&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_425](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_425.clas.abap) | | sap.m | [OverflowToolbarTokenizer](https://sdk.openui5.org/api/sap.m.OverflowToolbarTokenizer) | 1.139 | | [OverflowToolbarTokenizer](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/OverflowToolbarTokenizer) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.OverflowToolbarTokenizer&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_203](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_203.clas.abap) **⁺** | -| sap.m | [Container](https://sdk.openui5.org/api/sap.m.p13n.Container) | 1.96 | | [p13n.Container](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/Container) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.Container&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.Engine](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/Engine) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.Engine&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineCustomFilters](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineCustomFilters) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineCustomFilters&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineGridList](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineGridList) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineGridList&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineGridTable](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineGridTable) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineGridTable&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineMultipleController](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineMultipleController) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineMultipleController&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [Popup](https://sdk.openui5.org/api/sap.m.p13n.Popup) | 1.97 | | [p13n.Popup](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/Popup) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.Popup&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [Container](https://sdk.openui5.org/api/sap.m.p13n.Container) | 1.96 | | [p13n.Container](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/Container) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.Container&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_644](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_644.clas.abap) **⁺** | +| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.Engine](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/Engine) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.Engine&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_645](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_645.clas.abap) **⁺** | +| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineCustomFilters](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineCustomFilters) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineCustomFilters&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_646](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_646.clas.abap) **⁺** | +| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineGridList](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineGridList) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineGridList&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_647](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_647.clas.abap) **⁺** | +| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineGridTable](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineGridTable) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineGridTable&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_648](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_648.clas.abap) **⁺** | +| sap.m | [Engine](https://sdk.openui5.org/api/sap.m.p13n.Engine) | 1.104 | | [p13n.EngineMultipleController](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/EngineMultipleController) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.EngineMultipleController&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_649](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_649.clas.abap) **⁺** | +| sap.m | [Popup](https://sdk.openui5.org/api/sap.m.p13n.Popup) | 1.97 | | [p13n.Popup](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/p13n/Popup) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.p13n.Popup&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_650](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_650.clas.abap) **⁺** | | sap.m | [Page](https://sdk.openui5.org/api/sap.m.Page) | | | [PageFloatingFooter](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PageFloatingFooter) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PageFloatingFooter&sap-ui-xx-sample-lib=sap.m) | ⊘ | | sap.m | [Page](https://sdk.openui5.org/api/sap.m.Page) | | | [PageListReportIconTabBar](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PageListReportIconTabBar) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PageListReportIconTabBar&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_406](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_406.clas.abap) **⁺** | | sap.m | [Page](https://sdk.openui5.org/api/sap.m.Page) | | | [PageListReportToolbar](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PageListReportToolbar) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PageListReportToolbar&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_405](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_405.clas.abap) **⁺** | @@ -363,16 +363,16 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | sap.m | [PlanningCalendar](https://sdk.openui5.org/api/sap.m.PlanningCalendar) | 1.34 | | [PlanningCalendarWeekNumbering](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PlanningCalendarWeekNumbering) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PlanningCalendarWeekNumbering&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_544](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_544.clas.abap) **⁺** | | sap.m | [PlanningCalendar](https://sdk.openui5.org/api/sap.m.PlanningCalendar) | 1.34 | | [PlanningCalendarWithLegend](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PlanningCalendarWithLegend) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PlanningCalendarWithLegend&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_541](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_541.clas.abap) **⁺** | | sap.m | [PlanningCalendar](https://sdk.openui5.org/api/sap.m.PlanningCalendar) | 1.34 | | [PlanningCalendarWithStickyHeader](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PlanningCalendarWithStickyHeader) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PlanningCalendarWithStickyHeader&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_542](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_542.clas.abap) | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.FileNameValidationSample](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/FileNameValidationSample) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.FileNameValidationSample&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.FilePreviewCustomPageContent](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/FilePreviewCustomPageContent) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.FilePreviewCustomPageContent&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.GridTableSimple](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/GridTableSimple) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.GridTableSimple&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.MultiplePluginInstances](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/MultiplePluginInstances) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.MultiplePluginInstances&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableFileDialogs](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableFileDialogs) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFileDialogs&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableFilePreview](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableFilePreview) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFilePreview&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableProgressIndicator](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableProgressIndicator) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableProgressIndicator&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableSimple](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableSimple) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableSimple&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.TreeTableSimple](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/TreeTableSimple) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.TreeTableSimple&sap-ui-xx-sample-lib=sap.m) | — | -| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.TreeTableWithFolderHierarchy](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/TreeTableWithFolderHierarchy) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.TreeTableWithFolderHierarchy&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.FileNameValidationSample](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/FileNameValidationSample) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.FileNameValidationSample&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_652](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_652.clas.abap) **⁺** | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.FilePreviewCustomPageContent](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/FilePreviewCustomPageContent) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.FilePreviewCustomPageContent&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_653](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_653.clas.abap) **⁺** | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.GridTableSimple](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/GridTableSimple) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.GridTableSimple&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_654](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_654.clas.abap) **⁺** | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.MultiplePluginInstances](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/MultiplePluginInstances) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.MultiplePluginInstances&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_655](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_655.clas.abap) **⁺** | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableFileDialogs](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableFileDialogs) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFileDialogs&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_656](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_656.clas.abap) **⁺** | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableFilePreview](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableFilePreview) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFilePreview&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_657](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_657.clas.abap) **⁺** | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableProgressIndicator](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableProgressIndicator) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableProgressIndicator&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_658](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_658.clas.abap) **⁺** | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.ResponsiveTableSimple](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/ResponsiveTableSimple) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableSimple&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_659](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_659.clas.abap) **⁺** | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.TreeTableSimple](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/TreeTableSimple) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.TreeTableSimple&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_660](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_660.clas.abap) **⁺** | +| sap.m | [UploadSetwithTable](https://sdk.openui5.org/api/sap.m.plugins.UploadSetwithTable) | 1.124 | | [UploadSetwithTablePlugin.TreeTableWithFolderHierarchy](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadSetwithTablePlugin/TreeTableWithFolderHierarchy) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadSetwithTablePlugin.TreeTableWithFolderHierarchy&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_661](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_661.clas.abap) **⁺** | | sap.m | [Popover](https://sdk.openui5.org/api/sap.m.Popover) | | | [Popover](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/Popover) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.Popover&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_229](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_229.clas.abap) **⁺** | | sap.m | [Popover](https://sdk.openui5.org/api/sap.m.Popover) | | | [PopoverControllingCloseBehavior](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PopoverControllingCloseBehavior) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PopoverControllingCloseBehavior&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_094](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_094.clas.abap) **⁺** | | sap.m | [Popover](https://sdk.openui5.org/api/sap.m.Popover) | | | [PopoverNavCon](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/PopoverNavCon) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.PopoverNavCon&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_565](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_565.clas.abap) **⁺** | @@ -509,7 +509,7 @@ _Control metadata (Since, deprecation) from the OpenUI5 **1.152.0** `api.json`._ | sap.m | [~~UploadCollection~~](https://sdk.openui5.org/api/sap.m.UploadCollection) | | 1.88 — replaced by sap.m.upload.UploadSet | [UploadCollectionSortingFiltering](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadCollectionSortingFiltering) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadCollectionSortingFiltering&sap-ui-xx-sample-lib=sap.m) | ✗ | | sap.m | [~~UploadCollection~~](https://sdk.openui5.org/api/sap.m.UploadCollection) | | 1.88 — replaced by sap.m.upload.UploadSet | [UploadCollectionVersioning](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UploadCollectionVersioning) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UploadCollectionVersioning&sap-ui-xx-sample-lib=sap.m) | ✗ | | sap.m | [URLHelper](https://sdk.openui5.org/api/sap.m.URLHelper) | 1.10 | | [UrlHelper](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/UrlHelper) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.UrlHelper&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_084](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_084.clas.abap) | -| sap.m | [VariantManagement](https://sdk.openui5.org/api/sap.m.VariantManagement) | 1.103 | | [VariantManagement](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/VariantManagement) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.VariantManagement&sap-ui-xx-sample-lib=sap.m) | — | +| sap.m | [VariantManagement](https://sdk.openui5.org/api/sap.m.VariantManagement) | 1.103 | | [VariantManagement](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/VariantManagement) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.VariantManagement&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_651](https://github.com/abap2UI5/samples-controls/blob/main/src/02/01/z2ui5_cl_smpc_app_651.clas.abap) **⁺** | | sap.m | [ViewSettingsDialog](https://sdk.openui5.org/api/sap.m.ViewSettingsDialog) | 1.16 | | [ViewSettingsDialog](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ViewSettingsDialog) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ViewSettingsDialog&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_098](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_098.clas.abap) | | sap.m | [ViewSettingsDialog](https://sdk.openui5.org/api/sap.m.ViewSettingsDialog) | 1.16 | | [ViewSettingsDialogCustom](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ViewSettingsDialogCustom) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ViewSettingsDialogCustom&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_295](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_295.clas.abap) | | sap.m | [ViewSettingsDialog](https://sdk.openui5.org/api/sap.m.ViewSettingsDialog) | 1.16 | | [ViewSettingsDialogCustomFilterDetails](https://github.com/SAP/openui5/tree/master/src/sap.m/test/sap/m/demokit/sample/ViewSettingsDialogCustomFilterDetails) [↗](https://sdk.openui5.org/resources/sap/ui/documentation/sdk/index.html?sap-ui-xx-sample-id=sap.m.sample.ViewSettingsDialogCustomFilterDetails&sap-ui-xx-sample-lib=sap.m) | [z2ui5_cl_smpc_app_296](https://github.com/abap2UI5/samples-controls/blob/main/src/01/01/z2ui5_cl_smpc_app_296.clas.abap) | diff --git a/catalogue-derived.json b/catalogue-derived.json index 08499f92e..4cc937d0d 100644 --- a/catalogue-derived.json +++ b/catalogue-derived.json @@ -460,7 +460,7 @@ "z2ui5.cc.Storage" ], "counts": { - "ports": 641, + "ports": 689, "controls": 389 }, "ports": [ @@ -1086,6 +1086,54 @@ {"class":"z2ui5_cl_smpc_app_621","description":"In this example assisted input is provided with table-like suggestions where several columns can display more details.","minUi5":"1.89","needs":[{"type":"member-too-new","name":"sap.m.Input.enableTableAutoPopinMode","since":"1.89"}],"controls":[27,28,45,12,2,16],"controlCount":47}, {"class":"z2ui5_cl_smpc_app_622","description":"Input checks are handled via the validation of the data binding. In this example there are two inputs that are validated (a) while the user types and (b) when the user continues the process. If the built-in validation types are not sufficient you can create your own, like the email type in this example.","minUi5":"1.71","needs":[],"controls":[3,45,12,2,16],"controlCount":7}, {"class":"z2ui5_cl_smpc_app_623","description":"This example demonstrates the different input field states, e.g. disabled, editable, with value help and value help only.","minUi5":"1.71","needs":[],"controls":[45,12,163,76,18,2,16],"controlCount":13}, + {"class":"z2ui5_cl_smpc_app_624","description":"This sample demonstrates different combinations of types, shapes, and sizes of the Avatar.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_625","description":"This sample demonstrates toggling of Avatar Active state, when a User menu is opened/closed.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_626","description":"This sample demonstrates different badge icon colors of the Avatar.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_627","description":"This sample demonstrates different badge value states of the Avatar.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_628","description":"This sample demonstrates different combinations of types, shapes, and sizes of the Avatar with visual affordance.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_629","description":"Demonstrates the IllustratedMessage's 'enableVerticalResponsiveness' property.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_630","description":"Shows how to import a Custom Illustration from an npm package into a UI5 application for usage with IllustratedMessage.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_631","description":"IllustratedMessage as content of sap.f.Card. 'NoActivities' illustration type is being used for the Illustrated Message.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_632","description":"IllustratedMessage as content of sap.f.Card. 'NoEmail' illustration type is being used for the Illustrated Message.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_633","description":"IllustratedMessage as content of sap.m.Dialog.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_634","description":"The available illustrations are from the default ('sapIllus') illustration set.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_635","description":"The available properties of the IllustratedMessage are configurable in this sample. The available illustrations are from the 'custom' illustration set.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_636","description":"The available properties of the IllustratedMessage are configurable in this sample. The available illustrations are from the 'tnt' illustration set.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_637","description":"The available illustrations are from the default illustration set with the use of the 'src' property.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_638","description":"All applications that require user sign-in should employ a mechanism for automating user sign-out. When the inactivity is about to reach that threshold, a session timeout dialog appears automatically to inform the user.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_639","description":"The dynamic date range is a control that offers a choice of absolute and relative dates, using different offset from the current date. The list of values offered must be defined by the application.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_640","description":"This example shows the Dynamic Date Range control with Middle Eastern calendar week numbering.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_641","description":"This example shows Dynamic Date Range which is opened by another control.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_642","description":"This example shows the Dynamic Date Range control with custom options for interval or date selection.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_643","description":"The ExpandableText control can be used to display a larger texts inside a table, list or form.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_644","description":"Dialog & Popover with a sap.m.P13nContainer as content.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_645","description":"Responsive Table using the personalization Engine","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_646","description":"Filtering using the personalization Engine","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_647","description":"GridList using the personalization Engine","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_648","description":"Grid Table using the personalization Engine","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_649","description":"Personalization for Reponsive Table using multiple SelectionControllers","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_650","description":"Dialog with sap.m.p13n/* Panels","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_651","description":"VariantManagement with dedicated items","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_652","description":"This example demonstrates the usage of fileNameValidationConfig property to configure file name validation for renaming a file.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_653","description":"This example showcases how to display custom page content for non supported file types in the FilePreviewDialog control. The custom page content is displayed when the user tries to preview a file that is not supported by the FilePreviewDialog control. This sample demonstrates usage of customPageConentHandler property as a callback function to display custom page content.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_654","description":"This example demonstrates the usage of UploadSetwithTable plugin for grid table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_655","description":"This example demonstrates the usage of multiple plugin instances with multiple tables. The plugin instances are created for each table and the uploaded files are displayed in their respective tables.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_656","description":"This example demonstrates usage of itemValidationHandler callback to leverage additional validations and configurations for the items that are to be uploaded, and also the manual trigger of the upload process. The user input can be captured for each file with the help of the user dialog implemented at the application controller, before its upload.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_657","description":"This example showcases how uploaded files can be previewed with FilePreviewDialog control and its related configuration. UploadSetwithTable plugin creates and uses default instance of FilePreviewDialog, if not defined.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_658","description":"This example demonstrates the progress or termination of the items that are being uploaded. The upload progress is displayed for each item that is being uploaded. The users can terminate the upload process at any time.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_659","description":"This example demonstrates the usage of UploadSetwithTable plugin for responsive table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_660","description":"This example demonstrates the usage of UploadSetwithTable plugin for tree table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_661","description":"This example demonstrates the usage of UploadSetwithTable plugin with a tree table featuring folder hierarchy, folder creation, folder uploads, folder navigation with breadcrumbs and folder management","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_662","description":"This sample demonstrates the different group types and item sizes of the AvatarGroup control.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_663","description":"Demonstrates the basic usage of Side Panel.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_664","description":"Demonstrates the usage of Side Panel with overflow menu on desktop and tablet devices.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_665","description":"Demonstrates the usage of resizable Side Panel.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_666","description":"This sample demonstrates the usage of Product Switch Item with imageSrc, configurable by the app developer.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_667","description":"A basic Hero Banner with a header text and overline text.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_668","description":"Demonstrates the three columnsRatio options: single column (no endContent), Equal, and FirstWider.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_669","description":"Demonstrates actionsPlacement and headerBlockPlacement properties for controlling the position of the header and actions.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_670","description":"Demonstrates the use of sap.ui.integration.widgets.Card inside both the startContent (default slot) and endContent aggregations of the Hero Banner.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_671","description":"A collection of common Hero Banner use cases: header actions only, content with actions, actions below header, and header at bottom.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, {"class":"z2ui5_cl_smpc_demo_001","description":"","minUi5":"1.71","needs":[],"controls":[247,248,229,230,40,3,27,28,68,69,58,19,11,73,74,106,12,1,81,30,31,83,5,46,205,6,333,32,7,20,21,8,9,56,2,16,26],"controlCount":77}, {"class":"z2ui5_cl_smpc_demo_002","description":"","minUi5":"1.71","needs":[],"controls":[236,239,243,246,229,230,40,3,27,28,73,74,55,12,13,1,387,81,30,100,31,83,4,52,5,6,32,7,20,21,8,9,114,115,116,107,2,61,16,26],"controlCount":88}, {"class":"z2ui5_cl_smpc_demo_003","description":"","minUi5":"1.71","needs":[],"controls":[36,38,3,12,175,291,176,289,171,14,178,179,265,180,20,9,15,2,16,177,292],"controlCount":35}, diff --git a/catalogue.json b/catalogue.json index 282b6e651..6aa3ec114 100644 --- a/catalogue.json +++ b/catalogue.json @@ -25,11 +25,11 @@ }, "ui5Snapshot": "1.152.0", "counts": { - "entries": 641, + "entries": 689, "byStatus": { "checked": 59, "reviewed": 355, - "generated": 208, + "generated": 256, "demoapp": 5, "collection": 14 } @@ -657,6 +657,54 @@ {"class":"z2ui5_cl_smpc_app_621","file":"src/02/01/z2ui5_cl_smpc_app_621.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.InputAssistedTabularSuggestions","entity":"sap.m.Input","title":"Input - Assisted Tabular Suggestions","summary":"In this example assisted input is provided with table-like suggestions where several columns can display more details.","keywords":"input sap.m inputassistedtabularsuggestions verticallayout column label columnlistitem","status":"generated","deviations":["NOTE","POST_171"]}, {"class":"z2ui5_cl_smpc_app_622","file":"src/01/01/z2ui5_cl_smpc_app_622.clas.abap","category":"src/01","library":"sap.m","sample":"sap.m.sample.InputChecked","entity":"sap.m.Input","title":"Input - Checked","summary":"Input checks are handled via the validation of the data binding. In this example there are two inputs that are validated (a) while the user types and (b) when the user continues the process.","keywords":"input sap.m inputchecked verticallayout label button","status":"generated","deviations":["IMPROVISED","NOTE"]}, {"class":"z2ui5_cl_smpc_app_623","file":"src/01/01/z2ui5_cl_smpc_app_623.clas.abap","category":"src/01","library":"sap.m","sample":"sap.m.sample.InputStates","entity":"sap.m.Input","title":"Input - States","summary":"This example demonstrates the different input field states, e.g. disabled, editable, with value help and value help only.","keywords":"input sap.m inputstates verticallayout label selectdialog standardlistitem","status":"generated","deviations":["NOTE"]}, + {"class":"z2ui5_cl_smpc_app_624","file":"src/02/01/z2ui5_cl_smpc_app_624.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.Avatar","entity":"sap.m.Avatar","title":"Avatar","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_625","file":"src/02/01/z2ui5_cl_smpc_app_625.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.AvatarActiveState","entity":"sap.m.Avatar","title":"Avatar with toggling of Active state","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_626","file":"src/02/01/z2ui5_cl_smpc_app_626.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.AvatarBadgeIconColor","entity":"sap.m.Avatar","title":"Avatar with Badge Icon Color","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_627","file":"src/02/01/z2ui5_cl_smpc_app_627.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.AvatarValueState","entity":"sap.m.Avatar","title":"Avatar with badgeValueState","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_628","file":"src/02/01/z2ui5_cl_smpc_app_628.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.AvatarWithAffordance","entity":"sap.m.Avatar","title":"Avatar with Visual Affordance","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_629","file":"src/02/01/z2ui5_cl_smpc_app_629.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageEVR","entity":"sap.m.IllustratedMessage","title":"Illustrated Message Enable Vertical Responsiveness","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_630","file":"src/02/01/z2ui5_cl_smpc_app_630.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInAppCustom","entity":"sap.m.IllustratedMessage","title":"A demo application that imports a Custom Illustration Set from an npm package","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_631","file":"src/02/01/z2ui5_cl_smpc_app_631.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInCardNoActivities","entity":"sap.m.IllustratedMessage","title":"'NoActivities' Illustrated Message in a Card","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_632","file":"src/02/01/z2ui5_cl_smpc_app_632.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInCardNoEmail","entity":"sap.m.IllustratedMessage","title":"'NoEmail' Illustrated Message in a Card","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_633","file":"src/02/01/z2ui5_cl_smpc_app_633.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInDialog","entity":"sap.m.IllustratedMessage","title":"Illustrated Message in a Dialog","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_634","file":"src/02/01/z2ui5_cl_smpc_app_634.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInPage","entity":"sap.m.IllustratedMessage","title":"Default Illustration Set (sapIllus)","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_635","file":"src/02/01/z2ui5_cl_smpc_app_635.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInPageCustom","entity":"sap.m.IllustratedMessage","title":"Illustrated Message in a Page with Configurable Properties (Custom Illustration Set)","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_636","file":"src/02/01/z2ui5_cl_smpc_app_636.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInPageTNT","entity":"sap.m.IllustratedMessage","title":"Illustrated Message in a Page with Configurable Properties (TNT Illustration Set)","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_637","file":"src/02/01/z2ui5_cl_smpc_app_637.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInPageWithURI","entity":"sap.m.IllustratedMessage","title":"Illustrative style illustrations using the 'src' property","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_638","file":"src/02/01/z2ui5_cl_smpc_app_638.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageSessionTimeout","entity":"sap.m.IllustratedMessage","title":"Illustrated Message Session Timeout","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_639","file":"src/02/01/z2ui5_cl_smpc_app_639.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.DynamicDateRange","entity":"sap.m.DynamicDateRange","title":"Dynamic Date Range","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_640","file":"src/02/01/z2ui5_cl_smpc_app_640.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.DynamicDateRangeAndCalendarWeekNumbering","entity":"sap.m.DynamicDateRange","title":"Dynamic Date Range with calendarWeekNumbering","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_641","file":"src/02/01/z2ui5_cl_smpc_app_641.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.DynamicDateRangeHidden","entity":"sap.m.DynamicDateRange","title":"Dynamic Date Range - Open by Another Control","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_642","file":"src/02/01/z2ui5_cl_smpc_app_642.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.DynamicDateRangeWithCustomOptions","entity":"sap.m.DynamicDateRange","title":"Dynamic Date Range with Custom Options","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_643","file":"src/02/01/z2ui5_cl_smpc_app_643.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.ExpandableText","entity":"sap.m.ExpandableText","title":"Expandable Text","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_644","file":"src/02/01/z2ui5_cl_smpc_app_644.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.Container","entity":"sap.m.p13n.Container","title":"p13n.Container usage in a Dialog/Popover","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_645","file":"src/02/01/z2ui5_cl_smpc_app_645.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.Engine","entity":"sap.m.p13n.Engine","title":"Personalization for responsive table","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_646","file":"src/02/01/z2ui5_cl_smpc_app_646.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.EngineCustomFilters","entity":"sap.m.p13n.Engine","title":"Personalization implementing custom filter controls","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_647","file":"src/02/01/z2ui5_cl_smpc_app_647.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.EngineGridList","entity":"sap.m.p13n.Engine","title":"Personalization for grid list","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_648","file":"src/02/01/z2ui5_cl_smpc_app_648.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.EngineGridTable","entity":"sap.m.p13n.Engine","title":"Personalization for grid table","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_649","file":"src/02/01/z2ui5_cl_smpc_app_649.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.EngineMultipleController","entity":"sap.m.p13n.Engine","title":"Personalization with multiple SelectionControllers","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_650","file":"src/02/01/z2ui5_cl_smpc_app_650.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.Popup","entity":"sap.m.p13n.Popup","title":"p13n.Popup usage","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_651","file":"src/02/01/z2ui5_cl_smpc_app_651.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.VariantManagement","entity":"sap.m.VariantManagement","title":"VariantManagement using dedicated items","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_652","file":"src/02/01/z2ui5_cl_smpc_app_652.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.FileNameValidationSample","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - File Name validation configuration","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_653","file":"src/02/01/z2ui5_cl_smpc_app_653.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.FilePreviewCustomPageContent","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - File Preview with Custom Page Content for non supported file types","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_654","file":"src/02/01/z2ui5_cl_smpc_app_654.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.GridTableSimple","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Grid Table (sap.ui.table.Table)","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_655","file":"src/02/01/z2ui5_cl_smpc_app_655.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.MultiplePluginInstances","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - Multiple plugin instances with multiple tables","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_656","file":"src/02/01/z2ui5_cl_smpc_app_656.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFileDialogs","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - File upload with user dialogs","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_657","file":"src/02/01/z2ui5_cl_smpc_app_657.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFilePreview","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - File Preview","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_658","file":"src/02/01/z2ui5_cl_smpc_app_658.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableProgressIndicator","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - Upload Progress and Upload Termination","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_659","file":"src/02/01/z2ui5_cl_smpc_app_659.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableSimple","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table)","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_660","file":"src/02/01/z2ui5_cl_smpc_app_660.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.TreeTableSimple","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Tree Table (sap.ui.table.TreeTable)","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_661","file":"src/02/01/z2ui5_cl_smpc_app_661.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.TreeTableWithFolderHierarchy","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Tree Table with folder hierarchy & folder uploads","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_662","file":"src/02/04/z2ui5_cl_smpc_app_662.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.AvatarGroup","entity":"sap.f.AvatarGroup","title":"Avatar Group","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_663","file":"src/02/04/z2ui5_cl_smpc_app_663.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.SidePanel","entity":"sap.f.SidePanel","title":"Side Panel","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_664","file":"src/02/04/z2ui5_cl_smpc_app_664.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.SidePanelOverflow","entity":"sap.f.SidePanel","title":"Side Panel with overflow menu","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_665","file":"src/02/04/z2ui5_cl_smpc_app_665.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.SidePanelResizable","entity":"sap.f.SidePanel","title":"Resizable Side Panel","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_666","file":"src/02/04/z2ui5_cl_smpc_app_666.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.ProductSwitchItemWithImageSrc","entity":"sap.f.ProductSwitch","title":"Product Switch with imageSrc","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_667","file":"src/02/04/z2ui5_cl_smpc_app_667.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerBasic","entity":"sap.f.HeroBanner","title":"Hero Banner - Basic","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_668","file":"src/02/04/z2ui5_cl_smpc_app_668.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerColumnsRatio","entity":"sap.f.HeroBanner","title":"Hero Banner - Columns Ratio","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_669","file":"src/02/04/z2ui5_cl_smpc_app_669.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerHeaderBlockAndActionsPlacement","entity":"sap.f.HeroBanner","title":"Hero Banner - Header Block and Actions Placement","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_670","file":"src/02/04/z2ui5_cl_smpc_app_670.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerIntegrationCard","entity":"sap.f.HeroBanner","title":"Hero Banner - Integration Card","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_671","file":"src/02/04/z2ui5_cl_smpc_app_671.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerUseCases","entity":"sap.f.HeroBanner","title":"Hero Banner - Use Cases","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, {"class":"z2ui5_cl_smpc_demo_001","file":"src/04/z2ui5_cl_smpc_demo_001.clas.abap","category":"src/04","library":"sap.m","sample":"","entity":"","title":"Manage Products","summary":"Created with the 'Worklist App' tutorial. - the UI5 demo app \"Manage Products\", rebuilt as one self-contained abap2UI5 class.","keywords":"manage products app title icontabbar icontabfilter icontabseparator table toolbar toolbarspacer searchfield column","status":"demoapp","deviations":[]}, {"class":"z2ui5_cl_smpc_demo_002","file":"src/04/z2ui5_cl_smpc_demo_002.clas.abap","category":"src/04","library":"sap.m","sample":"","entity":"","title":"Browse Orders","summary":"Master-detail app for browsing orders. - the UI5 demo app \"Browse Orders\", rebuilt as one self-contained abap2UI5 class.","keywords":"browse orders app flexiblecolumnlayout viewsettingsdialog viewsettingsfilteritem viewsettingsitem title list toolbar overflowtoolbar searchfield","status":"demoapp","deviations":[]}, {"class":"z2ui5_cl_smpc_demo_003","file":"src/04/z2ui5_cl_smpc_demo_003.clas.abap","category":"src/04","library":"sap.m","sample":"","entity":"","title":"Team Calendar","summary":"Calendar demo app for team and team members. - the UI5 demo app \"Team Calendar\", rebuilt as one self-contained abap2UI5 class.","keywords":"team calendar app dynamicpagetitle title verticallayout responsivepopover planningcalendarlegend calendarlegenditem planningcalendar select button","status":"demoapp","deviations":[]}, diff --git a/meta/z2ui5_cl_smpc_app_624.json b/meta/z2ui5_cl_smpc_app_624.json new file mode 100644 index 000000000..e8c721fb1 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_624.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_624", + "sample": "sap.m.sample.Avatar", + "entity": "sap.m.Avatar", + "file": "src/02/01/z2ui5_cl_smpc_app_624.clas.abap", + "batch": "b52", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_625.json b/meta/z2ui5_cl_smpc_app_625.json new file mode 100644 index 000000000..47b491de8 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_625.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_625", + "sample": "sap.m.sample.AvatarActiveState", + "entity": "sap.m.Avatar", + "file": "src/02/01/z2ui5_cl_smpc_app_625.clas.abap", + "batch": "b52", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_626.json b/meta/z2ui5_cl_smpc_app_626.json new file mode 100644 index 000000000..c65f0865a --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_626.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_626", + "sample": "sap.m.sample.AvatarBadgeIconColor", + "entity": "sap.m.Avatar", + "file": "src/02/01/z2ui5_cl_smpc_app_626.clas.abap", + "batch": "b52", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_627.json b/meta/z2ui5_cl_smpc_app_627.json new file mode 100644 index 000000000..c183c376b --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_627.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_627", + "sample": "sap.m.sample.AvatarValueState", + "entity": "sap.m.Avatar", + "file": "src/02/01/z2ui5_cl_smpc_app_627.clas.abap", + "batch": "b52", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_628.json b/meta/z2ui5_cl_smpc_app_628.json new file mode 100644 index 000000000..13c2fb55a --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_628.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_628", + "sample": "sap.m.sample.AvatarWithAffordance", + "entity": "sap.m.Avatar", + "file": "src/02/01/z2ui5_cl_smpc_app_628.clas.abap", + "batch": "b52", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_629.json b/meta/z2ui5_cl_smpc_app_629.json new file mode 100644 index 000000000..4c06fb9be --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_629.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_629", + "sample": "sap.m.sample.IllustratedMessageEVR", + "entity": "sap.m.IllustratedMessage", + "file": "src/02/01/z2ui5_cl_smpc_app_629.clas.abap", + "batch": "b53", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.IllustratedMessage control (since UI5 1.98) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.98." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_630.json b/meta/z2ui5_cl_smpc_app_630.json new file mode 100644 index 000000000..828cf8ba0 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_630.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_630", + "sample": "sap.m.sample.IllustratedMessageInAppCustom", + "entity": "sap.m.IllustratedMessage", + "file": "src/02/01/z2ui5_cl_smpc_app_630.clas.abap", + "batch": "b53", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.IllustratedMessage control (since UI5 1.98) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.98." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_631.json b/meta/z2ui5_cl_smpc_app_631.json new file mode 100644 index 000000000..8662f8f3e --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_631.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_631", + "sample": "sap.m.sample.IllustratedMessageInCardNoActivities", + "entity": "sap.m.IllustratedMessage", + "file": "src/02/01/z2ui5_cl_smpc_app_631.clas.abap", + "batch": "b53", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.IllustratedMessage control (since UI5 1.98) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.98." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_632.json b/meta/z2ui5_cl_smpc_app_632.json new file mode 100644 index 000000000..5b679a1a0 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_632.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_632", + "sample": "sap.m.sample.IllustratedMessageInCardNoEmail", + "entity": "sap.m.IllustratedMessage", + "file": "src/02/01/z2ui5_cl_smpc_app_632.clas.abap", + "batch": "b53", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.IllustratedMessage control (since UI5 1.98) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.98." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_633.json b/meta/z2ui5_cl_smpc_app_633.json new file mode 100644 index 000000000..eb4937a5e --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_633.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_633", + "sample": "sap.m.sample.IllustratedMessageInDialog", + "entity": "sap.m.IllustratedMessage", + "file": "src/02/01/z2ui5_cl_smpc_app_633.clas.abap", + "batch": "b53", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.IllustratedMessage control (since UI5 1.98) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.98." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_634.json b/meta/z2ui5_cl_smpc_app_634.json new file mode 100644 index 000000000..e3703776b --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_634.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_634", + "sample": "sap.m.sample.IllustratedMessageInPage", + "entity": "sap.m.IllustratedMessage", + "file": "src/02/01/z2ui5_cl_smpc_app_634.clas.abap", + "batch": "b53", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.IllustratedMessage control (since UI5 1.98) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.98." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_635.json b/meta/z2ui5_cl_smpc_app_635.json new file mode 100644 index 000000000..c07cccc9d --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_635.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_635", + "sample": "sap.m.sample.IllustratedMessageInPageCustom", + "entity": "sap.m.IllustratedMessage", + "file": "src/02/01/z2ui5_cl_smpc_app_635.clas.abap", + "batch": "b53", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.IllustratedMessage control (since UI5 1.98) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.98." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_636.json b/meta/z2ui5_cl_smpc_app_636.json new file mode 100644 index 000000000..afab766e4 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_636.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_636", + "sample": "sap.m.sample.IllustratedMessageInPageTNT", + "entity": "sap.m.IllustratedMessage", + "file": "src/02/01/z2ui5_cl_smpc_app_636.clas.abap", + "batch": "b53", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.IllustratedMessage control (since UI5 1.98) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.98." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_637.json b/meta/z2ui5_cl_smpc_app_637.json new file mode 100644 index 000000000..2baafaf4d --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_637.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_637", + "sample": "sap.m.sample.IllustratedMessageInPageWithURI", + "entity": "sap.m.IllustratedMessage", + "file": "src/02/01/z2ui5_cl_smpc_app_637.clas.abap", + "batch": "b53", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.IllustratedMessage control (since UI5 1.98) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.98." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_638.json b/meta/z2ui5_cl_smpc_app_638.json new file mode 100644 index 000000000..3d06f3293 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_638.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_638", + "sample": "sap.m.sample.IllustratedMessageSessionTimeout", + "entity": "sap.m.IllustratedMessage", + "file": "src/02/01/z2ui5_cl_smpc_app_638.clas.abap", + "batch": "b53", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.IllustratedMessage control (since UI5 1.98) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.98." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_639.json b/meta/z2ui5_cl_smpc_app_639.json new file mode 100644 index 000000000..4a35126f8 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_639.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_639", + "sample": "sap.m.sample.DynamicDateRange", + "entity": "sap.m.DynamicDateRange", + "file": "src/02/01/z2ui5_cl_smpc_app_639.clas.abap", + "batch": "b54", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.DynamicDateRange control (since UI5 1.92.0) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.92.0." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_640.json b/meta/z2ui5_cl_smpc_app_640.json new file mode 100644 index 000000000..79f7ca1e0 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_640.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_640", + "sample": "sap.m.sample.DynamicDateRangeAndCalendarWeekNumbering", + "entity": "sap.m.DynamicDateRange", + "file": "src/02/01/z2ui5_cl_smpc_app_640.clas.abap", + "batch": "b54", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.DynamicDateRange control (since UI5 1.92.0) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.92.0." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_641.json b/meta/z2ui5_cl_smpc_app_641.json new file mode 100644 index 000000000..51a758257 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_641.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_641", + "sample": "sap.m.sample.DynamicDateRangeHidden", + "entity": "sap.m.DynamicDateRange", + "file": "src/02/01/z2ui5_cl_smpc_app_641.clas.abap", + "batch": "b54", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.DynamicDateRange control (since UI5 1.92.0) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.92.0." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_642.json b/meta/z2ui5_cl_smpc_app_642.json new file mode 100644 index 000000000..d843d6556 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_642.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_642", + "sample": "sap.m.sample.DynamicDateRangeWithCustomOptions", + "entity": "sap.m.DynamicDateRange", + "file": "src/02/01/z2ui5_cl_smpc_app_642.clas.abap", + "batch": "b54", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.DynamicDateRange control (since UI5 1.92.0) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.92.0." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_643.json b/meta/z2ui5_cl_smpc_app_643.json new file mode 100644 index 000000000..7265e80bf --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_643.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_643", + "sample": "sap.m.sample.ExpandableText", + "entity": "sap.m.ExpandableText", + "file": "src/02/01/z2ui5_cl_smpc_app_643.clas.abap", + "batch": "b54", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.ExpandableText control (since UI5 1.87) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.87." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_644.json b/meta/z2ui5_cl_smpc_app_644.json new file mode 100644 index 000000000..e1e0fa60e --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_644.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_644", + "sample": "sap.m.sample.p13n.Container", + "entity": "sap.m.p13n.Container", + "file": "src/02/01/z2ui5_cl_smpc_app_644.clas.abap", + "batch": "b55", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.p13n.Container control (since UI5 1.96) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.96." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_645.json b/meta/z2ui5_cl_smpc_app_645.json new file mode 100644 index 000000000..d1c10633a --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_645.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_645", + "sample": "sap.m.sample.p13n.Engine", + "entity": "sap.m.p13n.Engine", + "file": "src/02/01/z2ui5_cl_smpc_app_645.clas.abap", + "batch": "b55", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.p13n.Engine control (since UI5 1.104) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.104." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_646.json b/meta/z2ui5_cl_smpc_app_646.json new file mode 100644 index 000000000..28a4bb518 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_646.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_646", + "sample": "sap.m.sample.p13n.EngineCustomFilters", + "entity": "sap.m.p13n.Engine", + "file": "src/02/01/z2ui5_cl_smpc_app_646.clas.abap", + "batch": "b55", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.p13n.Engine control (since UI5 1.104) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.104." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_647.json b/meta/z2ui5_cl_smpc_app_647.json new file mode 100644 index 000000000..40325072b --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_647.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_647", + "sample": "sap.m.sample.p13n.EngineGridList", + "entity": "sap.m.p13n.Engine", + "file": "src/02/01/z2ui5_cl_smpc_app_647.clas.abap", + "batch": "b55", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.p13n.Engine control (since UI5 1.104) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.104." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_648.json b/meta/z2ui5_cl_smpc_app_648.json new file mode 100644 index 000000000..168a18e31 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_648.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_648", + "sample": "sap.m.sample.p13n.EngineGridTable", + "entity": "sap.m.p13n.Engine", + "file": "src/02/01/z2ui5_cl_smpc_app_648.clas.abap", + "batch": "b55", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.p13n.Engine control (since UI5 1.104) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.104." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_649.json b/meta/z2ui5_cl_smpc_app_649.json new file mode 100644 index 000000000..180e0c27e --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_649.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_649", + "sample": "sap.m.sample.p13n.EngineMultipleController", + "entity": "sap.m.p13n.Engine", + "file": "src/02/01/z2ui5_cl_smpc_app_649.clas.abap", + "batch": "b55", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.p13n.Engine control (since UI5 1.104) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.104." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_650.json b/meta/z2ui5_cl_smpc_app_650.json new file mode 100644 index 000000000..f186cf3be --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_650.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_650", + "sample": "sap.m.sample.p13n.Popup", + "entity": "sap.m.p13n.Popup", + "file": "src/02/01/z2ui5_cl_smpc_app_650.clas.abap", + "batch": "b55", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.p13n.Popup control (since UI5 1.97) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.97." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_651.json b/meta/z2ui5_cl_smpc_app_651.json new file mode 100644 index 000000000..dbe03f1c8 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_651.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_651", + "sample": "sap.m.sample.VariantManagement", + "entity": "sap.m.VariantManagement", + "file": "src/02/01/z2ui5_cl_smpc_app_651.clas.abap", + "batch": "b55", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.VariantManagement control (since UI5 1.103) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.103." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_652.json b/meta/z2ui5_cl_smpc_app_652.json new file mode 100644 index 000000000..518e529b8 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_652.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_652", + "sample": "sap.m.sample.UploadSetwithTablePlugin.FileNameValidationSample", + "entity": "sap.m.plugins.UploadSetwithTable", + "file": "src/02/01/z2ui5_cl_smpc_app_652.clas.abap", + "batch": "b56", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.124." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_653.json b/meta/z2ui5_cl_smpc_app_653.json new file mode 100644 index 000000000..1bd7110ff --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_653.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_653", + "sample": "sap.m.sample.UploadSetwithTablePlugin.FilePreviewCustomPageContent", + "entity": "sap.m.plugins.UploadSetwithTable", + "file": "src/02/01/z2ui5_cl_smpc_app_653.clas.abap", + "batch": "b56", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.124." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_654.json b/meta/z2ui5_cl_smpc_app_654.json new file mode 100644 index 000000000..936101c26 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_654.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_654", + "sample": "sap.m.sample.UploadSetwithTablePlugin.GridTableSimple", + "entity": "sap.m.plugins.UploadSetwithTable", + "file": "src/02/01/z2ui5_cl_smpc_app_654.clas.abap", + "batch": "b56", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.124." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_655.json b/meta/z2ui5_cl_smpc_app_655.json new file mode 100644 index 000000000..735f3d5e1 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_655.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_655", + "sample": "sap.m.sample.UploadSetwithTablePlugin.MultiplePluginInstances", + "entity": "sap.m.plugins.UploadSetwithTable", + "file": "src/02/01/z2ui5_cl_smpc_app_655.clas.abap", + "batch": "b56", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.124." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_656.json b/meta/z2ui5_cl_smpc_app_656.json new file mode 100644 index 000000000..a65b8dd0b --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_656.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_656", + "sample": "sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFileDialogs", + "entity": "sap.m.plugins.UploadSetwithTable", + "file": "src/02/01/z2ui5_cl_smpc_app_656.clas.abap", + "batch": "b56", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.124." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_657.json b/meta/z2ui5_cl_smpc_app_657.json new file mode 100644 index 000000000..8c5e605ba --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_657.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_657", + "sample": "sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFilePreview", + "entity": "sap.m.plugins.UploadSetwithTable", + "file": "src/02/01/z2ui5_cl_smpc_app_657.clas.abap", + "batch": "b56", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.124." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_658.json b/meta/z2ui5_cl_smpc_app_658.json new file mode 100644 index 000000000..d48b06b99 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_658.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_658", + "sample": "sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableProgressIndicator", + "entity": "sap.m.plugins.UploadSetwithTable", + "file": "src/02/01/z2ui5_cl_smpc_app_658.clas.abap", + "batch": "b56", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.124." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_659.json b/meta/z2ui5_cl_smpc_app_659.json new file mode 100644 index 000000000..b2ad2b646 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_659.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_659", + "sample": "sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableSimple", + "entity": "sap.m.plugins.UploadSetwithTable", + "file": "src/02/01/z2ui5_cl_smpc_app_659.clas.abap", + "batch": "b56", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.124." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_660.json b/meta/z2ui5_cl_smpc_app_660.json new file mode 100644 index 000000000..ec974135d --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_660.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_660", + "sample": "sap.m.sample.UploadSetwithTablePlugin.TreeTableSimple", + "entity": "sap.m.plugins.UploadSetwithTable", + "file": "src/02/01/z2ui5_cl_smpc_app_660.clas.abap", + "batch": "b56", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.124." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_661.json b/meta/z2ui5_cl_smpc_app_661.json new file mode 100644 index 000000000..a6bb2f74c --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_661.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_661", + "sample": "sap.m.sample.UploadSetwithTablePlugin.TreeTableWithFolderHierarchy", + "entity": "sap.m.plugins.UploadSetwithTable", + "file": "src/02/01/z2ui5_cl_smpc_app_661.clas.abap", + "batch": "b56", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.124." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_662.json b/meta/z2ui5_cl_smpc_app_662.json new file mode 100644 index 000000000..5d5c74bed --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_662.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_662", + "sample": "sap.f.sample.AvatarGroup", + "entity": "sap.f.AvatarGroup", + "file": "src/02/04/z2ui5_cl_smpc_app_662.clas.abap", + "batch": "b49", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.f.AvatarGroup control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_663.json b/meta/z2ui5_cl_smpc_app_663.json new file mode 100644 index 000000000..e1a263d10 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_663.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_663", + "sample": "sap.f.sample.SidePanel", + "entity": "sap.f.SidePanel", + "file": "src/02/04/z2ui5_cl_smpc_app_663.clas.abap", + "batch": "b49", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.f.SidePanel control (since UI5 1.107) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.107." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_664.json b/meta/z2ui5_cl_smpc_app_664.json new file mode 100644 index 000000000..89210c213 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_664.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_664", + "sample": "sap.f.sample.SidePanelOverflow", + "entity": "sap.f.SidePanel", + "file": "src/02/04/z2ui5_cl_smpc_app_664.clas.abap", + "batch": "b49", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.f.SidePanel control (since UI5 1.107) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.107." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_665.json b/meta/z2ui5_cl_smpc_app_665.json new file mode 100644 index 000000000..70c4f7133 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_665.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_665", + "sample": "sap.f.sample.SidePanelResizable", + "entity": "sap.f.SidePanel", + "file": "src/02/04/z2ui5_cl_smpc_app_665.clas.abap", + "batch": "b49", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.f.SidePanel control (since UI5 1.107) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.107." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_666.json b/meta/z2ui5_cl_smpc_app_666.json new file mode 100644 index 000000000..3e4ff0eb5 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_666.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_666", + "sample": "sap.f.sample.ProductSwitchItemWithImageSrc", + "entity": "sap.f.ProductSwitch", + "file": "src/02/04/z2ui5_cl_smpc_app_666.clas.abap", + "batch": "b49", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.f.ProductSwitch control (since UI5 1.72) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.72." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_667.json b/meta/z2ui5_cl_smpc_app_667.json new file mode 100644 index 000000000..f9384596d --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_667.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_667", + "sample": "sap.f.sample.HeroBannerBasic", + "entity": "sap.f.HeroBanner", + "file": "src/02/04/z2ui5_cl_smpc_app_667.clas.abap", + "batch": "b50", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_668.json b/meta/z2ui5_cl_smpc_app_668.json new file mode 100644 index 000000000..0e3067b26 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_668.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_668", + "sample": "sap.f.sample.HeroBannerColumnsRatio", + "entity": "sap.f.HeroBanner", + "file": "src/02/04/z2ui5_cl_smpc_app_668.clas.abap", + "batch": "b50", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_669.json b/meta/z2ui5_cl_smpc_app_669.json new file mode 100644 index 000000000..ec68c44e2 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_669.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_669", + "sample": "sap.f.sample.HeroBannerHeaderBlockAndActionsPlacement", + "entity": "sap.f.HeroBanner", + "file": "src/02/04/z2ui5_cl_smpc_app_669.clas.abap", + "batch": "b50", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_670.json b/meta/z2ui5_cl_smpc_app_670.json new file mode 100644 index 000000000..73dc7db9d --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_670.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_670", + "sample": "sap.f.sample.HeroBannerIntegrationCard", + "entity": "sap.f.HeroBanner", + "file": "src/02/04/z2ui5_cl_smpc_app_670.clas.abap", + "batch": "b50", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152." + } + ] +} diff --git a/meta/z2ui5_cl_smpc_app_671.json b/meta/z2ui5_cl_smpc_app_671.json new file mode 100644 index 000000000..87c96fa87 --- /dev/null +++ b/meta/z2ui5_cl_smpc_app_671.json @@ -0,0 +1,19 @@ +{ + "class": "z2ui5_cl_smpc_app_671", + "sample": "sap.f.sample.HeroBannerUseCases", + "entity": "sap.f.HeroBanner", + "file": "src/02/04/z2ui5_cl_smpc_app_671.clas.abap", + "batch": "b50", + "audit": { + "frontend_action": false, + "event_t_arg": false + }, + "status": "generated", + "checked": null, + "deviations": [ + { + "type": "POST_171", + "what": "the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152." + } + ] +} diff --git a/src/02/01/z2ui5_cl_smpc_app_624.clas.abap b/src/02/01/z2ui5_cl_smpc_app_624.clas.abap new file mode 100644 index 000000000..5ab391b69 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_624.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_624 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_624 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/Avatar/*.view.xml 1:1 here (sap.m.Avatar) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `Avatar` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.Avatar` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_624.clas.xml b/src/02/01/z2ui5_cl_smpc_app_624.clas.xml new file mode 100644 index 000000000..cf813dc86 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_624.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_624 + E + sap.m - Avatar + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_625.clas.abap b/src/02/01/z2ui5_cl_smpc_app_625.clas.abap new file mode 100644 index 000000000..6aea48921 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_625.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_625 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_625 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/AvatarActiveState/*.view.xml 1:1 here (sap.m.Avatar) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `AvatarActiveState` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.AvatarActiveState` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_625.clas.xml b/src/02/01/z2ui5_cl_smpc_app_625.clas.xml new file mode 100644 index 000000000..7367c7447 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_625.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_625 + E + sap.m - AvatarActiveState + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_626.clas.abap b/src/02/01/z2ui5_cl_smpc_app_626.clas.abap new file mode 100644 index 000000000..f2df04eb9 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_626.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_626 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_626 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/AvatarBadgeIconColor/*.view.xml 1:1 here (sap.m.Avatar) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `AvatarBadgeIconColor` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.AvatarBadgeIconColor` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_626.clas.xml b/src/02/01/z2ui5_cl_smpc_app_626.clas.xml new file mode 100644 index 000000000..e779cfef8 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_626.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_626 + E + sap.m - AvatarBadgeIconColor + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_627.clas.abap b/src/02/01/z2ui5_cl_smpc_app_627.clas.abap new file mode 100644 index 000000000..4e856cb2f --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_627.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_627 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_627 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/AvatarValueState/*.view.xml 1:1 here (sap.m.Avatar) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `AvatarValueState` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.AvatarValueState` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_627.clas.xml b/src/02/01/z2ui5_cl_smpc_app_627.clas.xml new file mode 100644 index 000000000..a899e992c --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_627.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_627 + E + sap.m - AvatarValueState + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_628.clas.abap b/src/02/01/z2ui5_cl_smpc_app_628.clas.abap new file mode 100644 index 000000000..ffac5057a --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_628.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_628 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_628 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/AvatarWithAffordance/*.view.xml 1:1 here (sap.m.Avatar) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `AvatarWithAffordance` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.AvatarWithAffordance` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_628.clas.xml b/src/02/01/z2ui5_cl_smpc_app_628.clas.xml new file mode 100644 index 000000000..61e5fdf54 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_628.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_628 + E + sap.m - AvatarWithAffordance + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_629.clas.abap b/src/02/01/z2ui5_cl_smpc_app_629.clas.abap new file mode 100644 index 000000000..fcb3dee6d --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_629.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_629 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_629 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/IllustratedMessageEVR/*.view.xml 1:1 here (sap.m.IllustratedMessage) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `IllustratedMessageEVR` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.IllustratedMessageEVR` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_629.clas.xml b/src/02/01/z2ui5_cl_smpc_app_629.clas.xml new file mode 100644 index 000000000..5d9fb219a --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_629.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_629 + E + sap.m - IllustratedMessageEVR + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_630.clas.abap b/src/02/01/z2ui5_cl_smpc_app_630.clas.abap new file mode 100644 index 000000000..d46493dd1 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_630.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_630 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_630 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/IllustratedMessageInAppCustom/*.view.xml 1:1 here (sap.m.IllustratedMessage) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `IllustratedMessageInAppCustom` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.IllustratedMessageInAppCustom` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_630.clas.xml b/src/02/01/z2ui5_cl_smpc_app_630.clas.xml new file mode 100644 index 000000000..5bc8132f6 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_630.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_630 + E + sap.m - IllustratedMessageInAppCustom + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_631.clas.abap b/src/02/01/z2ui5_cl_smpc_app_631.clas.abap new file mode 100644 index 000000000..169ccab35 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_631.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_631 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_631 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/IllustratedMessageInCardNoActivities/*.view.xml 1:1 here (sap.m.IllustratedMessage) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `IllustratedMessageInCardNoActivities` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.IllustratedMessageInCardNoActivities` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_631.clas.xml b/src/02/01/z2ui5_cl_smpc_app_631.clas.xml new file mode 100644 index 000000000..d1dd38960 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_631.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_631 + E + sap.m - IllustratedMessageInCardNoActivities + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_632.clas.abap b/src/02/01/z2ui5_cl_smpc_app_632.clas.abap new file mode 100644 index 000000000..3f1c274fb --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_632.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_632 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_632 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/IllustratedMessageInCardNoEmail/*.view.xml 1:1 here (sap.m.IllustratedMessage) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `IllustratedMessageInCardNoEmail` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.IllustratedMessageInCardNoEmail` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_632.clas.xml b/src/02/01/z2ui5_cl_smpc_app_632.clas.xml new file mode 100644 index 000000000..1c23b43df --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_632.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_632 + E + sap.m - IllustratedMessageInCardNoEmail + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_633.clas.abap b/src/02/01/z2ui5_cl_smpc_app_633.clas.abap new file mode 100644 index 000000000..0a1136a36 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_633.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_633 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_633 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/IllustratedMessageInDialog/*.view.xml 1:1 here (sap.m.IllustratedMessage) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `IllustratedMessageInDialog` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.IllustratedMessageInDialog` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_633.clas.xml b/src/02/01/z2ui5_cl_smpc_app_633.clas.xml new file mode 100644 index 000000000..cf372a71c --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_633.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_633 + E + sap.m - IllustratedMessageInDialog + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_634.clas.abap b/src/02/01/z2ui5_cl_smpc_app_634.clas.abap new file mode 100644 index 000000000..86f06aabd --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_634.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_634 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_634 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/IllustratedMessageInPage/*.view.xml 1:1 here (sap.m.IllustratedMessage) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `IllustratedMessageInPage` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.IllustratedMessageInPage` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_634.clas.xml b/src/02/01/z2ui5_cl_smpc_app_634.clas.xml new file mode 100644 index 000000000..ffd79a44f --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_634.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_634 + E + sap.m - IllustratedMessageInPage + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_635.clas.abap b/src/02/01/z2ui5_cl_smpc_app_635.clas.abap new file mode 100644 index 000000000..9b4138262 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_635.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_635 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_635 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/IllustratedMessageInPageCustom/*.view.xml 1:1 here (sap.m.IllustratedMessage) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `IllustratedMessageInPageCustom` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.IllustratedMessageInPageCustom` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_635.clas.xml b/src/02/01/z2ui5_cl_smpc_app_635.clas.xml new file mode 100644 index 000000000..d8753602a --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_635.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_635 + E + sap.m - IllustratedMessageInPageCustom + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_636.clas.abap b/src/02/01/z2ui5_cl_smpc_app_636.clas.abap new file mode 100644 index 000000000..7afe20cfa --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_636.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_636 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_636 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/IllustratedMessageInPageTNT/*.view.xml 1:1 here (sap.m.IllustratedMessage) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `IllustratedMessageInPageTNT` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.IllustratedMessageInPageTNT` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_636.clas.xml b/src/02/01/z2ui5_cl_smpc_app_636.clas.xml new file mode 100644 index 000000000..1e5b7ed55 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_636.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_636 + E + sap.m - IllustratedMessageInPageTNT + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_637.clas.abap b/src/02/01/z2ui5_cl_smpc_app_637.clas.abap new file mode 100644 index 000000000..1e3f77d34 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_637.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_637 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_637 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/IllustratedMessageInPageWithURI/*.view.xml 1:1 here (sap.m.IllustratedMessage) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `IllustratedMessageInPageWithURI` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.IllustratedMessageInPageWithURI` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_637.clas.xml b/src/02/01/z2ui5_cl_smpc_app_637.clas.xml new file mode 100644 index 000000000..3c14e2ab7 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_637.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_637 + E + sap.m - IllustratedMessageInPageWithURI + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_638.clas.abap b/src/02/01/z2ui5_cl_smpc_app_638.clas.abap new file mode 100644 index 000000000..de05b7ac5 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_638.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_638 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_638 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/IllustratedMessageSessionTimeout/*.view.xml 1:1 here (sap.m.IllustratedMessage) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `IllustratedMessageSessionTimeout` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.IllustratedMessageSessionTimeout` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_638.clas.xml b/src/02/01/z2ui5_cl_smpc_app_638.clas.xml new file mode 100644 index 000000000..ad7192e72 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_638.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_638 + E + sap.m - IllustratedMessageSessionTimeout + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_639.clas.abap b/src/02/01/z2ui5_cl_smpc_app_639.clas.abap new file mode 100644 index 000000000..a699b112d --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_639.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_639 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_639 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/DynamicDateRange/*.view.xml 1:1 here (sap.m.DynamicDateRange) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `DynamicDateRange` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.DynamicDateRange` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_639.clas.xml b/src/02/01/z2ui5_cl_smpc_app_639.clas.xml new file mode 100644 index 000000000..2193dca83 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_639.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_639 + E + sap.m - DynamicDateRange + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_640.clas.abap b/src/02/01/z2ui5_cl_smpc_app_640.clas.abap new file mode 100644 index 000000000..b33d19640 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_640.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_640 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_640 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/DynamicDateRangeAndCalendarWeekNumbering/*.view.xml 1:1 here (sap.m.DynamicDateRange) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `DynamicDateRangeAndCalendarWeekNumbering` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.DynamicDateRangeAndCalendarWeekNumbering` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_640.clas.xml b/src/02/01/z2ui5_cl_smpc_app_640.clas.xml new file mode 100644 index 000000000..c4c79b6a3 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_640.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_640 + E + sap.m - DynamicDateRangeAndCalendarWeekNumbering + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_641.clas.abap b/src/02/01/z2ui5_cl_smpc_app_641.clas.abap new file mode 100644 index 000000000..2379b099c --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_641.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_641 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_641 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/DynamicDateRangeHidden/*.view.xml 1:1 here (sap.m.DynamicDateRange) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `DynamicDateRangeHidden` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.DynamicDateRangeHidden` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_641.clas.xml b/src/02/01/z2ui5_cl_smpc_app_641.clas.xml new file mode 100644 index 000000000..0cdf2cef1 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_641.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_641 + E + sap.m - DynamicDateRangeHidden + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_642.clas.abap b/src/02/01/z2ui5_cl_smpc_app_642.clas.abap new file mode 100644 index 000000000..40b8b620e --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_642.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_642 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_642 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/DynamicDateRangeWithCustomOptions/*.view.xml 1:1 here (sap.m.DynamicDateRange) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `DynamicDateRangeWithCustomOptions` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.DynamicDateRangeWithCustomOptions` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_642.clas.xml b/src/02/01/z2ui5_cl_smpc_app_642.clas.xml new file mode 100644 index 000000000..8af4b979a --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_642.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_642 + E + sap.m - DynamicDateRangeWithCustomOptions + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_643.clas.abap b/src/02/01/z2ui5_cl_smpc_app_643.clas.abap new file mode 100644 index 000000000..30cb527f0 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_643.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_643 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_643 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/ExpandableText/*.view.xml 1:1 here (sap.m.ExpandableText) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `ExpandableText` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.ExpandableText` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_643.clas.xml b/src/02/01/z2ui5_cl_smpc_app_643.clas.xml new file mode 100644 index 000000000..fab1681fd --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_643.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_643 + E + sap.m - ExpandableText + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_644.clas.abap b/src/02/01/z2ui5_cl_smpc_app_644.clas.abap new file mode 100644 index 000000000..6201e1fcb --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_644.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_644 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_644 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/p13n.Container/*.view.xml 1:1 here (sap.m.p13n.Container) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `p13n.Container` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.p13n.Container` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_644.clas.xml b/src/02/01/z2ui5_cl_smpc_app_644.clas.xml new file mode 100644 index 000000000..bfeb91508 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_644.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_644 + E + sap.m - p13n.Container + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_645.clas.abap b/src/02/01/z2ui5_cl_smpc_app_645.clas.abap new file mode 100644 index 000000000..12e9f26cb --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_645.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_645 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_645 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/p13n.Engine/*.view.xml 1:1 here (sap.m.p13n.Engine) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `p13n.Engine` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.p13n.Engine` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_645.clas.xml b/src/02/01/z2ui5_cl_smpc_app_645.clas.xml new file mode 100644 index 000000000..1640ba2ba --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_645.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_645 + E + sap.m - p13n.Engine + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_646.clas.abap b/src/02/01/z2ui5_cl_smpc_app_646.clas.abap new file mode 100644 index 000000000..ea4dd824e --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_646.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_646 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_646 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/p13n.EngineCustomFilters/*.view.xml 1:1 here (sap.m.p13n.Engine) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `p13n.EngineCustomFilters` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.p13n.EngineCustomFilters` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_646.clas.xml b/src/02/01/z2ui5_cl_smpc_app_646.clas.xml new file mode 100644 index 000000000..2fdd1bb6d --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_646.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_646 + E + sap.m - p13n.EngineCustomFilters + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_647.clas.abap b/src/02/01/z2ui5_cl_smpc_app_647.clas.abap new file mode 100644 index 000000000..0e0a5e218 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_647.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_647 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_647 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/p13n.EngineGridList/*.view.xml 1:1 here (sap.m.p13n.Engine) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `p13n.EngineGridList` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.p13n.EngineGridList` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_647.clas.xml b/src/02/01/z2ui5_cl_smpc_app_647.clas.xml new file mode 100644 index 000000000..47bd6728b --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_647.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_647 + E + sap.m - p13n.EngineGridList + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_648.clas.abap b/src/02/01/z2ui5_cl_smpc_app_648.clas.abap new file mode 100644 index 000000000..1d9cf8089 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_648.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_648 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_648 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/p13n.EngineGridTable/*.view.xml 1:1 here (sap.m.p13n.Engine) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `p13n.EngineGridTable` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.p13n.EngineGridTable` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_648.clas.xml b/src/02/01/z2ui5_cl_smpc_app_648.clas.xml new file mode 100644 index 000000000..b65cd62b4 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_648.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_648 + E + sap.m - p13n.EngineGridTable + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_649.clas.abap b/src/02/01/z2ui5_cl_smpc_app_649.clas.abap new file mode 100644 index 000000000..493d0be89 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_649.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_649 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_649 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/p13n.EngineMultipleController/*.view.xml 1:1 here (sap.m.p13n.Engine) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `p13n.EngineMultipleController` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.p13n.EngineMultipleController` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_649.clas.xml b/src/02/01/z2ui5_cl_smpc_app_649.clas.xml new file mode 100644 index 000000000..482ca013f --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_649.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_649 + E + sap.m - p13n.EngineMultipleController + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_650.clas.abap b/src/02/01/z2ui5_cl_smpc_app_650.clas.abap new file mode 100644 index 000000000..67a65b7d1 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_650.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_650 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_650 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/p13n.Popup/*.view.xml 1:1 here (sap.m.p13n.Popup) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `p13n.Popup` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.p13n.Popup` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_650.clas.xml b/src/02/01/z2ui5_cl_smpc_app_650.clas.xml new file mode 100644 index 000000000..9b7fa387f --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_650.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_650 + E + sap.m - p13n.Popup + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_651.clas.abap b/src/02/01/z2ui5_cl_smpc_app_651.clas.abap new file mode 100644 index 000000000..e358a7748 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_651.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_651 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_651 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/VariantManagement/*.view.xml 1:1 here (sap.m.VariantManagement) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `VariantManagement` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.VariantManagement` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_651.clas.xml b/src/02/01/z2ui5_cl_smpc_app_651.clas.xml new file mode 100644 index 000000000..7b0964e06 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_651.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_651 + E + sap.m - VariantManagement + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_652.clas.abap b/src/02/01/z2ui5_cl_smpc_app_652.clas.abap new file mode 100644 index 000000000..58f64ddde --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_652.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_652 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_652 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.FileNameValidationSample/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `UploadSetwithTablePlugin.FileNameValidationSample` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.FileNameValidationSample` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_652.clas.xml b/src/02/01/z2ui5_cl_smpc_app_652.clas.xml new file mode 100644 index 000000000..a1d9df9b6 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_652.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_652 + E + sap.m - UploadSetwithTablePlugin.FileNameValidationSample + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_653.clas.abap b/src/02/01/z2ui5_cl_smpc_app_653.clas.abap new file mode 100644 index 000000000..93af8eb0c --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_653.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_653 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_653 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.FilePreviewCustomPageContent/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `UploadSetwithTablePlugin.FilePreviewCustomPageContent` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.FilePreviewCustomPageContent` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_653.clas.xml b/src/02/01/z2ui5_cl_smpc_app_653.clas.xml new file mode 100644 index 000000000..6e7d7ef63 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_653.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_653 + E + sap.m... + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_654.clas.abap b/src/02/01/z2ui5_cl_smpc_app_654.clas.abap new file mode 100644 index 000000000..af8c06a1c --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_654.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_654 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_654 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.GridTableSimple/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `UploadSetwithTablePlugin.GridTableSimple` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.GridTableSimple` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_654.clas.xml b/src/02/01/z2ui5_cl_smpc_app_654.clas.xml new file mode 100644 index 000000000..803ceb07c --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_654.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_654 + E + sap.m - UploadSetwithTablePlugin.GridTableSimple + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_655.clas.abap b/src/02/01/z2ui5_cl_smpc_app_655.clas.abap new file mode 100644 index 000000000..bd6a94c17 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_655.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_655 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_655 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.MultiplePluginInstances/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `UploadSetwithTablePlugin.MultiplePluginInstances` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.MultiplePluginInstances` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_655.clas.xml b/src/02/01/z2ui5_cl_smpc_app_655.clas.xml new file mode 100644 index 000000000..1f5e221fc --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_655.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_655 + E + sap.m - UploadSetwithTablePlugin.MultiplePluginInstances + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_656.clas.abap b/src/02/01/z2ui5_cl_smpc_app_656.clas.abap new file mode 100644 index 000000000..22e03a470 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_656.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_656 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_656 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFileDialogs/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `UploadSetwithTablePlugin.ResponsiveTableFileDialogs` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFileDialogs` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_656.clas.xml b/src/02/01/z2ui5_cl_smpc_app_656.clas.xml new file mode 100644 index 000000000..c7e0c90d3 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_656.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_656 + E + sap.m - UploadSetwithTablePlugin.ResponsiveTableFileDialogs + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_657.clas.abap b/src/02/01/z2ui5_cl_smpc_app_657.clas.abap new file mode 100644 index 000000000..f37fb27c9 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_657.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_657 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_657 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFilePreview/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `UploadSetwithTablePlugin.ResponsiveTableFilePreview` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFilePreview` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_657.clas.xml b/src/02/01/z2ui5_cl_smpc_app_657.clas.xml new file mode 100644 index 000000000..cc0a15118 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_657.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_657 + E + sap.m - UploadSetwithTablePlugin.ResponsiveTableFilePreview + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_658.clas.abap b/src/02/01/z2ui5_cl_smpc_app_658.clas.abap new file mode 100644 index 000000000..f902789e1 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_658.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_658 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_658 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableProgressIndicator/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `UploadSetwithTablePlugin.ResponsiveTableProgressIndicator` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableProgressIndicator` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_658.clas.xml b/src/02/01/z2ui5_cl_smpc_app_658.clas.xml new file mode 100644 index 000000000..72b29d612 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_658.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_658 + E + sap.m... + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_659.clas.abap b/src/02/01/z2ui5_cl_smpc_app_659.clas.abap new file mode 100644 index 000000000..7c911abbd --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_659.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_659 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_659 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableSimple/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `UploadSetwithTablePlugin.ResponsiveTableSimple` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableSimple` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_659.clas.xml b/src/02/01/z2ui5_cl_smpc_app_659.clas.xml new file mode 100644 index 000000000..fdfad263b --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_659.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_659 + E + sap.m - UploadSetwithTablePlugin.ResponsiveTableSimple + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_660.clas.abap b/src/02/01/z2ui5_cl_smpc_app_660.clas.abap new file mode 100644 index 000000000..ba89c9147 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_660.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_660 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_660 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.TreeTableSimple/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `UploadSetwithTablePlugin.TreeTableSimple` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.TreeTableSimple` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_660.clas.xml b/src/02/01/z2ui5_cl_smpc_app_660.clas.xml new file mode 100644 index 000000000..a0983cf74 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_660.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_660 + E + sap.m - UploadSetwithTablePlugin.TreeTableSimple + 1 + X + X + X + + + + diff --git a/src/02/01/z2ui5_cl_smpc_app_661.clas.abap b/src/02/01/z2ui5_cl_smpc_app_661.clas.abap new file mode 100644 index 000000000..8fd4dc69b --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_661.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_661 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_661 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.TreeTableWithFolderHierarchy/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `UploadSetwithTablePlugin.TreeTableWithFolderHierarchy` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.TreeTableWithFolderHierarchy` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/01/z2ui5_cl_smpc_app_661.clas.xml b/src/02/01/z2ui5_cl_smpc_app_661.clas.xml new file mode 100644 index 000000000..41f3aa523 --- /dev/null +++ b/src/02/01/z2ui5_cl_smpc_app_661.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_661 + E + sap.m... + 1 + X + X + X + + + + diff --git a/src/02/04/z2ui5_cl_smpc_app_662.clas.abap b/src/02/04/z2ui5_cl_smpc_app_662.clas.abap new file mode 100644 index 000000000..8ea5dc80a --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_662.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_662 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_662 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.f/AvatarGroup/*.view.xml 1:1 here (sap.f.AvatarGroup) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `AvatarGroup` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.f.sample.AvatarGroup` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/04/z2ui5_cl_smpc_app_662.clas.xml b/src/02/04/z2ui5_cl_smpc_app_662.clas.xml new file mode 100644 index 000000000..a15931ae1 --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_662.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_662 + E + sap.f - AvatarGroup + 1 + X + X + X + + + + diff --git a/src/02/04/z2ui5_cl_smpc_app_663.clas.abap b/src/02/04/z2ui5_cl_smpc_app_663.clas.abap new file mode 100644 index 000000000..703fd7ad6 --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_663.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_663 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_663 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.f/SidePanel/*.view.xml 1:1 here (sap.f.SidePanel) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `SidePanel` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.f.sample.SidePanel` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/04/z2ui5_cl_smpc_app_663.clas.xml b/src/02/04/z2ui5_cl_smpc_app_663.clas.xml new file mode 100644 index 000000000..1fffb416e --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_663.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_663 + E + sap.f - SidePanel + 1 + X + X + X + + + + diff --git a/src/02/04/z2ui5_cl_smpc_app_664.clas.abap b/src/02/04/z2ui5_cl_smpc_app_664.clas.abap new file mode 100644 index 000000000..99092ef61 --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_664.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_664 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_664 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.f/SidePanelOverflow/*.view.xml 1:1 here (sap.f.SidePanel) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `SidePanelOverflow` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.f.sample.SidePanelOverflow` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/04/z2ui5_cl_smpc_app_664.clas.xml b/src/02/04/z2ui5_cl_smpc_app_664.clas.xml new file mode 100644 index 000000000..56d6c5c3e --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_664.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_664 + E + sap.f - SidePanelOverflow + 1 + X + X + X + + + + diff --git a/src/02/04/z2ui5_cl_smpc_app_665.clas.abap b/src/02/04/z2ui5_cl_smpc_app_665.clas.abap new file mode 100644 index 000000000..d6faecf6a --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_665.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_665 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_665 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.f/SidePanelResizable/*.view.xml 1:1 here (sap.f.SidePanel) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `SidePanelResizable` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.f.sample.SidePanelResizable` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/04/z2ui5_cl_smpc_app_665.clas.xml b/src/02/04/z2ui5_cl_smpc_app_665.clas.xml new file mode 100644 index 000000000..47f1e87d0 --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_665.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_665 + E + sap.f - SidePanelResizable + 1 + X + X + X + + + + diff --git a/src/02/04/z2ui5_cl_smpc_app_666.clas.abap b/src/02/04/z2ui5_cl_smpc_app_666.clas.abap new file mode 100644 index 000000000..d5b689ff8 --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_666.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_666 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_666 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.f/ProductSwitchItemWithImageSrc/*.view.xml 1:1 here (sap.f.ProductSwitch) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `ProductSwitchItemWithImageSrc` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.f.sample.ProductSwitchItemWithImageSrc` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/04/z2ui5_cl_smpc_app_666.clas.xml b/src/02/04/z2ui5_cl_smpc_app_666.clas.xml new file mode 100644 index 000000000..d806a3ea0 --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_666.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_666 + E + sap.f - ProductSwitchItemWithImageSrc + 1 + X + X + X + + + + diff --git a/src/02/04/z2ui5_cl_smpc_app_667.clas.abap b/src/02/04/z2ui5_cl_smpc_app_667.clas.abap new file mode 100644 index 000000000..404599838 --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_667.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_667 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_667 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.f/HeroBannerBasic/*.view.xml 1:1 here (sap.f.HeroBanner) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `HeroBannerBasic` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.f.sample.HeroBannerBasic` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/04/z2ui5_cl_smpc_app_667.clas.xml b/src/02/04/z2ui5_cl_smpc_app_667.clas.xml new file mode 100644 index 000000000..822de8ba6 --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_667.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_667 + E + sap.f - HeroBannerBasic + 1 + X + X + X + + + + diff --git a/src/02/04/z2ui5_cl_smpc_app_668.clas.abap b/src/02/04/z2ui5_cl_smpc_app_668.clas.abap new file mode 100644 index 000000000..93111ba27 --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_668.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_668 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_668 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.f/HeroBannerColumnsRatio/*.view.xml 1:1 here (sap.f.HeroBanner) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `HeroBannerColumnsRatio` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.f.sample.HeroBannerColumnsRatio` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/04/z2ui5_cl_smpc_app_668.clas.xml b/src/02/04/z2ui5_cl_smpc_app_668.clas.xml new file mode 100644 index 000000000..7ab716fce --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_668.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_668 + E + sap.f - HeroBannerColumnsRatio + 1 + X + X + X + + + + diff --git a/src/02/04/z2ui5_cl_smpc_app_669.clas.abap b/src/02/04/z2ui5_cl_smpc_app_669.clas.abap new file mode 100644 index 000000000..8f952b204 --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_669.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_669 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_669 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.f/HeroBannerHeaderBlockAndActionsPlacement/*.view.xml 1:1 here (sap.f.HeroBanner) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `HeroBannerHeaderBlockAndActionsPlacement` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.f.sample.HeroBannerHeaderBlockAndActionsPlacement` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/04/z2ui5_cl_smpc_app_669.clas.xml b/src/02/04/z2ui5_cl_smpc_app_669.clas.xml new file mode 100644 index 000000000..8ab0c06ad --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_669.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_669 + E + sap.f - HeroBannerHeaderBlockAndActionsPlacement + 1 + X + X + X + + + + diff --git a/src/02/04/z2ui5_cl_smpc_app_670.clas.abap b/src/02/04/z2ui5_cl_smpc_app_670.clas.abap new file mode 100644 index 000000000..53780a475 --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_670.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_670 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_670 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.f/HeroBannerIntegrationCard/*.view.xml 1:1 here (sap.f.HeroBanner) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `HeroBannerIntegrationCard` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.f.sample.HeroBannerIntegrationCard` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/04/z2ui5_cl_smpc_app_670.clas.xml b/src/02/04/z2ui5_cl_smpc_app_670.clas.xml new file mode 100644 index 000000000..4e13c83a2 --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_670.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_670 + E + sap.f - HeroBannerIntegrationCard + 1 + X + X + X + + + + diff --git a/src/02/04/z2ui5_cl_smpc_app_671.clas.abap b/src/02/04/z2ui5_cl_smpc_app_671.clas.abap new file mode 100644 index 000000000..cf2fdefba --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_671.clas.abap @@ -0,0 +1,59 @@ +CLASS z2ui5_cl_smpc_app_671 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display. + METHODS model_init. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_smpc_app_671 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + me->client = client. + IF client->check_on_init( ). + model_init( ). + view_display( ). + ELSEIF client->check_on_navigated( ). + view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). + + " TODO rebuild ui5/sap.f/HeroBannerUseCases/*.view.xml 1:1 here (sap.f.HeroBanner) + view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `height` v = `100%` + + )->ele( `Page` + )->a( n = `title` v = `HeroBannerUseCases` + + )->tag( `Text` + )->a( n = `text` v = `TODO: port sap.f.sample.HeroBannerUseCases` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD model_init. + + " TODO seed the default model (see the sample's controller / JSON mock) + RETURN. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/02/04/z2ui5_cl_smpc_app_671.clas.xml b/src/02/04/z2ui5_cl_smpc_app_671.clas.xml new file mode 100644 index 000000000..aac077e5e --- /dev/null +++ b/src/02/04/z2ui5_cl_smpc_app_671.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SMPC_APP_671 + E + sap.f - HeroBannerUseCases + 1 + X + X + X + + + + diff --git a/src/z2ui5_cl_smpc_app_000.clas.abap b/src/z2ui5_cl_smpc_app_000.clas.abap index cbe3da4cf..d77c5397a 100644 --- a/src/z2ui5_cl_smpc_app_000.clas.abap +++ b/src/z2ui5_cl_smpc_app_000.clas.abap @@ -999,7 +999,15 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. DATA text2 TYPE string. result = VALUE #( - ( module = `sap.f` control = `sap.f.Card` name = `Card` class = `z2ui5_cl_smpc_app_117` path = `src/01/04/z2ui5_cl_smpc_app_117.clas.abap` + ( module = `sap.f` control = `sap.f.AvatarGroup` name = `AvatarGroup` class = `z2ui5_cl_smpc_app_662` path = `src/02/04/z2ui5_cl_smpc_app_662.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.73` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.f.AvatarGroup control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73.` + post171 = `the sap.f.AvatarGroup control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73.` ) + ( module = `sap.f` control = `sap.f.Card` name = `Card` class = `z2ui5_cl_smpc_app_117` path = `src/01/04/z2ui5_cl_smpc_app_117.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.64` @@ -1026,7 +1034,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` which an abap2UI5 app has no document root to resolve against, so the port points at https://sdk.openui5.org/... instead. The values are otherwise the mock's own. Added 2026-08-23: this port did the` && ` rewrite without declaring it, one of 17 found by re-counting the corpus-wide claim that every port doing it had a declaration.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.DynamicPage` name = `DynamicPageAnalyticalTable` class = `z2ui5_cl_smpc_app_559` path = `src/02/04/z2ui5_cl_smpc_app_559.clas.abap` + ( module = `sap.f` control = `sap.f.DynamicPage` name = `DynamicPageAnalyticalTable` class = `z2ui5_cl_smpc_app_559` path = `src/02/04/z2ui5_cl_smpc_app_559.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -1051,7 +1059,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` string keeps the exact value; TYPE i would truncate (an earlier version did, via json-to-abap's first-row inference — tool since fixed). Price stays packed (DECIMALS 2) for the Currency type binding,` && ` decimals preserved.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.DynamicPage` name = `DynamicPageFreeStyle` class = `z2ui5_cl_smpc_app_170` path = `src/01/04/z2ui5_cl_smpc_app_170.clas.abap` + ( module = `sap.f` control = `sap.f.DynamicPage` name = `DynamicPageFreeStyle` class = `z2ui5_cl_smpc_app_170` path = `src/01/04/z2ui5_cl_smpc_app_170.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.42` @@ -1077,7 +1085,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` Avatars, seeded XL) and toasts Media Range: (px) exactly like onBreakpointChange. @since verified fork-openui5/src/sap.f/src/sap/f/DynamicPage.js:315. Requires a UI5 release >= 1.147;` && ` on older releases the event never fires and the Avatars keep the seeded XL (the property gate is blind to sap.f event params).`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.DynamicPage` name = `DynamicPageResponsiveAvatar` class = `z2ui5_cl_smpc_app_244` path = `src/02/04/z2ui5_cl_smpc_app_244.clas.abap` + ( module = `sap.f` control = `sap.f.DynamicPage` name = `DynamicPageResponsiveAvatar` class = `z2ui5_cl_smpc_app_244` path = `src/02/04/z2ui5_cl_smpc_app_244.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.42` @@ -1105,7 +1113,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` so every press snapped the IconTabBar back to the Products tab (neither side declares a selectedKey) and reset the pinnable header and the scroll position. The bound property needs no re-render: the` && ` model diff is pushed automatically.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.DynamicPage` name = `DynamicPageWithStickySubheader` class = `z2ui5_cl_smpc_app_238` path = `src/01/04/z2ui5_cl_smpc_app_238.clas.abap` + ( module = `sap.f` control = `sap.f.DynamicPage` name = `DynamicPageWithStickySubheader` class = `z2ui5_cl_smpc_app_238` path = `src/01/04/z2ui5_cl_smpc_app_238.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.42` @@ -1149,7 +1157,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` in a running system: the Bank Transfer and Cash on Delivery branches, the delivery-address branch, the two discard confirmations, the DynamicPage's sticky subheader over the wizard and the review`. text1 = text1 && ` page's six Edit links.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.DynamicPage` name = `DynamicPageWithWizard` class = `z2ui5_cl_smpc_app_560` path = `src/01/04/z2ui5_cl_smpc_app_560.clas.abap` + ( module = `sap.f` control = `sap.f.DynamicPage` name = `DynamicPageWithWizard` class = `z2ui5_cl_smpc_app_560` path = `src/01/04/z2ui5_cl_smpc_app_560.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.42` @@ -1183,7 +1191,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` MidColumnFullScreen, not TwoColumnsMidExpanded. This sample builds its semantic helper with maxColumnsCount: 1, and getNextUIState short-circuits to MidColumnFullScreen in that case - which is what` && ` hides the begin column and makes the return to OneColumn a begin-column resize from zero width, the event the sample exists to demonstrate.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `FlexibleColumnLayoutColumnResize` class = `z2ui5_cl_smpc_app_577` path = `src/02/04/z2ui5_cl_smpc_app_577.clas.abap` + ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `FlexibleColumnLayoutColumnResize` class = `z2ui5_cl_smpc_app_577` path = `src/02/04/z2ui5_cl_smpc_app_577.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -1204,7 +1212,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` Standard, so the middle column rendered a different background from the sample. Removed 2026-08-24. No gate saw it: structural-diff has no 'attr extra' kind, so an attribute a port ADDS is never` && ` compared.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `FlexibleColumnLayoutLandmarkInfo` class = `z2ui5_cl_smpc_app_449` path = `src/02/04/z2ui5_cl_smpc_app_449.clas.abap` + ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `FlexibleColumnLayoutLandmarkInfo` class = `z2ui5_cl_smpc_app_449` path = `src/02/04/z2ui5_cl_smpc_app_449.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.46` @@ -1225,7 +1233,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` Standard, so the middle column rendered a different background from the sample. Removed 2026-08-24. No gate saw it: structural-diff has no 'attr extra' kind, so an attribute a port ADDS is never` && ` compared.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `FlexibleColumnLayoutLandmarkInfoArrow` class = `z2ui5_cl_smpc_app_450` path = `src/02/04/z2ui5_cl_smpc_app_450.clas.abap` + ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `FlexibleColumnLayoutLandmarkInfoArrow` class = `z2ui5_cl_smpc_app_450` path = `src/02/04/z2ui5_cl_smpc_app_450.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.46` @@ -1247,7 +1255,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` with no user-visible effect and is not reproduced - all three pages exist from the start. **e2e-verified 2026-07-30** (transpiled-framework interaction, scripts/e2e-smoke.mjs): pressing the first` && ` master list item round-trips LIST_PRESS and the mid column renders (the two-way bound layout flipped to TwoColumnsBeginExpanded).`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `FlexibleColumnLayoutSimple` class = `z2ui5_cl_smpc_app_234` path = `src/01/04/z2ui5_cl_smpc_app_234.clas.abap` + ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `FlexibleColumnLayoutSimple` class = `z2ui5_cl_smpc_app_234` path = `src/01/04/z2ui5_cl_smpc_app_234.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.46` @@ -1322,7 +1330,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` precedent of app 575); non-arrow firings return without touching anything. // NOTE: Component.js raises the model size limit; the port issues cs_event-set_size_limit for MAIN. The collection is 123` && ` rows and the JSONModel caps a bound aggregation at 100, so without it the table stopped 23 rows short of the count its own title reports.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `FlexibleColumnLayoutWithFullscreenPage` class = `z2ui5_cl_smpc_app_578` path = `src/02/04/z2ui5_cl_smpc_app_578.clas.abap` + ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `FlexibleColumnLayoutWithFullscreenPage` class = `z2ui5_cl_smpc_app_578` path = `src/02/04/z2ui5_cl_smpc_app_578.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -1373,7 +1381,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` own title reports. // NOTE: The items binding carries no client-side sorter. It used to keep the original's sorter: { path: 'NAME' }, which ClientListBinding re-applies on every model change - so the` && ` ABAP sort was undone immediately and the Sort button round-tripped without changing anything. The original replaces the declared sorter through oBinding.sort( ); here the backend owns the order.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `FlexibleColumnLayoutWithOneColumnStart` class = `z2ui5_cl_smpc_app_579` path = `src/02/04/z2ui5_cl_smpc_app_579.clas.abap` + ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `FlexibleColumnLayoutWithOneColumnStart` class = `z2ui5_cl_smpc_app_579` path = `src/02/04/z2ui5_cl_smpc_app_579.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -1425,7 +1433,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` own title reports. // NOTE: The items binding carries no client-side sorter. It used to keep the original's sorter: { path: 'NAME' }, which ClientListBinding re-applies on every model change - so the` && ` ABAP sort was undone immediately and the Sort button round-tripped without changing anything. The original replaces the declared sorter through oBinding.sort( ); here the backend owns the order.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `FlexibleColumnLayoutWithTwoColumnStart` class = `z2ui5_cl_smpc_app_580` path = `src/02/04/z2ui5_cl_smpc_app_580.clas.abap` + ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `FlexibleColumnLayoutWithTwoColumnStart` class = `z2ui5_cl_smpc_app_580` path = `src/02/04/z2ui5_cl_smpc_app_580.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -1481,7 +1489,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` ClientListBinding re-applies on every model change - so the ABAP sort was undone immediately and the Sort button round-tripped without changing anything. The original replaces the declared sorter` && ` through oBinding.sort( ); here the backend owns the order.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `ShellBarWithFlexibleColumnLayout` class = `z2ui5_cl_smpc_app_584` path = `src/02/04/z2ui5_cl_smpc_app_584.clas.abap` + ( module = `sap.f` control = `sap.f.FlexibleColumnLayout` name = `ShellBarWithFlexibleColumnLayout` class = `z2ui5_cl_smpc_app_584` path = `src/02/04/z2ui5_cl_smpc_app_584.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -1522,7 +1530,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` URL onto the OpenUI5 host (the corpus asset rule) fixed the render as a side effect, the skip went stale, and the gate demanded its removal - which is exactly what a re-verified skip is for. Both are`. text1 = text1 && ` gone now; the port renders clean.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.GridContainer` name = `GridContainer` class = `z2ui5_cl_smpc_app_168` path = `src/02/04/z2ui5_cl_smpc_app_168.clas.abap` + ( module = `sap.f` control = `sap.f.GridContainer` name = `GridContainer` class = `z2ui5_cl_smpc_app_168` path = `src/02/04/z2ui5_cl_smpc_app_168.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -1547,7 +1555,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` layoutChange wire has no counterpart and the two GridContainerSettings the view declares (layout and layoutXS) already carry the responsive sizing. // NOTE: The drag-and-drop reorder of the ten grid` && ` items and the three rebuilt cards are unverified in a running system. **e2e-verified 2026-08-25** (nightly e2e interaction, meta/interactions/z2ui5_cl_smpc_app_526.mjs).`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.GridContainer` name = `GridContainerDragAndDrop` class = `z2ui5_cl_smpc_app_526` path = `src/01/04/z2ui5_cl_smpc_app_526.clas.abap` + ( module = `sap.f` control = `sap.f.GridContainer` name = `GridContainerDragAndDrop` class = `z2ui5_cl_smpc_app_526` path = `src/01/04/z2ui5_cl_smpc_app_526.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.65` @@ -1563,7 +1571,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` ToggleButton.press as attr missing) - same treatment as app 168, which ships the same helper. // NOTE: The drag and drop between the List and the GridContainer, in both directions and within each` && ` container, is unverified in a running system. **e2e-verified 2026-08-25** (nightly e2e interaction, meta/interactions/z2ui5_cl_smpc_app_527.mjs).`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.GridContainer` name = `GridContainerDragAndDropFromList` class = `z2ui5_cl_smpc_app_527` path = `src/01/04/z2ui5_cl_smpc_app_527.clas.abap` + ( module = `sap.f` control = `sap.f.GridContainer` name = `GridContainerDragAndDropFromList` class = `z2ui5_cl_smpc_app_527` path = `src/01/04/z2ui5_cl_smpc_app_527.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.65` @@ -1588,7 +1596,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` manifest's action is mailto:{email} with no subject, so only EMAIL travels. // NOTE: The objectContent/contact manifest header carries "icon": { "text": "DM" }, an initials avatar. The rebuilt` && ` card:Header keeps title and subtitle only; sap.f.cards.Header.iconInitials is base-version and would have expressed it.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.GridContainer` name = `GridContainersNavigation` class = `z2ui5_cl_smpc_app_528` path = `src/02/04/z2ui5_cl_smpc_app_528.clas.abap` + ( module = `sap.f` control = `sap.f.GridContainer` name = `GridContainersNavigation` class = `z2ui5_cl_smpc_app_528` path = `src/02/04/z2ui5_cl_smpc_app_528.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 3 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -1600,13 +1608,13 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` but is not pressable, so the withAction card's navigation silently does nothing.` ) ). result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.GridList` name = `GridListBasic` class = `z2ui5_cl_smpc_app_111` path = `src/01/04/z2ui5_cl_smpc_app_111.clas.abap` + ( module = `sap.f` control = `sap.f.GridList` name = `GridListBasic` class = `z2ui5_cl_smpc_app_111` path = `src/01/04/z2ui5_cl_smpc_app_111.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.60` notes = `NOTE: The Slider drives the panel width via a roundtrip-free expression binding ({= ${slider} + '%' }) over the two-way slider value, instead of the original onSliderMoved setWidth handler;` && ` Slider.liveChange is therefore not wired (the width tracks the slider client-side). The full 27-row item set is inlined.` ) - ( module = `sap.f` control = `sap.f.GridList` name = `GridListBoxContainer` class = `z2ui5_cl_smpc_app_144` path = `src/01/04/z2ui5_cl_smpc_app_144.clas.abap` + ( module = `sap.f` control = `sap.f.GridList` name = `GridListBoxContainer` class = `z2ui5_cl_smpc_app_144` path = `src/01/04/z2ui5_cl_smpc_app_144.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.60` @@ -1621,7 +1629,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` custom f:headerToolbar (Toolbar with Title, ToolbarSpacer, SearchField - the SearchField has no handler in the original). The 27 items are inlined 1:1 from the sample's own model/items.json; the` && ` GridListItem template (VBox>VBox+FlexItemData, Title, Label) binds {TITLE}/{SUBTITLE} 1:1.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.GridList` name = `GridListBoxContainerGrouping` class = `z2ui5_cl_smpc_app_176` path = `src/01/04/z2ui5_cl_smpc_app_176.clas.abap` + ( module = `sap.f` control = `sap.f.GridList` name = `GridListBoxContainerGrouping` class = `z2ui5_cl_smpc_app_176` path = `src/01/04/z2ui5_cl_smpc_app_176.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.60` @@ -1637,7 +1645,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` OverflowToolbar designs the first list contrasts (Solid with sapContrast, plain Solid, Transparent). // NOTE: the twelve icon-only Buttons of the first and third list are tooltip-less in the sample` && ` (Sort, Group, Edit, Delete and Information). The port gives each a tooltip so they are reachable with a screen reader - the accessibility additions in this port.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.GridList` name = `GridListBoxContainerReal` class = `z2ui5_cl_smpc_app_581` path = `src/01/04/z2ui5_cl_smpc_app_581.clas.abap` + ( module = `sap.f` control = `sap.f.GridList` name = `GridListBoxContainerReal` class = `z2ui5_cl_smpc_app_581` path = `src/01/04/z2ui5_cl_smpc_app_581.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.60` @@ -1649,7 +1657,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` breakpoint on either side. // NOTE: GridResponsiveLayout.layoutChange is wired to a client-composed MessageToast (control_global MESSAGE_TOAST, template 'Layout changed to {0}' filled by` && ` ${$parameters>/layout}) reproducing onLayoutChange 1:1 without a backend round-trip. The layoutChange attribute itself is kept, so structural-diff sees no difference.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.GridList` name = `GridListBreakPoints` class = `z2ui5_cl_smpc_app_213` path = `src/01/04/z2ui5_cl_smpc_app_213.clas.abap` + ( module = `sap.f` control = `sap.f.GridList` name = `GridListBreakPoints` class = `z2ui5_cl_smpc_app_213` path = `src/01/04/z2ui5_cl_smpc_app_213.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.60` @@ -1668,7 +1676,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` item with 'After' when the pointer is over no item at all, and that item can be the dragged one, which yields drag_pos = drop_pos = lines - 1 and an insert index of lines + 2. The index is clamped` && ` now. Under the transpiler the runtime splices like JS, so this is one of the defects that only shows on a real system.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.GridList` name = `GridListDragAndDrop` class = `z2ui5_cl_smpc_app_148` path = `src/01/04/z2ui5_cl_smpc_app_148.clas.abap` + ( module = `sap.f` control = `sap.f.GridList` name = `GridListDragAndDrop` class = `z2ui5_cl_smpc_app_148` path = `src/01/04/z2ui5_cl_smpc_app_148.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.60` @@ -1692,7 +1700,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` inside a grid reach its border and raise the toast, and that dragging the slider narrows the container without a round trip. **e2e-verified 2026-08-25** (nightly e2e interaction,` && ` meta/interactions/z2ui5_cl_smpc_app_582.mjs).`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.GridList` name = `GridListKeyboardArrowsNavigation` class = `z2ui5_cl_smpc_app_582` path = `src/01/04/z2ui5_cl_smpc_app_582.clas.abap` + ( module = `sap.f` control = `sap.f.GridList` name = `GridListKeyboardArrowsNavigation` class = `z2ui5_cl_smpc_app_582` path = `src/01/04/z2ui5_cl_smpc_app_582.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.60` @@ -1715,7 +1723,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` 122/124 had and closed: 'a sample whose stylesheet is not in ui5/ is an archive gap to close, not a reason to drop the CSS'. main.css now sits in ui5/sap.f/GridListModes/ (closing the AGENTS section` && ` 4 archive gap) and reaches the view through a core:HTML style leaf.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.GridList` name = `GridListModes` class = `z2ui5_cl_smpc_app_133` path = `src/01/04/z2ui5_cl_smpc_app_133.clas.abap` + ( module = `sap.f` control = `sap.f.GridList` name = `GridListModes` class = `z2ui5_cl_smpc_app_133` path = `src/01/04/z2ui5_cl_smpc_app_133.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.60` @@ -1729,7 +1737,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` Fully static view reproduced 1:1: a ToggleButton, a Slider (value=100), and a Panel (headerToolbar Toolbar+Title) hosting an f:GridList with a ResponsiveColumnLayout and five static f:GridListItems`. text1 = text1 && ` (columns/rows 4/4, 3/2, 3/2, 1/1, 1/1), each a VBox with a Title and 1..5 Labels; no bound data.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.GridList` name = `GridListResponsiveColumnLayout` class = `z2ui5_cl_smpc_app_222` path = `src/02/04/z2ui5_cl_smpc_app_222.clas.abap` + ( module = `sap.f` control = `sap.f.GridList` name = `GridListResponsiveColumnLayout` class = `z2ui5_cl_smpc_app_222` path = `src/02/04/z2ui5_cl_smpc_app_222.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.60` @@ -1738,6 +1746,58 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. post171 = `The GridList customLayout uses sap.ui.layout.cssgrid.ResponsiveColumnLayout and per-item ResponsiveColumnItemLayoutData with columns/rows (control + members since 1.72), kept 1:1; requires a UI5` && ` release >= 1.72.` ) ). + result = VALUE #( BASE result + ( module = `sap.f` control = `sap.f.HeroBanner` name = `HeroBannerBasic` class = `z2ui5_cl_smpc_app_667` path = `src/02/04/z2ui5_cl_smpc_app_667.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.152` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152.` + post171 = `the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152.` ) + ( module = `sap.f` control = `sap.f.HeroBanner` name = `HeroBannerColumnsRatio` class = `z2ui5_cl_smpc_app_668` path = `src/02/04/z2ui5_cl_smpc_app_668.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.152` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152.` + post171 = `the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152.` ) + ( module = `sap.f` control = `sap.f.HeroBanner` name = `HeroBannerHeaderBlockAndActionsPlacement` class = `z2ui5_cl_smpc_app_669` path = `src/02/04/z2ui5_cl_smpc_app_669.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.152` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152.` + post171 = `the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152.` ) ). + + result = VALUE #( BASE result + ( module = `sap.f` control = `sap.f.HeroBanner` name = `HeroBannerIntegrationCard` class = `z2ui5_cl_smpc_app_670` path = `src/02/04/z2ui5_cl_smpc_app_670.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.152` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152.` + post171 = `the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152.` ) + ( module = `sap.f` control = `sap.f.HeroBanner` name = `HeroBannerUseCases` class = `z2ui5_cl_smpc_app_671` path = `src/02/04/z2ui5_cl_smpc_app_671.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.152` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152.` + post171 = `the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152.` ) + ( module = `sap.f` control = `sap.f.ProductSwitch` name = `ProductSwitchItemWithImageSrc` class = `z2ui5_cl_smpc_app_666` path = `src/02/04/z2ui5_cl_smpc_app_666.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.72` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.f.ProductSwitch control (since UI5 1.72) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.72.` + post171 = `the sap.f.ProductSwitch control (since UI5 1.72) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.72.` ) ). + text1 = `NOTE: The sample's UI is a trigger Button plus two explanatory Texts, and the ProductSwitch itself lives in ProductSwitchPopover.fragment.xml, opened on press. **Rebuilt 1:1 on 2026-08-05** (the` && ` 2026-07-27 review had flagged the 'no JS controller' rationale as refuted): the fragment is a core:FragmentDefinition shown through popover_display( by_id = pSwitchBtn ), the three products come from` && ` model/data.json into a bound ProductSwitch items aggregation, and fnChange - a toast 'Redirecting to ' plus URLHelper.redirect( targetSrc, true ) - is two client actions chained on the one` && @@ -1753,7 +1813,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` ${device>/system/phone} }, and closing is the roundtrip-free popover_close follow-up action. That makes the port carry 2 Buttons where the original view declares 1 - the second is the` && ` controller-built one.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.ProductSwitch` name = `ProductSwitchNavigation` class = `z2ui5_cl_smpc_app_165` path = `src/02/04/z2ui5_cl_smpc_app_165.clas.abap` + ( module = `sap.f` control = `sap.f.ProductSwitch` name = `ProductSwitchNavigation` class = `z2ui5_cl_smpc_app_165` path = `src/02/04/z2ui5_cl_smpc_app_165.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.72` @@ -1774,7 +1834,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` SendEmail / SendMessage semantic actions keep their built-in behaviour and the DraftIndicator shows state Saved. Structurally that adds three controls the original view does not declare - the` && ` z2ui5:MessageManager bridge plus the MessagePopover and its MessageItem template - because the original builds the popover in the controller and seeds the message through the Messaging API.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.semantic.SemanticPage` name = `SemanticPage` class = `z2ui5_cl_smpc_app_166` path = `src/01/04/z2ui5_cl_smpc_app_166.clas.abap` + ( module = `sap.f` control = `sap.f.semantic.SemanticPage` name = `SemanticPage` class = `z2ui5_cl_smpc_app_166` path = `src/01/04/z2ui5_cl_smpc_app_166.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.46.0` @@ -1794,14 +1854,14 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` (sap/f/images/KPI.png), re-hosted on sdk.openui5.org. // NOTE: The footer toggle, the messages popover and the semantic action bar are unverified in a running system. **e2e-verified 2026-08-25**`. text1 = text1 && ` (nightly e2e interaction, meta/interactions/z2ui5_cl_smpc_app_529.mjs).`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.semantic.SemanticPage` name = `SemanticPageFreeStyle` class = `z2ui5_cl_smpc_app_529` path = `src/01/04/z2ui5_cl_smpc_app_529.clas.abap` + ( module = `sap.f` control = `sap.f.semantic.SemanticPage` name = `SemanticPageFreeStyle` class = `z2ui5_cl_smpc_app_529` path = `src/01/04/z2ui5_cl_smpc_app_529.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.46.0` notes = text1 ) ). result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.ShellBar` name = `ShellBar` class = `z2ui5_cl_smpc_app_110` path = `src/02/04/z2ui5_cl_smpc_app_110.clas.abap` + ( module = `sap.f` control = `sap.f.ShellBar` name = `ShellBar` class = `z2ui5_cl_smpc_app_110` path = `src/02/04/z2ui5_cl_smpc_app_110.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: 1 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.63` @@ -1823,7 +1883,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` verified in a running system: the product-switch popover anchored on the ShellBar's switcher button and the change toast. **e2e-verified 2026-08-25** (nightly e2e interaction,` && ` meta/interactions/z2ui5_cl_smpc_app_583.mjs).`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.ShellBar` name = `ShellBarProductSwitch` class = `z2ui5_cl_smpc_app_583` path = `src/02/04/z2ui5_cl_smpc_app_583.clas.abap` + ( module = `sap.f` control = `sap.f.ShellBar` name = `ShellBarProductSwitch` class = `z2ui5_cl_smpc_app_583` path = `src/02/04/z2ui5_cl_smpc_app_583.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -1834,7 +1894,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` ShellBar's profile aggregation. App 245 (ProductSwitchNavigation) carries the same pair as a documented scope exception.` ) ). result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.ShellBar` name = `ShellBarWithMenuButton` class = `z2ui5_cl_smpc_app_152` path = `src/02/04/z2ui5_cl_smpc_app_152.clas.abap` + ( module = `sap.f` control = `sap.f.ShellBar` name = `ShellBarWithMenuButton` class = `z2ui5_cl_smpc_app_152` path = `src/02/04/z2ui5_cl_smpc_app_152.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: 1 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.63` @@ -1862,7 +1922,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` productpicurl, status, quantity, uom, width, depth, height, dimunit) should be trimmed. // POST-1.71: the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 but kept for the 1:1 port - the app` && ` needs a UI5 release >= 1.73 to render it. @since verified in sap/m/Avatar.js:99 (control-level, which the member-level property gate never saw).`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.ShellBar` name = `ShellBarWithSearch` class = `z2ui5_cl_smpc_app_218` path = `src/02/04/z2ui5_cl_smpc_app_218.clas.abap` + ( module = `sap.f` control = `sap.f.ShellBar` name = `ShellBarWithSearch` class = `z2ui5_cl_smpc_app_218` path = `src/02/04/z2ui5_cl_smpc_app_218.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 3 noted, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.63` @@ -1893,7 +1953,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` the built backend, BEFORE the fix: select "Child Item 1" (key page1), restore the very same draft through the bookmark URL - the rebuilt view came back showing mainView--page2 while the` && ` SideNavigation still read page1.`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.ShellBar` name = `ShellBarWithSplitApp` class = `z2ui5_cl_smpc_app_585` path = `src/02/04/z2ui5_cl_smpc_app_585.clas.abap` + ( module = `sap.f` control = `sap.f.ShellBar` name = `ShellBarWithSplitApp` class = `z2ui5_cl_smpc_app_585` path = `src/02/04/z2ui5_cl_smpc_app_585.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -1903,6 +1963,32 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. post171 = `two post-1.71 members are kept for the 1:1 port: sap.m.Avatar (since UI5 1.73) in the ShellBar's profile aggregation, and sap.tnt.NavigationListItem.expanded (since 1.121), which the sample's own` && ` NavigationList fragment binds - app 407 declares the same property with the note that it predates 1.71 on the control and only reads as 1.121 because it moved to a newer base class.` ) ). + result = VALUE #( BASE result + ( module = `sap.f` control = `sap.f.SidePanel` name = `SidePanel` class = `z2ui5_cl_smpc_app_663` path = `src/02/04/z2ui5_cl_smpc_app_663.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.107` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.f.SidePanel control (since UI5 1.107) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.107.` + post171 = `the sap.f.SidePanel control (since UI5 1.107) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.107.` ) + ( module = `sap.f` control = `sap.f.SidePanel` name = `SidePanelOverflow` class = `z2ui5_cl_smpc_app_664` path = `src/02/04/z2ui5_cl_smpc_app_664.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.107` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.f.SidePanel control (since UI5 1.107) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.107.` + post171 = `the sap.f.SidePanel control (since UI5 1.107) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.107.` ) + ( module = `sap.f` control = `sap.f.SidePanel` name = `SidePanelResizable` class = `z2ui5_cl_smpc_app_665` path = `src/02/04/z2ui5_cl_smpc_app_665.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.107` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.f.SidePanel control (since UI5 1.107) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.107.` + post171 = `the sap.f.SidePanel control (since UI5 1.107) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.107.` ) ). + text1 = `NOTE: onToggle vetoes the firing when the matching Switch is on (event.preventDefault) and resets that Switch. **Reproduced 1:1 since 2026-08-23** with s_ctrl-prevent_default_expr: the client` && ` expression (!${$parameters>/expanded} && {/PREVENT_COLLAPSE}) || (${$parameters>/expanded} && {/PREVENT_EXPAND}) is evaluated when the event fires and reads the two two-way bound Switch states, which` && ` is exactly what the original handler does. The event still reaches the backend either way, and on_event raises the matching toast and resets that Switch. Two defects of the earlier shape are gone` && @@ -1913,7 +1999,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` model push. // POST-1.71: the SidePanel and SidePanelItem controls (both since UI5 1.107) are newer than 1.71 but are the whole point of this sample and kept for the 1:1 port - the app needs a UI5` && ` release >= 1.107 to render it. @since verified in sap/f/SidePanel.js and sap/f/SidePanelItem.js:34 (control-level, which the member-level property gate never saw).`. result = VALUE #( BASE result - ( module = `sap.f` control = `sap.f.SidePanel` name = `SidePanelSingle` class = `z2ui5_cl_smpc_app_136` path = `src/02/04/z2ui5_cl_smpc_app_136.clas.abap` + ( module = `sap.f` control = `sap.f.SidePanel` name = `SidePanelSingle` class = `z2ui5_cl_smpc_app_136` path = `src/02/04/z2ui5_cl_smpc_app_136.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.107` @@ -1924,19 +2010,63 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` it. @since verified in sap/f/SidePanel.js and sap/f/SidePanelItem.js:34 (control-level, which the member-level property gate never saw).` ) ). result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.ActionListItem` name = `ActionListItem` class = `z2ui5_cl_smpc_app_001` path = `src/01/01/z2ui5_cl_smpc_app_001.clas.abap` + ( module = `sap.m` control = `sap.m.ActionListItem` name = `ActionListItem` class = `z2ui5_cl_smpc_app_001` path = `src/01/01/z2ui5_cl_smpc_app_001.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` checked = `CHECKED (2026-07-20): verified in a running system - human pass 2026-07-20: app starts and renders like the original; no interaction paths were open for this port. **e2e-verified 2026-09-12**` && ` (interaction module meta/interactions/z2ui5_cl_smpc_app_001.mjs: the Actions list header and all five ActionListItems render as .sapMALI rows with their texts - a static port, so the render IS the` && ` check)` ) - ( module = `sap.m` control = `sap.m.Bar` name = `Page` class = `z2ui5_cl_smpc_app_002` path = `src/01/01/z2ui5_cl_smpc_app_002.clas.abap` + ( module = `sap.m` control = `sap.m.Avatar` name = `Avatar` class = `z2ui5_cl_smpc_app_624` path = `src/02/01/z2ui5_cl_smpc_app_624.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.73` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73.` + post171 = `the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73.` ) + ( module = `sap.m` control = `sap.m.Avatar` name = `AvatarActiveState` class = `z2ui5_cl_smpc_app_625` path = `src/02/01/z2ui5_cl_smpc_app_625.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.73` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73.` + post171 = `the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73.` ) ). + + result = VALUE #( BASE result + ( module = `sap.m` control = `sap.m.Avatar` name = `AvatarBadgeIconColor` class = `z2ui5_cl_smpc_app_626` path = `src/02/01/z2ui5_cl_smpc_app_626.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.73` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73.` + post171 = `the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73.` ) + ( module = `sap.m` control = `sap.m.Avatar` name = `AvatarValueState` class = `z2ui5_cl_smpc_app_627` path = `src/02/01/z2ui5_cl_smpc_app_627.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.73` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73.` + post171 = `the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73.` ) + ( module = `sap.m` control = `sap.m.Avatar` name = `AvatarWithAffordance` class = `z2ui5_cl_smpc_app_628` path = `src/02/01/z2ui5_cl_smpc_app_628.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.73` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73.` + post171 = `the sap.m.Avatar control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73.` ) ). + + result = VALUE #( BASE result + ( module = `sap.m` control = `sap.m.Bar` name = `Page` class = `z2ui5_cl_smpc_app_002` path = `src/01/01/z2ui5_cl_smpc_app_002.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` checked = `CHECKED (2026-07-20): verified in a running system - human pass 2026-07-20: app starts and renders like the original; no interaction paths were open for this port. **e2e-verified 2026-09-12**` && ` (interaction module meta/interactions/z2ui5_cl_smpc_app_002.mjs: the page title, the nav button plus the Share header action, the subHeader SearchField, the lorem ipsum content and the four footer` && ` buttons Accept/Reject/Edit/Delete all render)` ) - ( module = `sap.m` control = `sap.m.Bar` name = `ToolbarVsBar` class = `z2ui5_cl_smpc_app_189` path = `src/01/01/z2ui5_cl_smpc_app_189.clas.abap` + ( module = `sap.m` control = `sap.m.Bar` name = `ToolbarVsBar` class = `z2ui5_cl_smpc_app_189` path = `src/01/01/z2ui5_cl_smpc_app_189.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` ) ). @@ -1946,7 +2076,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` each breadcrumb link toasts " has been activated". **e2e-verified 2026-07-30** (transpiled-framework interaction, scripts/e2e-smoke.mjs): the overflow-picker entry 'Products' fires the link` && ` press and toasts 'Products has been activated' (the headless layout collapses the links into the Breadcrumbs overflow Select; the picker path exercises the same press wire).`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Breadcrumbs` name = `Breadcrumbs` class = `z2ui5_cl_smpc_app_003` path = `src/01/01/z2ui5_cl_smpc_app_003.clas.abap` + ( module = `sap.m` control = `sap.m.Breadcrumbs` name = `Breadcrumbs` class = `z2ui5_cl_smpc_app_003` path = `src/01/01/z2ui5_cl_smpc_app_003.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted, reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.34` @@ -1961,7 +2091,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` roundtrip-free follow_up_action MESSAGE_TOAST with the template '{0} has been clicked' filled by ${$source>/text} - the text comes from the pressed Link itself, exactly as in the original, and` && ` nothing travels to the backend. The class therefore has no on_event and no model at all.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Breadcrumbs` name = `BreadcrumbsWithCurrentPageLink` class = `z2ui5_cl_smpc_app_286` path = `src/02/01/z2ui5_cl_smpc_app_286.clas.abap` + ( module = `sap.m` control = `sap.m.Breadcrumbs` name = `BreadcrumbsWithCurrentPageLink` class = `z2ui5_cl_smpc_app_286` path = `src/02/01/z2ui5_cl_smpc_app_286.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 noted, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.34` @@ -1983,7 +2113,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` (Select -> Breadcrumbs) are unverified in a running system. The module drives only the Select -> Breadcrumbs field; none of the six MESSAGE_TOAST wires is ever pressed. **e2e-verified 2026-08-22**` && ` (nightly e2e interaction, meta/interactions/z2ui5_cl_smpc_app_441.mjs).`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Breadcrumbs` name = `BreadcrumbsWithoutCurrentPage` class = `z2ui5_cl_smpc_app_441` path = `src/01/01/z2ui5_cl_smpc_app_441.clas.abap` + ( module = `sap.m` control = `sap.m.Breadcrumbs` name = `BreadcrumbsWithoutCurrentPage` class = `z2ui5_cl_smpc_app_441` path = `src/01/01/z2ui5_cl_smpc_app_441.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.34` @@ -1998,7 +2128,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` view, dialog) is dropped: it only copies the compact-density class when the view itself carries it, which the sample view does not; abap2UI5's popup slot has no per-view density sync, so there is` && ` nothing to propagate.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.BusyDialog` name = `BusyDialog` class = `z2ui5_cl_smpc_app_004` path = `src/01/01/z2ui5_cl_smpc_app_004.clas.abap` + ( module = `sap.m` control = `sap.m.BusyDialog` name = `BusyDialog` class = `z2ui5_cl_smpc_app_004` path = `src/01/01/z2ui5_cl_smpc_app_004.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 3 noted, reviewed, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a` && ` close look.` @@ -2014,13 +2144,13 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` close chain on the dependents-declared BusyDialog. **e2e-verified 2026-07-30** (transpiled-framework interaction, scripts/e2e-smoke.mjs): the full chain runs green - the button opens the BusyDialog` && ` (attached) and the CLOSE_BUSY timer round-trip detaches it after ~3s.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.BusyDialog` name = `BusyDialogLight` class = `z2ui5_cl_smpc_app_251` path = `src/01/01/z2ui5_cl_smpc_app_251.clas.abap` + ( module = `sap.m` control = `sap.m.BusyDialog` name = `BusyDialogLight` class = `z2ui5_cl_smpc_app_251` path = `src/01/01/z2ui5_cl_smpc_app_251.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` notes = text1 ) ). result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Button` name = `Button` class = `z2ui5_cl_smpc_app_005` path = `src/01/01/z2ui5_cl_smpc_app_005.clas.abap` + ( module = `sap.m` control = `sap.m.Button` name = `Button` class = `z2ui5_cl_smpc_app_005` path = `src/01/01/z2ui5_cl_smpc_app_005.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 noted, reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` checked = `CHECKED (2026-07-15): manually verified in a running system - each press toasts the pressed button's client-side control id, read via the event arg $event.oSource.sId, exactly like the original.` @@ -2060,7 +2190,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` are now exercised - min 5 hides the badge over the current value 2 (proof that setBadgeMinValue landed), max 50 reaches _badgeMaxValue - and the module then restores the saved draft through the` && ` app-state hash (#/z2ui5-xapp-state=), the framework's come-back-to-this-app path, and asserts that the rebuilt Button still carries 5/50.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Button` name = `ButtonWithBadge` class = `z2ui5_cl_smpc_app_249` path = `src/02/01/z2ui5_cl_smpc_app_249.clas.abap` + ( module = `sap.m` control = `sap.m.Button` name = `ButtonWithBadge` class = `z2ui5_cl_smpc_app_249` path = `src/02/01/z2ui5_cl_smpc_app_249.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` is_post171 = abap_true @@ -2071,7 +2201,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` - so a binding is not available for them and a control call is the only wire there is. The app needs a UI5 release >= 1.132 to render the badgeStyle; the badge itself needs >= 1.80.` ) ). result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Carousel` name = `Carousel` class = `z2ui5_cl_smpc_app_398` path = `src/02/01/z2ui5_cl_smpc_app_398.clas.abap` + ( module = `sap.m` control = `sap.m.Carousel` name = `Carousel` class = `z2ui5_cl_smpc_app_398` path = `src/02/01/z2ui5_cl_smpc_app_398.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: 1 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` is_post171 = abap_true @@ -2088,7 +2218,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` Slider.liveChange). // NOTE: The Slider value -> Carousel width expression binding is client-side model propagation and is unverified in a running system. **e2e-verified 2026-08-22** (nightly e2e` && ` interaction, meta/interactions/z2ui5_cl_smpc_app_427.mjs).`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Carousel` name = `CarouselEmptyMessages` class = `z2ui5_cl_smpc_app_427` path = `src/02/01/z2ui5_cl_smpc_app_427.clas.abap` + ( module = `sap.m` control = `sap.m.Carousel` name = `CarouselEmptyMessages` class = `z2ui5_cl_smpc_app_427` path = `src/02/01/z2ui5_cl_smpc_app_427.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: 2 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` is_post171 = abap_true @@ -2103,7 +2233,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` all 77 ports that do it', which had stopped being true as the corpus grew past that day's snapshot - 126 ports do it now, and 17 of them declared it nowhere. Those 17 carry the declaration since` && ` today, so the claim holds again; a stale absolute count is what made it wrong, so this wording names the date the count was taken.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Carousel` name = `CarouselWithControls` class = `z2ui5_cl_smpc_app_006` path = `src/02/01/z2ui5_cl_smpc_app_006.clas.abap` + ( module = `sap.m` control = `sap.m.Carousel` name = `CarouselWithControls` class = `z2ui5_cl_smpc_app_006` path = `src/02/01/z2ui5_cl_smpc_app_006.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted, reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` is_post171 = abap_true @@ -2139,7 +2269,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` groups repaints the carousel, that the slider resizes its container and that the image-count input rebuilds the pages. **e2e-verified 2026-08-25** (nightly e2e interaction,`. text1 = text1 && ` meta/interactions/z2ui5_cl_smpc_app_604.mjs).`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Carousel` name = `CarouselWithDisplayOptions` class = `z2ui5_cl_smpc_app_604` path = `src/02/01/z2ui5_cl_smpc_app_604.clas.abap` + ( module = `sap.m` control = `sap.m.Carousel` name = `CarouselWithDisplayOptions` class = `z2ui5_cl_smpc_app_604` path = `src/02/01/z2ui5_cl_smpc_app_604.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` is_post171 = abap_true @@ -2171,7 +2301,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` (desktop 4 / tablet 2 / else 1), the mirror apps 012/173/302 already read. It was hard-coded to the desktop leg with a NOTE calling that 'resolved statically' - but CAPABILITIES marks the device` && ` model ✅ and the branch is expressible, so declaring it did not make it right. The original seeds the value once in onInit and so does the port.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Carousel` name = `CarouselWithMorePages` class = `z2ui5_cl_smpc_app_252` path = `src/02/01/z2ui5_cl_smpc_app_252.clas.abap` + ( module = `sap.m` control = `sap.m.Carousel` name = `CarouselWithMorePages` class = `z2ui5_cl_smpc_app_252` path = `src/02/01/z2ui5_cl_smpc_app_252.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -2181,7 +2311,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` to render both.` ) ). result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.CheckBox` name = `CheckBox` class = `z2ui5_cl_smpc_app_155` path = `src/02/01/z2ui5_cl_smpc_app_155.clas.abap` + ( module = `sap.m` control = `sap.m.CheckBox` name = `CheckBox` class = `z2ui5_cl_smpc_app_155` path = `src/02/01/z2ui5_cl_smpc_app_155.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` is_post171 = abap_true @@ -2189,7 +2319,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` reproduced 1:1. // POST-1.71: CheckBox.required (@since 1.121, the 'Required option' CheckBox) is used 1:1. Newer than UI5 1.71; declared per the property-171 policy, so the app needs UI5 >= 1.121 to` && ` render the required state.` post171 = `CheckBox.required (@since 1.121, the 'Required option' CheckBox) is used 1:1. Newer than UI5 1.71; declared per the property-171 policy, so the app needs UI5 >= 1.121 to render the required state.` ) - ( module = `sap.m` control = `sap.m.CheckBox` name = `CheckBoxTriState` class = `z2ui5_cl_smpc_app_007` path = `src/01/01/z2ui5_cl_smpc_app_007.clas.abap` + ( module = `sap.m` control = `sap.m.CheckBox` name = `CheckBoxTriState` class = `z2ui5_cl_smpc_app_007` path = `src/01/01/z2ui5_cl_smpc_app_007.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` checked = `CHECKED (2026-07-15): manually verified in a running system - the select-all parent checkbox and its tri-state expression bindings behave like the original.; live-checked reference example for:` && @@ -2204,7 +2334,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` used to carry reached the visible text as two literal characters - the client's formatTemplate only substitutes {N}. The wire concatenates `` ... `` && |\n| && `` ... `` now, the string-template form` && ` where \n IS an escape. Same defect and same fix as app 250, where the review sweep found it.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.ColorPalette` name = `ColorPalette` class = `z2ui5_cl_smpc_app_008` path = `src/01/01/z2ui5_cl_smpc_app_008.clas.abap` + ( module = `sap.m` control = `sap.m.ColorPalette` name = `ColorPalette` class = `z2ui5_cl_smpc_app_008` path = `src/01/01/z2ui5_cl_smpc_app_008.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.54` @@ -2237,7 +2367,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` openSampleWithDisplayModeSet creates the instance without liveChange, and openSampleWithDisplayModeSetLiveChange only adds it if the instance does not exist yet - so pressing the 4th button first` && ` leaves the 5th without live change. The shared instance was already declared; that it makes the handler unconditional was not.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.ColorPalette` name = `ColorPalettePopover` class = `z2ui5_cl_smpc_app_250` path = `src/02/01/z2ui5_cl_smpc_app_250.clas.abap` + ( module = `sap.m` control = `sap.m.ColorPalette` name = `ColorPalettePopover` class = `z2ui5_cl_smpc_app_250` path = `src/02/01/z2ui5_cl_smpc_app_250.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -2264,7 +2394,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` + Success/Warning/Error thresholds). That is business logic, so - abap2UI5 being a thin frontend - it is computed in ABAP model_init into a WEIGHT_STATE field and bound state="{WEIGHT_STATE}", not` && ` via a frontend formatter (core:require dropped). Visually 1:1 with the original.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Column` name = `Table` class = `z2ui5_cl_smpc_app_009` path = `src/01/01/z2ui5_cl_smpc_app_009.clas.abap` + ( module = `sap.m` control = `sap.m.Column` name = `Table` class = `z2ui5_cl_smpc_app_009` path = `src/01/01/z2ui5_cl_smpc_app_009.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 reworked, reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -2287,7 +2417,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` original derives the ObjectNumber weight state in its frontend Formatter.js (weightState: KG conversion + Success/Warning/Error thresholds). That is business logic, so - abap2UI5 being a thin` && ` frontend - it is computed in ABAP model_init into a WEIGHT_STATE field and bound state="{WEIGHT_STATE}", not via a frontend formatter (core:require dropped). Visually 1:1 with the original.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.ColumnListItem` name = `TableTest` class = `z2ui5_cl_smpc_app_010` path = `src/01/01/z2ui5_cl_smpc_app_010.clas.abap` + ( module = `sap.m` control = `sap.m.ColumnListItem` name = `TableTest` class = `z2ui5_cl_smpc_app_010` path = `src/01/01/z2ui5_cl_smpc_app_010.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, reviewed, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth` && ` a close look.` @@ -2298,28 +2428,28 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. notes = text1 ) ). result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBox` class = `z2ui5_cl_smpc_app_011` path = `src/01/01/z2ui5_cl_smpc_app_011.clas.abap` + ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBox` class = `z2ui5_cl_smpc_app_011` path = `src/01/01/z2ui5_cl_smpc_app_011.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22` ) - ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBox2Columns` class = `z2ui5_cl_smpc_app_193` path = `src/01/01/z2ui5_cl_smpc_app_193.clas.abap` + ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBox2Columns` class = `z2ui5_cl_smpc_app_193` path = `src/01/01/z2ui5_cl_smpc_app_193.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22` ) - ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxClearIcon` class = `z2ui5_cl_smpc_app_455` path = `src/02/01/z2ui5_cl_smpc_app_455.clas.abap` + ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxClearIcon` class = `z2ui5_cl_smpc_app_455` path = `src/02/01/z2ui5_cl_smpc_app_455.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22` is_post171 = abap_true notes = `POST-1.71: sap.m.ComboBox inherits showClearIcon from sap.m.ComboBoxBase, where it is @since 1.96 - it is the subject of this sample, so it is kept 1:1 and the port needs a UI5 runtime >= 1.96.` post171 = `sap.m.ComboBox inherits showClearIcon from sap.m.ComboBoxBase, where it is @since 1.96 - it is the subject of this sample, so it is kept 1:1 and the port needs a UI5 runtime >= 1.96.` ) - ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxDefaultFiltering` class = `z2ui5_cl_smpc_app_463` path = `src/01/01/z2ui5_cl_smpc_app_463.clas.abap` + ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxDefaultFiltering` class = `z2ui5_cl_smpc_app_463` path = `src/01/01/z2ui5_cl_smpc_app_463.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22` ) ). result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxFilteringContains` class = `z2ui5_cl_smpc_app_470` path = `src/01/01/z2ui5_cl_smpc_app_470.clas.abap` + ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxFilteringContains` class = `z2ui5_cl_smpc_app_470` path = `src/01/01/z2ui5_cl_smpc_app_470.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22` @@ -2327,7 +2457,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` the documented boundary, so the port ships UI5's built-in filtering instead. The key half IS recoverable and is taken: filterSecondaryValues (@since 1.46, under the 1.71 floor) makes the default` && ` filter test additionalText, which this port binds to {KEY}. What remains lost is only the CONTAINS half - UI5's default matches at a word start, so 'many' no longer finds 'Germany' the way the` && ` sample's regex does.` ) - ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxFilteringStartsWith` class = `z2ui5_cl_smpc_app_471` path = `src/01/01/z2ui5_cl_smpc_app_471.clas.abap` + ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxFilteringStartsWith` class = `z2ui5_cl_smpc_app_471` path = `src/01/01/z2ui5_cl_smpc_app_471.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22` @@ -2335,13 +2465,13 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` is the documented boundary, so the port ships UI5's built-in filtering, plus filterSecondaryValues (@since 1.46, under the 1.71 floor) so the default filter also tests additionalText, which this port` && ` binds to {KEY} - that is the sample's or-key half. One residual difference stays: UI5's wordStartsWithValue anchors at ANY word start, the sample's regex only at the string start, so 'Herzegovina'` && ` matches 'Bosnia and Herzegovina' here and does not in the original.` ) - ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxGrouping` class = `z2ui5_cl_smpc_app_199` path = `src/01/01/z2ui5_cl_smpc_app_199.clas.abap` + ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxGrouping` class = `z2ui5_cl_smpc_app_199` path = `src/01/01/z2ui5_cl_smpc_app_199.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22` ) ). result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxLazyLoading` class = `z2ui5_cl_smpc_app_493` path = `src/01/01/z2ui5_cl_smpc_app_493.clas.abap` + ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxLazyLoading` class = `z2ui5_cl_smpc_app_493` path = `src/01/01/z2ui5_cl_smpc_app_493.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22` @@ -2349,7 +2479,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` loadItems event fires and the backend fills it - the same lazy behaviour (nothing is fetched before the picker opens), expressed with the framework's own round-trip. The binding-info's suspended flag` && ` has no equivalent and is dropped, and the mock server's artificial 3-second delay is not reproduced. // NOTE: The loadItems wire filling the bound items is unverified in a running system.` && ` **e2e-verified 2026-08-25** (nightly e2e interaction, meta/interactions/z2ui5_cl_smpc_app_493.mjs).` ) - ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxMaxPickerHeight` class = `z2ui5_cl_smpc_app_494` path = `src/02/01/z2ui5_cl_smpc_app_494.clas.abap` + ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxMaxPickerHeight` class = `z2ui5_cl_smpc_app_494` path = `src/02/01/z2ui5_cl_smpc_app_494.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22` @@ -2360,7 +2490,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` 1.150.` ) ). result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxSearchBoth` class = `z2ui5_cl_smpc_app_479` path = `src/01/01/z2ui5_cl_smpc_app_479.clas.abap` + ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxSearchBoth` class = `z2ui5_cl_smpc_app_479` path = `src/01/01/z2ui5_cl_smpc_app_479.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22` @@ -2374,7 +2504,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` NOT cover and which stay unverified in a running system: valueStateText (never read), the recovery branch (the module never corrects the entry, so a dead ELSE that leaves the state at Error would` && ` pass), and the selectedKey binding (drop it and selected_key stays initial, the error branch still fires and the assertion still passes).`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxValidation` class = `z2ui5_cl_smpc_app_475` path = `src/01/01/z2ui5_cl_smpc_app_475.clas.abap` + ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxValidation` class = `z2ui5_cl_smpc_app_475` path = `src/01/01/z2ui5_cl_smpc_app_475.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22` @@ -2390,7 +2520,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` 2026-08-22 e2e finding). // NOTE: the two ComboBoxes that carry a formattedValueStateText ALSO carry the plain valueStateText in the sample (the long 'Warning message. Extra long text ...' string) -` && ` UI5 shows the formatted one and ignores the plain one. Both are kept, since both are what the sample writes; app 032 carries the same pair for sap.m.Input.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxValueState` class = `z2ui5_cl_smpc_app_616` path = `src/02/01/z2ui5_cl_smpc_app_616.clas.abap` + ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxValueState` class = `z2ui5_cl_smpc_app_616` path = `src/02/01/z2ui5_cl_smpc_app_616.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -2402,7 +2532,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` is why this is an error rather than a warning.` ) ). result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxWrapping` class = `z2ui5_cl_smpc_app_384` path = `src/01/01/z2ui5_cl_smpc_app_384.clas.abap` + ( module = `sap.m` control = `sap.m.ComboBox` name = `ComboBoxWrapping` class = `z2ui5_cl_smpc_app_384` path = `src/01/01/z2ui5_cl_smpc_app_384.clas.abap` score = 1 score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22` ) ). @@ -2458,7 +2588,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` DECIMALS 2, needed for the ObjectNumber's sap.ui.model.type.Currency binding, which renders 956.00 in BOTH), and an ABAP packed value always serialises with its two decimals. Only the Props text` && ` differs, and only in the trailing zeros - the ObjectNumber above it is identical in both.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.ComparisonPattern` name = `ComparisonPattern` class = `z2ui5_cl_smpc_app_012` path = `src/01/01/z2ui5_cl_smpc_app_012.clas.abap` + ( module = `sap.m` control = `sap.m.ComparisonPattern` name = `ComparisonPattern` class = `z2ui5_cl_smpc_app_012` path = `src/01/01/z2ui5_cl_smpc_app_012.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 reworked, reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -2487,7 +2617,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` attachAfterOpen, i.e. AFTER the dialog set its initial focus, and abap2UI5 has no afterOpen hook for a popup_display fragment), and after CANCEL_PRESS the footer OverflowToolbar's focus restore,` && ` which UI5 runs after every onAfterRendering delegate, takes it back - the original's _focusButton loses it to the same restore.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.CookieSettingsDialogPattern` name = `CookieSettingsDialogPattern` class = `z2ui5_cl_smpc_app_013` path = `src/01/01/z2ui5_cl_smpc_app_013.clas.abap` + ( module = `sap.m` control = `sap.m.CookieSettingsDialogPattern` name = `CookieSettingsDialogPattern` class = `z2ui5_cl_smpc_app_013` path = `src/01/01/z2ui5_cl_smpc_app_013.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 3 reworked, reviewed, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth` && ` a close look.` @@ -2503,7 +2633,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` via t_arg ${PRODUCTPICURL} - the original reads evt.getSource().getTarget(), whose target property is bound to the same column. The Close button maps to client->follow_up_action( popup_close ); the` && ` original's afterClose destroy is handled by the framework's popup lifecycle and is not wired separately.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.CustomListItem` name = `CustomListItem` class = `z2ui5_cl_smpc_app_014` path = `src/01/01/z2ui5_cl_smpc_app_014.clas.abap` + ( module = `sap.m` control = `sap.m.CustomListItem` name = `CustomListItem` class = `z2ui5_cl_smpc_app_014` path = `src/01/01/z2ui5_cl_smpc_app_014.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 3 noted, reviewed, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a` && ` close look.` @@ -2513,7 +2643,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. notes = text1 ) ). result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.CustomTreeItem` name = `CustomTreeItem` class = `z2ui5_cl_smpc_app_015` path = `src/01/01/z2ui5_cl_smpc_app_015.clas.abap` + ( module = `sap.m` control = `sap.m.CustomTreeItem` name = `CustomTreeItem` class = `z2ui5_cl_smpc_app_015` path = `src/01/01/z2ui5_cl_smpc_app_015.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted, reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.48.0` @@ -2534,7 +2664,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` check). The check covered the visible behaviour; the browser console was not necessarily inspected for a silent recursion warning. The e2e interaction stays deliberately unarmed for this app - app` && ` 091 covers the hidden-picker openBy class.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.DatePicker` name = `DatePickerHidden` class = `z2ui5_cl_smpc_app_016` path = `src/02/01/z2ui5_cl_smpc_app_016.clas.abap` + ( module = `sap.m` control = `sap.m.DatePicker` name = `DatePickerHidden` class = `z2ui5_cl_smpc_app_016` path = `src/02/01/z2ui5_cl_smpc_app_016.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted, reviewed, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a` && ` close look.` @@ -2558,7 +2688,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` through a named products> model; abap2UI5 keeps one default model, so the prefix is dropped and the last path segment is identical. // NOTE: The multi-select, the date dialog and the mass date change` && ` are unverified in a running system. **e2e-verified 2026-08-25** (nightly e2e interaction, meta/interactions/z2ui5_cl_smpc_app_556.mjs).`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.DatePicker` name = `DatePickerMassEdit` class = `z2ui5_cl_smpc_app_556` path = `src/01/01/z2ui5_cl_smpc_app_556.clas.abap` + ( module = `sap.m` control = `sap.m.DatePicker` name = `DatePickerMassEdit` class = `z2ui5_cl_smpc_app_556` path = `src/01/01/z2ui5_cl_smpc_app_556.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22.0` @@ -2570,7 +2700,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` exactly once (sapMInputBaseContentWrapper on the DatePicker) and the bound valueStateText of the Warning row is written into the value-state node. Residual (nothing headless can assert): the` && ` value-state message popup's wrapping of the long text, which needs the theme CSS the harness does not load.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.DatePicker` name = `DatePickerValueState` class = `z2ui5_cl_smpc_app_253` path = `src/01/01/z2ui5_cl_smpc_app_253.clas.abap` + ( module = `sap.m` control = `sap.m.DatePicker` name = `DatePickerValueState` class = `z2ui5_cl_smpc_app_253` path = `src/01/01/z2ui5_cl_smpc_app_253.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: 2 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22.0` @@ -2592,7 +2722,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` Date(s)``, which ECMA-262 parses as UTC midnight: west of Greenwich the allowed range began on 2015-12-31, contradicting the sample's own label, which spells the intended bounds out in words. Same` && ` defect and same fix as app 220. Note this affects only these two: every other date in the port travels as a typed binding with a source pattern, which parses locally.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.DateRangeSelection` name = `DateRangeSelection` class = `z2ui5_cl_smpc_app_017` path = `src/02/01/z2ui5_cl_smpc_app_017.clas.abap` + ( module = `sap.m` control = `sap.m.DateRangeSelection` name = `DateRangeSelection` class = `z2ui5_cl_smpc_app_017` path = `src/02/01/z2ui5_cl_smpc_app_017.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -2614,7 +2744,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` idiom (control_by_id / openBy / $event.oSource.sId on a hideInput picker), its module asserts the Popover opens, and its sidecar records it e2e-verified 2026-08-04. App 016, the precedent both of` && ` these cite, scoped it correctly to itself; the copy dropped the scope.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.DateRangeSelection` name = `DateRangeSelectionHidden` class = `z2ui5_cl_smpc_app_256` path = `src/02/01/z2ui5_cl_smpc_app_256.clas.abap` + ( module = `sap.m` control = `sap.m.DateRangeSelection` name = `DateRangeSelectionHidden` class = `z2ui5_cl_smpc_app_256` path = `src/02/01/z2ui5_cl_smpc_app_256.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted, reviewed, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a` && ` close look.` @@ -2632,7 +2762,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` exactly once (sapMInputBaseContentWrapper on the DateRangeSelection) and the bound valueStateText of the Warning row is written into the value-state node. Residual (nothing headless can` && ` assert): the value-state message popup's wrapping of the long text, which needs the theme CSS the harness does not load.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.DateRangeSelection` name = `DateRangeSelectionValueState` class = `z2ui5_cl_smpc_app_254` path = `src/01/01/z2ui5_cl_smpc_app_254.clas.abap` + ( module = `sap.m` control = `sap.m.DateRangeSelection` name = `DateRangeSelectionValueState` class = `z2ui5_cl_smpc_app_254` path = `src/01/01/z2ui5_cl_smpc_app_254.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: 2 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.22.0` @@ -2655,7 +2785,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` DTP10 and DTP11 is kept for the 1:1 port. // POST-1.71: core:require of the z2ui5/model/formatter module on the view root needs UI5 >= 1.74; with the DateTimeWithTimezone binding type above the app` && ` needs a UI5 release >= 1.99 overall.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.DateTimePicker` name = `DateTimePicker` class = `z2ui5_cl_smpc_app_018` path = `src/02/01/z2ui5_cl_smpc_app_018.clas.abap` + ( module = `sap.m` control = `sap.m.DateTimePicker` name = `DateTimePicker` class = `z2ui5_cl_smpc_app_018` path = `src/02/01/z2ui5_cl_smpc_app_018.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 reworked, reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -2678,7 +2808,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` idiom (control_by_id / openBy / $event.oSource.sId on a hideInput picker), its module asserts the Popover opens, and its sidecar records it e2e-verified 2026-08-04. App 016, the precedent both of` && ` these cite, scoped it correctly to itself; the copy dropped the scope.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.DateTimePicker` name = `DateTimePickerHidden` class = `z2ui5_cl_smpc_app_257` path = `src/02/01/z2ui5_cl_smpc_app_257.clas.abap` + ( module = `sap.m` control = `sap.m.DateTimePicker` name = `DateTimePickerHidden` class = `z2ui5_cl_smpc_app_257` path = `src/02/01/z2ui5_cl_smpc_app_257.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted, reviewed, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a` && ` close look.` @@ -2696,7 +2826,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` exactly once (sapMInputBaseContentWrapper on the DateTimePicker) and the bound valueStateText of the Warning row is written into the value-state node. Residual (nothing headless can assert):` && ` the value-state message popup's wrapping of the long text, which needs the theme CSS the harness does not load.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.DateTimePicker` name = `DateTimePickerValueState` class = `z2ui5_cl_smpc_app_255` path = `src/01/01/z2ui5_cl_smpc_app_255.clas.abap` + ( module = `sap.m` control = `sap.m.DateTimePicker` name = `DateTimePickerValueState` class = `z2ui5_cl_smpc_app_255` path = `src/01/01/z2ui5_cl_smpc_app_255.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: 2 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.38.0` @@ -2712,7 +2842,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` round-trip). // NOTE: Cancel: the approve dialog (no inputs) closes client-side via follow_up_action popup_close; the three note dialogs cancel through a backend DIALOG_CANCEL event + popup_destroy` && ` so the two-way model sync keeps the typed note across a reopen, matching the original's reused cached dialog instances.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Dialog` name = `DialogConfirm` class = `z2ui5_cl_smpc_app_019` path = `src/01/01/z2ui5_cl_smpc_app_019.clas.abap` + ( module = `sap.m` control = `sap.m.Dialog` name = `DialogConfirm` class = `z2ui5_cl_smpc_app_019` path = `src/01/01/z2ui5_cl_smpc_app_019.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, reviewed, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth` && ` a close look.` @@ -2735,7 +2865,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` sets no customHeader and the context is not a phone). The module already opens that dialog, so the button's presence, its tooltip swap and the stretched dialog are all assertable - the leg is open` && ` for want of an assertion, not for want of a runtime and the resizable/draggable behaviour of the other two dialogs, which differ only in the flags the same builder writes.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Dialog` name = `DialogFullScreen` class = `z2ui5_cl_smpc_app_274` path = `src/02/01/z2ui5_cl_smpc_app_274.clas.abap` + ( module = `sap.m` control = `sap.m.Dialog` name = `DialogFullScreen` class = `z2ui5_cl_smpc_app_274` path = `src/02/01/z2ui5_cl_smpc_app_274.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, reviewed, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth` && ` a close look.` @@ -2757,7 +2887,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` text, locates the button by its accessible name OK, and never looks at the title, at state, or at the button type. The close leg and the second open are genuinely covered (popup_close, no round-trip)` && ` - the second open proves the rebuild-per-open lifecycle works. The other three differ only in the three literals the same builder method fills in, and render-smoke covers their views.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Dialog` name = `DialogMessage` class = `z2ui5_cl_smpc_app_273` path = `src/01/01/z2ui5_cl_smpc_app_273.clas.abap` + ( module = `sap.m` control = `sap.m.Dialog` name = `DialogMessage` class = `z2ui5_cl_smpc_app_273` path = `src/01/01/z2ui5_cl_smpc_app_273.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, reviewed, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth` && ` a close look.` @@ -2777,7 +2907,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` noted in the method's own comment. Below 1.89 the lazy require returns undefined and the dispatch hits its "not available" guard, so the popup is not confined to the within-area. This class is filed` && ` under src/02 for Button.ariaHasPopup @1.84 already; 1.89 is the higher of the two floors it needs.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Dialog` name = `DialogWithinArea` class = `z2ui5_cl_smpc_app_561` path = `src/02/01/z2ui5_cl_smpc_app_561.clas.abap` + ( module = `sap.m` control = `sap.m.Dialog` name = `DialogWithinArea` class = `z2ui5_cl_smpc_app_561` path = `src/02/01/z2ui5_cl_smpc_app_561.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -2826,7 +2956,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` same reasoning apps 563/564 write down for their own handleDialogPress/handlePopoverPress. // NOTE: not yet verified in a running system: the Dialog + MessagePopover-in-dependents combination, the` && ` toggleBy/openBy anchoring from inside a popup, and the backend-computed button severity. **e2e-verified 2026-08-25** (nightly e2e interaction, meta/interactions/z2ui5_cl_smpc_app_562.mjs).`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.Dialog` name = `DialogWithMessagePopover` class = `z2ui5_cl_smpc_app_562` path = `src/02/01/z2ui5_cl_smpc_app_562.clas.abap` + ( module = `sap.m` control = `sap.m.Dialog` name = `DialogWithMessagePopover` class = `z2ui5_cl_smpc_app_562` path = `src/02/01/z2ui5_cl_smpc_app_562.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -2842,7 +2972,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` SupplierCollection record, full row set, values verifiable offline. // NOTE: element binding binding="{/T_SUPPLIERS/0}" with relative DisplayListItem value bindings - the binding= context mechanism` && ` is already live-verified via app 041 (checked 2026-07-19); the /0 array-index path variant is a plain JSONModel path resolution, source-decidable, so no LIVE_TEST is carried.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.DisplayListItem` name = `DisplayListItem` class = `z2ui5_cl_smpc_app_020` path = `src/01/01/z2ui5_cl_smpc_app_020.clas.abap` + ( module = `sap.m` control = `sap.m.DisplayListItem` name = `DisplayListItem` class = `z2ui5_cl_smpc_app_020` path = `src/01/01/z2ui5_cl_smpc_app_020.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: 3 noted, reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` checked = `CHECKED (2026-07-20): verified in a running system - human pass 2026-07-20: app starts and renders like the original; no interaction paths were open for this port. **e2e-verified 2026-09-12**` && @@ -2857,7 +2987,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` button twice in direct succession does not re-run the indicator - the model value is unchanged, so no binding change fires and setState is not called again (the original re-queues on every method` && ` call); pressing a different button in between restores the behaviour.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.DraftIndicator` name = `DraftIndicator` class = `z2ui5_cl_smpc_app_021` path = `src/01/01/z2ui5_cl_smpc_app_021.clas.abap` + ( module = `sap.m` control = `sap.m.DraftIndicator` name = `DraftIndicator` class = `z2ui5_cl_smpc_app_021` path = `src/01/01/z2ui5_cl_smpc_app_021.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 2 noted, reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.32.0` @@ -2884,12 +3014,56 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` ONE action, and routing all three through a round-trip instead puts a server hop on every keystroke - the lossy pattern AGENTS section 10 warns about, and it trips the live-event-roundtrip advisory` && ` ratchet, so it was tried and withdrawn.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.DraftIndicator` name = `SemanticPageDraftIndicator` class = `z2ui5_cl_smpc_app_448` path = `src/01/01/z2ui5_cl_smpc_app_448.clas.abap` + ( module = `sap.m` control = `sap.m.DraftIndicator` name = `SemanticPageDraftIndicator` class = `z2ui5_cl_smpc_app_448` path = `src/01/01/z2ui5_cl_smpc_app_448.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.32.0` notes = text1 ) ). + result = VALUE #( BASE result + ( module = `sap.m` control = `sap.m.DynamicDateRange` name = `DynamicDateRange` class = `z2ui5_cl_smpc_app_639` path = `src/02/01/z2ui5_cl_smpc_app_639.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.92.0` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.m.DynamicDateRange control (since UI5 1.92.0) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.92.0.` + post171 = `the sap.m.DynamicDateRange control (since UI5 1.92.0) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.92.0.` ) + ( module = `sap.m` control = `sap.m.DynamicDateRange` name = `DynamicDateRangeAndCalendarWeekNumbering` class = `z2ui5_cl_smpc_app_640` path = `src/02/01/z2ui5_cl_smpc_app_640.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.92.0` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.m.DynamicDateRange control (since UI5 1.92.0) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.92.0.` + post171 = `the sap.m.DynamicDateRange control (since UI5 1.92.0) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.92.0.` ) + ( module = `sap.m` control = `sap.m.DynamicDateRange` name = `DynamicDateRangeHidden` class = `z2ui5_cl_smpc_app_641` path = `src/02/01/z2ui5_cl_smpc_app_641.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.92.0` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.m.DynamicDateRange control (since UI5 1.92.0) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.92.0.` + post171 = `the sap.m.DynamicDateRange control (since UI5 1.92.0) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.92.0.` ) ). + + result = VALUE #( BASE result + ( module = `sap.m` control = `sap.m.DynamicDateRange` name = `DynamicDateRangeWithCustomOptions` class = `z2ui5_cl_smpc_app_642` path = `src/02/01/z2ui5_cl_smpc_app_642.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.92.0` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.m.DynamicDateRange control (since UI5 1.92.0) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.92.0.` + post171 = `the sap.m.DynamicDateRange control (since UI5 1.92.0) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.92.0.` ) + ( module = `sap.m` control = `sap.m.ExpandableText` name = `ExpandableText` class = `z2ui5_cl_smpc_app_643` path = `src/02/01/z2ui5_cl_smpc_app_643.clas.abap` + score = 1 + score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + since = `1.87` + since_post171 = abap_true + is_post171 = abap_true + notes = `POST-1.71: the sap.m.ExpandableText control (since UI5 1.87) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.87.` + post171 = `the sap.m.ExpandableText control (since UI5 1.87) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.87.` ) ). + text1 = `POST-1.71: one post-1.71 member is kept for the 1:1 port: the FacetFilterList search event (since UI5 1.76), which is the whole point of this sample - it is what lets the application replace the` && ` list's built-in filtering with its own. // NOTE: lists="{/ProductCollectionStats/Filters}" stays BOUND here (unlike app 235, which unrolled the same collection into two static lists): the` && ` FacetFilterList is a template over T_FILTERS and its items come from the group's own nested VALUES table, so the port keeps the original's two-level binding shape. The stats entries carry only type +` && @@ -2934,7 +3108,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` master - so after a SEARCH that hides a selected value, the rebuild re-issues the narrower filter. That is the port's existing CONFIRM semantics (the next confirm would emit the same thing), not`. text1 = text1 && ` something the re-issue introduces.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.FacetFilter` name = `FacetFilterCustomFilters` class = `z2ui5_cl_smpc_app_557` path = `src/02/01/z2ui5_cl_smpc_app_557.clas.abap` + ( module = `sap.m` control = `sap.m.FacetFilter` name = `FacetFilterCustomFilters` class = `z2ui5_cl_smpc_app_557` path = `src/02/01/z2ui5_cl_smpc_app_557.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -2978,7 +3152,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` inside one running app instance, where the view is never rebuilt, so it could not have seen this. The port stays checked - what was checked passed - but the compound-binding_call reference claim now` && ` rests on the re-issue as well.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.FacetFilter` name = `FacetFilterLight` class = `z2ui5_cl_smpc_app_022` path = `src/01/01/z2ui5_cl_smpc_app_022.clas.abap` + ( module = `sap.m` control = `sap.m.FacetFilter` name = `FacetFilterLight` class = `z2ui5_cl_smpc_app_022` path = `src/01/01/z2ui5_cl_smpc_app_022.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 reworked, reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -3019,13 +3193,13 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` binding put the 34 rows back, and the empty form ([] -> buildFilterGroups -> binding.filter([]) in core/actions/ControlCall.js) clears without error, which is why the guard is "has a filter ever been` && ` issued" and not a selection scan. Statement order in ABAP is irrelevant: View1.controller.js awaits every T_SYSTEM display before it runs a T_CUSTOM follow-up.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.FacetFilter` name = `FacetFilterSimple` class = `z2ui5_cl_smpc_app_235` path = `src/01/01/z2ui5_cl_smpc_app_235.clas.abap` + ( module = `sap.m` control = `sap.m.FacetFilter` name = `FacetFilterSimple` class = `z2ui5_cl_smpc_app_235` path = `src/01/01/z2ui5_cl_smpc_app_235.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 reworked). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` notes = text1 ) ). result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.FeedContent` name = `FeedContent` class = `z2ui5_cl_smpc_app_023` path = `src/01/01/z2ui5_cl_smpc_app_023.clas.abap` + ( module = `sap.m` control = `sap.m.FeedContent` name = `FeedContent` class = `z2ui5_cl_smpc_app_023` path = `src/01/01/z2ui5_cl_smpc_app_023.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.34` @@ -3041,7 +3215,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. text1 = text1 && ` now, and 17 of them declared it nowhere. Those 17 carry the declaration since today, so the claim holds again; a stale absolute count is what made it wrong, so this wording names the date the count` && ` was taken.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.FeedInput` name = `Feed` class = `z2ui5_cl_smpc_app_024` path = `src/01/01/z2ui5_cl_smpc_app_024.clas.abap` + ( module = `sap.m` control = `sap.m.FeedInput` name = `Feed` class = `z2ui5_cl_smpc_app_024` path = `src/01/01/z2ui5_cl_smpc_app_024.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 reworked, reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -3064,7 +3238,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` response (the app-019 toast+destroy precedent, but with a control method). **e2e-verified 2026-07-30** (transpiled-framework interaction, scripts/e2e-smoke.mjs): the action dialog's 'Enable Post` && ` Button' click runs the enablePostButton follow-up and the popup_destroy closes the dialog in the same response.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.FeedInput` name = `FeedInput` class = `z2ui5_cl_smpc_app_236` path = `src/02/01/z2ui5_cl_smpc_app_236.clas.abap` + ( module = `sap.m` control = `sap.m.FeedInput` name = `FeedInput` class = `z2ui5_cl_smpc_app_236` path = `src/02/01/z2ui5_cl_smpc_app_236.clas.abap` score = 5 score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 0 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && ` look.` @@ -3092,7 +3266,7 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. ` derives the package mechanically from 'has a POST_171' - this is the corpus' first port whose ONLY POST_171 is a scanner artefact rather than a real runtime floor, so the folder here records the`. text2 = text2 && ` declaration, not a requirement.`. result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.FeedListItem` name = `FeedListItem` class = `z2ui5_cl_smpc_app_025` path = `src/02/01/z2ui5_cl_smpc_app_025.clas.abap` + ( module = `sap.m` control = `sap.m.FeedListItem` name = `FeedListItem` class = `z2ui5_cl_smpc_app_025` path = `src/02/01/z2ui5_cl_smpc_app_025.clas.abap` score = 4 score_tip = `Rating 4 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 3 noted, reviewed). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` since = `1.12` @@ -3104,18 +3278,18 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. post171 = text2 ) ). result = VALUE #( BASE result - ( module = `sap.m` control = `sap.m.FlexBox` name = `FlexBoxBasicAlignment` class = `z2ui5_cl_smpc_app_392` path = `src/01/01/z2ui5_cl_smpc_app_392.clas.abap` + ( module = `sap.m` control = `sap.m.FlexBox` name = `FlexBoxBasicAlignment` class = `z2ui5_cl_smpc_app_392` path = `src/01/01/z2ui5_cl_smpc_app_392.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` ) - ( module = `sap.m` control = `sap.m.FlexBox` name = `FlexBoxCols` class = `z2ui5_cl_smpc_app_426` path = `src/01/01/z2ui5_cl_smpc_app_426.clas.abap` + ( module = `sap.m` control = `sap.m.FlexBox` name = `FlexBoxCols` class = `z2ui5_cl_smpc_app_426` path = `src/01/01/z2ui5_cl_smpc_app_426.clas.abap` score = 2 score_tip = `Rating 2 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: 1 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` notes = `NOTE: The sample ships its own style.css (.equalColumns .columns min-height 200px and the .sapMFlexItem padding). abap2UI5 serves no per-sample stylesheet, so the two rules are injected verbatim` && ` through an extra core:HTML + + + +
+
+ + \ No newline at end of file diff --git a/ui5/sap.m/p13n.Container/manifest.json b/ui5/sap.m/p13n.Container/manifest.json new file mode 100644 index 000000000..61bc32bcb --- /dev/null +++ b/ui5/sap.m/p13n.Container/manifest.json @@ -0,0 +1,31 @@ +{ + "sap.app": { + "id": "sap.m.sample.p13n.Container", + "applicationVersion": { + "version": "1.0.0" + } + }, + "sap.ui5": { + "rootView": { + "viewName": "sap.m.sample.p13n.Container.P13nContainer", + "type": "XML", + "async": true + }, + "dependencies": { + "libs": { + "sap.m": {}, + "sap.ui.core": {}, + "sap.ui.layout": {} + } + }, + "config": { + "sample": { + "files": [ + "P13nContainer.view.xml", + "P13nContainer.controller.js", + "manifest.json" + ] + } + } + } +} \ No newline at end of file diff --git a/ui5/sap.m/p13n.Engine/Component.js b/ui5/sap.m/p13n.Engine/Component.js new file mode 100644 index 000000000..b4b6d61e6 --- /dev/null +++ b/ui5/sap.m/p13n.Engine/Component.js @@ -0,0 +1,15 @@ +sap.ui.define([ + 'sap/ui/core/UIComponent' +], function(UIComponent) { + "use strict"; + + const Component = UIComponent.extend("sap.m.sample.p13n.Engine.Component", { + + metadata: { + manifest: "json" + } + }); + + return Component; + +}); \ No newline at end of file diff --git a/ui5/sap.m/p13n.Engine/Engine.controller.js b/ui5/sap.m/p13n.Engine/Engine.controller.js new file mode 100644 index 000000000..e19b574ce --- /dev/null +++ b/ui5/sap.m/p13n.Engine/Engine.controller.js @@ -0,0 +1,373 @@ +sap.ui.define([ + 'sap/ui/core/mvc/Controller', + 'sap/ui/model/json/JSONModel', + 'sap/m/p13n/Engine', + 'sap/m/p13n/SelectionController', + 'sap/m/p13n/SortController', + 'sap/m/p13n/GroupController', + 'sap/m/p13n/FilterController', + 'sap/m/p13n/MetadataHelper', + 'sap/ui/model/Sorter', + 'sap/m/ColumnListItem', + 'sap/m/Text', + 'sap/ui/core/library', + 'sap/m/table/ColumnWidthController', + 'sap/ui/model/Filter' +], function(Controller, JSONModel, Engine, SelectionController, SortController, GroupController, FilterController, MetadataHelper, Sorter, ColumnListItem, Text, coreLibrary, ColumnWidthController, Filter) { + "use strict"; + + return Controller.extend("sap.m.sample.p13n.Engine.Page", { + + onInit: function() { + const oData = { + items: [{ + key: "P1", + firstName: "Peter", + lastName: "Mueller", + size: "1.75", + city: "Walldorf" + }, + { + key: "P2", + firstName: "Petra", + lastName: "Maier", + size: "1.85", + city: "Walldorf" + }, + { + key: "P3", + firstName: "Thomas", + lastName: "Smith", + size: "1.95", + city: "Heidelberg" + }, + { + key: "P4", + firstName: "John", + lastName: "Williams", + size: "1.65", + city: "Walldorf" + }, + { + key: "P5", + firstName: "Maria", + lastName: "Jones", + size: "1.55", + city: "Walldorf" + } + ] + }; + + const oModel = new JSONModel(oData); + this._oModel = oModel; + + this.getView().setModel(oModel); + + this._registerForP13n(); + }, + + onExit: function() { + Engine.getInstance().detachStateChange(this.handleStateChange, this); + }, + + _registerForP13n: function() { + const oTable = this.byId("persoTable"); + + this.oMetadataHelper = new MetadataHelper([{ + key: "firstName_col", + label: "First Name", + path: "firstName" + }, + { + key: "lastName_col", + label: "Last Name", + path: "lastName" + }, + { + key: "city_col", + label: "City", + path: "city" + }, + { + key: "size_col", + label: "Size", + path: "size" + } + ]); + + Engine.getInstance().register(oTable, { + helper: this.oMetadataHelper, + controller: { + Columns: new SelectionController({ + targetAggregation: "columns", + control: oTable + }), + Sorter: new SortController({ + control: oTable + }), + Groups: new GroupController({ + control: oTable + }), + ColumnWidth: new ColumnWidthController({ + control: oTable + }), + Filter: new FilterController({ + control: oTable + }) + } + }); + + Engine.getInstance().attachStateChange(this.handleStateChange, this); + }, + + openPersoDialog: function(oEvt) { + this._openPersoDialog(["Columns", "Sorter", "Groups", "Filter"], oEvt.getSource()); + }, + + _openPersoDialog: function(aPanels, oSource) { + var oTable = this.byId("persoTable"); + + Engine.getInstance().show(oTable, aPanels, { + contentHeight: aPanels.length > 1 ? "50rem" : "35rem", + contentWidth: aPanels.length > 1 ? "45rem" : "32rem", + source: oSource || oTable + }); + }, + + _getKey: function(oControl) { + return oControl.data("p13nKey"); + }, + + handleStateChange: function(oEvt) { + const oTable = this.byId("persoTable"); + const oState = oEvt.getParameter("state"); + + if (!oState) { + return; + } + + //Update the columns per selection in the state + this.updateColumns(oState); + + //Create Filters & Sorters + const aFilter = this.createFilters(oState); + const aGroups = this.createGroups(oState); + const aSorter = this.createSorters(oState, aGroups); + + const aCells = oState.Columns.map(function(oColumnState) { + return new Text({ + text: "{" + this.oMetadataHelper.getProperty(oColumnState.key).path + "}" + }); + }.bind(this)); + + //rebind the table with the updated cell template + oTable.bindItems({ + templateShareable: false, + path: '/items', + sorter: aSorter.concat(aGroups), + filters: aFilter, + template: new ColumnListItem({ + cells: aCells + }) + }); + + }, + + createFilters: function(oState) { + const aFilter = []; + Object.keys(oState.Filter).forEach((sFilterKey) => { + const filterPath = this.oMetadataHelper.getProperty(sFilterKey).path; + + oState.Filter[sFilterKey].forEach(function(oConditon) { + aFilter.push(new Filter(filterPath, oConditon.operator, oConditon.values[0])); + }); + }); + + this.byId("filterInfo").setVisible(aFilter.length > 0); + + return aFilter; + }, + + createSorters: function(oState, aExistingSorter) { + const aSorter = aExistingSorter || []; + oState.Sorter.forEach(function(oSorter) { + const oExistingSorter = aSorter.find(function(oSort) { + return oSort.sPath === this.oMetadataHelper.getProperty(oSorter.key).path; + }.bind(this)); + + if (oExistingSorter) { + oExistingSorter.bDescending = !!oSorter.descending; + } else { + aSorter.push(new Sorter(this.oMetadataHelper.getProperty(oSorter.key).path, oSorter.descending)); + } + }.bind(this)); + + oState.Sorter.forEach((oSorter) => { + const oCol = this.byId("persoTable").getColumns().find((oColumn) => oColumn.data("p13nKey") === oSorter.key); + if (oSorter.sorted !== false) { + oCol.setSortIndicator(oSorter.descending ? coreLibrary.SortOrder.Descending : coreLibrary.SortOrder.Ascending); + } + }); + + return aSorter; + }, + + createGroups: function(oState) { + const aGroupings = []; + oState.Groups.forEach(function(oGroup) { + aGroupings.push(new Sorter(this.oMetadataHelper.getProperty(oGroup.key).path, false, true)); + }.bind(this)); + + oState.Groups.forEach((oSorter) => { + const oCol = this.byId("persoTable").getColumns().find((oColumn) => oColumn.data("p13nKey") === oSorter.key); + oCol.data("grouped", true); + }); + + return aGroupings; + }, + + updateColumns: function(oState) { + const oTable = this.byId("persoTable"); + + oTable.getColumns().forEach((oColumn, iIndex) => { + oColumn.setVisible(false); + oColumn.setWidth(oState.ColumnWidth[this._getKey(oColumn)]); + oColumn.setSortIndicator(coreLibrary.SortOrder.None); + oColumn.data("grouped", false); + }); + + oState.Columns.forEach((oProp, iIndex) => { + const oCol = oTable.getColumns().find((oColumn) => oColumn.data("p13nKey") === oProp.key); + oCol.setVisible(true); + + oTable.removeColumn(oCol); + oTable.insertColumn(oCol, iIndex); + }); + }, + + beforeOpenColumnMenu: function(oEvt) { + const oMenu = this.byId("menu"); + const oColumn = oEvt.getParameter("openBy"); + const oSortItem = oMenu.getQuickActions()[0].getItems()[0]; + const oGroupItem = oMenu.getQuickActions()[1].getItems()[0]; + + oSortItem.setKey(this._getKey(oColumn)); + oSortItem.setLabel(oColumn.getHeader().getText()); + oSortItem.setSortOrder(oColumn.getSortIndicator()); + + oGroupItem.setKey(this._getKey(oColumn)); + oGroupItem.setLabel(oColumn.getHeader().getText()); + oGroupItem.setGrouped(oColumn.data("grouped")); + }, + + onFilterInfoPress: function(oEvt) { + this._openPersoDialog(["Filter"], oEvt.getSource()); + }, + + onSort: function(oEvt) { + const oSortItem = oEvt.getParameter("item"); + const oTable = this.byId("persoTable"); + const sAffectedProperty = oSortItem.getKey(); + const sSortOrder = oSortItem.getSortOrder(); + + //Apply the state programatically on sorting through the column menu + //1) Retrieve the current personalization state + Engine.getInstance().retrieveState(oTable).then(function(oState) { + + //2) Modify the existing personalization state --> clear all sorters before + oState.Sorter.forEach(function(oSorter) { + oSorter.sorted = false; + }); + + if (sSortOrder !== coreLibrary.SortOrder.None) { + oState.Sorter.push({ + key: sAffectedProperty, + descending: sSortOrder === coreLibrary.SortOrder.Descending + }); + } + + //3) Apply the modified personalization state to persist it in the VariantManagement + Engine.getInstance().applyState(oTable, oState); + }); + }, + + onGroup: function(oEvt) { + const oGroupItem = oEvt.getParameter("item"); + const oTable = this.byId("persoTable"); + const sAffectedProperty = oGroupItem.getKey(); + + //1) Retrieve the current personalization state + Engine.getInstance().retrieveState(oTable).then(function(oState) { + + //2) Modify the existing personalization state --> clear all groupings before + oState.Groups.forEach(function(oSorter) { + oSorter.grouped = false; + }); + + if (oGroupItem.getGrouped()) { + oState.Groups.push({ + key: sAffectedProperty + }); + } + + //3) Apply the modified personalization state to persist it in the VariantManagement + Engine.getInstance().applyState(oTable, oState); + }); + }, + + onColumnMove: function(oEvt) { + const oDraggedColumn = oEvt.getParameter("draggedControl"); + const oDroppedColumn = oEvt.getParameter("droppedControl"); + + if (oDraggedColumn === oDroppedColumn) { + return; + } + + const oTable = this.byId("persoTable"); + const sDropPosition = oEvt.getParameter("dropPosition"); + const iDraggedIndex = oTable.indexOfColumn(oDraggedColumn); + const iDroppedIndex = oTable.indexOfColumn(oDroppedColumn); + const iNewPos = iDroppedIndex + (sDropPosition == "Before" ? 0 : 1) + (iDraggedIndex < iDroppedIndex ? -1 : 0); + const sKey = this._getKey(oDraggedColumn); + + Engine.getInstance().retrieveState(oTable).then(function(oState) { + + const oCol = oState.Columns.find(function(oColumn) { + return oColumn.key === sKey; + }) || { + key: sKey + }; + oCol.position = iNewPos; + + Engine.getInstance().applyState(oTable, { + Columns: [oCol] + }); + }); + }, + + onColumnResize: function(oEvt) { + const oColumn = oEvt.getParameter("column"); + const sWidth = oEvt.getParameter("width"); + const oTable = this.byId("persoTable"); + + const oColumnState = {}; + oColumnState[this._getKey(oColumn)] = sWidth; + + Engine.getInstance().applyState(oTable, { + ColumnWidth: oColumnState + }); + }, + + onClearFilterPress: function(oEvt) { + const oTable = this.byId("persoTable"); + Engine.getInstance().retrieveState(oTable).then(function(oState) { + for (var sKey in oState.Filter) { + oState.Filter[sKey].map((condition) => { + condition.filtered = false; + }); + } + Engine.getInstance().applyState(oTable, oState); + }); + } + }); +}); \ No newline at end of file diff --git a/ui5/sap.m/p13n.Engine/Engine.view.xml b/ui5/sap.m/p13n.Engine/Engine.view.xml new file mode 100644 index 000000000..7d8eaa2c8 --- /dev/null +++ b/ui5/sap.m/p13n.Engine/Engine.view.xml @@ -0,0 +1,88 @@ + + + + + + + + + + <ToolbarSeparator/> + <vm:VariantManagement id="p13nVm" for="persoTable"/> + <ToolbarSpacer/> + <Button icon="sap-icon://action-settings" press=".openPersoDialog" tooltip="Settings"/> + </OverflowToolbar> + </headerToolbar> + <infoToolbar> + <OverflowToolbar id="filterInfo" visible="false" design="Info" active="true" press=".onFilterInfoPress" > + <Text id="filterInfoText" wrapping="false" text="Table filter active" /> + <ToolbarSpacer /> + <Button tooltip="Remove All Filters" icon="sap-icon://decline" type="Transparent" press=".onClearFilterPress" /> + </OverflowToolbar> + </infoToolbar> + <dependents> + <plugins:ColumnResizer columnResize=".onColumnResize"/> + <columnmenu:Menu id="menu" beforeOpen=".beforeOpenColumnMenu" showTableSettingsButton="true" tableSettingsPressed=".openPersoDialog"> + <columnmenu:QuickSort change=".onSort"> + <columnmenu:items> + <columnmenu:QuickSortItem></columnmenu:QuickSortItem> + </columnmenu:items> + </columnmenu:QuickSort> + <columnmenu:QuickGroup change=".onGroup"> + <columnmenu:items> + <columnmenu:QuickGroupItem></columnmenu:QuickGroupItem> + </columnmenu:items> + </columnmenu:QuickGroup> + </columnmenu:Menu> + </dependents> + + <dragDropConfig> + <dnd:DragDropInfo sourceAggregation="columns" targetAggregation="columns" dropPosition="Between" drop=".onColumnMove"/> + </dragDropConfig> + + <noData> + <IllustratedMessage/> + </noData> + + <columns> + <Column app:p13nKey="firstName_col" headerMenu="menu"> + <header> + <Text text="First Name"/> + </header> + </Column> + <Column app:p13nKey="lastName_col" headerMenu="menu"> + <Text text="Last Name"/> + </Column> + <Column app:p13nKey="city_col" headerMenu="menu"> + <Text text="City"/> + </Column> + <Column app:p13nKey="size_col" hAlign="End" visible="false" headerMenu="menu"> + <Text text="Size"/> + </Column> + </columns> + + <items> + <ColumnListItem> + <Text text="{firstName}"/> + <Text text="{lastName}"/> + <Text text="{city}"/> + <Text text="{size}"/> + </ColumnListItem> + </items> + </Table> + + </Page> + +</mvc:View> diff --git a/ui5/sap.m/p13n.Engine/index.html b/ui5/sap.m/p13n.Engine/index.html new file mode 100644 index 000000000..d4fb1fd68 --- /dev/null +++ b/ui5/sap.m/p13n.Engine/index.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Engine + + + + + + + +
+
+ + \ No newline at end of file diff --git a/ui5/sap.m/p13n.Engine/manifest.json b/ui5/sap.m/p13n.Engine/manifest.json new file mode 100644 index 000000000..79720dd14 --- /dev/null +++ b/ui5/sap.m/p13n.Engine/manifest.json @@ -0,0 +1,32 @@ +{ + "sap.app": { + "id": "sap.m.sample.p13n.Engine", + "type": "application", + "applicationVersion": { + "version": "1.0.0" + } + }, + "sap.ui5": { + "rootView": { + "viewName": "sap.m.sample.p13n.Engine.Engine", + "type": "XML", + "async": true, + "id": "app" + }, + "dependencies": { + "libs": { + "sap.ui.fl": {}, + "sap.ui.layout": {} + } + }, + "config": { + "sample": { + "files": [ + "Engine.view.xml", + "Engine.controller.js", + "manifest.json" + ] + } + } + } +} \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineCustomFilters/Component.js b/ui5/sap.m/p13n.EngineCustomFilters/Component.js new file mode 100644 index 000000000..5f55bf54a --- /dev/null +++ b/ui5/sap.m/p13n.EngineCustomFilters/Component.js @@ -0,0 +1,15 @@ +sap.ui.define([ + 'sap/ui/core/UIComponent' +], function(UIComponent) { + "use strict"; + + const Component = UIComponent.extend("sap.m.sample.p13n.EngineCustomFilters.Component", { + + metadata: { + manifest: "json" + } + }); + + return Component; + +}); \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineCustomFilters/Engine.controller.js b/ui5/sap.m/p13n.EngineCustomFilters/Engine.controller.js new file mode 100644 index 000000000..7813021a1 --- /dev/null +++ b/ui5/sap.m/p13n.EngineCustomFilters/Engine.controller.js @@ -0,0 +1,260 @@ +sap.ui.define([ + 'sap/ui/core/mvc/Controller', + 'sap/ui/model/json/JSONModel', + 'sap/m/p13n/Engine', + 'sap/m/p13n/FilterController', + 'sap/m/p13n/MetadataHelper', + 'sap/ui/model/Filter', + 'sap/m/Token', + 'sap/m/MultiInput', + 'sap/ui/core/Item' +], function(Controller, JSONModel, Engine, FilterController, MetadataHelper, Filter, Token, MultiInput, Item) { + "use strict"; + + return Controller.extend("sap.m.sample.p13n.EngineCustomFilters.Page", { + + onInit: function() { + const oData = { + items: [{ + key: "P1", + firstName: "Peter", + lastName: "Mueller", + size: "1.75", + city: "Walldorf" + }, + { + key: "P2", + firstName: "Petra", + lastName: "Maier", + size: "1.85", + city: "Berlin" + }, + { + key: "P3", + firstName: "Thomas", + lastName: "Smith", + size: "1.95", + city: "Berlin" + }, + { + key: "P4", + firstName: "John", + lastName: "Mueller", + size: "1.65", + city: "Walldorf" + }, + { + key: "P5", + firstName: "Maria", + lastName: "Jones", + size: "1.55", + city: "Walldorf" + }, + { + key: "P6", + firstName: "Christine", + lastName: "Smith", + size: "1.95", + city: "Manchester" + }, + { + key: "P7", + firstName: "Hobin", + lastName: "Rood", + size: "1.85", + city: "Manchester" + }, + { + key: "P8", + firstName: "Nils", + lastName: "Mueller", + size: "1.75", + city: "Walldorf" + }, + { + key: "P9", + firstName: "Helga", + lastName: "Maier", + size: "1.85", + city: "Berlin" + }, + { + key: "P10", + firstName: "Torsten", + lastName: "Smith", + size: "1.95", + city: "Berlin" + }, + { + key: "P11", + firstName: "Yannick", + lastName: "Mueller", + size: "1.65", + city: "London" + }, + { + key: "P12", + firstName: "Peter", + lastName: "Jones", + size: "1.75", + city: "Walldorf" + }, + { + key: "P13", + firstName: "Christine", + lastName: "Jones", + size: "1.65", + city: "Dresden" + }, + { + key: "P14", + firstName: "Nils", + lastName: "Maier", + size: "1.65", + city: "Manchester" + } + ] + }; + + const oModel = new JSONModel(oData); + this._oModel = oModel; + + this.getView().setModel(oModel); + + this._registerForP13n(); + }, + + onExit: function() { + Engine.getInstance().detachStateChange(this.handleStateChange, this); + }, + + _registerForP13n: function() { + const oTable = this.byId("persoTable"); + + const oMetadataHelper = new MetadataHelper([{ + key: "firstName_col", + label: "First Name", + path: "firstName" + }, + { + key: "lastName_col", + label: "Last Name", + path: "lastName" + }, + { + key: "city_col", + label: "City", + path: "city" + }, + { + key: "size_col", + label: "Size", + path: "size" + } + ]); + + this.oMetadataHelper = oMetadataHelper; + + Engine.getInstance().register(oTable, { + helper: this.oMetadataHelper, + controller: { + Filter: new FilterController({ + control: oTable, + itemFactory: function(oItem, oFilterPanel) { + const oP13nItem = oFilterPanel.getItemByKey(oItem.name); + + const multiInput = new MultiInput({ + showValueHelp: false, + showClearIcon: true, + tokenUpdate: function(oEvt) { + oEvt.getParameter("addedTokens").forEach(function(oToken) { + oP13nItem.conditions.push({ + operator: "EQ", + values: [oToken.getText()] + }); + }); + + oEvt.getParameter("removedTokens").forEach(function(oToken) { + const oRemoveCondition = oP13nItem.conditions.find(function(oConditon) { + return oConditon.values[0] == oToken.getText(); + }); + const iConditionIndex = oP13nItem.conditions.indexOf(oRemoveCondition); + oP13nItem.conditions.splice(iConditionIndex, 1); + }); + + // Use FilterPanel#setP13nData to update the FilterPanel model to create personalization changes + let aUdatedP13nData = oFilterPanel.getP13nData(); + aUdatedP13nData = aUdatedP13nData.map((oFilterPanelItem) => { + return oFilterPanelItem.name == oP13nItem.name ? oP13nItem : oFilterPanelItem; + }); + oFilterPanel.setP13nData(aUdatedP13nData); + }, + // Use FilterPanel#getP13nData & FilterPanel#getItemByKey to retrieve the existing conditions + tokens: oP13nItem.conditions.map((oConditon) => new Token({ + text: oConditon.values[0] + })), + suggestionItems: { + path: "/items", + factory: function(sId, oContext) { + return new Item({ + key: oContext.getProperty("key"), + text: `${oContext.getProperty(oMetadataHelper.getPath(oItem.name))}` + }); + } + } + }); + + return multiInput; + } + }) + } + }); + + Engine.getInstance().attachStateChange(this.handleStateChange, this); + }, + + openPersoDialog: function(oEvt) { + const oTable = this.byId("persoTable"); + + Engine.getInstance().show(oTable, ["Filter"], { + title: "Custom Filter Settings", + contentHeight: "50rem", + contentWidth: "45rem", + source: oEvt.getSource() + }); + }, + + _getKey: function(oControl) { + return oControl.data("p13nKey"); + }, + + handleStateChange: function(oEvt) { + const oTable = this.byId("persoTable"); + const oState = oEvt.getParameter("state"); + + if (!oState) { + return; + } + + //Create Filters & Sorters + const aFilter = this.createFilters(oState); + + //rebind the table with the updated cell template + oTable.getBinding("items").filter(aFilter); + + }, + + createFilters: function(oState) { + const aFilter = []; + Object.keys(oState.Filter).forEach((sFilterKey) => { + const filterPath = this.oMetadataHelper.getProperty(sFilterKey).path; + + oState.Filter[sFilterKey].forEach(function(oConditon) { + aFilter.push(new Filter(filterPath, oConditon.operator, oConditon.values[0])); + }); + }); + + return aFilter; + } + }); +}); \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineCustomFilters/Engine.view.xml b/ui5/sap.m/p13n.EngineCustomFilters/Engine.view.xml new file mode 100644 index 000000000..bfbd785aa --- /dev/null +++ b/ui5/sap.m/p13n.EngineCustomFilters/Engine.view.xml @@ -0,0 +1,87 @@ + + + + +
+ + + + + <ToolbarSeparator/> + <vm:VariantManagement id="p13nVm" for="persoTable"/> + <ToolbarSpacer/> + <Button icon="sap-icon://action-settings" press=".openPersoDialog" tooltip="Settings"/> + </OverflowToolbar> + </headerToolbar> + + <dependents> + <plugins:ColumnResizer/> + <columnmenu:Menu id="menu"> + <columnmenu:QuickSort> + <columnmenu:items> + <columnmenu:QuickSortItem></columnmenu:QuickSortItem> + </columnmenu:items> + </columnmenu:QuickSort> + <columnmenu:QuickGroup> + <columnmenu:items> + <columnmenu:QuickGroupItem></columnmenu:QuickGroupItem> + </columnmenu:items> + </columnmenu:QuickGroup> + <columnmenu:items> + <columnmenu:ActionItem icon="sap-icon://sort" label="Sort"/> + <columnmenu:ActionItem icon="sap-icon://group-2" label="Group"/> + <columnmenu:ActionItem icon="sap-icon://table-column" label="Columns"/> + </columnmenu:items> + </columnmenu:Menu> + </dependents> + + <dragDropConfig> + <dnd:DragDropInfo sourceAggregation="columns" targetAggregation="columns" dropPosition="Between"/> + </dragDropConfig> + + <noData> + <IllustratedMessage/> + </noData> + + <columns> + <Column app:p13nKey="firstName_col" headerMenu="menu"> + <header> + <Text text="First Name"/> + </header> + </Column> + <Column app:p13nKey="lastName_col" headerMenu="menu"> + <Text text="Last Name"/> + </Column> + <Column app:p13nKey="city_col" headerMenu="menu"> + <Text text="City"/> + </Column> + <Column app:p13nKey="size_col" hAlign="End" headerMenu="menu"> + <Text text="Size"/> + </Column> + </columns> + + <items> + <ColumnListItem> + <Text text="{firstName}"/> + <Text text="{lastName}"/> + <Text text="{city}"/> + <Text text="{size}"/> + </ColumnListItem> + </items> + </Table> + + </Page> + +</mvc:View> diff --git a/ui5/sap.m/p13n.EngineCustomFilters/index.html b/ui5/sap.m/p13n.EngineCustomFilters/index.html new file mode 100644 index 000000000..a665e042c --- /dev/null +++ b/ui5/sap.m/p13n.EngineCustomFilters/index.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>EngineCustomFilters + + + + + + + +
+
+ + \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineCustomFilters/manifest.json b/ui5/sap.m/p13n.EngineCustomFilters/manifest.json new file mode 100644 index 000000000..b15f5639b --- /dev/null +++ b/ui5/sap.m/p13n.EngineCustomFilters/manifest.json @@ -0,0 +1,32 @@ +{ + "sap.app": { + "id": "sap.m.sample.p13n.Engine", + "type": "application", + "applicationVersion": { + "version": "1.0.0" + } + }, + "sap.ui5": { + "rootView": { + "viewName": "sap.m.sample.p13n.EngineCustomFilters.Engine", + "type": "XML", + "async": true, + "id": "app" + }, + "dependencies": { + "libs": { + "sap.ui.fl": {}, + "sap.ui.layout": {} + } + }, + "config": { + "sample": { + "files": [ + "Engine.view.xml", + "Engine.controller.js", + "manifest.json" + ] + } + } + } +} \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineGridList/Component.js b/ui5/sap.m/p13n.EngineGridList/Component.js new file mode 100644 index 000000000..81e5093b4 --- /dev/null +++ b/ui5/sap.m/p13n.EngineGridList/Component.js @@ -0,0 +1,15 @@ +sap.ui.define([ + 'sap/ui/core/UIComponent' +], function(UIComponent) { + "use strict"; + + const Component = UIComponent.extend("sap.m.sample.p13n.EngineGridListComponent", { + + metadata: { + manifest: "json" + } + }); + + return Component; + +}); \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineGridList/Engine.controller.js b/ui5/sap.m/p13n.EngineGridList/Engine.controller.js new file mode 100644 index 000000000..7b17b1d8b --- /dev/null +++ b/ui5/sap.m/p13n.EngineGridList/Engine.controller.js @@ -0,0 +1,130 @@ +sap.ui.define([ + 'sap/ui/core/mvc/Controller', + 'sap/ui/model/json/JSONModel', + 'sap/m/p13n/Engine', + 'sap/m/p13n/SelectionController', + 'sap/m/p13n/MetadataHelper' +], function(Controller, JSONModel, Engine, SelectionController, MetadataHelper) { + "use strict"; + + return Controller.extend("sap.m.sample.p13n.EngineGridList.Page", { + + onInit: function() { + const oData = { + items: [{ + key: "person1", + firstName: "Peter", + lastName: "Mueller", + size: "1.75", + city: "Walldorf" + }, + { + key: "person2", + firstName: "Petra", + lastName: "Maier", + size: "1.85", + city: "Walldorf" + }, + { + key: "person3", + firstName: "Thomas", + lastName: "Smith", + size: "1.95", + city: "Walldorf" + }, + { + key: "person4", + firstName: "Maria", + lastName: "Jones", + size: "1.55", + city: "Walldorf" + }, + { + key: "person5", + firstName: "John", + lastName: "Williams", + size: "1.65", + city: "Walldorf" + } + ] + }; + + const oModel = new JSONModel(oData); + + this.getView().setModel(oModel); + + this._registerForP13n(); + }, + + _registerForP13n: function() { + const oGridList = this.byId("persoList"); + + this.oMetadataHelper = new MetadataHelper([{ + key: "person1", + label: "Peter Mueller" + }, + { + key: "person2", + label: "Petra Maier" + }, + { + key: "person3", + label: "Thomas Smith" + }, + { + key: "person4", + label: "Maria Jones" + }, + { + key: "person5", + label: "John Williams" + } + ]); + + Engine.getInstance().register(oGridList, { + helper: this.oMetadataHelper, + controller: { + Items: new SelectionController({ + targetAggregation: "items", + getKeyForItem: function(oListItem) { + return oListItem.getBindingContext().getProperty("key"); + }, + control: oGridList + }) + } + }); + + Engine.getInstance().attachStateChange(this.handleStateChange, this); + }, + + onExit: function() { + Engine.getInstance().detachStateChange(this.handleStateChange, this); + }, + + openPersoDialog: function(oEvt) { + const oGridList = this.byId("persoList"); + + Engine.getInstance().show(oGridList, ["Items"], { + contentHeight: "35rem", + contentWidth: "32rem", + source: oEvt.getSource() + }); + }, + + handleStateChange: function(oEvt) { + const oState = oEvt.getParameter("state"); + + const aPersonData = this.getView().getModel().getProperty("/items"); + + const aUpdatedPersonData = []; + oState.Items.forEach(function(oStateItem, iIndex) { + const oModelItem = aPersonData.find(function(oModelItem) { + return oModelItem.key === oStateItem.key; + }); + aUpdatedPersonData.push(oModelItem); + }); + + this.getView().getModel().setProperty("/items", aUpdatedPersonData); + } + }); +}); \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineGridList/Engine.view.xml b/ui5/sap.m/p13n.EngineGridList/Engine.view.xml new file mode 100644 index 000000000..bd75794e2 --- /dev/null +++ b/ui5/sap.m/p13n.EngineGridList/Engine.view.xml @@ -0,0 +1,65 @@ + + + + + + + + <ToolbarSeparator/> + <vm:VariantManagement id="p13nVm" for="persoList"/> + <ToolbarSpacer/> + <Button icon="sap-icon://action-settings" press=".openPersoDialog"/> + </content> + </Toolbar> + + <f:GridList id="persoList" items="{path: '/items'}" sap.ui.fl:flexibility="sap/m/flexibility/EngineFlex"> + <f:items> + <CustomListItem type="Active"> + <layoutData> + <FlexItemData + growFactor="1" + shrinkFactor="0"/> + </layoutData> + <HBox justifyContent="SpaceBetween"> + <VBox + justifyContent="SpaceBetween" + class="sapUiSmallMarginTop sapUiSmallMarginBegin"> + <VBox app:p13nKey="firstName"> + <Title text="First Name"/> + <Label text="{firstName}"/> + </VBox> + <VBox app:p13nKey="lastName"> + <Title text="Last Name"/> + <Label text="{lastName}"/> + </VBox> + <VBox app:p13nKey="city"> + <Title text="City"/> + <Label text="{city}"/> + </VBox> + <VBox app:p13nKey="size"> + <Title text="Size"/> + <Label text="{size}"/> + </VBox> + </VBox> + <core:Icon + src="sap-icon://customer" + size="2.5rem" + class="sapUiSmallMarginTop sapUiSmallMarginEnd sapUiSmallMarginBottom"/> + </HBox> + </CustomListItem> + </f:items> + </f:GridList> + </VBox> +</mvc:View> diff --git a/ui5/sap.m/p13n.EngineGridList/index.html b/ui5/sap.m/p13n.EngineGridList/index.html new file mode 100644 index 000000000..5f17164ea --- /dev/null +++ b/ui5/sap.m/p13n.EngineGridList/index.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>EngineGridList + + + + + + + +
+
+ + \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineGridList/manifest.json b/ui5/sap.m/p13n.EngineGridList/manifest.json new file mode 100644 index 000000000..b7963f441 --- /dev/null +++ b/ui5/sap.m/p13n.EngineGridList/manifest.json @@ -0,0 +1,32 @@ +{ + "sap.app": { + "id": "sap.m.sample.p13n.EngineGridList", + "type": "application", + "applicationVersion": { + "version": "1.0.0" + } + }, + "sap.ui5": { + "rootView": { + "viewName": "sap.m.sample.p13n.EngineGridList.Engine", + "type": "XML", + "async": true, + "id": "app" + }, + "dependencies": { + "libs": { + "sap.ui.fl": {}, + "sap.ui.layout": {} + } + }, + "config": { + "sample": { + "files": [ + "Engine.view.xml", + "Engine.controller.js", + "manifest.json" + ] + } + } + } +} \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineGridTable/Component.js b/ui5/sap.m/p13n.EngineGridTable/Component.js new file mode 100644 index 000000000..a266342a2 --- /dev/null +++ b/ui5/sap.m/p13n.EngineGridTable/Component.js @@ -0,0 +1,15 @@ +sap.ui.define([ + 'sap/ui/core/UIComponent' +], function(UIComponent) { + "use strict"; + + const Component = UIComponent.extend("sap.m.sample.p13n.EngineGridTableComponent", { + + metadata: { + manifest: "json" + } + }); + + return Component; + +}); \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineGridTable/Engine.controller.js b/ui5/sap.m/p13n.EngineGridTable/Engine.controller.js new file mode 100644 index 000000000..54dffbb2c --- /dev/null +++ b/ui5/sap.m/p13n.EngineGridTable/Engine.controller.js @@ -0,0 +1,238 @@ +sap.ui.define([ + 'sap/ui/core/mvc/Controller', + 'sap/ui/model/json/JSONModel', + 'sap/m/p13n/Engine', + 'sap/m/p13n/SelectionController', + 'sap/m/p13n/SortController', + 'sap/m/p13n/GroupController', + 'sap/m/p13n/MetadataHelper', + 'sap/ui/model/Sorter', + 'sap/ui/core/library', + 'sap/m/table/ColumnWidthController' +], function(Controller, JSONModel, Engine, SelectionController, SortController, GroupController, MetadataHelper, Sorter, CoreLibrary, ColumnWidthController) { + "use strict"; + + return Controller.extend("sap.m.sample.p13n.EngineGridTable.Page", { + + onInit: function() { + const oData = { + items: [{ + firstName: "Peter", + lastName: "Mueller", + size: "1.75", + city: "Walldorf" + }, + { + firstName: "Petra", + lastName: "Maier", + size: "1.85", + city: "Walldorf" + }, + { + firstName: "Thomas", + lastName: "Smith", + size: "1.95", + city: "Heidelberg" + }, + { + firstName: "John", + lastName: "Williams", + size: "1.65", + city: "Walldorf" + }, + { + firstName: "Maria", + lastName: "Jones", + size: "1.55", + city: "Walldorf" + } + ] + }; + + const oModel = new JSONModel(oData); + + this.getView().setModel(oModel); + + this._registerForP13n(); + }, + + onExit: function() { + Engine.getInstance().detachStateChange(this.handleStateChange, this); + }, + + _registerForP13n: function() { + const oTable = this.byId("persoTable"); + + this.oMetadataHelper = new MetadataHelper([{ + key: "firstName_col", + label: "First Name", + path: "firstName" + }, + { + key: "lastName_col", + label: "Last Name", + path: "lastName" + }, + { + key: "city_col", + label: "City", + path: "city" + }, + { + key: "size_col", + label: "Size", + path: "size" + } + ]); + + this._mIntialWidth = { + "firstName_col": "11rem", + "lastName_col": "11rem", + "city_col": "11rem", + "size_col": "11rem" + }; + + Engine.getInstance().register(oTable, { + helper: this.oMetadataHelper, + controller: { + Columns: new SelectionController({ + targetAggregation: "columns", + control: oTable + }), + Sorter: new SortController({ + control: oTable + }), + Groups: new GroupController({ + control: oTable + }), + ColumnWidth: new ColumnWidthController({ + control: oTable + }) + } + }); + + Engine.getInstance().attachStateChange(this.handleStateChange, this); + }, + + openPersoDialog: function(oEvt) { + const oTable = this.byId("persoTable"); + + Engine.getInstance().show(oTable, ["Columns", "Sorter"], { + contentHeight: "35rem", + contentWidth: "32rem", + source: oEvt.getSource() + }); + }, + + onColumnHeaderItemPress: function(oEvt) { + const oTable = this.byId("persoTable"); + const sPanel = oEvt.getSource().getIcon().indexOf("sort") >= 0 ? "Sorter" : "Columns"; + + Engine.getInstance().show(oTable, [sPanel], { + contentHeight: "35rem", + contentWidth: "32rem", + source: oTable + }); + }, + + onSort: function(oEvt) { + const oTable = this.byId("persoTable"); + const sAffectedProperty = this._getKey(oEvt.getParameter("column")); + const sSortOrder = oEvt.getParameter("sortOrder"); + + //Apply the state programatically on sorting through the column menu + //1) Retrieve the current personalization state + Engine.getInstance().retrieveState(oTable).then(function(oState) { + + //2) Modify the existing personalization state --> clear all sorters before + oState.Sorter.forEach(function(oSorter) { + oSorter.sorted = false; + }); + oState.Sorter.push({ + key: sAffectedProperty, + descending: sSortOrder === CoreLibrary.SortOrder.Descending + }); + + //3) Apply the modified personalization state to persist it in the VariantManagement + Engine.getInstance().applyState(oTable, oState); + }); + }, + + onColumnMove: function(oEvt) { + const oTable = this.byId("persoTable"); + const oAffectedColumn = oEvt.getParameter("column"); + const iNewPos = oEvt.getParameter("newPos"); + const sKey = this._getKey(oAffectedColumn); + oEvt.preventDefault(); + + Engine.getInstance().retrieveState(oTable).then(function(oState) { + + const oCol = oState.Columns.find(function(oColumn) { + return oColumn.key === sKey; + }) || { + key: sKey + }; + oCol.position = iNewPos; + + Engine.getInstance().applyState(oTable, { + Columns: [oCol] + }); + }); + }, + + _getKey: function(oControl) { + return oControl.data("p13nKey"); + }, + + handleStateChange: function(oEvt) { + const oTable = this.byId("persoTable"); + const oState = oEvt.getParameter("state"); + + if (!oState) { + return; + } + + oTable.getColumns().forEach(function(oColumn) { + + const sKey = this._getKey(oColumn); + const sColumnWidth = oState.ColumnWidth[sKey]; + + oColumn.setWidth(sColumnWidth || this._mIntialWidth[sKey]); + + oColumn.setVisible(false); + oColumn.setSortOrder(CoreLibrary.SortOrder.None); + }.bind(this)); + + oState.Columns.forEach(function(oProp, iIndex) { + const oCol = this.byId("persoTable").getColumns().find((oColumn) => oColumn.data("p13nKey") === oProp.key); + oCol.setVisible(true); + + oTable.removeColumn(oCol); + oTable.insertColumn(oCol, iIndex); + }.bind(this)); + + const aSorter = []; + oState.Sorter.forEach(function(oSorter) { + const oColumn = this.byId("persoTable").getColumns().find((oColumn) => oColumn.data("p13nKey") === oSorter.key); + /** @deprecated As of version 1.120 */ + oColumn.setSorted(true); + oColumn.setSortOrder(oSorter.descending ? CoreLibrary.SortOrder.Descending : CoreLibrary.SortOrder.Ascending); + aSorter.push(new Sorter(this.oMetadataHelper.getProperty(oSorter.key).path, oSorter.descending)); + }.bind(this)); + oTable.getBinding("rows").sort(aSorter); + }, + + onColumnResize: function(oEvt) { + const oColumn = oEvt.getParameter("column"); + const sWidth = oEvt.getParameter("width"); + const oTable = this.byId("persoTable"); + + const oColumnState = {}; + oColumnState[this._getKey(oColumn)] = sWidth; + + Engine.getInstance().applyState(oTable, { + ColumnWidth: oColumnState + }); + } + }); +}); \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineGridTable/Engine.view.xml b/ui5/sap.m/p13n.EngineGridTable/Engine.view.xml new file mode 100644 index 000000000..a8e18c4cd --- /dev/null +++ b/ui5/sap.m/p13n.EngineGridTable/Engine.view.xml @@ -0,0 +1,61 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
diff --git a/ui5/sap.m/p13n.EngineGridTable/index.html b/ui5/sap.m/p13n.EngineGridTable/index.html new file mode 100644 index 000000000..fc29000da --- /dev/null +++ b/ui5/sap.m/p13n.EngineGridTable/index.html @@ -0,0 +1,35 @@ + + + + + + EngineGridTable + + + + + + + +
+
+ + \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineGridTable/manifest.json b/ui5/sap.m/p13n.EngineGridTable/manifest.json new file mode 100644 index 000000000..8d90ccb91 --- /dev/null +++ b/ui5/sap.m/p13n.EngineGridTable/manifest.json @@ -0,0 +1,32 @@ +{ + "sap.app": { + "id": "sap.m.sample.p13n.EngineGridTable", + "type": "application", + "applicationVersion": { + "version": "1.0.0" + } + }, + "sap.ui5": { + "rootView": { + "viewName": "sap.m.sample.p13n.EngineGridTable.Engine", + "type": "XML", + "async": true, + "id": "app" + }, + "dependencies": { + "libs": { + "sap.ui.fl": {}, + "sap.ui.layout": {} + } + }, + "config": { + "sample": { + "files": [ + "Engine.view.xml", + "Engine.controller.js", + "manifest.json" + ] + } + } + } +} \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineMultipleController/Component.js b/ui5/sap.m/p13n.EngineMultipleController/Component.js new file mode 100644 index 000000000..fc186c97a --- /dev/null +++ b/ui5/sap.m/p13n.EngineMultipleController/Component.js @@ -0,0 +1,15 @@ +sap.ui.define([ + 'sap/ui/core/UIComponent' +], function(UIComponent) { + "use strict"; + + const Component = UIComponent.extend("sap.m.sample.p13n.EngineMultipleController.Component", { + + metadata: { + manifest: "json" + } + }); + + return Component; + +}); \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineMultipleController/Engine.controller.js b/ui5/sap.m/p13n.EngineMultipleController/Engine.controller.js new file mode 100644 index 000000000..e592dfd5b --- /dev/null +++ b/ui5/sap.m/p13n.EngineMultipleController/Engine.controller.js @@ -0,0 +1,195 @@ +sap.ui.define([ + 'sap/ui/core/mvc/Controller', + 'sap/ui/model/json/JSONModel', + 'sap/m/p13n/Engine', + 'sap/m/p13n/SelectionController', + 'sap/m/p13n/MetadataHelper', + 'sap/ui/core/library' +], function (Controller, JSONModel, Engine, SelectionController, MetadataHelper, coreLibrary) { + "use strict"; + + return Controller.extend("sap.m.sample.p13n.EngineMultipleController.Page", { + + onInit: function () { + this._registerForP13n(); + }, + + onExit: function() { + Engine.getInstance().detachStateChange(this.handleStateChange, this); + }, + + _registerForP13n: function () { + const oTable = this.byId("persoTable"); + + this.oMetadataHelper = new MetadataHelper([{ + key: "id_col", + label: "ID", + path: "id" + }, + { + key: "firstName_col", + label: "First Name", + path: "firstName" + }, + { + key: "lastName_col", + label: "Last Name", + path: "lastName" + }, + { + key: "city_col", + label: "City", + path: "city" + }, + { + key: "size_col", + label: "Size", + path: "size" + } + ]); + + const _oMetadataHelperRows = new MetadataHelper([{ + key: "P1", + label: "Peter Müller", + path: "id" + }, + { + key: "P2", + label: "Petra Maier", + path: "id" + }, + { + key: "P3", + label: "Thomas Smith", + path: "id" + }, + { + key: "P4", + label: "John Williams", + path: "id" + }, + { + key: "P5", + label: "Maria Jones", + path: "id" + } + ]); + + Engine.getInstance().register(oTable, { + helper: this.oMetadataHelper, + controller: { + Columns: new SelectionController({ + targetAggregation: "columns", + control: oTable, + persistenceIdentifier: "selection-columns" + }), + Rows: new SelectionController({ + targetAggregation: "items", + helper: _oMetadataHelperRows, + control: oTable, + persistenceIdentifier: "selection-items", + enableReorder: false + }) + } + }); + + Engine.getInstance().attachStateChange(this.handleStateChange, this); + }, + + openPersoDialog: function (oEvt) { + const oTable = this.byId("persoTable"); + + Engine.getInstance().show(oTable, ["Columns"], { + contentHeight: "35rem", + contentWidth: "32rem", + source: oEvt.getSource() + }); + }, + + openPersoDialogPeople: function (oEvt) { + const oTable = this.byId("persoTable"); + + Engine.getInstance().show(oTable, ["Rows"], { + contentHeight: "35rem", + contentWidth: "32rem", + source: oEvt.getSource() + }); + }, + + _getKey: function (oControl) { + return oControl.data("p13nKey"); + }, + + handleStateChange: function (oEvt) { + const oTable = this.byId("persoTable"); + const oState = oEvt.getParameter("state"); + + if (!oState) { + return; + } + + oTable.getColumns().forEach(function (oColumn, iIndex) { + oColumn.setVisible(false); + oColumn.setSortIndicator(coreLibrary.SortOrder.None); + oColumn.data("grouped", false); + }); + + oState.Columns.forEach(function (oProp, iIndex) { + const oCol = this.byId("persoTable").getColumns().find((oColumn) => oColumn.data("p13nKey") === oProp.key); + if (oCol) { + oCol.setVisible(true); + + oTable.removeColumn(oCol); + oTable.insertColumn(oCol, iIndex); + } + }.bind(this)); + + oTable.getItems().forEach(function (oItem, iIndex) { + oItem.setVisible(false); + }); + + oState.Rows.forEach(function (oProp, iIndex) { + const aItems = this.byId("persoTable").getItems(); + // var oRelevantCol = aItems[0].getCells().find((cell) => true); + + // find index of cell with "id", that can be used later + const oFoundItem = aItems.find((oItem) => oItem.getCells()[0].getText() == oProp.key); + + oFoundItem.setVisible(true); + + oTable.removeItem(oFoundItem); + oTable.insertItem(oFoundItem, iIndex); + }.bind(this)); + }, + + onColumnMove: function (oEvt) { + const oDraggedColumn = oEvt.getParameter("draggedControl"); + const oDroppedColumn = oEvt.getParameter("droppedControl"); + + if (oDraggedColumn === oDroppedColumn) { + return; + } + + const oTable = this.byId("persoTable"); + const sDropPosition = oEvt.getParameter("dropPosition"); + const iDraggedIndex = oTable.indexOfColumn(oDraggedColumn); + const iDroppedIndex = oTable.indexOfColumn(oDroppedColumn); + const iNewPos = iDroppedIndex + (sDropPosition == "Before" ? 0 : 1) + (iDraggedIndex < iDroppedIndex ? -1 : 0); + const sKey = this._getKey(oDraggedColumn); + + Engine.getInstance().retrieveState(oTable).then(function (oState) { + + const oCol = oState.Columns.find(function (oColumn) { + return oColumn.data("p13nKey") === sKey; + }) || { + key: sKey + }; + oCol.position = iNewPos; + + Engine.getInstance().applyState(oTable, { + Columns: [oCol] + }); + }); + } + }); +}); \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineMultipleController/Engine.view.xml b/ui5/sap.m/p13n.EngineMultipleController/Engine.view.xml new file mode 100644 index 000000000..30060ba53 --- /dev/null +++ b/ui5/sap.m/p13n.EngineMultipleController/Engine.view.xml @@ -0,0 +1,107 @@ + + + + + + + + + + <ToolbarSeparator/> + <vm:VariantManagement id="p13nVm" for="persoTable"/> + <ToolbarSpacer/> + <Button icon="sap-icon://action-settings" press=".openPersoDialog" tooltip="Settings"/> + <Button icon="sap-icon://add-employee" press=".openPersoDialogPeople" tooltip="Settings"/> + </OverflowToolbar> + </headerToolbar> + + <dependents> + <columnmenu:Menu id="menu"> + <columnmenu:items> + <columnmenu:ActionItem icon="sap-icon://table-column" label="Columns" press=".openPersoDialog"/> + </columnmenu:items> + </columnmenu:Menu> + </dependents> + + <dragDropConfig> + <dnd:DragDropInfo sourceAggregation="columns" targetAggregation="columns" dropPosition="Between" drop=".onColumnMove"/> + </dragDropConfig> + + <noData> + <IllustratedMessage/> + </noData> + + <columns> + <Column app:p13nKey="id_col" headerMenu="menu"> + <header> + <Text text="ID"/> + </header> + </Column> + <Column app:p13nKey="firstName_col" headerMenu="menu"> + <Text text="First Name"/> + </Column> + <Column app:p13nKey="lastName_col" headerMenu="menu"> + <Text text="Last Name"/> + </Column> + <Column app:p13nKey="city_col" headerMenu="menu"> + <Text text="City"/> + </Column> + <Column app:p13nKey="size_col" hAlign="End" visible="false" headerMenu="menu"> + <Text text="Size"/> + </Column> + </columns> + + <items> + <ColumnListItem app:p13nKey="P1"> + <Text text="P1"/> + <Text text="Peter"/> + <Text text="Mueller"/> + <Text text="Walldorf"/> + <Text text="1.75"/> + </ColumnListItem> + <ColumnListItem app:p13nKey="P2"> + <Text text="P2"/> + <Text text="Petra"/> + <Text text="Maier"/> + <Text text="Walldorf"/> + <Text text="1.85"/> + </ColumnListItem> + <ColumnListItem app:p13nKey="P3"> + <Text text="P3"/> + <Text text="Thomas"/> + <Text text="Smith"/> + <Text text="Walldorf"/> + <Text text="1.95"/> + </ColumnListItem> + <ColumnListItem app:p13nKey="P4"> + <Text text="P4"/> + <Text text="John"/> + <Text text="Williams"/> + <Text text="Walldorf"/> + <Text text="1.65"/> + </ColumnListItem> + <ColumnListItem app:p13nKey="P5"> + <Text text="P5"/> + <Text text="Maria"/> + <Text text="Jones"/> + <Text text="Walldorf"/> + <Text text="1.55"/> + </ColumnListItem> + </items> + </Table> + + </Page> + +</mvc:View> diff --git a/ui5/sap.m/p13n.EngineMultipleController/index.html b/ui5/sap.m/p13n.EngineMultipleController/index.html new file mode 100644 index 000000000..d2fd1c879 --- /dev/null +++ b/ui5/sap.m/p13n.EngineMultipleController/index.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>EngineMultipleController + + + + + + + +
+
+ + \ No newline at end of file diff --git a/ui5/sap.m/p13n.EngineMultipleController/manifest.json b/ui5/sap.m/p13n.EngineMultipleController/manifest.json new file mode 100644 index 000000000..c292fc368 --- /dev/null +++ b/ui5/sap.m/p13n.EngineMultipleController/manifest.json @@ -0,0 +1,32 @@ +{ + "sap.app": { + "id": "sap.m.sample.p13n.EngineMultipleController", + "type": "application", + "applicationVersion": { + "version": "1.0.0" + } + }, + "sap.ui5": { + "rootView": { + "viewName": "sap.m.sample.p13n.EngineMultipleController.Engine", + "type": "XML", + "async": true, + "id": "app" + }, + "dependencies": { + "libs": { + "sap.ui.fl": {}, + "sap.ui.layout": {} + } + }, + "config": { + "sample": { + "files": [ + "Engine.view.xml", + "Engine.controller.js", + "manifest.json" + ] + } + } + } +} \ No newline at end of file diff --git a/ui5/sap.m/p13n.Popup/Component.js b/ui5/sap.m/p13n.Popup/Component.js new file mode 100644 index 000000000..ef997d566 --- /dev/null +++ b/ui5/sap.m/p13n.Popup/Component.js @@ -0,0 +1,15 @@ +sap.ui.define([ + 'sap/ui/core/UIComponent' +], function(UIComponent) { + "use strict"; + + const Component = UIComponent.extend("sap.m.sample.p13n.Popup.Component", { + + metadata: { + manifest: "json" + } + }); + + return Component; + +}); \ No newline at end of file diff --git a/ui5/sap.m/p13n.Popup/P13nPanels.controller.js b/ui5/sap.m/p13n.Popup/P13nPanels.controller.js new file mode 100644 index 000000000..102b0d761 --- /dev/null +++ b/ui5/sap.m/p13n.Popup/P13nPanels.controller.js @@ -0,0 +1,125 @@ +sap.ui.define([ + 'sap/ui/core/mvc/Controller', + 'sap/ui/model/json/JSONModel', + 'sap/m/MessageToast' +], function(Controller, JSONModel, MessageToast) { + "use strict"; + + return Controller.extend("sap.m.sample.p13n.Popup.Page", { + + onInit: function() { + this._oCurrentP13nData = null; + this.getView().setModel(new JSONModel({ + dialogMode: true, + listLayout: true + })); + + this._bIsOpen = false; + }, + + _initialData: { + columns: [{ + visible: true, + name: "key1", + label: "City" + }, + { + visible: false, + name: "key2", + label: "Country" + }, + { + visible: false, + name: "key3", + label: "Region" + } + ], + sort: [{ + sorted: true, + name: "key1", + label: "City", + descending: true + }, + { + sorted: false, + name: "key2", + label: "Country", + descending: false + }, + { + sorted: false, + name: "key3", + label: "Region", + descending: false + } + ], + group: [{ + grouped: true, + name: "key1", + label: "City" + }, + { + grouped: false, + name: "key2", + label: "Country" + }, + { + grouped: false, + name: "key3", + label: "Region" + } + ] + }, + + _setInitialData: function() { + const oView = this.getView(); + + const oSelectionPanel = oView.byId("columnsPanel"); + const oSortPanel = oView.byId("sortPanel"); + const oGroupPanel = oView.byId("groupPanel"); + + oSelectionPanel.setP13nData(this._initialData.columns); + oSortPanel.setP13nData(this._initialData.sort); + oGroupPanel.setP13nData(this._initialData.group); + }, + + onContainerOpen: function(oEvt) { + const oView = this.getView(); + const oPopup = oView.byId("p13nPopup"); + if (!this._bIsOpen) { + this._setInitialData(); + this._bIsOpen = true; + } + + oPopup.open(oEvt.getSource()); + }, + + onClose: function(oEvt) { + const sReason = oEvt.getParameter("reason"); + MessageToast.show("Dialog close reason: " + sReason); + }, + + reset: function(oEvt) { + this._setInitialData(); + this.parseP13nState(); + }, + + parseP13nState: function(oEvt) { + + if (oEvt) { + MessageToast.show("P13n panel change reason:" + oEvt.getParameter("reason")); + } + + const oView = this.getView(); + const oEditor = oView.byId("p13nEditor"); + + const oP13nState = { + columns: oView.byId("columnsPanel").getP13nData(), + sort: oView.byId("sortPanel").getP13nData(), + group: oView.byId("groupPanel").getP13nData() + }; + + oEditor.setValue(JSON.stringify(oP13nState, null, ' ')); + } + }); +}); \ No newline at end of file diff --git a/ui5/sap.m/p13n.Popup/P13nPanels.view.xml b/ui5/sap.m/p13n.Popup/P13nPanels.view.xml new file mode 100644 index 000000000..206538013 --- /dev/null +++ b/ui5/sap.m/p13n.Popup/P13nPanels.view.xml @@ -0,0 +1,26 @@ + + + + +
).getSelectedContexts()[0]. (The original always ends up in its first plugin instance - it looks for 'instance2' in the id of the table's PARENT, the VBox - which downloads the same files, since download only reads the context it is given.)" + }, + { + "type": "LIVE_TEST", + "what": "Unverified in a running system: (a) the plugin calls by id (uploadSetPlugin, uploadSetPlugin-instance2, uploadSetPlugin-instance3 - ids the original does not carry) through the unlisted-method path of control_by_id - openFilePreview with the Link's $event.oSource.getBindingContext() and download with $controller.getView().byId(
).getSelectedContexts()[0] - each handing the live Context object through castArgAuto untouched; (b) the vetoed beforeUploadStarts with ${$parameters>/item}.getFileObject().size and $event.oSource.data('itemsPath')." + }, + { + "type": "NOTE", + "what": "The controller's quirks are kept 1:1 where they decide what happens to the data: every SearchField's onSearch filters the FIRST table (byId('table-uploadSet')) - the three liveChange wires are the same view-wired binding_call filter on that table; removeItem splices the clicked row's index out of /items and clears the first table's selection whichever table the row belongs to (the MessageBox still names the clicked document) - the port deletes from T_ITEMS by the index in the row's binding path. Where the quirk only picks an equivalent instance the port is direct: openPreview reads 'instance2' from the template Link's generated id, so the original always previews through the first plugin; each port Link calls its own table's plugin. onSelectionChange enables each table's Download button from its own selection (the wire carries the table id and getSelectedContexts().length); after a removal the first table's Download button is disabled with its cleared selection (removeSelections fires no selectionChange, so the original left it enabled)." + }, + { + "type": "NOTE", + "what": "removeItem's MessageBox.warning keeps its text, actions Remove/CANCEL, emphasizedAction, styleClass and initialFocus; its explicit icon option is the warning box's own icon anyway. The mock server's 'Document Added' toast follows at once instead of after the controller's one-second setTimeout (see the upload deviation)." + }, + { + "type": "NOTE", + "what": "The sample ships view/fragment/AddViaUrl.fragment.xml (a Dialog addViaUrlDialog holding a form:SimpleForm addViaUrlSimpleform with two Label controls urlInputLabel and nameInputLabel - both required - two Input controls urlInput and nameInput, and the Button controls addDocumentBtn and Cancel), but nothing in this variant loads it: its view has no Add menu and its controller no openAddOrEditDialog / handleAddViaUrl. The port does not build the dead fragment, so structural_diff, which unions every archived fragment with the view, counts its controls as missing." } ] } diff --git a/meta/z2ui5_cl_smpc_app_656.json b/meta/z2ui5_cl_smpc_app_656.json index a65b8dd0b..201a84265 100644 --- a/meta/z2ui5_cl_smpc_app_656.json +++ b/meta/z2ui5_cl_smpc_app_656.json @@ -5,15 +5,55 @@ "file": "src/02/01/z2ui5_cl_smpc_app_656.clas.abap", "batch": "b56", "audit": { - "frontend_action": false, - "event_t_arg": false + "frontend_action": true, + "event_t_arg": true }, "status": "generated", "checked": null, "deviations": [ { "type": "POST_171", - "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.124." + "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1 in the table's dependents as plugins:UploadSetwithTable (the original's dotted plugins.UploadSetwithTable under the sap.m default namespace), with its rowConfiguration aggregation; the app needs a UI5 release >= 1.124. Every member it carries (uploadUrl, multiple, cloudFilePickerEnabled, the actions association, beforeUploadStarts, itemRenamed) is as new as the plugin." + }, + { + "type": "POST_171", + "what": "the plugin's companion controls are kept 1:1 and are post-1.71 too: sap.m.upload.ActionsPlaceholder (@since 1.120, with placeholderFor - the toolbar slot the plugin renders its upload button into) and sap.m.upload.UploadItemConfiguration (@since 1.124; fileNamePath, mediaTypePath, urlPath, previewablePath and fileSizePath @1.124, isTrustedSourcePath @1.125), written upload:UploadItemConfiguration for the original's dotted upload.UploadItemConfiguration." + }, + { + "type": "POST_171", + "what": "sap.m.Column importance (@since 1.76) on the File Name and action columns, and sap.m.Table autoPopinMode (@since 1.76) and hiddenInPopin (@since 1.77), are kept 1:1 from the original table." + }, + { + "type": "NOTE", + "what": "The named JSONModel documents (manifest dataSource model/documents.json) is folded into the default model: every {documents>x} binding is the row field {X} and the items path is the bound T_ITEMS, still as the original's {path, templateShareable: false} binding info. All nine rows are inlined; the url and imageUrl fields are host-absolutized to https://sdk.openui5.org/test-resources/... because an abap2UI5 app has no demo-kit root to resolve the relative test-resources paths against. The UploadItemConfiguration paths name the upper-case ABAP fields (FILENAME, MEDIATYPE, URL, PREVIEWABLE, FILESIZE, TRUSTEDSOURCE) instead of fileName/mediaType/... - the same model columns. IMAGEURL and UPLOADSTATE are bound with omit_initial_paths, so a row the mock gives no imageUrl/uploadState still reads undefined and the original's own Image/Icon visible expressions and highlight expression decide exactly as in the sample." + }, + { + "type": "NOTE", + "what": "The controller formatters getIconSrc (UploadSetwithTable.getIconForFileType - IconPool's media-type table, the file-extension fallback with sap-icon://card for images) and getFileSizeWithUnits (KB/MB/GB with two decimals) run in ABAP (icon_for, size_with_units) and the row carries the finished values in two port fields, ICON and FILESIZE_UNITS, which core:Icon.src and the File Size Text bind - the thin-frontend rule; the {parts: [...], formatter: ...} bindings are gone with them." + }, + { + "type": "IMPROVISED", + "what": "Upload: the sample starts a sinon fake XHR server (model/mockserver.js) in beforeUploadStarts, which answers the POST to /uploadFiles with 201 and unshifts the new document. There is no such endpoint behind an abap2UI5 app, so the port plays the mock server's part in the backend: beforeUploadStarts is a backend wire with check_prevent_default (the plugin's own veto - no XHR is sent) that transports the item's file name, media type and size, and the backend queues the file for the FileUpload dialog (see the next deviation); its Add then unshifts, per file, the row the mock server would have created (uploadState Complete, revision 00, In work, Jane Burns, the chosen document type, trustedSource) and shows 'Document Added' once, at once rather than after the sample's one-second setTimeout. Lost with it: the uploaded file's blob: object URL (an uploaded row has an empty url, so it cannot be previewed or downloaded) and the random uid id (a running number); uploadCompleted and onActivated are not wired (no upload completes, and the plugin is addressed by an added id uploadSetPlugin instead of the instance onActivated handed the controller); URLListValidator.add('blob') is dropped. Several files picked at once fire beforeUploadStarts back to back and abap2UI5 runs one round-trip at a time: check_queue_last keeps the last one, so only the first and the last of them reach the dialog." + }, + { + "type": "IMPROVISED", + "what": "The point of this variant, the FileUpload dialog, is driven differently: the original sets itemValidationHandler='.itemValidationCallback' on the plugin - a function-typed property that cannot be bound or transported, so it is dropped - and that callback parks each picked item with its Promise resolve/reject, then opens the FileUpload fragment on a dialog-local JSONModel {selectedItems, types}. In the port the vetoed beforeUploadStarts collects the file into T_SELECTEDITEMS (fileName, fileCategorySelected preset to the first category, plus the port's media type and size) and opens the fragment as the popup, rebuilt 1:1 (Dialog, Toolbar with Title/ToolbarSpacer/Browse Button, the Table with its three Columns, the ComboBox over T_TYPES from getFileCategories with selectedKey, the valueState expression and valueStateText, core:ListItem, the decline Button, Add and Cancel); its named-model-free bindings /selectedItems and /types become the bound T_SELECTEDITEMS and T_TYPES. Browse calls the plugin's fileSelectionHandler through control_by_id. The ComboBox selectionChange names .onDocumentTypeChange, which the controller does not define; the port wires it to recompute the Add button's enabled (the isAddButtonEnabled formatter: at least one file and every file typed), which the original re-evaluated through its parts binding. handleRemove reads the item and its reject callback from two core:CustomData elements (key item and key reject) on the decline Button; they are dropped - the backend removes the row by its binding path. handleConfirmation resolves each Promise after adding a documentType header field, which the mock server files the document under; the port adds the rows itself with the chosen document type. Cancel (closeFileUplaodFragment) discards the queued files." + }, + { + "type": "IMPROVISED", + "what": "onDownloadFiles calls the plugin's download( context, true ) for EVERY selected row; a UI5 event expression has no loop, so the port's Download button calls download for the first selected row only, through a view-wired control_by_id on the plugin whose argument is $controller.getView().byId('table-uploadSet').getSelectedContexts()[0]." + }, + { + "type": "LIVE_TEST", + "what": "Unverified in a running system: (a) the plugin calls by id (uploadSetPlugin, an id the original does not carry) through the unlisted-method path of control_by_id - openFilePreview with the Link's $event.oSource.getBindingContext(), renameItem and download with $controller.getView().byId('table-uploadSet').getSelectedContexts()[0] - each handing the live Context object through castArgAuto untouched; (b) selectionChange transporting $event.oSource.getSelectedContexts().join() (Context.toString is the binding path) and the itemRenamed wire reading ${$parameters>/item}.getBindingContext().getPath(); (c) the vetoed beforeUploadStarts and ${$parameters>/item}.getFileObject().size." + }, + { + "type": "NOTE", + "what": "onSelectionChange's setEnabled calls become two bound flags: Download is enabled for one or more selected rows, Remove/Rename/Edit URL for exactly one. onSearch's Filter('fileName', Contains, query) is the view-wired binding_call filter on the table's items with ${$source>/value} - roundtrip-free, and like any binding filter it does not survive a view rebuild. onDocumentRenamedSuccess writes the new name into the row in the backend (the itemRenamed wire carries the row's path and the item's file name) and toasts 'Document Renamed.' with duration 2000. After a removal the port resets the selection AND the four buttons; the original's removeSelections( ) fires no selectionChange, so there the buttons stayed enabled on an empty selection." + }, + { + "type": "IMPROVISED", + "what": "The AddViaUrl fragment is the port's popup with its ids kept (addViaUrlDialog, addViaUrlSimpleform, urlInputLabel, urlInput, nameInputLabel, nameInput, addDocumentBtn), and what openAddOrEditDialog / _isValidName / _validateAddOrEditUrlDialog set through Element.getElementById is bound instead: the Dialog title (Add URL / Edit URL), the begin button text (Add / Apply), urlInputLabel.required, both Input values and their valueState / valueStateText. Cancel closes it with popup_close. Add validates name and URL in the backend (the unanchored URL regex reduced to its required part, a ftp/http/https scheme followed by a non-blank) and then adds the row directly - uploadItemViaUrl takes a JS Promise and the controller adds a documentUrl header field to the item, neither transportable, and the mock server's answer is exactly that row (the URL as typed, an empty media type and size 0). showEditConfirmation's controller-built sap.m.Dialog (type Message, state Warning, title Warning, Save / DiscardChanges) is a MessageBox.warning with the same title, text, actions and Save emphasized; Save updates the selected row's fileName and url and closes the fragment, DiscardChanges only closes the box. removeItem's MessageBox.warning keeps its text, actions Remove/CANCEL, emphasizedAction, styleClass and initialFocus; its explicit icon option is the warning box's own icon anyway." } ] } diff --git a/src/02/01/z2ui5_cl_smpc_app_645.clas.abap b/src/02/01/z2ui5_cl_smpc_app_645.clas.abap index 12e9f26cb..659eda7a2 100644 --- a/src/02/01/z2ui5_cl_smpc_app_645.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_645.clas.abap @@ -3,10 +3,61 @@ CLASS z2ui5_cl_smpc_app_645 DEFINITION PUBLIC. PUBLIC SECTION. INTERFACES z2ui5_if_app. + TYPES: + BEGIN OF ty_s_item, + key TYPE string, + firstname TYPE string, + lastname TYPE string, + size TYPE string, + city TYPE string, + END OF ty_s_item. + DATA t_items TYPE STANDARD TABLE OF ty_s_item WITH EMPTY KEY. + " the column menu's QuickSortItem and QuickGroupItem, set per opened column + DATA quick_key TYPE string. + DATA quick_label TYPE string. + DATA quick_sortorder TYPE string. + DATA quick_grouped TYPE abap_bool. + PROTECTED SECTION. + TYPES: + BEGIN OF ty_s_column, + key TYPE string, + label TYPE string, + path TYPE string, + halign TYPE string, + visible TYPE abap_bool, + width TYPE string, + END OF ty_s_column. + TYPES: + BEGIN OF ty_s_sorter, + key TYPE string, + descending TYPE abap_bool, + END OF ty_s_sorter. + TYPES ty_t_column TYPE STANDARD TABLE OF ty_s_column WITH EMPTY KEY. + TYPES ty_t_sorter TYPE STANDARD TABLE OF ty_s_sorter WITH EMPTY KEY. + DATA client TYPE REF TO z2ui5_if_client. + " the Engine state: Columns (order + visibility, ColumnWidth), Sorter, Groups + DATA t_columns TYPE ty_t_column. + DATA t_sorters TYPE ty_t_sorter. + DATA t_groups TYPE string_table. METHODS view_display. + METHODS items_binding + RETURNING + VALUE(result) TYPE string. + METHODS set_p13n_data. + METHODS on_event. + METHODS before_open_column_menu. + METHODS apply_columns + IMPORTING + state TYPE string_table. + METHODS move_column. + METHODS p13n_entries + IMPORTING + json TYPE string + RETURNING + VALUE(result) TYPE ty_t_sorter. METHODS model_init. PRIVATE SECTION. @@ -23,6 +74,8 @@ CLASS z2ui5_cl_smpc_app_645 IMPLEMENTATION. view_display( ). ELSEIF client->check_on_navigated( ). view_display( ). + ELSEIF client->check_on_event( ). + on_event( ). ENDIF. ENDMETHOD. @@ -30,29 +83,429 @@ CLASS z2ui5_cl_smpc_app_645 IMPLEMENTATION. METHOD view_display. + DATA column_node TYPE REF TO z2ui5_cl_ui5_view_builder. + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). - " TODO rebuild ui5/sap.m/p13n.Engine/*.view.xml 1:1 here (sap.m.p13n.Engine) - view->ele( n = `View` ns = `mvc` - )->a( n = `xmlns` v = `sap.m` - )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` - )->a( n = `height` v = `100%` + DATA(table) = view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `xmlns:plugins` v = `sap.m.plugins` + )->a( n = `xmlns:tcm` v = `sap.m.table.columnmenu` + )->a( n = `xmlns:dnd` v = `sap.ui.core.dnd` + )->a( n = `xmlns:p13n` v = `sap.m.p13n` + )->a( n = `xmlns:app` v = `http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1` + )->a( n = `height` v = `100%` )->ele( `Page` - )->a( n = `title` v = `p13n.Engine` + )->a( n = `showHeader` v = `false` + + " handleStateChange's bindItems( { sorter, filters } ), composed by the backend + )->ele( `Table` + )->a( n = `id` v = `persoTable` + )->a( n = `items` v = items_binding( ) + )->a( n = `ariaLabelledBy` v = `title` + )->a( n = `fixedLayout` v = `Strict` + )->a( n = `autoPopinMode` v = `true` + )->a( n = `growing` v = `true` + )->a( n = `sticky` v = `ColumnHeaders,HeaderToolbar` + )->a( n = `popinLayout` v = `GridSmall` ). + + table->ele( `headerToolbar` + )->ele( `OverflowToolbar` + )->tag( `Title` + )->a( n = `id` v = `title` + )->a( n = `text` v = `Persons` + )->tag( `ToolbarSeparator` + " the sap.ui.fl VariantManagement (p13nVm) is dropped - see the sidecar + )->tag( `ToolbarSpacer` + )->tag( `Button` + )->a( n = `icon` v = `sap-icon://action-settings` + )->a( n = `press` v = client->_event( `OPEN_PERSO` ) + )->a( n = `tooltip` v = `Settings` ). + + " no filter can be set without the FilterPanel (see the sidecar), so the + " filter info bar stays hidden and its two press handlers are not wired + table->ele( `infoToolbar` + )->ele( `OverflowToolbar` + )->a( n = `id` v = `filterInfo` + )->a( n = `visible` v = `false` + )->a( n = `design` v = `Info` + )->a( n = `active` v = `true` + + )->tag( `Text` + )->a( n = `id` v = `filterInfoText` + )->a( n = `wrapping` v = `false` + )->a( n = `text` v = `Table filter active` + )->tag( `ToolbarSpacer` + )->tag( `Button` + )->a( n = `tooltip` v = `Remove All Filters` + )->a( n = `icon` v = `sap-icon://decline` + )->a( n = `type` v = `Transparent` ). + + table->ele( `dependents` + )->tag( n = `ColumnResizer` ns = `plugins` + )->a( n = `columnResize` v = client->_event( val = `COLUMN_RESIZE` + t_arg = VALUE #( ( `${$parameters>/column}.data('p13nKey')` ) + ( `${$parameters>/width}` ) ) ) + + )->ele( n = `Menu` ns = `tcm` + )->a( n = `id` v = `menu` + )->a( n = `beforeOpen` v = client->_event( val = `BEFORE_OPEN_MENU` + arg = `${$parameters>/openBy}.data('p13nKey')` ) + )->a( n = `showTableSettingsButton` v = `true` + )->a( n = `tableSettingsPressed` v = client->_event( `OPEN_PERSO` ) + )->ele( n = `QuickSort` ns = `tcm` + )->a( n = `change` v = client->_event( val = `QUICK_SORT` + t_arg = VALUE #( ( `${$parameters>/item}.getKey()` ) + ( `${$parameters>/item}.getSortOrder()` ) ) ) + + )->ele( n = `items` ns = `tcm` + )->tag( n = `QuickSortItem` ns = `tcm` + )->a( n = `key` v = client->_bind( quick_key ) + )->a( n = `label` v = client->_bind( quick_label ) + )->a( n = `sortOrder` v = client->_bind( quick_sortorder ) + + )->end( + )->end( + )->ele( n = `QuickGroup` ns = `tcm` + )->a( n = `change` v = client->_event( val = `QUICK_GROUP` + t_arg = VALUE #( ( `${$parameters>/item}.getKey()` ) + ( `${$parameters>/item}.getGrouped()` ) ) ) + + )->ele( n = `items` ns = `tcm` + )->tag( n = `QuickGroupItem` ns = `tcm` + )->a( n = `key` v = client->_bind( quick_key ) + )->a( n = `label` v = client->_bind( quick_label ) + )->a( n = `grouped` v = client->_bind( quick_grouped ) + + )->end( + )->end( + )->end( + + " the popup Engine.show( ) creates for the Columns, Sorter and Groups controllers + )->ele( n = `Popup` ns = `p13n` + )->a( n = `id` v = `p13nPopup` + )->a( n = `close` v = client->_event( val = `P13N_CLOSE` + t_arg = VALUE #( ( `${$parameters>/reason}` ) + ( `$event.oSource.getPanels()[0].getP13nData(true)` ) + ( `$event.oSource.getPanels()[1].getP13nData(true)` ) + ( `$event.oSource.getPanels()[2].getP13nData(true)` ) ) ) + + )->ele( n = `panels` ns = `p13n` + )->tag( n = `SelectionPanel` ns = `p13n` + )->a( n = `id` v = `columnsPanel` + )->a( n = `showHeader` v = `true` + )->a( n = `enableCount` v = `true` + )->tag( n = `SortPanel` ns = `p13n` + )->a( n = `id` v = `sortPanel` + )->tag( n = `GroupPanel` ns = `p13n` + )->a( n = `id` v = `groupPanel` + )->a( n = `queryLimit` v = `1` ). + + table->ele( `dragDropConfig` + )->tag( n = `DragDropInfo` ns = `dnd` + )->a( n = `sourceAggregation` v = `columns` + )->a( n = `targetAggregation` v = `columns` + )->a( n = `dropPosition` v = `Between` + )->a( n = `drop` v = client->_event( val = `COLUMN_MOVE` + t_arg = VALUE #( ( `${$parameters>/draggedControl}.data('p13nKey')` ) + ( `${$parameters>/droppedControl}.data('p13nKey')` ) + ( `${$parameters>/dropPosition}` ) ) ) ). + + table->ele( `noData` + )->tag( `IllustratedMessage` ). + + " updateColumns re-orders, hides and sizes the columns and sets their + " sort indicator; the port emits them in the order the state holds + DATA(columns) = table->ele( `columns` ). + LOOP AT t_columns INTO DATA(column). + DATA(sorter) = VALUE ty_s_sorter( t_sorters[ key = column-key ] OPTIONAL ). + IF sorter IS INITIAL. + column_node = columns->ele( `Column` ). + ELSEIF sorter-descending = abap_true. + column_node = columns->ele( `Column` + )->a( n = `sortIndicator` v = `Descending` ). + ELSE. + column_node = columns->ele( `Column` + )->a( n = `sortIndicator` v = `Ascending` ). + ENDIF. + column_node->a( n = `app:p13nKey` t = column-key + )->a( n = `headerMenu` v = `menu` + )->a( n = `visible` b = column-visible ). + IF column-halign = `End`. + column_node->a( n = `hAlign` v = `End` ). + ENDIF. + IF column-width IS NOT INITIAL. + column_node->a( n = `width` t = column-width ). + ENDIF. + IF column-key = `firstName_col`. + column_node->ele( `header` )->tag( `Text` - )->a( n = `text` v = `TODO: port sap.m.sample.p13n.Engine` ). + )->a( n = `text` t = column-label ). + ELSE. + column_node->tag( `Text` + )->a( n = `text` t = column-label ). + ENDIF. + ENDLOOP. + + " the cell template follows the column order: one Text per column + DATA(cells) = table->ele( `items` + )->ele( `ColumnListItem` ). + LOOP AT t_columns INTO column. + cells->tag( `Text` + )->a( n = `text` v = |\{{ column-path }\}| ). + ENDLOOP. client->view_display( view->stringify( ) ). + " a rebuilt view carries fresh, empty panels + set_p13n_data( ). + + ENDMETHOD. + + + METHOD items_binding. + + " createGroups + createSorters: one grouping sorter per group, then the + " sorters - a sorter on an already grouped path only sets its direction + TYPES: + BEGIN OF ty_s_binding_sorter, + path TYPE string, + descending TYPE abap_bool, + group TYPE abap_bool, + END OF ty_s_binding_sorter. + DATA binding_sorters TYPE STANDARD TABLE OF ty_s_binding_sorter WITH EMPTY KEY. + + LOOP AT t_groups INTO DATA(group). + INSERT VALUE #( path = t_columns[ key = group ]-path group = abap_true ) INTO TABLE binding_sorters. + ENDLOOP. + LOOP AT t_sorters INTO DATA(sorter). + DATA(path) = t_columns[ key = sorter-key ]-path. + IF line_exists( binding_sorters[ path = path ] ). + binding_sorters[ path = path ]-descending = sorter-descending. + ELSE. + INSERT VALUE #( path = path descending = sorter-descending ) INTO TABLE binding_sorters. + ENDIF. + ENDLOOP. + + DATA(sorter_list) = ``. + LOOP AT binding_sorters INTO DATA(binding_sorter). + sorter_list = |{ sorter_list }, \{ path: '{ binding_sorter-path }', | && + |descending: { COND #( WHEN binding_sorter-descending = abap_true THEN `true` ELSE `false` ) }, | && + |group: { COND #( WHEN binding_sorter-group = abap_true THEN `true` ELSE `false` ) } \}|. + ENDLOOP. + + result = |\{ path: '{ client->_bind( val = t_items path = abap_true ) }', | && + |sorter: [{ shift_left( val = sorter_list sub = `, ` ) }] \}|. + + ENDMETHOD. + + + METHOD set_p13n_data. + + " the controllers' panel data (mixInfoAndState): the active entries in + " state order, then the others sorted by label + DATA(by_label) = t_columns. + SORT by_label BY label. + + DATA(json) = ``. + LOOP AT t_columns INTO DATA(column) WHERE visible = abap_true. + json = |{ json },\{"name":"{ column-key }","label":"{ column-label }","visible":true\}|. + ENDLOOP. + LOOP AT by_label INTO column WHERE visible = abap_false. + json = |{ json },\{"name":"{ column-key }","label":"{ column-label }","visible":false\}|. + ENDLOOP. + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `columnsPanel` ) + ( `setP13nData` ) + ( |[{ shift_left( val = json sub = `,` ) }]| ) ) ). + + json = ``. + LOOP AT t_sorters INTO DATA(sorter). + json = |{ json },\{"name":"{ sorter-key }","label":"{ t_columns[ key = sorter-key ]-label }","sorted":true,| && + |"descending":{ COND #( WHEN sorter-descending = abap_true THEN `true` ELSE `false` ) }\}|. + ENDLOOP. + LOOP AT by_label INTO column. + IF NOT line_exists( t_sorters[ key = column-key ] ). + json = |{ json },\{"name":"{ column-key }","label":"{ column-label }","sorted":false,"descending":false\}|. + ENDIF. + ENDLOOP. + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `sortPanel` ) + ( `setP13nData` ) + ( |[{ shift_left( val = json sub = `,` ) }]| ) ) ). + + json = ``. + LOOP AT t_groups INTO DATA(group). + json = |{ json },\{"name":"{ group }","label":"{ t_columns[ key = group ]-label }","grouped":true\}|. + ENDLOOP. + LOOP AT by_label INTO column. + IF NOT line_exists( t_groups[ table_line = column-key ] ). + json = |{ json },\{"name":"{ column-key }","label":"{ column-label }","grouped":false\}|. + ENDIF. + ENDLOOP. + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `groupPanel` ) + ( `setP13nData` ) + ( |[{ shift_left( val = json sub = `,` ) }]| ) ) ). + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get_event( ). + + WHEN `OPEN_PERSO`. + set_p13n_data( ). + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `p13nPopup` ) ( `open` ) ) ). + + WHEN `P13N_CLOSE`. + " the Engine applies the panel state on Ok only + IF client->get_event_arg( ) = `Ok`. + apply_columns( VALUE #( FOR entry IN p13n_entries( client->get_event_arg( 2 ) ) ( entry-key ) ) ). + t_sorters = p13n_entries( client->get_event_arg( 3 ) ). + t_groups = VALUE #( FOR entry IN p13n_entries( client->get_event_arg( 4 ) ) ( entry-key ) ). + view_display( ). + ENDIF. + + WHEN `BEFORE_OPEN_MENU`. + before_open_column_menu( ). + + WHEN `QUICK_SORT`. + " onSort: every sorter cleared, the column's own order pushed unless None + t_sorters = VALUE #( ). + IF client->get_event_arg( 2 ) <> `None`. + t_sorters = VALUE #( ( key = client->get_event_arg( ) + descending = xsdbool( client->get_event_arg( 2 ) = `Descending` ) ) ). + ENDIF. + view_display( ). + + WHEN `QUICK_GROUP`. + " onGroup: every grouping cleared, the column grouped if the item says so + t_groups = VALUE #( ). + IF client->get_event_arg( 2 ) = abap_true. + t_groups = VALUE #( ( client->get_event_arg( ) ) ). + ENDIF. + view_display( ). + + WHEN `COLUMN_MOVE`. + move_column( ). + view_display( ). + + WHEN `COLUMN_RESIZE`. + " applyState( { ColumnWidth } ): the resizer has already sized the + " column, the state keeps the width for the next rebuild + IF line_exists( t_columns[ key = client->get_event_arg( ) ] ). + t_columns[ key = client->get_event_arg( ) ]-width = client->get_event_arg( 2 ). + ENDIF. + + ENDCASE. + + ENDMETHOD. + + + METHOD before_open_column_menu. + + DATA(column) = VALUE ty_s_column( t_columns[ key = client->get_event_arg( ) ] OPTIONAL ). + IF column IS INITIAL. + RETURN. + ENDIF. + DATA(sorter) = VALUE ty_s_sorter( t_sorters[ key = column-key ] OPTIONAL ). + + quick_key = column-key. + quick_label = column-label. + quick_sortorder = COND #( WHEN sorter IS INITIAL THEN `None` + WHEN sorter-descending = abap_true THEN `Descending` + ELSE `Ascending` ). + quick_grouped = xsdbool( line_exists( t_groups[ table_line = column-key ] ) ). + + ENDMETHOD. + + + METHOD apply_columns. + + " updateColumns: every column hidden, then the state's columns shown and + " moved to the front in state order + DATA(previous) = t_columns. + t_columns = VALUE #( ). + LOOP AT state INTO DATA(key). + DATA(column) = previous[ key = key ]. + column-visible = abap_true. + INSERT column INTO TABLE t_columns. + DELETE previous WHERE key = key. + ENDLOOP. + LOOP AT previous INTO column. + column-visible = abap_false. + INSERT column INTO TABLE t_columns. + ENDLOOP. + + ENDMETHOD. + + + METHOD move_column. + + DATA(dragged) = client->get_event_arg( ). + DATA(dropped) = client->get_event_arg( 2 ). + IF dragged = dropped OR NOT line_exists( t_columns[ key = dragged ] ) OR NOT line_exists( t_columns[ key = dropped ] ). + RETURN. + ENDIF. + + " onColumnMove's position arithmetic, on 0-based column indices + DATA(dragged_index) = line_index( t_columns[ key = dragged ] ) - 1. + DATA(dropped_index) = line_index( t_columns[ key = dropped ] ) - 1. + DATA(new_pos) = dropped_index + + COND i( WHEN client->get_event_arg( 3 ) = `Before` THEN 0 ELSE 1 ) + + COND i( WHEN dragged_index < dropped_index THEN -1 ELSE 0 ). + + " applyState( { Columns: [ { key, position } ] } ): the column moves to + " that position of the visible columns and is shown + DATA(state) = VALUE string_table( FOR c IN t_columns WHERE ( visible = abap_true AND key <> dragged ) ( c-key ) ). + IF new_pos > lines( state ). + new_pos = lines( state ). + ENDIF. + INSERT dragged INTO state INDEX new_pos + 1. + apply_columns( state ). + + ENDMETHOD. + + + METHOD p13n_entries. + + " getP13nData( true ) arrives as a JSON array of the panel's flat item + " objects; collect their names (and a SortPanel item's direction) in order + SPLIT json AT `}` INTO TABLE DATA(objects). + LOOP AT objects INTO DATA(object). + DATA(offset) = find( val = object sub = `"name":"` ). + IF offset >= 0. + INSERT VALUE #( key = substring_before( val = substring( val = object off = offset + 8 ) sub = `"` ) + descending = xsdbool( object CS `"descending":true` ) ) INTO TABLE result. + ENDIF. + ENDLOOP. + ENDMETHOD. METHOD model_init. - " TODO seed the default model (see the sample's controller / JSON mock) - RETURN. + t_items = VALUE #( + ( key = `P1` firstname = `Peter` lastname = `Mueller` size = `1.75` city = `Walldorf` ) + ( key = `P2` firstname = `Petra` lastname = `Maier` size = `1.85` city = `Walldorf` ) + ( key = `P3` firstname = `Thomas` lastname = `Smith` size = `1.95` city = `Heidelberg` ) + ( key = `P4` firstname = `John` lastname = `Williams` size = `1.65` city = `Walldorf` ) + ( key = `P5` firstname = `Maria` lastname = `Jones` size = `1.55` city = `Walldorf` ) ). + + " the columns of the view; label and path are the MetadataHelper's + t_columns = VALUE #( + ( key = `firstName_col` label = `First Name` path = `FIRSTNAME` halign = `` visible = abap_true ) + ( key = `lastName_col` label = `Last Name` path = `LASTNAME` halign = `` visible = abap_true ) + ( key = `city_col` label = `City` path = `CITY` halign = `` visible = abap_true ) + ( key = `size_col` label = `Size` path = `SIZE` halign = `End` visible = abap_false ) ). + + quick_sortorder = `None`. ENDMETHOD. diff --git a/src/02/01/z2ui5_cl_smpc_app_646.clas.abap b/src/02/01/z2ui5_cl_smpc_app_646.clas.abap index ea4dd824e..40d9944b7 100644 --- a/src/02/01/z2ui5_cl_smpc_app_646.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_646.clas.abap @@ -3,10 +3,53 @@ CLASS z2ui5_cl_smpc_app_646 DEFINITION PUBLIC. PUBLIC SECTION. INTERFACES z2ui5_if_app. + TYPES: + BEGIN OF ty_s_item, + key TYPE string, + firstname TYPE string, + lastname TYPE string, + size TYPE string, + city TYPE string, + END OF ty_s_item. + TYPES: + BEGIN OF ty_s_token, + text TYPE string, + END OF ty_s_token. + TYPES ty_t_token TYPE STANDARD TABLE OF ty_s_token WITH EMPTY KEY. + DATA t_items TYPE STANDARD TABLE OF ty_s_item WITH EMPTY KEY. + " the EQ conditions per filter field while the filter dialog is open + DATA t_firstname_tokens TYPE ty_t_token. + DATA t_lastname_tokens TYPE ty_t_token. + DATA t_city_tokens TYPE ty_t_token. + DATA t_size_tokens TYPE ty_t_token. + PROTECTED SECTION. + TYPES: + BEGIN OF ty_s_condition, + path TYPE string, + value TYPE string, + END OF ty_s_condition. + TYPES ty_t_condition TYPE STANDARD TABLE OF ty_s_condition WITH EMPTY KEY. + DATA client TYPE REF TO z2ui5_if_client. + " the Filter state the table is bound with + DATA t_conditions TYPE ty_t_condition. METHODS view_display. + METHODS items_binding + RETURNING + VALUE(result) TYPE string. + METHODS on_event. + METHODS open_perso_dialog. + METHODS update_tokens + CHANGING + tokens TYPE ty_t_token. + METHODS apply_filters. + METHODS token_texts + IMPORTING + json TYPE string + RETURNING + VALUE(result) TYPE string_table. METHODS model_init. PRIVATE SECTION. @@ -23,6 +66,8 @@ CLASS z2ui5_cl_smpc_app_646 IMPLEMENTATION. view_display( ). ELSEIF client->check_on_navigated( ). view_display( ). + ELSEIF client->check_on_event( ). + on_event( ). ENDIF. ENDMETHOD. @@ -32,27 +77,390 @@ CLASS z2ui5_cl_smpc_app_646 IMPLEMENTATION. DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). - " TODO rebuild ui5/sap.m/p13n.EngineCustomFilters/*.view.xml 1:1 here (sap.m.p13n.Engine) view->ele( n = `View` ns = `mvc` - )->a( n = `xmlns` v = `sap.m` - )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` - )->a( n = `height` v = `100%` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `xmlns:core` v = `sap.ui.core` + )->a( n = `xmlns:plugins` v = `sap.m.plugins` + )->a( n = `xmlns:tcm` v = `sap.m.table.columnmenu` + )->a( n = `xmlns:dnd` v = `sap.ui.core.dnd` + )->a( n = `xmlns:app` v = `http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1` + )->a( n = `height` v = `100%` )->ele( `Page` - )->a( n = `title` v = `p13n.EngineCustomFilters` + )->a( n = `showHeader` v = `false` + + " handleStateChange's getBinding( 'items' ).filter( ), composed by the backend + )->ele( `Table` + )->a( n = `id` v = `persoTable` + )->a( n = `items` v = items_binding( ) + )->a( n = `ariaLabelledBy` v = `title` + )->a( n = `fixedLayout` v = `Strict` + )->a( n = `autoPopinMode` v = `true` + )->a( n = `growing` v = `true` + )->a( n = `sticky` v = `ColumnHeaders,HeaderToolbar` + )->a( n = `popinLayout` v = `GridSmall` + + )->ele( `headerToolbar` + )->ele( `OverflowToolbar` + )->tag( `Title` + )->a( n = `id` v = `title` + )->a( n = `text` v = `Persons` + )->tag( `ToolbarSeparator` + " the sap.ui.fl VariantManagement (p13nVm) is dropped - see the sidecar + )->tag( `ToolbarSpacer` + )->tag( `Button` + )->a( n = `icon` v = `sap-icon://action-settings` + )->a( n = `press` v = client->_event( `OPEN_PERSO` ) + )->a( n = `tooltip` v = `Settings` + + )->end( + )->end( + + )->ele( `dependents` + )->tag( n = `ColumnResizer` ns = `plugins` + )->ele( n = `Menu` ns = `tcm` + )->a( n = `id` v = `menu` + + )->ele( n = `QuickSort` ns = `tcm` + )->ele( n = `items` ns = `tcm` + )->tag( n = `QuickSortItem` ns = `tcm` + + )->end( + )->end( + )->ele( n = `QuickGroup` ns = `tcm` + )->ele( n = `items` ns = `tcm` + )->tag( n = `QuickGroupItem` ns = `tcm` + + )->end( + )->end( + )->ele( n = `items` ns = `tcm` + )->tag( n = `ActionItem` ns = `tcm` + )->a( n = `icon` v = `sap-icon://sort` + )->a( n = `label` v = `Sort` + )->tag( n = `ActionItem` ns = `tcm` + )->a( n = `icon` v = `sap-icon://group-2` + )->a( n = `label` v = `Group` + )->tag( n = `ActionItem` ns = `tcm` + )->a( n = `icon` v = `sap-icon://table-column` + )->a( n = `label` v = `Columns` + + )->end( + )->end( + + " the Filter popup Engine.show( ) creates - its FilterPanel cannot be + " built (see the sidecar), so the itemFactory's MultiInput controls sit + " in a Dialog, one per filterable field + )->ele( `Dialog` + )->a( n = `id` v = `filterDialog` + )->a( n = `title` v = `Custom Filter Settings` + )->a( n = `contentHeight` v = `50rem` + )->a( n = `contentWidth` v = `45rem` + + )->ele( `VBox` + )->a( n = `class` v = `sapUiSmallMargin` + + )->tag( `Label` + )->a( n = `text` v = `First Name` + )->a( n = `labelFor` v = `firstNameFilter` + )->ele( `MultiInput` + )->a( n = `id` v = `firstNameFilter` + )->a( n = `showValueHelp` v = `false` + )->a( n = `showClearIcon` v = `true` + )->a( n = `tokens` v = client->_bind( t_firstname_tokens ) + )->a( n = `suggestionItems` v = client->_bind( t_items ) + )->a( n = `tokenUpdate` v = client->_event( val = `TOKEN_UPDATE_FIRSTNAME` + t_arg = VALUE #( ( `${$parameters>/addedTokens}` ) + ( `${$parameters>/removedTokens}` ) ) ) + + )->ele( `tokens` + )->tag( `Token` + )->a( n = `text` v = `{TEXT}` + + )->end( + )->ele( `suggestionItems` + )->tag( n = `Item` ns = `core` + )->a( n = `key` v = `{KEY}` + )->a( n = `text` v = `{FIRSTNAME}` + + )->end( + )->end( + + )->tag( `Label` + )->a( n = `text` v = `Last Name` + )->a( n = `labelFor` v = `lastNameFilter` + )->ele( `MultiInput` + )->a( n = `id` v = `lastNameFilter` + )->a( n = `showValueHelp` v = `false` + )->a( n = `showClearIcon` v = `true` + )->a( n = `tokens` v = client->_bind( t_lastname_tokens ) + )->a( n = `suggestionItems` v = client->_bind( t_items ) + )->a( n = `tokenUpdate` v = client->_event( val = `TOKEN_UPDATE_LASTNAME` + t_arg = VALUE #( ( `${$parameters>/addedTokens}` ) + ( `${$parameters>/removedTokens}` ) ) ) + + )->ele( `tokens` + )->tag( `Token` + )->a( n = `text` v = `{TEXT}` + + )->end( + )->ele( `suggestionItems` + )->tag( n = `Item` ns = `core` + )->a( n = `key` v = `{KEY}` + )->a( n = `text` v = `{LASTNAME}` + + )->end( + )->end( + + )->tag( `Label` + )->a( n = `text` v = `City` + )->a( n = `labelFor` v = `cityFilter` + )->ele( `MultiInput` + )->a( n = `id` v = `cityFilter` + )->a( n = `showValueHelp` v = `false` + )->a( n = `showClearIcon` v = `true` + )->a( n = `tokens` v = client->_bind( t_city_tokens ) + )->a( n = `suggestionItems` v = client->_bind( t_items ) + )->a( n = `tokenUpdate` v = client->_event( val = `TOKEN_UPDATE_CITY` + t_arg = VALUE #( ( `${$parameters>/addedTokens}` ) + ( `${$parameters>/removedTokens}` ) ) ) + + )->ele( `tokens` + )->tag( `Token` + )->a( n = `text` v = `{TEXT}` + + )->end( + )->ele( `suggestionItems` + )->tag( n = `Item` ns = `core` + )->a( n = `key` v = `{KEY}` + )->a( n = `text` v = `{CITY}` + + )->end( + )->end( + + )->tag( `Label` + )->a( n = `text` v = `Size` + )->a( n = `labelFor` v = `sizeFilter` + )->ele( `MultiInput` + )->a( n = `id` v = `sizeFilter` + )->a( n = `showValueHelp` v = `false` + )->a( n = `showClearIcon` v = `true` + )->a( n = `tokens` v = client->_bind( t_size_tokens ) + )->a( n = `suggestionItems` v = client->_bind( t_items ) + )->a( n = `tokenUpdate` v = client->_event( val = `TOKEN_UPDATE_SIZE` + t_arg = VALUE #( ( `${$parameters>/addedTokens}` ) + ( `${$parameters>/removedTokens}` ) ) ) + + )->ele( `tokens` + )->tag( `Token` + )->a( n = `text` v = `{TEXT}` + + )->end( + )->ele( `suggestionItems` + )->tag( n = `Item` ns = `core` + )->a( n = `key` v = `{KEY}` + )->a( n = `text` v = `{SIZE}` + + )->end( + )->end( + )->end( + + )->ele( `beginButton` + )->tag( `Button` + )->a( n = `text` v = `OK` + )->a( n = `type` v = `Emphasized` + )->a( n = `press` v = client->_event( `APPLY_FILTERS` ) + + )->end( + )->ele( `endButton` + )->tag( `Button` + )->a( n = `text` v = `Cancel` + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `filterDialog` ) ( `close` ) ) ) + + )->end( + )->end( + )->end( + + )->ele( `dragDropConfig` + )->tag( n = `DragDropInfo` ns = `dnd` + )->a( n = `sourceAggregation` v = `columns` + )->a( n = `targetAggregation` v = `columns` + )->a( n = `dropPosition` v = `Between` + + )->end( + + )->ele( `noData` + )->tag( `IllustratedMessage` + + )->end( + + )->ele( `columns` + )->ele( `Column` + )->a( n = `app:p13nKey` v = `firstName_col` + )->a( n = `headerMenu` v = `menu` + + )->ele( `header` + )->tag( `Text` + )->a( n = `text` v = `First Name` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `app:p13nKey` v = `lastName_col` + )->a( n = `headerMenu` v = `menu` + + )->tag( `Text` + )->a( n = `text` v = `Last Name` + + )->end( + )->ele( `Column` + )->a( n = `app:p13nKey` v = `city_col` + )->a( n = `headerMenu` v = `menu` + + )->tag( `Text` + )->a( n = `text` v = `City` + + )->end( + )->ele( `Column` + )->a( n = `app:p13nKey` v = `size_col` + )->a( n = `hAlign` v = `End` + )->a( n = `headerMenu` v = `menu` - )->tag( `Text` - )->a( n = `text` v = `TODO: port sap.m.sample.p13n.EngineCustomFilters` ). + )->tag( `Text` + )->a( n = `text` v = `Size` + + )->end( + )->end( + + )->ele( `items` + )->ele( `ColumnListItem` + )->tag( `Text` + )->a( n = `text` v = `{FIRSTNAME}` + )->tag( `Text` + )->a( n = `text` v = `{LASTNAME}` + )->tag( `Text` + )->a( n = `text` v = `{CITY}` + )->tag( `Text` + )->a( n = `text` v = `{SIZE}` ). client->view_display( view->stringify( ) ). ENDMETHOD. + METHOD items_binding. + + " createFilters: one EQ filter per condition, all in one flat array - + " UI5 ORs the filters of one path and ANDs the paths + DATA(filters) = ``. + LOOP AT t_conditions INTO DATA(condition). + filters = |{ filters }, \{ path: '{ condition-path }', operator: 'EQ', value1: '{ condition-value }' \}|. + ENDLOOP. + + result = |\{ path: '{ client->_bind( val = t_items path = abap_true ) }', | && + |filters: [{ shift_left( val = filters sub = `, ` ) }] \}|. + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get_event( ). + + WHEN `OPEN_PERSO`. + open_perso_dialog( ). + + WHEN `TOKEN_UPDATE_FIRSTNAME`. + update_tokens( CHANGING tokens = t_firstname_tokens ). + + WHEN `TOKEN_UPDATE_LASTNAME`. + update_tokens( CHANGING tokens = t_lastname_tokens ). + + WHEN `TOKEN_UPDATE_CITY`. + update_tokens( CHANGING tokens = t_city_tokens ). + + WHEN `TOKEN_UPDATE_SIZE`. + update_tokens( CHANGING tokens = t_size_tokens ). + + WHEN `APPLY_FILTERS`. + apply_filters( ). + view_display( ). + + ENDCASE. + + ENDMETHOD. + + + METHOD open_perso_dialog. + + " the itemFactory seeds each MultiInput with the existing conditions + t_firstname_tokens = VALUE #( FOR c IN t_conditions WHERE ( path = `FIRSTNAME` ) ( text = c-value ) ). + t_lastname_tokens = VALUE #( FOR c IN t_conditions WHERE ( path = `LASTNAME` ) ( text = c-value ) ). + t_city_tokens = VALUE #( FOR c IN t_conditions WHERE ( path = `CITY` ) ( text = c-value ) ). + t_size_tokens = VALUE #( FOR c IN t_conditions WHERE ( path = `SIZE` ) ( text = c-value ) ). + + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `filterDialog` ) ( `open` ) ) ). + + ENDMETHOD. + + + METHOD update_tokens. + + " tokenUpdate: an EQ condition per added token, the removed ones dropped + LOOP AT token_texts( client->get_event_arg( ) ) INTO DATA(added). + INSERT VALUE #( text = added ) INTO TABLE tokens. + ENDLOOP. + LOOP AT token_texts( client->get_event_arg( 2 ) ) INTO DATA(removed). + DELETE tokens WHERE text = removed. + ENDLOOP. + + ENDMETHOD. + + + METHOD apply_filters. + + t_conditions = VALUE #( ( LINES OF VALUE ty_t_condition( FOR t IN t_firstname_tokens ( path = `FIRSTNAME` value = t-text ) ) ) + ( LINES OF VALUE ty_t_condition( FOR t IN t_lastname_tokens ( path = `LASTNAME` value = t-text ) ) ) + ( LINES OF VALUE ty_t_condition( FOR t IN t_city_tokens ( path = `CITY` value = t-text ) ) ) + ( LINES OF VALUE ty_t_condition( FOR t IN t_size_tokens ( path = `SIZE` value = t-text ) ) ) ). + + ENDMETHOD. + + + METHOD token_texts. + + " addedTokens / removedTokens arrive as a JSON array of the tokens' + " properties; collect their texts + SPLIT json AT `}` INTO TABLE DATA(objects). + LOOP AT objects INTO DATA(object). + DATA(offset) = find( val = object sub = `"text":"` ). + IF offset >= 0. + INSERT substring_before( val = substring( val = object off = offset + 8 ) sub = `"` ) INTO TABLE result. + ENDIF. + ENDLOOP. + + ENDMETHOD. + + METHOD model_init. - " TODO seed the default model (see the sample's controller / JSON mock) - RETURN. + t_items = VALUE #( + ( key = `P1` firstname = `Peter` lastname = `Mueller` size = `1.75` city = `Walldorf` ) + ( key = `P2` firstname = `Petra` lastname = `Maier` size = `1.85` city = `Berlin` ) + ( key = `P3` firstname = `Thomas` lastname = `Smith` size = `1.95` city = `Berlin` ) + ( key = `P4` firstname = `John` lastname = `Mueller` size = `1.65` city = `Walldorf` ) + ( key = `P5` firstname = `Maria` lastname = `Jones` size = `1.55` city = `Walldorf` ) + ( key = `P6` firstname = `Christine` lastname = `Smith` size = `1.95` city = `Manchester` ) + ( key = `P7` firstname = `Hobin` lastname = `Rood` size = `1.85` city = `Manchester` ) + ( key = `P8` firstname = `Nils` lastname = `Mueller` size = `1.75` city = `Walldorf` ) + ( key = `P9` firstname = `Helga` lastname = `Maier` size = `1.85` city = `Berlin` ) + ( key = `P10` firstname = `Torsten` lastname = `Smith` size = `1.95` city = `Berlin` ) + ( key = `P11` firstname = `Yannick` lastname = `Mueller` size = `1.65` city = `London` ) + ( key = `P12` firstname = `Peter` lastname = `Jones` size = `1.75` city = `Walldorf` ) + ( key = `P13` firstname = `Christine` lastname = `Jones` size = `1.65` city = `Dresden` ) + ( key = `P14` firstname = `Nils` lastname = `Maier` size = `1.65` city = `Manchester` ) ). ENDMETHOD. diff --git a/src/02/01/z2ui5_cl_smpc_app_647.clas.abap b/src/02/01/z2ui5_cl_smpc_app_647.clas.abap index 3bf6f94d6..5f54d29a4 100644 --- a/src/02/01/z2ui5_cl_smpc_app_647.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_647.clas.abap @@ -26,7 +26,7 @@ CLASS z2ui5_cl_smpc_app_647 DEFINITION PUBLIC. METHODS handle_state_change. METHODS p13n_names IMPORTING - !json TYPE string + json TYPE string RETURNING VALUE(result) TYPE string_table. METHODS model_init. diff --git a/src/02/01/z2ui5_cl_smpc_app_648.clas.abap b/src/02/01/z2ui5_cl_smpc_app_648.clas.abap index 1d9cf8089..645bef4bf 100644 --- a/src/02/01/z2ui5_cl_smpc_app_648.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_648.clas.abap @@ -3,10 +3,52 @@ CLASS z2ui5_cl_smpc_app_648 DEFINITION PUBLIC. PUBLIC SECTION. INTERFACES z2ui5_if_app. + TYPES: + BEGIN OF ty_s_item, + firstname TYPE string, + lastname TYPE string, + size TYPE string, + city TYPE string, + END OF ty_s_item. + DATA t_items TYPE STANDARD TABLE OF ty_s_item WITH EMPTY KEY. + PROTECTED SECTION. + TYPES: + BEGIN OF ty_s_column, + key TYPE string, + label TYPE string, + path TYPE string, + visible TYPE abap_bool, + width TYPE string, + END OF ty_s_column. + TYPES: + BEGIN OF ty_s_sorter, + key TYPE string, + descending TYPE abap_bool, + END OF ty_s_sorter. + TYPES ty_t_column TYPE STANDARD TABLE OF ty_s_column WITH EMPTY KEY. + TYPES ty_t_sorter TYPE STANDARD TABLE OF ty_s_sorter WITH EMPTY KEY. + DATA client TYPE REF TO z2ui5_if_client. + " the Engine state: Columns (order + visibility), ColumnWidth, Sorter + DATA t_columns TYPE ty_t_column. + DATA t_sorters TYPE ty_t_sorter. METHODS view_display. + METHODS rows_binding + RETURNING + VALUE(result) TYPE string. + METHODS set_p13n_data. + METHODS on_event. + METHODS apply_columns + IMPORTING + state TYPE string_table. + METHODS move_column. + METHODS p13n_entries + IMPORTING + json TYPE string + RETURNING + VALUE(result) TYPE ty_t_sorter. METHODS model_init. PRIVATE SECTION. @@ -23,6 +65,8 @@ CLASS z2ui5_cl_smpc_app_648 IMPLEMENTATION. view_display( ). ELSEIF client->check_on_navigated( ). view_display( ). + ELSEIF client->check_on_event( ). + on_event( ). ENDIF. ENDMETHOD. @@ -30,29 +74,280 @@ CLASS z2ui5_cl_smpc_app_648 IMPLEMENTATION. METHOD view_display. + DATA column_node TYPE REF TO z2ui5_cl_ui5_view_builder. + DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). - " TODO rebuild ui5/sap.m/p13n.EngineGridTable/*.view.xml 1:1 here (sap.m.p13n.Engine) - view->ele( n = `View` ns = `mvc` - )->a( n = `xmlns` v = `sap.m` - )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` - )->a( n = `height` v = `100%` + DATA(table) = view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.ui.table` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `xmlns:m` v = `sap.m` + )->a( n = `xmlns:tcm` v = `sap.m.table.columnmenu` + )->a( n = `xmlns:p13n` v = `sap.m.p13n` + )->a( n = `xmlns:app` v = `http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1` + )->a( n = `height` v = `100%` + + )->ele( n = `Page` ns = `m` + )->a( n = `showHeader` v = `false` + + " handleStateChange's getBinding( 'rows' ).sort( ), composed by the backend + )->ele( `Table` + )->a( n = `id` v = `persoTable` + )->a( n = `sort` v = client->_event( val = `SORT` + t_arg = VALUE #( ( `${$parameters>/column}.data('p13nKey')` ) + ( `${$parameters>/sortOrder}` ) ) ) + )->a( n = `columnResize` v = client->_event( val = `COLUMN_RESIZE` + t_arg = VALUE #( ( `${$parameters>/column}.data('p13nKey')` ) + ( `${$parameters>/width}` ) ) ) + " onColumnMove calls oEvt.preventDefault( ) and moves the column through the state + )->a( n = `columnMove` v = client->_event( val = `COLUMN_MOVE` + t_arg = VALUE #( ( `${$parameters>/column}.data('p13nKey')` ) + ( `${$parameters>/newPos}` ) ) + s_ctrl = VALUE #( check_prevent_default = abap_true ) ) + )->a( n = `rowMode` v = `Auto` + )->a( n = `ariaLabelledBy` v = `title` + )->a( n = `rows` v = rows_binding( ) ). + + table->ele( `extension` + )->ele( n = `OverflowToolbar` ns = `m` + )->tag( n = `Title` ns = `m` + )->a( n = `id` v = `title` + )->a( n = `text` v = `Persons` + )->tag( n = `ToolbarSeparator` ns = `m` + " the sap.ui.fl VariantManagement (p13nVm) is dropped - see the sidecar + )->tag( n = `ToolbarSpacer` ns = `m` + )->tag( n = `Button` ns = `m` + )->a( n = `icon` v = `sap-icon://action-settings` + )->a( n = `press` v = client->_event( `OPEN_PERSO` ) ). + + table->ele( `dependents` + )->tag( n = `Menu` ns = `tcm` + )->a( n = `id` v = `menu` + )->a( n = `showTableSettingsButton` v = `true` + )->a( n = `tableSettingsPressed` v = client->_event( `OPEN_PERSO` ) - )->ele( `Page` - )->a( n = `title` v = `p13n.EngineGridTable` + " the popup Engine.show( ) creates for the Columns and Sorter controllers + )->ele( n = `Popup` ns = `p13n` + )->a( n = `id` v = `p13nPopup` + )->a( n = `close` v = client->_event( val = `P13N_CLOSE` + t_arg = VALUE #( ( `${$parameters>/reason}` ) + ( `$event.oSource.getPanels()[0].getP13nData(true)` ) + ( `$event.oSource.getPanels()[1].getP13nData(true)` ) ) ) - )->tag( `Text` - )->a( n = `text` v = `TODO: port sap.m.sample.p13n.EngineGridTable` ). + )->ele( n = `panels` ns = `p13n` + )->tag( n = `SelectionPanel` ns = `p13n` + )->a( n = `id` v = `columnsPanel` + )->a( n = `showHeader` v = `true` + )->a( n = `enableCount` v = `true` + )->tag( n = `SortPanel` ns = `p13n` + )->a( n = `id` v = `sortPanel` ). + + table->ele( `noData` + )->tag( n = `IllustratedMessage` ns = `m` + )->a( n = `enableVerticalResponsiveness` v = `true` ). + + " handleStateChange re-orders, hides and sizes the columns and sets their + " sort order; the port emits them in the order the state holds + DATA(columns) = table->ele( `columns` ). + LOOP AT t_columns INTO DATA(column). + DATA(sorter) = VALUE ty_s_sorter( t_sorters[ key = column-key ] OPTIONAL ). + IF sorter IS INITIAL. + column_node = columns->ele( `Column` ). + ELSEIF sorter-descending = abap_true. + column_node = columns->ele( `Column` + )->a( n = `sortOrder` v = `Descending` ). + ELSE. + column_node = columns->ele( `Column` + )->a( n = `sortOrder` v = `Ascending` ). + ENDIF. + column_node->a( n = `app:p13nKey` t = column-key + )->a( n = `sortProperty` t = column-path + )->a( n = `visible` b = column-visible + )->a( n = `headerMenu` v = `menu` + )->a( n = `resizable` v = `true` + )->a( n = `width` t = column-width + )->a( n = `autoResizable` v = `true` + )->tag( n = `Label` ns = `m` + )->a( n = `text` t = column-label + )->ele( `template` + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = |\{{ column-path }\}| ). + ENDLOOP. client->view_display( view->stringify( ) ). + " a rebuilt view carries fresh, empty panels + set_p13n_data( ). + + ENDMETHOD. + + + METHOD rows_binding. + + DATA(sorter_list) = ``. + LOOP AT t_sorters INTO DATA(sorter). + sorter_list = |{ sorter_list }, \{ path: '{ t_columns[ key = sorter-key ]-path }', | && + |descending: { COND #( WHEN sorter-descending = abap_true THEN `true` ELSE `false` ) } \}|. + ENDLOOP. + + result = |\{ path: '{ client->_bind( val = t_items path = abap_true ) }', | && + |sorter: [{ shift_left( val = sorter_list sub = `, ` ) }] \}|. + + ENDMETHOD. + + + METHOD set_p13n_data. + + " the controllers' panel data (mixInfoAndState): the active entries in + " state order, then the others sorted by label + DATA(by_label) = t_columns. + SORT by_label BY label. + + DATA(json) = ``. + LOOP AT t_columns INTO DATA(column) WHERE visible = abap_true. + json = |{ json },\{"name":"{ column-key }","label":"{ column-label }","visible":true\}|. + ENDLOOP. + LOOP AT by_label INTO column WHERE visible = abap_false. + json = |{ json },\{"name":"{ column-key }","label":"{ column-label }","visible":false\}|. + ENDLOOP. + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `columnsPanel` ) + ( `setP13nData` ) + ( |[{ shift_left( val = json sub = `,` ) }]| ) ) ). + + json = ``. + LOOP AT t_sorters INTO DATA(sorter). + json = |{ json },\{"name":"{ sorter-key }","label":"{ t_columns[ key = sorter-key ]-label }","sorted":true,| && + |"descending":{ COND #( WHEN sorter-descending = abap_true THEN `true` ELSE `false` ) }\}|. + ENDLOOP. + LOOP AT by_label INTO column. + IF NOT line_exists( t_sorters[ key = column-key ] ). + json = |{ json },\{"name":"{ column-key }","label":"{ column-label }","sorted":false,"descending":false\}|. + ENDIF. + ENDLOOP. + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `sortPanel` ) + ( `setP13nData` ) + ( |[{ shift_left( val = json sub = `,` ) }]| ) ) ). + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get_event( ). + + WHEN `OPEN_PERSO`. + set_p13n_data( ). + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `p13nPopup` ) ( `open` ) ) ). + + WHEN `P13N_CLOSE`. + " the Engine applies the panel state on Ok only + IF client->get_event_arg( ) = `Ok`. + apply_columns( VALUE #( FOR entry IN p13n_entries( client->get_event_arg( 2 ) ) ( entry-key ) ) ). + t_sorters = p13n_entries( client->get_event_arg( 3 ) ). + view_display( ). + ENDIF. + + WHEN `SORT`. + " onSort: every sorter cleared, the column's own order pushed + IF line_exists( t_columns[ key = client->get_event_arg( ) ] ). + t_sorters = VALUE #( ( key = client->get_event_arg( ) + descending = xsdbool( client->get_event_arg( 2 ) = `Descending` ) ) ). + view_display( ). + ENDIF. + + WHEN `COLUMN_MOVE`. + move_column( ). + view_display( ). + + WHEN `COLUMN_RESIZE`. + " applyState( { ColumnWidth } ): the table has already sized the + " column, the state keeps the width for the next rebuild + IF line_exists( t_columns[ key = client->get_event_arg( ) ] ). + t_columns[ key = client->get_event_arg( ) ]-width = client->get_event_arg( 2 ). + ENDIF. + + ENDCASE. + + ENDMETHOD. + + + METHOD apply_columns. + + " handleStateChange: every column hidden, then the state's columns shown + " and moved to the front in state order + DATA(previous) = t_columns. + t_columns = VALUE #( ). + LOOP AT state INTO DATA(key). + DATA(column) = previous[ key = key ]. + column-visible = abap_true. + INSERT column INTO TABLE t_columns. + DELETE previous WHERE key = key. + ENDLOOP. + LOOP AT previous INTO column. + column-visible = abap_false. + INSERT column INTO TABLE t_columns. + ENDLOOP. + + ENDMETHOD. + + + METHOD move_column. + + DATA(moved) = client->get_event_arg( ). + IF NOT line_exists( t_columns[ key = moved ] ). + RETURN. + ENDIF. + + " applyState( { Columns: [ { key, position: newPos } ] } ): the column + " moves to that position of the visible columns and is shown + DATA(new_pos) = CONV i( client->get_event_arg( 2 ) ). + DATA(state) = VALUE string_table( FOR c IN t_columns WHERE ( visible = abap_true AND key <> moved ) ( c-key ) ). + IF new_pos > lines( state ). + new_pos = lines( state ). + ELSEIF new_pos < 0. + new_pos = 0. + ENDIF. + INSERT moved INTO state INDEX new_pos + 1. + apply_columns( state ). + + ENDMETHOD. + + + METHOD p13n_entries. + + " getP13nData( true ) arrives as a JSON array of the panel's flat item + " objects; collect their names (and a SortPanel item's direction) in order + SPLIT json AT `}` INTO TABLE DATA(objects). + LOOP AT objects INTO DATA(object). + DATA(offset) = find( val = object sub = `"name":"` ). + IF offset >= 0. + INSERT VALUE #( key = substring_before( val = substring( val = object off = offset + 8 ) sub = `"` ) + descending = xsdbool( object CS `"descending":true` ) ) INTO TABLE result. + ENDIF. + ENDLOOP. + ENDMETHOD. METHOD model_init. - " TODO seed the default model (see the sample's controller / JSON mock) - RETURN. + t_items = VALUE #( + ( firstname = `Peter` lastname = `Mueller` size = `1.75` city = `Walldorf` ) + ( firstname = `Petra` lastname = `Maier` size = `1.85` city = `Walldorf` ) + ( firstname = `Thomas` lastname = `Smith` size = `1.95` city = `Heidelberg` ) + ( firstname = `John` lastname = `Williams` size = `1.65` city = `Walldorf` ) + ( firstname = `Maria` lastname = `Jones` size = `1.55` city = `Walldorf` ) ). + + " the columns of the view; label and path are the MetadataHelper's, the + " width the controller's _mIntialWidth + t_columns = VALUE #( + ( key = `firstName_col` label = `First Name` path = `FIRSTNAME` visible = abap_true width = `11rem` ) + ( key = `lastName_col` label = `Last Name` path = `LASTNAME` visible = abap_true width = `11rem` ) + ( key = `city_col` label = `City` path = `CITY` visible = abap_true width = `11rem` ) + ( key = `size_col` label = `Size` path = `SIZE` visible = abap_false width = `11rem` ) ). ENDMETHOD. diff --git a/src/02/01/z2ui5_cl_smpc_app_649.clas.abap b/src/02/01/z2ui5_cl_smpc_app_649.clas.abap index 493d0be89..827aaab17 100644 --- a/src/02/01/z2ui5_cl_smpc_app_649.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_649.clas.abap @@ -4,9 +4,47 @@ CLASS z2ui5_cl_smpc_app_649 DEFINITION PUBLIC. INTERFACES z2ui5_if_app. PROTECTED SECTION. + TYPES: + BEGIN OF ty_s_column, + key TYPE string, + label TYPE string, + halign TYPE string, + visible TYPE abap_bool, + END OF ty_s_column. + TYPES: + BEGIN OF ty_s_row, + key TYPE string, + label TYPE string, + id TYPE string, + firstname TYPE string, + lastname TYPE string, + city TYPE string, + size TYPE string, + visible TYPE abap_bool, + END OF ty_s_row. + TYPES ty_t_column TYPE STANDARD TABLE OF ty_s_column WITH EMPTY KEY. + TYPES ty_t_row TYPE STANDARD TABLE OF ty_s_row WITH EMPTY KEY. + DATA client TYPE REF TO z2ui5_if_client. + " the table's columns and items in their current order, each with its visibility + DATA t_columns TYPE ty_t_column. + DATA t_rows TYPE ty_t_row. METHODS view_display. + METHODS set_p13n_data. + METHODS on_event. + METHODS apply_columns + IMPORTING + state TYPE string_table. + METHODS apply_rows + IMPORTING + state TYPE string_table. + METHODS move_column. + METHODS p13n_names + IMPORTING + json TYPE string + RETURNING + VALUE(result) TYPE string_table. METHODS model_init. PRIVATE SECTION. @@ -23,6 +61,8 @@ CLASS z2ui5_cl_smpc_app_649 IMPLEMENTATION. view_display( ). ELSEIF client->check_on_navigated( ). view_display( ). + ELSEIF client->check_on_event( ). + on_event( ). ENDIF. ENDMETHOD. @@ -32,27 +72,312 @@ CLASS z2ui5_cl_smpc_app_649 IMPLEMENTATION. DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). - " TODO rebuild ui5/sap.m/p13n.EngineMultipleController/*.view.xml 1:1 here (sap.m.p13n.Engine) - view->ele( n = `View` ns = `mvc` - )->a( n = `xmlns` v = `sap.m` - )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` - )->a( n = `height` v = `100%` + DATA(table) = view->ele( n = `View` ns = `mvc` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `xmlns:tcm` v = `sap.m.table.columnmenu` + )->a( n = `xmlns:dnd` v = `sap.ui.core.dnd` + )->a( n = `xmlns:p13n` v = `sap.m.p13n` + )->a( n = `xmlns:app` v = `http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1` + )->a( n = `height` v = `100%` )->ele( `Page` - )->a( n = `title` v = `p13n.EngineMultipleController` + )->a( n = `showHeader` v = `false` + + )->ele( `Table` + )->a( n = `id` v = `persoTable` + )->a( n = `ariaLabelledBy` v = `title` + )->a( n = `fixedLayout` v = `Strict` + )->a( n = `autoPopinMode` v = `true` + )->a( n = `growing` v = `true` + )->a( n = `sticky` v = `ColumnHeaders,HeaderToolbar` + )->a( n = `popinLayout` v = `GridSmall` ). + + table->ele( `headerToolbar` + )->ele( `OverflowToolbar` + )->tag( `Title` + )->a( n = `id` v = `title` + )->a( n = `text` v = `Persons` + )->tag( `ToolbarSeparator` + " the sap.ui.fl VariantManagement (p13nVm) is dropped - see the sidecar + )->tag( `ToolbarSpacer` + )->tag( `Button` + )->a( n = `icon` v = `sap-icon://action-settings` + )->a( n = `press` v = client->_event( `OPEN_COLUMNS` ) + )->a( n = `tooltip` v = `Settings` + )->tag( `Button` + )->a( n = `icon` v = `sap-icon://add-employee` + )->a( n = `press` v = client->_event( `OPEN_ROWS` ) + )->a( n = `tooltip` v = `Settings` ). + + table->ele( `dependents` + )->ele( n = `Menu` ns = `tcm` + )->a( n = `id` v = `menu` + + )->ele( n = `items` ns = `tcm` + )->tag( n = `ActionItem` ns = `tcm` + )->a( n = `icon` v = `sap-icon://table-column` + )->a( n = `label` v = `Columns` + )->a( n = `press` v = client->_event( `OPEN_COLUMNS` ) + + )->end( + )->end( + + " the two popups Engine.show( ) creates for the Columns and the Rows controller + )->ele( n = `Popup` ns = `p13n` + )->a( n = `id` v = `columnsPopup` + )->a( n = `close` v = client->_event( val = `COLUMNS_CLOSE` + t_arg = VALUE #( ( `${$parameters>/reason}` ) + ( `$event.oSource.getPanels()[0].getP13nData(true)` ) ) ) + + )->ele( n = `panels` ns = `p13n` + )->tag( n = `SelectionPanel` ns = `p13n` + )->a( n = `id` v = `columnsPanel` + )->a( n = `showHeader` v = `true` + )->a( n = `enableCount` v = `true` + )->end( + )->end( + + )->ele( n = `Popup` ns = `p13n` + )->a( n = `id` v = `rowsPopup` + )->a( n = `close` v = client->_event( val = `ROWS_CLOSE` + t_arg = VALUE #( ( `${$parameters>/reason}` ) + ( `$event.oSource.getPanels()[0].getP13nData(true)` ) ) ) + + )->ele( n = `panels` ns = `p13n` + )->tag( n = `SelectionPanel` ns = `p13n` + )->a( n = `id` v = `rowsPanel` + )->a( n = `showHeader` v = `true` + )->a( n = `enableCount` v = `true` + )->a( n = `enableReorder` v = `false` ). + + table->ele( `dragDropConfig` + )->tag( n = `DragDropInfo` ns = `dnd` + )->a( n = `sourceAggregation` v = `columns` + )->a( n = `targetAggregation` v = `columns` + )->a( n = `dropPosition` v = `Between` + )->a( n = `drop` v = client->_event( val = `COLUMN_MOVE` + t_arg = VALUE #( ( `${$parameters>/draggedControl}.data('p13nKey')` ) + ( `${$parameters>/droppedControl}.data('p13nKey')` ) + ( `${$parameters>/dropPosition}` ) ) ) ). + + table->ele( `noData` + )->tag( `IllustratedMessage` ). + + " handleStateChange re-orders and hides columns and items; the port emits + " them in the order the state holds, the cells following their columns + DATA(columns) = table->ele( `columns` ). + LOOP AT t_columns INTO DATA(column). + DATA(column_node) = columns->ele( `Column` + )->a( n = `app:p13nKey` t = column-key + )->a( n = `headerMenu` v = `menu` + )->a( n = `visible` b = column-visible ). + IF column-halign = `End`. + column_node->a( n = `hAlign` v = `End` ). + ENDIF. + IF column-key = `id_col`. + column_node->ele( `header` )->tag( `Text` - )->a( n = `text` v = `TODO: port sap.m.sample.p13n.EngineMultipleController` ). + )->a( n = `text` t = column-label ). + ELSE. + column_node->tag( `Text` + )->a( n = `text` t = column-label ). + ENDIF. + ENDLOOP. + + DATA(items) = table->ele( `items` ). + LOOP AT t_rows INTO DATA(row). + DATA(item) = items->ele( `ColumnListItem` + )->a( n = `app:p13nKey` t = row-key + )->a( n = `visible` b = row-visible ). + LOOP AT t_columns INTO column. + item->tag( `Text` + )->a( n = `text` t = SWITCH #( column-key + WHEN `id_col` THEN row-id + WHEN `firstName_col` THEN row-firstname + WHEN `lastName_col` THEN row-lastname + WHEN `city_col` THEN row-city + ELSE row-size ) ). + ENDLOOP. + ENDLOOP. client->view_display( view->stringify( ) ). + " a rebuilt view carries fresh, empty panels + set_p13n_data( ). + + ENDMETHOD. + + + METHOD set_p13n_data. + + " the SelectionControllers' panel data: the visible entries in state + " order, then the hidden ones sorted by label + DATA(json) = ``. + LOOP AT t_columns INTO DATA(column) WHERE visible = abap_true. + json = |{ json },\{"name":"{ column-key }","label":"{ column-label }","visible":true\}|. + ENDLOOP. + DATA(hidden_columns) = VALUE ty_t_column( FOR c IN t_columns WHERE ( visible = abap_false ) ( c ) ). + SORT hidden_columns BY label. + LOOP AT hidden_columns INTO column. + json = |{ json },\{"name":"{ column-key }","label":"{ column-label }","visible":false\}|. + ENDLOOP. + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `columnsPanel` ) + ( `setP13nData` ) + ( |[{ shift_left( val = json sub = `,` ) }]| ) ) ). + + json = ``. + LOOP AT t_rows INTO DATA(row) WHERE visible = abap_true. + json = |{ json },\{"name":"{ row-key }","label":"{ row-label }","visible":true\}|. + ENDLOOP. + DATA(hidden_rows) = VALUE ty_t_row( FOR r IN t_rows WHERE ( visible = abap_false ) ( r ) ). + SORT hidden_rows BY label. + LOOP AT hidden_rows INTO row. + json = |{ json },\{"name":"{ row-key }","label":"{ row-label }","visible":false\}|. + ENDLOOP. + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `rowsPanel` ) + ( `setP13nData` ) + ( |[{ shift_left( val = json sub = `,` ) }]| ) ) ). + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get_event( ). + + WHEN `OPEN_COLUMNS`. + set_p13n_data( ). + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `columnsPopup` ) ( `open` ) ) ). + + WHEN `OPEN_ROWS`. + set_p13n_data( ). + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `rowsPopup` ) ( `open` ) ) ). + + WHEN `COLUMNS_CLOSE`. + " the Engine applies the panel state on Ok only + IF client->get_event_arg( ) = `Ok`. + apply_columns( p13n_names( client->get_event_arg( 2 ) ) ). + view_display( ). + ENDIF. + + WHEN `ROWS_CLOSE`. + IF client->get_event_arg( ) = `Ok`. + apply_rows( p13n_names( client->get_event_arg( 2 ) ) ). + view_display( ). + ENDIF. + + WHEN `COLUMN_MOVE`. + move_column( ). + view_display( ). + + ENDCASE. + + ENDMETHOD. + + + METHOD apply_columns. + + " like handleStateChange: every column hidden, then the state's columns + " shown and moved to the front in state order + DATA(previous) = t_columns. + t_columns = VALUE #( ). + LOOP AT state INTO DATA(key). + DATA(column) = previous[ key = key ]. + column-visible = abap_true. + INSERT column INTO TABLE t_columns. + DELETE previous WHERE key = key. + ENDLOOP. + LOOP AT previous INTO column. + column-visible = abap_false. + INSERT column INTO TABLE t_columns. + ENDLOOP. + + ENDMETHOD. + + + METHOD apply_rows. + + DATA(previous) = t_rows. + t_rows = VALUE #( ). + LOOP AT state INTO DATA(key). + DATA(row) = previous[ key = key ]. + row-visible = abap_true. + INSERT row INTO TABLE t_rows. + DELETE previous WHERE key = key. + ENDLOOP. + LOOP AT previous INTO row. + row-visible = abap_false. + INSERT row INTO TABLE t_rows. + ENDLOOP. + + ENDMETHOD. + + + METHOD move_column. + + DATA(dragged) = client->get_event_arg( ). + DATA(dropped) = client->get_event_arg( 2 ). + IF dragged = dropped OR NOT line_exists( t_columns[ key = dragged ] ) OR NOT line_exists( t_columns[ key = dropped ] ). + RETURN. + ENDIF. + + " onColumnMove's position arithmetic, on 0-based column indices + DATA(dragged_index) = line_index( t_columns[ key = dragged ] ) - 1. + DATA(dropped_index) = line_index( t_columns[ key = dropped ] ) - 1. + DATA(new_pos) = dropped_index + + COND i( WHEN client->get_event_arg( 3 ) = `Before` THEN 0 ELSE 1 ) + + COND i( WHEN dragged_index < dropped_index THEN -1 ELSE 0 ). + + " applyState( { Columns: [ { key, position } ] } ): the column moves to + " that position of the visible columns and is shown + DATA(state) = VALUE string_table( FOR c IN t_columns WHERE ( visible = abap_true AND key <> dragged ) ( c-key ) ). + IF new_pos > lines( state ). + new_pos = lines( state ). + ENDIF. + INSERT dragged INTO state INDEX new_pos + 1. + apply_columns( state ). + + ENDMETHOD. + + + METHOD p13n_names. + + " getP13nData( true ) arrives as a JSON array of the panel's flat item + " objects; collect their names in order + SPLIT json AT `}` INTO TABLE DATA(objects). + LOOP AT objects INTO DATA(object). + DATA(offset) = find( val = object sub = `"name":"` ). + IF offset >= 0. + INSERT substring_before( val = substring( val = object off = offset + 8 ) sub = `"` ) INTO TABLE result. + ENDIF. + ENDLOOP. + ENDMETHOD. METHOD model_init. - " TODO seed the default model (see the sample's controller / JSON mock) - RETURN. + " the columns of the view; the labels are the MetadataHelper's + t_columns = VALUE #( + ( key = `id_col` label = `ID` halign = `` visible = abap_true ) + ( key = `firstName_col` label = `First Name` halign = `` visible = abap_true ) + ( key = `lastName_col` label = `Last Name` halign = `` visible = abap_true ) + ( key = `city_col` label = `City` halign = `` visible = abap_true ) + ( key = `size_col` label = `Size` halign = `End` visible = abap_false ) ). + + " the static items of the view; the labels are the rows' MetadataHelper's + t_rows = VALUE #( + ( key = `P1` label = `Peter Mueller` id = `P1` firstname = `Peter` lastname = `Mueller` city = `Walldorf` size = `1.75` visible = abap_true ) + ( key = `P2` label = `Petra Maier` id = `P2` firstname = `Petra` lastname = `Maier` city = `Walldorf` size = `1.85` visible = abap_true ) + ( key = `P3` label = `Thomas Smith` id = `P3` firstname = `Thomas` lastname = `Smith` city = `Walldorf` size = `1.95` visible = abap_true ) + ( key = `P4` label = `John Williams` id = `P4` firstname = `John` lastname = `Williams` city = `Walldorf` size = `1.65` visible = abap_true ) + ( key = `P5` label = `Maria Jones` id = `P5` firstname = `Maria` lastname = `Jones` city = `Walldorf` size = `1.55` visible = abap_true ) ). ENDMETHOD. diff --git a/src/02/01/z2ui5_cl_smpc_app_652.clas.abap b/src/02/01/z2ui5_cl_smpc_app_652.clas.abap index 09480bf88..0fd1c427c 100644 --- a/src/02/01/z2ui5_cl_smpc_app_652.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_652.clas.abap @@ -43,8 +43,6 @@ CLASS z2ui5_cl_smpc_app_652 DEFINITION PUBLIC. DATA cb_include TYPE abap_bool. DATA cb_exclude TYPE abap_bool. DATA cb_override TYPE abap_bool. - " the plugin's fileNameValidationConfig object, as JSON - DATA name_config TYPE string. PROTECTED SECTION. DATA client TYPE REF TO z2ui5_if_client. @@ -54,10 +52,17 @@ CLASS z2ui5_cl_smpc_app_652 DEFINITION PUBLIC. DATA is_edit TYPE abap_bool. DATA upload_no TYPE i. DATA mode TYPE string. + " the last config handed to setFileNameValidationConfig - re-issued after a + " view rebuild, which brings back the view's literal config + DATA config_live TYPE string. METHODS view_display. + METHODS config_apply. METHODS popup_url_display. METHODS on_event. + METHODS mode_select. + METHODS configure. + METHODS url_apply. METHODS remove_ask IMPORTING path TYPE string. @@ -74,6 +79,9 @@ CLASS z2ui5_cl_smpc_app_652 DEFINITION PUBLIC. mediatype TYPE string url TYPE string filesize TYPE i. + METHODS selected_index + RETURNING + VALUE(result) TYPE i. METHODS row_index IMPORTING path TYPE string @@ -145,13 +153,13 @@ CLASS z2ui5_cl_smpc_app_652 IMPLEMENTATION. )->ele( `VBox` )->a( n = `class` v = `sapUiMediumMarginTop sapUiMediumMarginBegin` + " the original's design="Bold" on the three Texts is dropped - sap.m.Text + " has no such property and the view fails to load with it )->tag( `Text` - )->a( n = `text` v = |Note: Default restricted characters for file name ---> \{= ${ client->_bind( defaultcharacterset ) }\}| - )->a( n = `design` v = `Bold` + )->a( n = `text` v = |Note: Default restricted characters for file name ---> \{= ${ client->_bind( defaultcharacterset ) }\}| )->tag( `Text` - )->a( n = `text` v = `Mode:` - )->a( n = `class` v = `sapUiTinyMarginBottom sapUiSmallMarginTop` - )->a( n = `design` v = `Bold` + )->a( n = `text` v = `Mode:` + )->a( n = `class` v = `sapUiTinyMarginBottom sapUiSmallMarginTop` )->ele( `HBox` )->a( n = `alignItems` v = `Center` @@ -176,9 +184,8 @@ CLASS z2ui5_cl_smpc_app_652 IMPLEMENTATION. )->end( )->tag( `Text` - )->a( n = `text` v = `Characters:` - )->a( n = `class` v = `sapUiTinyMarginTop` - )->a( n = `design` v = `Bold` + )->a( n = `text` v = `Characters:` + )->a( n = `class` v = `sapUiTinyMarginTop` )->tag( `Input` )->a( n = `id` v = `charInput` )->a( n = `class` v = `sapUiSmallMarginTop` @@ -314,23 +321,23 @@ CLASS z2ui5_cl_smpc_app_652 IMPLEMENTATION. )->ele( n = `UploadSetwithTable` ns = `plugins` " the id is added - the port calls the plugin by id where the " controller kept the instance onActivated handed it - )->a( n = `id` v = `uploadSetPlugin` - )->a( n = `uploadUrl` v = `/uploadFiles` - )->a( n = `multiple` v = `true` + )->a( n = `id` v = `uploadSetPlugin` + )->a( n = `uploadUrl` v = `/uploadFiles` + )->a( n = `multiple` v = `true` " the mock server's part: the upload is vetoed and the backend " adds the row the fake 201 response would have created - )->a( n = `beforeUploadStarts` v = client->_event( val = `UPLOAD` - t_arg = VALUE #( ( `${$parameters>/item}.getFileName()` ) - ( `${$parameters>/item}.getMediaType()` ) - ( `${$parameters>/item}.getFileObject().size` ) ) - s_ctrl = VALUE #( check_prevent_default = abap_true - check_queue_last = abap_true ) ) - )->a( n = `itemRenamed` v = client->_event( val = `RENAMED` - t_arg = VALUE #( ( `${$parameters>/item}.getBindingContext().getPath()` ) - ( `${$parameters>/item}.getFileName()` ) ) ) - )->a( n = `cloudFilePickerEnabled` v = `true` - )->a( n = `actions` v = `uploadButton` - )->a( n = `fileNameValidationConfig` v = client->_bind( val = name_config json = abap_true ) + )->a( n = `beforeUploadStarts` v = client->_event( val = `UPLOAD` + t_arg = VALUE #( ( `${$parameters>/item}.getFileName()` ) + ( `${$parameters>/item}.getMediaType()` ) + ( `${$parameters>/item}.getFileObject().size` ) ) + s_ctrl = VALUE #( check_prevent_default = abap_true + check_queue_last = abap_true ) ) + )->a( n = `itemRenamed` v = client->_event( val = `RENAMED` + t_arg = VALUE #( ( `${$parameters>/item}.getBindingContext().getPath()` ) + ( `${$parameters>/item}.getFileName()` ) ) ) + )->a( n = `cloudFilePickerEnabled` v = `true` + )->a( n = `actions` v = `uploadButton` + )->a( n = `fileNameValidationConfig` v = `{mode: 'override', characters: '@$#'}` )->ele( n = `rowConfiguration` ns = `plugins` " the paths name the model's upper-case ABAP fields @@ -464,6 +471,19 @@ CLASS z2ui5_cl_smpc_app_652 IMPLEMENTATION. client->view_display( view->stringify( ) ). + IF config_live IS NOT INITIAL. + config_apply( ). + ENDIF. + + ENDMETHOD. + + + METHOD config_apply. + + " setFileNameValidationConfig - an object argument travels as real JSON + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin` ) ( `setFileNameValidationConfig` ) ( config_live ) ) ). + ENDMETHOD. @@ -559,7 +579,11 @@ CLASS z2ui5_cl_smpc_app_652 IMPLEMENTATION. WHEN `EDIT_URL`. " onEditUrl - the same fragment as Edit URL, filled from the selected row - DATA(row) = t_items[ row_index( t_selected[ 1 ] ) ]. + DATA(current) = selected_index( ). + IF current = 0. + RETURN. + ENDIF. + DATA(row) = t_items[ current ]. is_edit = abap_true. dialog_title = `Edit URL`. apply_text = `Apply`. @@ -573,49 +597,25 @@ CLASS z2ui5_cl_smpc_app_652 IMPLEMENTATION. popup_url_display( ). WHEN `URL_APPLY`. - " handleAddViaUrl - IF is_edit = abap_true. - IF name_valid( ) = abap_true. - " showEditConfirmation - a Message dialog in the Warning state - client->message_box_display( text = `You have made changes to this object. What would you like to do?` - type = `warning` - title = `Warning` - actions = VALUE #( ( `Save` ) ( `DiscardChanges` ) ) - emphasizedaction = `Save` - onclose = `EDIT_CONFIRM` ). - ELSE. - client->message_toast_display( `No Changes found` ). - ENDIF. - RETURN. - ENDIF. - DATA(has_error) = xsdbool( name_valid( ) = abap_false ). - IF url_valid( ) = abap_false. - has_error = abap_true. - ENDIF. - IF has_error = abap_false. - " uploadItemViaUrl - the mock server answers with the typed URL as the - " document URL and an empty file - row_add( filename = name_input - mediatype = `` - url = url_input - filesize = 0 ). - client->popup_destroy( ). - client->message_toast_display( `Document Added` ). - ENDIF. + url_apply( ). WHEN `EDIT_CONFIRM`. IF client->get_event_arg( ) = `Save`. " the Save button validates (value states) and applies regardless name_valid( ). url_valid( ). - DATA(edited) = REF #( t_items[ row_index( t_selected[ 1 ] ) ] ). - edited->filename = name_input. - edited->url = url_input. + DATA(target) = selected_index( ). + IF target > 0. + t_items[ target ]-filename = name_input. + t_items[ target ]-url = url_input. + ENDIF. client->popup_destroy( ). ENDIF. WHEN `REMOVE_SELECTED`. - remove_ask( t_selected[ 1 ] ). + IF t_selected IS NOT INITIAL. + remove_ask( t_selected[ 1 ] ). + ENDIF. WHEN `REMOVE_ROW`. remove_ask( client->get_event_arg( ) ). @@ -646,19 +646,7 @@ CLASS z2ui5_cl_smpc_app_652 IMPLEMENTATION. client->message_toast_display( text = `Document Renamed.` duration = `2000` ). WHEN `MODE_SELECT`. - " onCheckboxSelect - the three boxes behave as one choice - DATA(box) = client->get_event_arg( ). - cb_include = xsdbool( box CS `cbInclude` ). - cb_exclude = xsdbool( box CS `cbExclude` ). - cb_override = xsdbool( cb_include = abap_false AND cb_exclude = abap_false ). - IF cb_include = abap_true. - mode = `include`. - ELSEIF cb_exclude = abap_true. - mode = `exclude`. - ELSE. - mode = `override`. - ENDIF. - isconfigurebuttonenabled = xsdbool( characters IS NOT INITIAL AND mode IS NOT INITIAL ). + mode_select( ). WHEN `CHARACTERS_CHANGE`. " onInputChange reads newValue - the model only follows on change @@ -666,30 +654,91 @@ CLASS z2ui5_cl_smpc_app_652 IMPLEMENTATION. isconfigurebuttonenabled = xsdbool( characters IS NOT INITIAL AND mode IS NOT INITIAL ). WHEN `CONFIGURE`. - " onConfigureHandler - the bound config object reaches the plugin's - " setFileNameValidationConfig through the binding - IF cb_include = abap_true. - mode = `include`. - ELSEIF cb_exclude = abap_true. - mode = `exclude`. - ELSEIF cb_override = abap_true. - mode = `override`. - ELSE. - mode = ``. - ENDIF. - DATA(json_chars) = replace( val = replace( val = characters sub = `\` with = `\\` occ = 0 ) - sub = `"` - with = `\"` - occ = 0 ). - name_config = |\{"mode":"{ mode }","characters":"{ json_chars }"\}|. - client->message_toast_display( - |Configuration mode: { mode }, Characters: { characters }, have been applied to the fileNameValidationConfig.| ). + configure( ). ENDCASE. ENDMETHOD. + METHOD mode_select. + + " onCheckboxSelect - the three boxes behave as one choice + DATA(box) = client->get_event_arg( ). + cb_include = xsdbool( box CS `cbInclude` ). + cb_exclude = xsdbool( box CS `cbExclude` ). + cb_override = xsdbool( cb_include = abap_false AND cb_exclude = abap_false ). + IF cb_include = abap_true. + mode = `include`. + ELSEIF cb_exclude = abap_true. + mode = `exclude`. + ELSE. + mode = `override`. + ENDIF. + isconfigurebuttonenabled = xsdbool( characters IS NOT INITIAL AND mode IS NOT INITIAL ). + + ENDMETHOD. + + + METHOD configure. + + " onConfigureHandler - setFileNameValidationConfig with the config object + IF cb_include = abap_true. + mode = `include`. + ELSEIF cb_exclude = abap_true. + mode = `exclude`. + ELSEIF cb_override = abap_true. + mode = `override`. + ELSE. + mode = ``. + ENDIF. + DATA(json_chars) = replace( val = replace( val = characters sub = `\` with = `\\` occ = 0 ) + sub = `"` + with = `\"` + occ = 0 ). + config_live = |\{"mode":"{ mode }","characters":"{ json_chars }"\}|. + config_apply( ). + client->message_toast_display( + |Configuration mode: { mode }, Characters: { characters }, have been applied to the fileNameValidationConfig.| ). + + ENDMETHOD. + + + METHOD url_apply. + + " handleAddViaUrl + IF is_edit = abap_true. + IF name_valid( ) = abap_true. + " showEditConfirmation - a Message dialog in the Warning state + client->message_box_display( text = `You have made changes to this object. What would you like to do?` + type = `warning` + title = `Warning` + actions = VALUE #( ( `Save` ) ( `DiscardChanges` ) ) + emphasizedaction = `Save` + onclose = `EDIT_CONFIRM` ). + ELSE. + client->message_toast_display( `No Changes found` ). + ENDIF. + RETURN. + ENDIF. + DATA(has_error) = xsdbool( name_valid( ) = abap_false ). + IF url_valid( ) = abap_false. + has_error = abap_true. + ENDIF. + IF has_error = abap_false. + " uploadItemViaUrl - the mock server answers with the typed URL as the + " document URL and an empty file + row_add( filename = name_input + mediatype = `` + url = url_input + filesize = 0 ). + client->popup_destroy( ). + client->message_toast_display( `Document Added` ). + ENDIF. + + ENDMETHOD. + + METHOD remove_ask. " removeItem - MessageBox.warning; the icon is the warning box's own @@ -773,6 +822,20 @@ CLASS z2ui5_cl_smpc_app_652 IMPLEMENTATION. ENDMETHOD. + METHOD selected_index. + + " the one selected row the toolbar actions work on - 0 when there is none + IF t_selected IS INITIAL. + RETURN. + ENDIF. + result = row_index( t_selected[ 1 ] ). + IF result > lines( t_items ). + result = 0. + ENDIF. + + ENDMETHOD. + + METHOD row_index. " a row's binding path ends in its 0-based index: /T_ITEMS/3 is the 4th row @@ -920,8 +983,6 @@ CLASS z2ui5_cl_smpc_app_652 IMPLEMENTATION. isconfigurebuttonenabled = abap_true. defaultcharacterset = `/:\*?"<>|[]{}@#$`. cb_override = abap_true. - " the view's literal fileNameValidationConfig="{mode: 'override', characters: '@$#'}" - name_config = `{"mode":"override","characters":"@$#"}`. ENDMETHOD. diff --git a/src/02/01/z2ui5_cl_smpc_app_653.clas.abap b/src/02/01/z2ui5_cl_smpc_app_653.clas.abap index fd05099a6..25882260d 100644 --- a/src/02/01/z2ui5_cl_smpc_app_653.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_653.clas.abap @@ -48,6 +48,7 @@ CLASS z2ui5_cl_smpc_app_653 DEFINITION PUBLIC. METHODS view_display. METHODS popup_url_display. METHODS on_event. + METHODS url_apply. METHODS remove_ask IMPORTING path TYPE string. @@ -64,6 +65,9 @@ CLASS z2ui5_cl_smpc_app_653 DEFINITION PUBLIC. mediatype TYPE string url TYPE string filesize TYPE i. + METHODS selected_index + RETURNING + VALUE(result) TYPE i. METHODS row_index IMPORTING path TYPE string @@ -508,7 +512,11 @@ CLASS z2ui5_cl_smpc_app_653 IMPLEMENTATION. WHEN `EDIT_URL`. " onEditUrl - the same fragment as Edit URL, filled from the selected row - DATA(row) = t_items[ row_index( t_selected[ 1 ] ) ]. + DATA(current) = selected_index( ). + IF current = 0. + RETURN. + ENDIF. + DATA(row) = t_items[ current ]. is_edit = abap_true. dialog_title = `Edit URL`. apply_text = `Apply`. @@ -522,49 +530,25 @@ CLASS z2ui5_cl_smpc_app_653 IMPLEMENTATION. popup_url_display( ). WHEN `URL_APPLY`. - " handleAddViaUrl - IF is_edit = abap_true. - IF name_valid( ) = abap_true. - " showEditConfirmation - a Message dialog in the Warning state - client->message_box_display( text = `You have made changes to this object. What would you like to do?` - type = `warning` - title = `Warning` - actions = VALUE #( ( `Save` ) ( `DiscardChanges` ) ) - emphasizedaction = `Save` - onclose = `EDIT_CONFIRM` ). - ELSE. - client->message_toast_display( `No Changes found` ). - ENDIF. - RETURN. - ENDIF. - DATA(has_error) = xsdbool( name_valid( ) = abap_false ). - IF url_valid( ) = abap_false. - has_error = abap_true. - ENDIF. - IF has_error = abap_false. - " uploadItemViaUrl - the mock server answers with the typed URL as the - " document URL and an empty file - row_add( filename = name_input - mediatype = `` - url = url_input - filesize = 0 ). - client->popup_destroy( ). - client->message_toast_display( `Document Added` ). - ENDIF. + url_apply( ). WHEN `EDIT_CONFIRM`. IF client->get_event_arg( ) = `Save`. " the Save button validates (value states) and applies regardless name_valid( ). url_valid( ). - DATA(edited) = REF #( t_items[ row_index( t_selected[ 1 ] ) ] ). - edited->filename = name_input. - edited->url = url_input. + DATA(target) = selected_index( ). + IF target > 0. + t_items[ target ]-filename = name_input. + t_items[ target ]-url = url_input. + ENDIF. client->popup_destroy( ). ENDIF. WHEN `REMOVE_SELECTED`. - remove_ask( t_selected[ 1 ] ). + IF t_selected IS NOT INITIAL. + remove_ask( t_selected[ 1 ] ). + ENDIF. WHEN `REMOVE_ROW`. remove_ask( client->get_event_arg( ) ). @@ -595,6 +579,41 @@ CLASS z2ui5_cl_smpc_app_653 IMPLEMENTATION. ENDMETHOD. + METHOD url_apply. + + " handleAddViaUrl + IF is_edit = abap_true. + IF name_valid( ) = abap_true. + " showEditConfirmation - a Message dialog in the Warning state + client->message_box_display( text = `You have made changes to this object. What would you like to do?` + type = `warning` + title = `Warning` + actions = VALUE #( ( `Save` ) ( `DiscardChanges` ) ) + emphasizedaction = `Save` + onclose = `EDIT_CONFIRM` ). + ELSE. + client->message_toast_display( `No Changes found` ). + ENDIF. + RETURN. + ENDIF. + DATA(has_error) = xsdbool( name_valid( ) = abap_false ). + IF url_valid( ) = abap_false. + has_error = abap_true. + ENDIF. + IF has_error = abap_false. + " uploadItemViaUrl - the mock server answers with the typed URL as the + " document URL and an empty file + row_add( filename = name_input + mediatype = `` + url = url_input + filesize = 0 ). + client->popup_destroy( ). + client->message_toast_display( `Document Added` ). + ENDIF. + + ENDMETHOD. + + METHOD remove_ask. " removeItem - MessageBox.warning; the icon is the warning box's own @@ -678,6 +697,20 @@ CLASS z2ui5_cl_smpc_app_653 IMPLEMENTATION. ENDMETHOD. + METHOD selected_index. + + " the one selected row the toolbar actions work on - 0 when there is none + IF t_selected IS INITIAL. + RETURN. + ENDIF. + result = row_index( t_selected[ 1 ] ). + IF result > lines( t_items ). + result = 0. + ENDIF. + + ENDMETHOD. + + METHOD row_index. " a row's binding path ends in its 0-based index: /T_ITEMS/3 is the 4th row diff --git a/src/02/01/z2ui5_cl_smpc_app_654.clas.abap b/src/02/01/z2ui5_cl_smpc_app_654.clas.abap index af8c06a1c..0865506f3 100644 --- a/src/02/01/z2ui5_cl_smpc_app_654.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_654.clas.abap @@ -3,10 +3,91 @@ CLASS z2ui5_cl_smpc_app_654 DEFINITION PUBLIC. PUBLIC SECTION. INTERFACES z2ui5_if_app. + TYPES: + BEGIN OF ty_s_item, + id TYPE string, + filename TYPE string, + mediatype TYPE string, + imageurl TYPE string, + url TYPE string, + revision TYPE string, + status TYPE string, + filesize TYPE i, + lastmodifiedby TYPE string, + lastmodified TYPE string, + documenttype TYPE string, + previewable TYPE abap_bool, + trustedsource TYPE abap_bool, + uploadstate TYPE string, + icon TYPE string, + filesize_units TYPE string, + END OF ty_s_item. + DATA t_items TYPE STANDARD TABLE OF ty_s_item WITH EMPTY KEY. + " onSelectionChange: Download for one or more rows, the rest for exactly one + DATA download_enabled TYPE abap_bool. + DATA single_enabled TYPE abap_bool. + " the AddViaUrl fragment, in its Add URL and Edit URL shapes + DATA dialog_title TYPE string. + DATA apply_text TYPE string. + DATA url_required TYPE abap_bool. + DATA url_input TYPE string. + DATA url_state TYPE string. + DATA url_state_text TYPE string. + DATA name_input TYPE string. + DATA name_state TYPE string. + DATA name_state_text TYPE string. + PROTECTED SECTION. DATA client TYPE REF TO z2ui5_if_client. + " the selected rows (as /) and the binding path of the row a removal + " asks about; sap.ui.table keeps its selection by index, so after a removal + " both stay on the same indices, as in the original + DATA t_selected TYPE string_table. + DATA remove_path TYPE string. + DATA is_edit TYPE abap_bool. + DATA upload_no TYPE i. METHODS view_display. + METHODS popup_url_display. + METHODS on_event. + METHODS url_apply. + METHODS remove_ask + IMPORTING + path TYPE string. + METHODS name_valid + RETURNING + VALUE(result) TYPE abap_bool. + METHODS url_valid + RETURNING + VALUE(result) TYPE abap_bool. + METHODS row_add + IMPORTING + filename TYPE string + mediatype TYPE string + url TYPE string + filesize TYPE i. + METHODS selected_index + RETURNING + VALUE(result) TYPE i. + METHODS row_index + IMPORTING + path TYPE string + RETURNING + VALUE(result) TYPE i. + METHODS row_derive + CHANGING + row TYPE ty_s_item. + METHODS icon_for + IMPORTING + mediatype TYPE string + filename TYPE string + RETURNING + VALUE(result) TYPE string. + METHODS size_with_units + IMPORTING + size TYPE i + RETURNING + VALUE(result) TYPE string. METHODS model_init. PRIVATE SECTION. @@ -23,6 +104,8 @@ CLASS z2ui5_cl_smpc_app_654 IMPLEMENTATION. view_display( ). ELSEIF client->check_on_navigated( ). view_display( ). + ELSEIF client->check_on_event( ). + on_event( ). ENDIF. ENDMETHOD. @@ -32,27 +115,695 @@ CLASS z2ui5_cl_smpc_app_654 IMPLEMENTATION. DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). - " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.GridTableSimple/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) view->ele( n = `View` ns = `mvc` - )->a( n = `xmlns` v = `sap.m` - )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` - )->a( n = `height` v = `100%` + )->a( n = `xmlns` v = `sap.ui.table` + )->a( n = `xmlns:m` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `xmlns:f` v = `sap.f` + )->a( n = `xmlns:core` v = `sap.ui.core` + )->a( n = `xmlns:upload` v = `sap.m.upload` + )->a( n = `xmlns:plugins` v = `sap.m.plugins` + )->a( n = `height` v = `100%` + )->a( n = `displayBlock` v = `true` + + )->ele( n = `DynamicPage` ns = `f` + )->a( n = `id` v = `page` + + )->ele( n = `content` ns = `f` + )->ele( `Table` + )->a( n = `id` v = `table-uploadSet` + " IMAGEURL and UPLOADSTATE stay absent where the mock has + " none, so the view's undefined checks read as in the sample + )->a( n = `rows` v = client->_bind( val = t_items + omit_initial_paths = VALUE #( ( `IMAGEURL` ) + ( `UPLOADSTATE` ) ) ) + )->a( n = `selectionMode` v = `MultiToggle` + )->a( n = `rowSelectionChange` v = client->_event( val = `SELECTION` + arg = `$event.oSource.getSelectedIndices().join()` ) + + )->ele( `extension` + )->ele( n = `OverflowToolbar` ns = `m` + )->a( n = `style` v = `Clear` + + )->tag( n = `Title` ns = `m` + )->a( n = `text` v = |Documents (\{= ${ client->_bind( t_items ) }.length\})| + )->a( n = `level` v = `H2` + )->tag( n = `ToolbarSpacer` ns = `m` + )->tag( n = `ActionsPlaceholder` ns = `upload` + )->a( n = `id` v = `uploadButton` + )->a( n = `placeholderFor` v = `UploadButtonPlaceholder` + )->tag( n = `Button` ns = `m` + )->a( n = `id` v = `downloadSelectedButton` + )->a( n = `text` v = `Download` + )->a( n = `enabled` v = client->_bind( download_enabled ) + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin` ) + ( `download` ) + ( `$controller.getView().byId('table-uploadSet').getContextByIndex(` && + `$controller.getView().byId('table-uploadSet').getSelectedIndices()[0])` ) + ( `true` ) ) ) + + )->ele( n = `MenuButton` ns = `m` + )->a( n = `text` v = `Add` + + )->ele( n = `menu` ns = `m` + )->ele( n = `Menu` ns = `m` + )->tag( n = `MenuItem` ns = `m` + )->a( n = `text` v = `URL` + )->a( n = `press` v = client->_event( `ADD_URL` ) + + )->end( + )->end( + )->ele( n = `layoutData` ns = `m` + )->tag( n = `OverflowToolbarLayoutData` ns = `m` + )->a( n = `priority` v = `AlwaysOverflow` + + )->end( + )->end( + )->ele( n = `Button` ns = `m` + )->a( n = `id` v = `removeDocumentButton` + )->a( n = `text` v = `Remove` + )->a( n = `press` v = client->_event( `REMOVE_SELECTED` ) + )->a( n = `enabled` v = client->_bind( single_enabled ) + + )->ele( n = `layoutData` ns = `m` + )->tag( n = `OverflowToolbarLayoutData` ns = `m` + )->a( n = `priority` v = `AlwaysOverflow` + + )->end( + )->end( + )->ele( n = `Button` ns = `m` + )->a( n = `id` v = `renameButton` + )->a( n = `enabled` v = client->_bind( single_enabled ) + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin` ) + ( `renameItem` ) + ( `$controller.getView().byId('table-uploadSet').getContextByIndex(` && + `$controller.getView().byId('table-uploadSet').getSelectedIndices()[0])` ) ) ) + )->a( n = `text` v = `Rename` + + )->ele( n = `layoutData` ns = `m` + )->tag( n = `OverflowToolbarLayoutData` ns = `m` + )->a( n = `priority` v = `AlwaysOverflow` + + )->end( + )->end( + )->ele( n = `Button` ns = `m` + )->a( n = `id` v = `editUrlButton` + )->a( n = `text` v = `Edit URL` + )->a( n = `enabled` v = client->_bind( single_enabled ) + )->a( n = `press` v = client->_event( `EDIT_URL` ) + + )->ele( n = `layoutData` ns = `m` + )->tag( n = `OverflowToolbarLayoutData` ns = `m` + )->a( n = `priority` v = `AlwaysOverflow` + + )->end( + )->end( + )->end( + )->end( + )->ele( `dependents` + )->ele( n = `UploadSetwithTable` ns = `plugins` + " the id is added - the port calls the plugin by id where the + " controller kept the instance onActivated handed it + )->a( n = `id` v = `uploadSetPlugin` + )->a( n = `uploadUrl` v = `/uploadFiles` + )->a( n = `multiple` v = `true` + " the mock server's part: the upload is vetoed and the backend + " adds the row the fake 201 response would have created + )->a( n = `beforeUploadStarts` v = client->_event( val = `UPLOAD` + t_arg = VALUE #( ( `${$parameters>/item}.getFileName()` ) + ( `${$parameters>/item}.getMediaType()` ) + ( `${$parameters>/item}.getFileObject().size` ) ) + s_ctrl = VALUE #( check_prevent_default = abap_true + check_queue_last = abap_true ) ) + )->a( n = `itemRenamed` v = client->_event( val = `RENAMED` + t_arg = VALUE #( ( `${$parameters>/item}.getBindingContext().getPath()` ) + ( `${$parameters>/item}.getFileName()` ) ) ) + )->a( n = `cloudFilePickerEnabled` v = `true` + )->a( n = `actions` v = `uploadButton` + + " the paths name the model's upper-case ABAP fields + )->tag( n = `UploadItemConfiguration` ns = `upload` + )->a( n = `fileNamePath` v = `FILENAME` + )->a( n = `mediaTypePath` v = `MEDIATYPE` + )->a( n = `urlPath` v = `URL` + )->a( n = `previewablePath` v = `PREVIEWABLE` + )->a( n = `fileSizePath` v = `FILESIZE` + )->a( n = `isTrustedSourcePath` v = `TRUSTEDSOURCE` + + )->end( + )->end( + )->ele( `rowSettingsTemplate` + )->tag( `RowSettings` + )->a( n = `highlight` v = `{= ${UPLOADSTATE} === 'Complete' ? 'Indication05' : null }` + + )->end( + )->ele( `columns` + )->ele( `Column` + )->a( n = `width` v = `20%` + + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `File Name` + + )->ele( `template` + )->ele( n = `HBox` ns = `m` + )->a( n = `class` v = `sapUiTinyMargin` + + )->tag( n = `Image` ns = `m` + )->a( n = `src` v = `{IMAGEURL}` + )->a( n = `class` v = `sapMUSTItemImage sapMUSTItemIcon` + )->a( n = `visible` v = `{= ${IMAGEURL} !== undefined}` + " getIconSrc runs in ABAP: the row carries the finished icon + )->tag( n = `Icon` ns = `core` + )->a( n = `src` v = `{ICON}` + )->a( n = `visible` v = `{= ${IMAGEURL} === undefined || ${IMAGEURL} === '' }` + )->a( n = `class` v = `sapMUSTItemImage sapMUSTItemIcon` + + )->ele( n = `VBox` ns = `m` + )->a( n = `class` v = `sapUiTinyMargin sapUiSmallMarginBegin` + + )->tag( n = `Link` ns = `m` + )->a( n = `text` v = `{FILENAME}` + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin` ) + ( `openFilePreview` ) + ( `$event.oSource.getBindingContext()` ) ) ) + )->a( n = `class` v = `sapUiTinyMarginBottom` + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = `{DOCUMENTTYPE}` + + )->end( + )->end( + )->end( + )->end( + )->ele( `Column` + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `ID` + + )->ele( `template` + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = `{ID}` + + )->end( + )->end( + )->ele( `Column` + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `Revision` + + )->ele( `template` + )->tag( n = `Link` ns = `m` + )->a( n = `text` v = `{REVISION}` + + )->end( + )->end( + )->ele( `Column` + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `Status` + + )->ele( `template` + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = `{STATUS}` + + )->end( + )->end( + )->ele( `Column` + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `File Size` + + " getFileSizeWithUnits runs in ABAP as well + )->ele( `template` + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = `{FILESIZE_UNITS}` - )->ele( `Page` - )->a( n = `title` v = `UploadSetwithTablePlugin.GridTableSimple` + )->end( + )->end( + )->ele( `Column` + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `Last Modified` - )->tag( `Text` - )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.GridTableSimple` ). + )->ele( `template` + )->ele( n = `VBox` ns = `m` + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = `{LASTMODIFIEDBY}` + )->tag( n = `Text` ns = `m` + )->a( n = `class` v = `sapUiTinyMarginTop` + )->a( n = `text` v = `{LASTMODIFIED}` + + )->end( + )->end( + )->end( + )->ele( `Column` + )->ele( `template` + )->tag( n = `Button` ns = `m` + )->a( n = `class` v = `sapUiTinyMarginBegin` + )->a( n = `type` v = `Transparent` + )->a( n = `icon` v = `sap-icon://decline` + )->a( n = `press` v = client->_event( val = `REMOVE_ROW` + arg = `$event.oSource.getBindingContext().getPath()` ) ). client->view_display( view->stringify( ) ). ENDMETHOD. + METHOD popup_url_display. + + DATA(popup) = z2ui5_cl_ui5_view_builder=>factory( ). + + popup->ele( n = `FragmentDefinition` ns = `core` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:core` v = `sap.ui.core` + )->a( n = `xmlns:form` v = `sap.ui.layout.form` + )->a( n = `templateShareable` v = `false` + )->a( n = `class` v = `sapUiTinyMarginTop` + + )->ele( `Dialog` + )->a( n = `id` v = `addViaUrlDialog` + )->a( n = `title` v = client->_bind( dialog_title ) + )->a( n = `contentWidth` v = `28rem` + )->a( n = `contentHeight` v = `15rem` + )->a( n = `class` v = `sapUiSmallMargin` + + )->ele( `content` + )->ele( n = `SimpleForm` ns = `form` + )->a( n = `editable` v = `true` + )->a( n = `id` v = `addViaUrlSimpleform` + + )->tag( `Label` + )->a( n = `id` v = `urlInputLabel` + )->a( n = `text` v = `URL` + )->a( n = `required` v = client->_bind( url_required ) + )->tag( `Input` + )->a( n = `id` v = `urlInput` + )->a( n = `value` v = client->_bind( url_input ) + )->a( n = `valueState` v = client->_bind( url_state ) + )->a( n = `valueStateText` v = client->_bind( url_state_text ) + )->tag( `Label` + )->a( n = `id` v = `nameInputLabel` + )->a( n = `text` v = `Name` + )->a( n = `required` v = `true` + )->tag( `Input` + )->a( n = `id` v = `nameInput` + )->a( n = `value` v = client->_bind( name_input ) + )->a( n = `valueState` v = client->_bind( name_state ) + )->a( n = `valueStateText` v = client->_bind( name_state_text ) + + )->end( + )->end( + )->ele( `beginButton` + )->tag( `Button` + )->a( n = `id` v = `addDocumentBtn` + )->a( n = `text` v = client->_bind( apply_text ) + )->a( n = `type` v = `Emphasized` + )->a( n = `press` v = client->_event( `URL_APPLY` ) + + )->end( + )->ele( `endButton` + )->tag( `Button` + )->a( n = `text` v = `Cancel` + )->a( n = `press` v = client->follow_up_action( client->cs_event-popup_close ) ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get_event( ). + + WHEN `SELECTION`. + " onSelectionChange - getSelectedIndices( ); the table neither sorts nor + " filters, so a row index is the model index, kept as a / path + t_selected = VALUE #( ). + IF client->get_event_arg( ) IS NOT INITIAL. + SPLIT client->get_event_arg( ) AT `,` INTO TABLE DATA(indices). + LOOP AT indices INTO DATA(selected). + INSERT |/{ selected }| INTO TABLE t_selected. + ENDLOOP. + ENDIF. + download_enabled = xsdbool( t_selected IS NOT INITIAL ). + single_enabled = xsdbool( lines( t_selected ) = 1 ). + + WHEN `ADD_URL`. + " openAddOrEditDialog in its Add shape + is_edit = abap_false. + dialog_title = `Add URL`. + apply_text = `Add`. + url_required = abap_true. + url_input = ``. + name_input = ``. + url_state = `None`. + url_state_text = ``. + name_state = `None`. + name_state_text = ``. + popup_url_display( ). + + WHEN `EDIT_URL`. + " onEditUrl - the same fragment as Edit URL, filled from the selected row + DATA(current) = selected_index( ). + IF current = 0. + RETURN. + ENDIF. + DATA(row) = t_items[ current ]. + is_edit = abap_true. + dialog_title = `Edit URL`. + apply_text = `Apply`. + url_required = abap_false. + url_input = row-url. + name_input = row-filename. + url_state = `None`. + url_state_text = ``. + name_state = `None`. + name_state_text = ``. + popup_url_display( ). + + WHEN `URL_APPLY`. + url_apply( ). + + WHEN `EDIT_CONFIRM`. + IF client->get_event_arg( ) = `Save`. + " the Save button validates (value states) and applies regardless + name_valid( ). + url_valid( ). + DATA(target) = selected_index( ). + IF target > 0. + t_items[ target ]-filename = name_input. + t_items[ target ]-url = url_input. + ENDIF. + client->popup_destroy( ). + ENDIF. + + WHEN `REMOVE_SELECTED`. + IF t_selected IS NOT INITIAL. + remove_ask( t_selected[ 1 ] ). + ENDIF. + + WHEN `REMOVE_ROW`. + remove_ask( client->get_event_arg( ) ). + + WHEN `REMOVE_CLOSE`. + IF client->get_event_arg( ) = `Remove`. + DATA(index) = row_index( remove_path ). + IF index BETWEEN 1 AND lines( t_items ). + DELETE t_items INDEX index. + ENDIF. + ENDIF. + + WHEN `UPLOAD`. + " the file the FileUploader picked, as the mock server would answer it + row_add( filename = client->get_event_arg( ) + mediatype = client->get_event_arg( 2 ) + url = `` + filesize = CONV #( client->get_event_arg( 3 ) ) ). + client->message_toast_display( `Document Added` ). + + WHEN `RENAMED`. + " onDocumentRenamedSuccess writes the new name into the row + DATA(renamed) = row_index( client->get_event_arg( ) ). + IF renamed BETWEEN 1 AND lines( t_items ). + t_items[ renamed ]-filename = client->get_event_arg( 2 ). + ENDIF. + client->message_toast_display( text = `Document Renamed.` duration = `2000` ). + + ENDCASE. + + ENDMETHOD. + + + METHOD url_apply. + + " handleAddViaUrl + IF is_edit = abap_true. + IF name_valid( ) = abap_true. + " showEditConfirmation - a Message dialog in the Warning state + client->message_box_display( text = `You have made changes to this object. What would you like to do?` + type = `warning` + title = `Warning` + actions = VALUE #( ( `Save` ) ( `DiscardChanges` ) ) + emphasizedaction = `Save` + onclose = `EDIT_CONFIRM` ). + ELSE. + client->message_toast_display( `No Changes found` ). + ENDIF. + RETURN. + ENDIF. + DATA(has_error) = xsdbool( name_valid( ) = abap_false ). + IF url_valid( ) = abap_false. + has_error = abap_true. + ENDIF. + IF has_error = abap_false. + " uploadItemViaUrl - the mock server answers with the typed URL as the + " document URL and an empty file + row_add( filename = name_input + mediatype = `` + url = url_input + filesize = 0 ). + client->popup_destroy( ). + client->message_toast_display( `Document Added` ). + ENDIF. + + ENDMETHOD. + + + METHOD remove_ask. + + " removeItem - MessageBox.warning; the icon is the warning box's own + DATA(index) = row_index( path ). + IF index NOT BETWEEN 1 AND lines( t_items ). + RETURN. + ENDIF. + remove_path = path. + client->message_box_display( text = |Are you sure you want to remove the document { t_items[ index ]-filename } ?| + type = `warning` + actions = VALUE #( ( `Remove` ) ( `CANCEL` ) ) + emphasizedaction = `Remove` + styleclass = `sapMUSTRemovePopoverContainer` + initialfocus = `CANCEL` + onclose = `REMOVE_CLOSE` ). + + ENDMETHOD. + + + METHOD name_valid. + + " _isValidName + IF name_input IS INITIAL. + name_state = `Error`. + name_state_text = `Text is either empty or contains special characters`. + ELSE. + name_state = `None`. + result = abap_true. + ENDIF. + + ENDMETHOD. + + + METHOD url_valid. + + " _validateAddOrEditUrlDialog's URL half - the sample's regex is unanchored, + " so a scheme followed by one non-blank character is what it requires + FIND REGEX `(ftp|http|https)://\S` IN url_input. + IF sy-subrc <> 0. + url_state = `Error`. + url_state_text = `Enter Valid URL`. + ELSE. + url_state = `None`. + result = abap_true. + ENDIF. + + ENDMETHOD. + + + METHOD row_add. + + " the mock server's Create branch - unshift the new document + upload_no = upload_no + 1. + DATA(row) = VALUE ty_s_item( id = |{ upload_no }| + filename = filename + mediatype = mediatype + url = url + uploadstate = `Complete` + revision = `00` + status = `In work` + filesize = filesize + lastmodifiedby = `Jane Burns` + lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Invoice` + trustedsource = abap_true ). + row_derive( CHANGING row = row ). + INSERT row INTO t_items INDEX 1. + + ENDMETHOD. + + + METHOD selected_index. + + " the one selected row the toolbar actions work on - 0 when there is none + IF t_selected IS INITIAL. + RETURN. + ENDIF. + result = row_index( t_selected[ 1 ] ). + IF result > lines( t_items ). + result = 0. + ENDIF. + + ENDMETHOD. + + + METHOD row_index. + + " a row's binding path ends in its 0-based index: /T_ITEMS/3 is the 4th row + DATA(slash) = find( val = path sub = `/` occ = -1 ). + IF slash < 0. + RETURN. + ENDIF. + DATA(digits) = substring( val = path off = slash + 1 ). + IF digits IS INITIAL OR digits CN `0123456789`. + RETURN. + ENDIF. + result = CONV i( digits ) + 1. + + ENDMETHOD. + + + METHOD row_derive. + + row-icon = icon_for( mediatype = row-mediatype filename = row-filename ). + row-filesize_units = size_with_units( row-filesize ). + + ENDMETHOD. + + + METHOD icon_for. + + " UploadSetwithTable.getIconForFileType: IconPool's media type table, or the + " file extension when there is no media type + IF mediatype IS NOT INITIAL. + CASE to_lower( mediatype ). + WHEN `application/msword` OR `application/vnd.google-apps.document` OR `application/rtf` + OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document`. + result = `sap-icon://doc-attachment`. + WHEN `application/pdf`. + result = `sap-icon://pdf-attachment`. + WHEN `application/msexcel` OR `application/vnd.ms-excel` OR `application/vnd.google-apps.spreadsheet` + OR `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` + OR `application/vnd.ms-excel.sheet.macroenabled.12` + OR `application/vnd.openxmlformats-officedocument.spreadsheetml.template` + OR `application/vnd.ms-excel.template.macroenabled.12` + OR `application/vnd.ms-excel.sheet.binary.macroenabled.12` + OR `application/vnd.ms-excel.addin.macroenabled.12`. + result = `sap-icon://excel-attachment`. + WHEN `application/vnd.ms-powerpoint` OR `application/vnd.google-apps.presentation` OR `application/mspowerpoint` + OR `application/vnd.openxmlformats-officedocument.presentationml.presentation` + OR `application/vnd.openxmlformats-officedocument.presentationml.slideshow`. + result = `sap-icon://ppt-attachment`. + WHEN `application/xml` OR `application/xhtml+xml` OR `application/x-httpd-php` OR `application/x-javascript` + OR `text/html`. + result = `sap-icon://attachment-html`. + WHEN `application/gzip` OR `application/x-rar-compressed` OR `application/x-tar` OR `application/zip`. + result = `sap-icon://attachment-zip-file`. + WHEN `audio/mpeg` OR `audio/voxware` OR `audio/x-aiff` OR `audio/x-midi` OR `audio/x-mpeg` OR `audio/x-m4a` + OR `audio/x-pn-realaudio` OR `audio/x-pn-realaudio-plugin` OR `audio/x-qt-stream` OR `audio/x-wav`. + result = `sap-icon://attachment-audio`. + WHEN `image/png` OR `image/tiff` OR `image/bmp` OR `image/jpeg` OR `image/gif`. + result = `sap-icon://attachment-photo`. + WHEN `text/plain` OR `text/comma-separated-values` OR `text/css` OR `text/javascript` OR `text/richtext` + OR `text/rtf` OR `text/tab-separated-values` OR `text/xml`. + result = `sap-icon://attachment-text-file`. + WHEN `video/mpeg` OR `video/mp4` OR `video/quicktime` OR `video/x-msvideo` OR `application/x-shockwave-flash`. + result = `sap-icon://attachment-video`. + WHEN OTHERS. + result = `sap-icon://document`. + ENDCASE. + RETURN. + ENDIF. + + DATA(dot) = find( val = filename sub = `.` occ = -1 ). + IF dot < 0. + result = `sap-icon://document`. + RETURN. + ENDIF. + CASE to_lower( substring( val = filename off = dot + 1 ) ). + WHEN `bmp` OR `jpg` OR `jpeg` OR `png`. + result = `sap-icon://card`. + WHEN `csv` OR `xls` OR `xlsx`. + result = `sap-icon://excel-attachment`. + WHEN `doc` OR `docx` OR `odt`. + result = `sap-icon://doc-attachment`. + WHEN `pdf`. + result = `sap-icon://pdf-attachment`. + WHEN `ppt` OR `pptx`. + result = `sap-icon://ppt-attachment`. + WHEN `txt`. + result = `sap-icon://document-text`. + WHEN OTHERS. + result = `sap-icon://document`. + ENDCASE. + + ENDMETHOD. + + + METHOD size_with_units. + + " UploadSetwithTable.getFileSizeWithUnits - KB below a megabyte, then MB, then GB + CONSTANTS kilobyte TYPE i VALUE 1024. + DATA(bytes) = CONV decfloat34( size ). + IF size < kilobyte * kilobyte. + result = |{ bytes / kilobyte DECIMALS = 2 } KB|. + ELSEIF size < kilobyte * kilobyte * kilobyte. + result = |{ bytes / kilobyte / kilobyte DECIMALS = 2 } MB|. + ELSE. + result = |{ bytes / kilobyte / kilobyte / kilobyte DECIMALS = 2 } GB|. + ENDIF. + + ENDMETHOD. + + METHOD model_init. - " TODO seed the default model (see the sample's controller / JSON mock) - RETURN. + " model/documents.json, every row - the document URLs point at the OpenUI5 host + t_items = VALUE #( + ( id = `23004569` filename = `Invoice summary.doc` mediatype = `application/msword` + imageurl = `https://sdk.openui5.org/test-resources/sap/m/images/invoice_manager.png` url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Business Plan Agenda.doc` + revision = `01` status = `In work` filesize = 200 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Invoice` previewable = abap_true ) + ( id = `23004589` filename = `Business Plan Topics.xls` mediatype = `application/vnd.ms-excel` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Business Plan Topics.xls` + revision = `00` status = `In work` filesize = 2400 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Invoice` previewable = abap_true ) + ( id = `23004578` filename = `Instructions.pdf` mediatype = `application/pdf` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Instructions.pdf` + revision = `01` status = `In work` filesize = 30000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Specification` previewable = abap_true trustedsource = abap_true ) + ( id = `23004579` filename = `Document.txt` mediatype = `text/plain` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Document.txt` + revision = `42` status = `In work` filesize = 420 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Document` previewable = abap_true ) + ( id = `23004581` filename = `Test Image.png` mediatype = `image/png` + imageurl = `https://sdk.openui5.org/test-resources/sap/m/images/invoice_manager.png` url = `https://sdk.openui5.org/test-resources/sap/m/images/invoice_manager.png` + revision = `06` status = `In work` filesize = 420 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Attachment` previewable = abap_true ) + ( id = `23004582` filename = `Test Attachment.gif` mediatype = `image/gif` + imageurl = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Animation.gif` url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Animation.gif` + revision = `11` status = `In work` filesize = 420 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Attachment` previewable = abap_true ) + ( id = `23004583` filename = `Test Video.mp4` mediatype = `video/mp4` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Video.mp4` + revision = `99` status = `In work` filesize = 420000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Attachment` previewable = abap_true ) + ( id = `23004590` filename = `Sample Zip File.zip` mediatype = `application/zip` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/sample-zip-file.zip` + revision = `00` status = `In work` filesize = 42000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/22, 10:20:00 PM` + documenttype = `Attachment` previewable = abap_true ) + ( id = `23004584` filename = `Transmission.vds` mediatype = `model/vnd.sap.vds` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/transmission.vds` + revision = `42` status = `In work` filesize = 123 lastmodifiedby = `Jane Burns` lastmodified = `10/03/22, 10:20:00 PM` + documenttype = `Attachment` previewable = abap_true ) ). + LOOP AT t_items REFERENCE INTO DATA(row). + row_derive( CHANGING row = row->* ). + ENDLOOP. ENDMETHOD. diff --git a/src/02/01/z2ui5_cl_smpc_app_655.clas.abap b/src/02/01/z2ui5_cl_smpc_app_655.clas.abap index bd6a94c17..070347c3d 100644 --- a/src/02/01/z2ui5_cl_smpc_app_655.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_655.clas.abap @@ -3,10 +3,68 @@ CLASS z2ui5_cl_smpc_app_655 DEFINITION PUBLIC. PUBLIC SECTION. INTERFACES z2ui5_if_app. + TYPES: + BEGIN OF ty_s_item, + id TYPE string, + filename TYPE string, + mediatype TYPE string, + imageurl TYPE string, + url TYPE string, + revision TYPE string, + status TYPE string, + filesize TYPE i, + lastmodifiedby TYPE string, + lastmodified TYPE string, + documenttype TYPE string, + previewable TYPE abap_bool, + trustedsource TYPE abap_bool, + uploadstate TYPE string, + icon TYPE string, + filesize_units TYPE string, + END OF ty_s_item. + TYPES ty_t_item TYPE STANDARD TABLE OF ty_s_item WITH EMPTY KEY. + " the three arrays of documents.json, one per table + DATA t_items TYPE ty_t_item. + DATA t_itemsinstance2 TYPE ty_t_item. + DATA t_itemsinstance3 TYPE ty_t_item. + " onSelectionChange: each table's Download button follows its selection + DATA download_enabled TYPE abap_bool. + DATA download_enabled2 TYPE abap_bool. + DATA download_enabled3 TYPE abap_bool. + PROTECTED SECTION. DATA client TYPE REF TO z2ui5_if_client. + DATA remove_path TYPE string. + DATA upload_no TYPE i. METHODS view_display. + METHODS on_event. + METHODS row_new + IMPORTING + filename TYPE string + mediatype TYPE string + filesize TYPE i + RETURNING + VALUE(result) TYPE ty_s_item. + METHODS row_index + IMPORTING + path TYPE string + RETURNING + VALUE(result) TYPE i. + METHODS row_derive + CHANGING + row TYPE ty_s_item. + METHODS icon_for + IMPORTING + mediatype TYPE string + filename TYPE string + RETURNING + VALUE(result) TYPE string. + METHODS size_with_units + IMPORTING + size TYPE i + RETURNING + VALUE(result) TYPE string. METHODS model_init. PRIVATE SECTION. @@ -23,6 +81,8 @@ CLASS z2ui5_cl_smpc_app_655 IMPLEMENTATION. view_display( ). ELSEIF client->check_on_navigated( ). view_display( ). + ELSEIF client->check_on_event( ). + on_event( ). ENDIF. ENDMETHOD. @@ -32,27 +92,895 @@ CLASS z2ui5_cl_smpc_app_655 IMPLEMENTATION. DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). - " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.MultiplePluginInstances/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) view->ele( n = `View` ns = `mvc` - )->a( n = `xmlns` v = `sap.m` - )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` - )->a( n = `height` v = `100%` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `xmlns:f` v = `sap.f` + )->a( n = `xmlns:core` v = `sap.ui.core` + )->a( n = `xmlns:upload` v = `sap.m.upload` + )->a( n = `xmlns:plugins` v = `sap.m.plugins` + )->a( n = `height` v = `100%` + )->a( n = `displayBlock` v = `true` + + )->ele( n = `DynamicPage` ns = `f` + )->a( n = `id` v = `page` + + )->ele( n = `content` ns = `f` + )->ele( `VBox` + )->ele( `Table` + )->a( n = `id` v = `table-uploadSet` + )->a( n = `sticky` v = `ColumnHeaders,HeaderToolbar` + )->a( n = `width` v = `auto` + )->a( n = `mode` v = `MultiSelect` + )->a( n = `fixedLayout` v = `false` + )->a( n = `inset` v = `true` + )->a( n = `autoPopinMode` v = `true` + )->a( n = `hiddenInPopin` v = `None` + )->a( n = `items` v = |\{ path: '{ client->_bind( val = t_items + path = abap_true + omit_initial_paths = VALUE #( ( `IMAGEURL` ) + ( `UPLOADSTATE` ) ) ) }', templateShareable: false \}| + )->a( n = `selectionChange` v = client->_event( val = `SELECTION` + t_arg = VALUE #( ( `$event.oSource.getId()` ) + ( `$event.oSource.getSelectedContexts().length` ) ) ) + + )->ele( `headerToolbar` + )->ele( `OverflowToolbar` + )->tag( `Title` + )->a( n = `text` v = |Documents (\{= ${ client->_bind( t_items ) }.length\})| + )->a( n = `level` v = `H2` + )->tag( `ToolbarSpacer` + + " onSearch filters the FIRST table whichever field is typed in + )->ele( `SearchField` + )->a( n = `width` v = `20%` + )->a( n = `liveChange` v = client->follow_up_action( val = client->cs_event-binding_call + t_arg = VALUE #( ( `table-uploadSet` ) + ( `items` ) + ( `filter` ) + ( `FILENAME` ) + ( `Contains` ) + ( `${$source>/value}` ) ) ) + + )->ele( `layoutData` + )->tag( `OverflowToolbarLayoutData` + )->a( n = `priority` v = `NeverOverflow` + + )->end( + )->end( + )->tag( `ToolbarSeparator` + )->tag( n = `ActionsPlaceholder` ns = `upload` + )->a( n = `id` v = `uploadButton` + )->a( n = `placeholderFor` v = `UploadButtonPlaceholder` + )->tag( `Button` + )->a( n = `id` v = `downloadSelectedButton` + )->a( n = `text` v = `Download` + )->a( n = `enabled` v = client->_bind( download_enabled ) + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin` ) + ( `download` ) + ( `$controller.getView().byId('table-uploadSet').getSelectedContexts()[0]` ) + ( `true` ) ) ) + + )->end( + )->end( + )->ele( `dependents` + )->ele( n = `UploadSetwithTable` ns = `plugins` + )->a( n = `id` v = `uploadSetPlugin` + )->a( n = `uploadUrl` v = `/uploadFiles` + )->a( n = `multiple` v = `true` + )->a( n = `beforeUploadStarts` v = client->_event( val = `UPLOAD` + t_arg = VALUE #( ( `${$parameters>/item}.getFileName()` ) + ( `${$parameters>/item}.getMediaType()` ) + ( `${$parameters>/item}.getFileObject().size` ) + ( `$event.oSource.data('itemsPath')` ) ) + s_ctrl = VALUE #( check_prevent_default = abap_true + check_queue_last = abap_true ) ) + )->a( n = `cloudFilePickerEnabled` v = `true` + )->a( n = `actions` v = `uploadButton` + + )->ele( n = `rowConfiguration` ns = `plugins` + )->tag( n = `UploadItemConfiguration` ns = `upload` + )->a( n = `fileNamePath` v = `FILENAME` + )->a( n = `mediaTypePath` v = `MEDIATYPE` + )->a( n = `urlPath` v = `URL` + )->a( n = `previewablePath` v = `PREVIEWABLE` + )->a( n = `fileSizePath` v = `FILESIZE` + )->a( n = `isTrustedSourcePath` v = `TRUSTEDSOURCE` + + )->end( + )->ele( n = `customData` ns = `plugins` + )->tag( n = `CustomData` ns = `core` + )->a( n = `key` v = `itemsPath` + )->a( n = `value` v = `items` + )->a( n = `writeToDom` v = `false` + + )->end( + )->end( + )->end( + )->ele( `columns` + )->ele( `Column` + )->a( n = `id` v = `fileName` + )->a( n = `importance` v = `High` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `File Name` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `id` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `ID` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `revision` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `Revision` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `status` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `Status` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `fileSize` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `File Size` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `lastModified` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `Last Modified` + + )->end( + )->end( + )->tag( `Column` + )->a( n = `id` v = `actionButton` + )->a( n = `importance` v = `High` + + )->end( + )->ele( `items` + )->ele( `ColumnListItem` + )->a( n = `highlight` v = `{= ${UPLOADSTATE} === 'Complete' ? 'Indication05' : null }` + + )->ele( `cells` + )->ele( `HBox` + )->tag( `Image` + )->a( n = `src` v = `{IMAGEURL}` + )->a( n = `class` v = `sapMUSTItemImage sapMUSTItemIcon` + )->a( n = `visible` v = `{= ${IMAGEURL} !== undefined}` + )->tag( n = `Icon` ns = `core` + )->a( n = `src` v = `{ICON}` + )->a( n = `visible` v = `{= ${IMAGEURL} === undefined || ${IMAGEURL} === '' }` + )->a( n = `class` v = `sapMUSTItemImage sapMUSTItemIcon` + + )->ele( `VBox` + )->a( n = `class` v = `sapUiTinyMargin sapUiSmallMarginBegin` + + )->tag( `Link` + )->a( n = `text` v = `{FILENAME}` + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin` ) + ( `openFilePreview` ) + ( `$event.oSource.getBindingContext()` ) ) ) + )->a( n = `class` v = `sapUiTinyMarginBottom` + )->tag( `Text` + )->a( n = `text` v = `{DOCUMENTTYPE}` + + )->end( + )->end( + )->tag( `Text` + )->a( n = `text` v = `{ID}` + )->tag( `Link` + )->a( n = `text` v = `{REVISION}` + )->tag( `Text` + )->a( n = `text` v = `{STATUS}` + )->tag( `Text` + )->a( n = `text` v = `{FILESIZE_UNITS}` + + )->ele( `VBox` + )->tag( `Text` + )->a( n = `text` v = `{LASTMODIFIEDBY}` + )->tag( `Text` + )->a( n = `class` v = `sapUiTinyMarginTop` + )->a( n = `text` v = `{LASTMODIFIED}` + + )->end( + )->tag( `Button` + )->a( n = `class` v = `sapUiTinyMarginBegin` + )->a( n = `type` v = `Transparent` + )->a( n = `icon` v = `sap-icon://decline` + )->a( n = `press` v = client->_event( val = `REMOVE_ROW` + t_arg = VALUE #( ( `$event.oSource.getBindingContext().getPath()` ) + ( `${FILENAME}` ) ) ) + + )->end( + )->end( + )->end( + )->end( + )->ele( `Table` + )->a( n = `id` v = `table-uploadSet-instance2` + )->a( n = `sticky` v = `ColumnHeaders,HeaderToolbar` + )->a( n = `width` v = `auto` + )->a( n = `mode` v = `MultiSelect` + )->a( n = `fixedLayout` v = `false` + )->a( n = `inset` v = `true` + )->a( n = `autoPopinMode` v = `true` + )->a( n = `hiddenInPopin` v = `None` + )->a( n = `items` v = |\{ path: '{ client->_bind( val = t_itemsinstance2 + path = abap_true + omit_initial_paths = VALUE #( ( `IMAGEURL` ) + ( `UPLOADSTATE` ) ) ) }', templateShareable: false \}| + )->a( n = `selectionChange` v = client->_event( val = `SELECTION` + t_arg = VALUE #( ( `$event.oSource.getId()` ) + ( `$event.oSource.getSelectedContexts().length` ) ) ) + + )->ele( `headerToolbar` + )->ele( `OverflowToolbar` + )->tag( `Title` + )->a( n = `text` v = |Documents (\{= ${ client->_bind( t_itemsinstance2 ) }.length\})| + )->a( n = `level` v = `H2` + )->tag( `ToolbarSpacer` + + " onSearch filters the FIRST table whichever field is typed in + )->ele( `SearchField` + )->a( n = `width` v = `20%` + )->a( n = `liveChange` v = client->follow_up_action( val = client->cs_event-binding_call + t_arg = VALUE #( ( `table-uploadSet` ) + ( `items` ) + ( `filter` ) + ( `FILENAME` ) + ( `Contains` ) + ( `${$source>/value}` ) ) ) + + )->ele( `layoutData` + )->tag( `OverflowToolbarLayoutData` + )->a( n = `priority` v = `NeverOverflow` + + )->end( + )->end( + )->tag( `ToolbarSeparator` + )->tag( n = `ActionsPlaceholder` ns = `upload` + )->a( n = `id` v = `uploadButtonInstance2` + )->a( n = `placeholderFor` v = `UploadButtonPlaceholder` + )->tag( `Button` + )->a( n = `id` v = `downloadSelectedButton-instance2` + )->a( n = `text` v = `Download` + )->a( n = `enabled` v = client->_bind( download_enabled2 ) + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin-instance2` ) + ( `download` ) + ( `$controller.getView().byId('table-uploadSet-instance2').getSelectedContexts()[0]` ) + ( `true` ) ) ) + + )->end( + )->end( + )->ele( `dependents` + )->ele( n = `UploadSetwithTable` ns = `plugins` + )->a( n = `id` v = `uploadSetPlugin-instance2` + )->a( n = `uploadUrl` v = `/uploadFiles` + )->a( n = `multiple` v = `true` + )->a( n = `beforeUploadStarts` v = client->_event( val = `UPLOAD` + t_arg = VALUE #( ( `${$parameters>/item}.getFileName()` ) + ( `${$parameters>/item}.getMediaType()` ) + ( `${$parameters>/item}.getFileObject().size` ) + ( `$event.oSource.data('itemsPath')` ) ) + s_ctrl = VALUE #( check_prevent_default = abap_true + check_queue_last = abap_true ) ) + )->a( n = `cloudFilePickerEnabled` v = `true` + )->a( n = `actions` v = `uploadButtonInstance2` + + )->ele( n = `rowConfiguration` ns = `plugins` + )->tag( n = `UploadItemConfiguration` ns = `upload` + )->a( n = `fileNamePath` v = `FILENAME` + )->a( n = `mediaTypePath` v = `MEDIATYPE` + )->a( n = `urlPath` v = `URL` + )->a( n = `previewablePath` v = `PREVIEWABLE` + )->a( n = `fileSizePath` v = `FILESIZE` + )->a( n = `isTrustedSourcePath` v = `TRUSTEDSOURCE` + + )->end( + )->ele( n = `customData` ns = `plugins` + )->tag( n = `CustomData` ns = `core` + )->a( n = `key` v = `itemsPath` + )->a( n = `value` v = `items-instance2` + )->a( n = `writeToDom` v = `false` + + )->end( + )->end( + )->end( + )->ele( `columns` + )->ele( `Column` + )->a( n = `id` v = `fileName-instance2` + )->a( n = `importance` v = `High` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `File Name` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `id-instance-2` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `ID` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `revision-instance2` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `Revision` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `status-instance2` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `Status` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `fileSize-instance2` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `File Size` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `lastModified-instance2` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `Last Modified` + + )->end( + )->end( + )->tag( `Column` + )->a( n = `id` v = `actionButton-instance2` + )->a( n = `importance` v = `High` + + )->end( + )->ele( `items` + )->ele( `ColumnListItem` + )->a( n = `highlight` v = `{= ${UPLOADSTATE} === 'Complete' ? 'Indication05' : null }` + + )->ele( `cells` + )->ele( `HBox` + )->tag( `Image` + )->a( n = `src` v = `{IMAGEURL}` + )->a( n = `class` v = `sapMUSTItemImage sapMUSTItemIcon` + )->a( n = `visible` v = `{= ${IMAGEURL} !== undefined}` + )->tag( n = `Icon` ns = `core` + )->a( n = `src` v = `{ICON}` + )->a( n = `visible` v = `{= ${IMAGEURL} === undefined || ${IMAGEURL} === '' }` + )->a( n = `class` v = `sapMUSTItemImage sapMUSTItemIcon` + + )->ele( `VBox` + )->a( n = `class` v = `sapUiTinyMargin sapUiSmallMarginBegin` + + )->tag( `Link` + )->a( n = `text` v = `{FILENAME}` + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin-instance2` ) + ( `openFilePreview` ) + ( `$event.oSource.getBindingContext()` ) ) ) + )->a( n = `class` v = `sapUiTinyMarginBottom` + )->tag( `Text` + )->a( n = `text` v = `{DOCUMENTTYPE}` + + )->end( + )->end( + )->tag( `Text` + )->a( n = `text` v = `{ID}` + )->tag( `Link` + )->a( n = `text` v = `{REVISION}` + )->tag( `Text` + )->a( n = `text` v = `{STATUS}` + )->tag( `Text` + )->a( n = `text` v = `{FILESIZE_UNITS}` + + )->ele( `VBox` + )->tag( `Text` + )->a( n = `text` v = `{LASTMODIFIEDBY}` + )->tag( `Text` + )->a( n = `class` v = `sapUiTinyMarginTop` + )->a( n = `text` v = `{LASTMODIFIED}` + + )->end( + )->tag( `Button` + )->a( n = `class` v = `sapUiTinyMarginBegin` + )->a( n = `type` v = `Transparent` + )->a( n = `icon` v = `sap-icon://decline` + )->a( n = `press` v = client->_event( val = `REMOVE_ROW` + t_arg = VALUE #( ( `$event.oSource.getBindingContext().getPath()` ) + ( `${FILENAME}` ) ) ) + + )->end( + )->end( + )->end( + )->end( + )->ele( `Table` + )->a( n = `id` v = `table-uploadSet-instance3` + )->a( n = `sticky` v = `ColumnHeaders,HeaderToolbar` + )->a( n = `width` v = `auto` + )->a( n = `mode` v = `MultiSelect` + )->a( n = `fixedLayout` v = `false` + )->a( n = `inset` v = `true` + )->a( n = `autoPopinMode` v = `true` + )->a( n = `hiddenInPopin` v = `None` + )->a( n = `items` v = |\{ path: '{ client->_bind( val = t_itemsinstance3 + path = abap_true + omit_initial_paths = VALUE #( ( `IMAGEURL` ) + ( `UPLOADSTATE` ) ) ) }', templateShareable: false \}| + )->a( n = `selectionChange` v = client->_event( val = `SELECTION` + t_arg = VALUE #( ( `$event.oSource.getId()` ) + ( `$event.oSource.getSelectedContexts().length` ) ) ) + + )->ele( `headerToolbar` + )->ele( `OverflowToolbar` + )->tag( `Title` + )->a( n = `text` v = |Documents (\{= ${ client->_bind( t_itemsinstance3 ) }.length\})| + )->a( n = `level` v = `H2` + )->tag( `ToolbarSpacer` + + " onSearch filters the FIRST table whichever field is typed in + )->ele( `SearchField` + )->a( n = `width` v = `20%` + )->a( n = `liveChange` v = client->follow_up_action( val = client->cs_event-binding_call + t_arg = VALUE #( ( `table-uploadSet` ) + ( `items` ) + ( `filter` ) + ( `FILENAME` ) + ( `Contains` ) + ( `${$source>/value}` ) ) ) + + )->ele( `layoutData` + )->tag( `OverflowToolbarLayoutData` + )->a( n = `priority` v = `NeverOverflow` + + )->end( + )->end( + )->tag( `ToolbarSeparator` + )->tag( n = `ActionsPlaceholder` ns = `upload` + )->a( n = `id` v = `uploadButtonInstance3` + )->a( n = `placeholderFor` v = `UploadButtonPlaceholder` + )->tag( `Button` + )->a( n = `id` v = `downloadSelectedButton-instance3` + )->a( n = `text` v = `Download` + )->a( n = `enabled` v = client->_bind( download_enabled3 ) + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin-instance3` ) + ( `download` ) + ( `$controller.getView().byId('table-uploadSet-instance3').getSelectedContexts()[0]` ) + ( `true` ) ) ) - )->ele( `Page` - )->a( n = `title` v = `UploadSetwithTablePlugin.MultiplePluginInstances` + )->end( + )->end( + )->ele( `dependents` + )->ele( n = `UploadSetwithTable` ns = `plugins` + )->a( n = `id` v = `uploadSetPlugin-instance3` + )->a( n = `uploadUrl` v = `/uploadFiles` + )->a( n = `multiple` v = `true` + )->a( n = `beforeUploadStarts` v = client->_event( val = `UPLOAD` + t_arg = VALUE #( ( `${$parameters>/item}.getFileName()` ) + ( `${$parameters>/item}.getMediaType()` ) + ( `${$parameters>/item}.getFileObject().size` ) + ( `$event.oSource.data('itemsPath')` ) ) + s_ctrl = VALUE #( check_prevent_default = abap_true + check_queue_last = abap_true ) ) + )->a( n = `cloudFilePickerEnabled` v = `true` + )->a( n = `actions` v = `uploadButtonInstance3` - )->tag( `Text` - )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.MultiplePluginInstances` ). + )->ele( n = `rowConfiguration` ns = `plugins` + )->tag( n = `UploadItemConfiguration` ns = `upload` + )->a( n = `fileNamePath` v = `FILENAME` + )->a( n = `mediaTypePath` v = `MEDIATYPE` + )->a( n = `urlPath` v = `URL` + )->a( n = `previewablePath` v = `PREVIEWABLE` + )->a( n = `fileSizePath` v = `FILESIZE` + )->a( n = `isTrustedSourcePath` v = `TRUSTEDSOURCE` + + )->end( + )->ele( n = `customData` ns = `plugins` + )->tag( n = `CustomData` ns = `core` + )->a( n = `key` v = `itemsPath` + )->a( n = `value` v = `items-instance3` + )->a( n = `writeToDom` v = `false` + + )->end( + )->end( + )->end( + )->ele( `columns` + )->ele( `Column` + )->a( n = `id` v = `fileName-instance3` + )->a( n = `importance` v = `High` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `File Name` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `id-instance3` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `ID` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `revision-instance3` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `Revision` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `status-instance3` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `Status` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `fileSize-instance3` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `File Size` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `lastModified-instance3` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `Last Modified` + + )->end( + )->end( + )->tag( `Column` + )->a( n = `id` v = `actionButton-instance3` + )->a( n = `importance` v = `High` + + )->end( + )->ele( `items` + )->ele( `ColumnListItem` + )->a( n = `highlight` v = `{= ${UPLOADSTATE} === 'Complete' ? 'Indication05' : null }` + + )->ele( `cells` + )->ele( `HBox` + )->tag( `Image` + )->a( n = `src` v = `{IMAGEURL}` + )->a( n = `class` v = `sapMUSTItemImage sapMUSTItemIcon` + )->a( n = `visible` v = `{= ${IMAGEURL} !== undefined}` + )->tag( n = `Icon` ns = `core` + )->a( n = `src` v = `{ICON}` + )->a( n = `visible` v = `{= ${IMAGEURL} === undefined || ${IMAGEURL} === '' }` + )->a( n = `class` v = `sapMUSTItemImage sapMUSTItemIcon` + + )->ele( `VBox` + )->a( n = `class` v = `sapUiTinyMargin sapUiSmallMarginBegin` + + )->tag( `Link` + )->a( n = `text` v = `{FILENAME}` + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin-instance3` ) + ( `openFilePreview` ) + ( `$event.oSource.getBindingContext()` ) ) ) + )->a( n = `class` v = `sapUiTinyMarginBottom` + )->tag( `Text` + )->a( n = `text` v = `{DOCUMENTTYPE}` + + )->end( + )->end( + )->tag( `Text` + )->a( n = `text` v = `{ID}` + )->tag( `Link` + )->a( n = `text` v = `{REVISION}` + )->tag( `Text` + )->a( n = `text` v = `{STATUS}` + )->tag( `Text` + )->a( n = `text` v = `{FILESIZE_UNITS}` + + )->ele( `VBox` + )->tag( `Text` + )->a( n = `text` v = `{LASTMODIFIEDBY}` + )->tag( `Text` + )->a( n = `class` v = `sapUiTinyMarginTop` + )->a( n = `text` v = `{LASTMODIFIED}` + + )->end( + )->tag( `Button` + )->a( n = `class` v = `sapUiTinyMarginBegin` + )->a( n = `type` v = `Transparent` + )->a( n = `icon` v = `sap-icon://decline` + )->a( n = `press` v = client->_event( val = `REMOVE_ROW` + t_arg = VALUE #( ( `$event.oSource.getBindingContext().getPath()` ) + ( `${FILENAME}` ) ) ) ). client->view_display( view->stringify( ) ). ENDMETHOD. + METHOD on_event. + + CASE client->get_event( ). + + WHEN `SELECTION`. + " onSelectionChange tells the three tables apart by their ids + DATA(table_id) = client->get_event_arg( ). + DATA(selected) = xsdbool( client->get_event_arg( 2 ) > 0 ). + IF table_id CS `instance2`. + download_enabled2 = selected. + ELSEIF table_id CS `instance3`. + download_enabled3 = selected. + ELSE. + download_enabled = selected. + ENDIF. + + WHEN `REMOVE_ROW`. + " removeItem - MessageBox.warning; the icon is the warning box's own + remove_path = client->get_event_arg( ). + client->message_box_display( text = |Are you sure you want to remove the document { client->get_event_arg( 2 ) } ?| + type = `warning` + actions = VALUE #( ( `Remove` ) ( `CANCEL` ) ) + emphasizedaction = `Remove` + styleclass = `sapMUSTRemovePopoverContainer` + initialfocus = `CANCEL` + onclose = `REMOVE_CLOSE` ). + + WHEN `REMOVE_CLOSE`. + " as in the sample, the row's index is spliced out of /items and the + " first table's selection is cleared, whichever table the row was in + IF client->get_event_arg( ) = `Remove`. + DATA(index) = row_index( remove_path ). + IF index BETWEEN 1 AND lines( t_items ). + DELETE t_items INDEX index. + ENDIF. + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `table-uploadSet` ) ( `removeSelections` ) ) ). + download_enabled = abap_false. + ENDIF. + + WHEN `UPLOAD`. + " the mock server answers into the array the plugin's itemsPath names + DATA(row) = row_new( filename = client->get_event_arg( ) + mediatype = client->get_event_arg( 2 ) + filesize = CONV #( client->get_event_arg( 3 ) ) ). + CASE client->get_event_arg( 4 ). + WHEN `items-instance2`. + INSERT row INTO t_itemsinstance2 INDEX 1. + WHEN `items-instance3`. + INSERT row INTO t_itemsinstance3 INDEX 1. + WHEN OTHERS. + INSERT row INTO t_items INDEX 1. + ENDCASE. + client->message_toast_display( `Document Added` ). + + ENDCASE. + + ENDMETHOD. + + + METHOD row_new. + + " the mock server's Create branch + upload_no = upload_no + 1. + result = VALUE #( id = |{ upload_no }| + filename = filename + mediatype = mediatype + uploadstate = `Complete` + revision = `00` + status = `In work` + filesize = filesize + lastmodifiedby = `Jane Burns` + lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Invoice` + trustedsource = abap_true ). + row_derive( CHANGING row = result ). + + ENDMETHOD. + + + METHOD row_index. + + " a row's binding path ends in its 0-based index: /T_ITEMS/3 is the 4th row + DATA(slash) = find( val = path sub = `/` occ = -1 ). + IF slash < 0. + RETURN. + ENDIF. + DATA(digits) = substring( val = path off = slash + 1 ). + IF digits IS INITIAL OR digits CN `0123456789`. + RETURN. + ENDIF. + result = CONV i( digits ) + 1. + + ENDMETHOD. + + + METHOD row_derive. + + row-icon = icon_for( mediatype = row-mediatype filename = row-filename ). + row-filesize_units = size_with_units( row-filesize ). + + ENDMETHOD. + + + METHOD icon_for. + + " UploadSetwithTable.getIconForFileType: IconPool's media type table, or the + " file extension when there is no media type + IF mediatype IS NOT INITIAL. + CASE to_lower( mediatype ). + WHEN `application/msword` OR `application/vnd.google-apps.document` OR `application/rtf` + OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document`. + result = `sap-icon://doc-attachment`. + WHEN `application/pdf`. + result = `sap-icon://pdf-attachment`. + WHEN `application/msexcel` OR `application/vnd.ms-excel` OR `application/vnd.google-apps.spreadsheet` + OR `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` + OR `application/vnd.ms-excel.sheet.macroenabled.12` + OR `application/vnd.openxmlformats-officedocument.spreadsheetml.template` + OR `application/vnd.ms-excel.template.macroenabled.12` + OR `application/vnd.ms-excel.sheet.binary.macroenabled.12` + OR `application/vnd.ms-excel.addin.macroenabled.12`. + result = `sap-icon://excel-attachment`. + WHEN `application/vnd.ms-powerpoint` OR `application/vnd.google-apps.presentation` OR `application/mspowerpoint` + OR `application/vnd.openxmlformats-officedocument.presentationml.presentation` + OR `application/vnd.openxmlformats-officedocument.presentationml.slideshow`. + result = `sap-icon://ppt-attachment`. + WHEN `application/xml` OR `application/xhtml+xml` OR `application/x-httpd-php` OR `application/x-javascript` + OR `text/html`. + result = `sap-icon://attachment-html`. + WHEN `application/gzip` OR `application/x-rar-compressed` OR `application/x-tar` OR `application/zip`. + result = `sap-icon://attachment-zip-file`. + WHEN `audio/mpeg` OR `audio/voxware` OR `audio/x-aiff` OR `audio/x-midi` OR `audio/x-mpeg` OR `audio/x-m4a` + OR `audio/x-pn-realaudio` OR `audio/x-pn-realaudio-plugin` OR `audio/x-qt-stream` OR `audio/x-wav`. + result = `sap-icon://attachment-audio`. + WHEN `image/png` OR `image/tiff` OR `image/bmp` OR `image/jpeg` OR `image/gif`. + result = `sap-icon://attachment-photo`. + WHEN `text/plain` OR `text/comma-separated-values` OR `text/css` OR `text/javascript` OR `text/richtext` + OR `text/rtf` OR `text/tab-separated-values` OR `text/xml`. + result = `sap-icon://attachment-text-file`. + WHEN `video/mpeg` OR `video/mp4` OR `video/quicktime` OR `video/x-msvideo` OR `application/x-shockwave-flash`. + result = `sap-icon://attachment-video`. + WHEN OTHERS. + result = `sap-icon://document`. + ENDCASE. + RETURN. + ENDIF. + + DATA(dot) = find( val = filename sub = `.` occ = -1 ). + IF dot < 0. + result = `sap-icon://document`. + RETURN. + ENDIF. + CASE to_lower( substring( val = filename off = dot + 1 ) ). + WHEN `bmp` OR `jpg` OR `jpeg` OR `png`. + result = `sap-icon://card`. + WHEN `csv` OR `xls` OR `xlsx`. + result = `sap-icon://excel-attachment`. + WHEN `doc` OR `docx` OR `odt`. + result = `sap-icon://doc-attachment`. + WHEN `pdf`. + result = `sap-icon://pdf-attachment`. + WHEN `ppt` OR `pptx`. + result = `sap-icon://ppt-attachment`. + WHEN `txt`. + result = `sap-icon://document-text`. + WHEN OTHERS. + result = `sap-icon://document`. + ENDCASE. + + ENDMETHOD. + + + METHOD size_with_units. + + " UploadSetwithTable.getFileSizeWithUnits - KB below a megabyte, then MB, then GB + CONSTANTS kilobyte TYPE i VALUE 1024. + DATA(bytes) = CONV decfloat34( size ). + IF size < kilobyte * kilobyte. + result = |{ bytes / kilobyte DECIMALS = 2 } KB|. + ELSEIF size < kilobyte * kilobyte * kilobyte. + result = |{ bytes / kilobyte / kilobyte DECIMALS = 2 } MB|. + ELSE. + result = |{ bytes / kilobyte / kilobyte / kilobyte DECIMALS = 2 } GB|. + ENDIF. + + ENDMETHOD. + + METHOD model_init. - " TODO seed the default model (see the sample's controller / JSON mock) - RETURN. + " model/documents.json, all three arrays - the document URLs point at the OpenUI5 host + t_items = VALUE #( + ( id = `23004569` filename = `Invoice summary.doc` mediatype = `application/msword` + imageurl = `https://sdk.openui5.org/test-resources/sap/m/images/invoice_manager.png` url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Business Plan Agenda.doc` + revision = `01` status = `In work` filesize = 200 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Invoice` previewable = abap_true ) + ( id = `23004589` filename = `Business Plan Topics.xls` mediatype = `application/vnd.ms-excel` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Business Plan Topics.xls` + revision = `00` status = `In work` filesize = 2400 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Invoice` previewable = abap_true ) + ( id = `23004578` filename = `Instructions.pdf` mediatype = `application/pdf` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Instructions.pdf` + revision = `01` status = `In work` filesize = 30000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Specification` previewable = abap_true trustedsource = abap_true ) ). + t_itemsinstance2 = VALUE #( + ( id = `23004579` filename = `Document.txt` mediatype = `text/plain` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Document.txt` + revision = `42` status = `In work` filesize = 420 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Document` previewable = abap_true ) + ( id = `23004581` filename = `Test Image.png` mediatype = `image/png` + imageurl = `https://sdk.openui5.org/test-resources/sap/m/images/invoice_manager.png` url = `https://sdk.openui5.org/test-resources/sap/m/images/invoice_manager.png` + revision = `06` status = `In work` filesize = 420 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Attachment` previewable = abap_true ) + ( id = `23004582` filename = `Test Attachment.gif` mediatype = `image/gif` + imageurl = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Animation.gif` url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Animation.gif` + revision = `11` status = `In work` filesize = 420 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Attachment` previewable = abap_true ) ). + t_itemsinstance3 = VALUE #( + ( id = `23004583` filename = `Test Video.mp4` mediatype = `video/mp4` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Video.mp4` + revision = `99` status = `In work` filesize = 420000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Attachment` previewable = abap_true ) + ( id = `23004590` filename = `Sample Zip File.zip` mediatype = `application/zip` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/sample-zip-file.zip` + revision = `00` status = `In work` filesize = 42000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/22, 10:20:00 PM` + documenttype = `Attachment` previewable = abap_true ) + ( id = `23004584` filename = `Transmission.vds` mediatype = `model/vnd.sap.vds` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/transmission.vds` + revision = `42` status = `In work` filesize = 123 lastmodifiedby = `Jane Burns` lastmodified = `10/03/22, 10:20:00 PM` + documenttype = `Attachment` previewable = abap_true ) ). + LOOP AT t_items REFERENCE INTO DATA(row). + row_derive( CHANGING row = row->* ). + ENDLOOP. + LOOP AT t_itemsinstance2 REFERENCE INTO row. + row_derive( CHANGING row = row->* ). + ENDLOOP. + LOOP AT t_itemsinstance3 REFERENCE INTO row. + row_derive( CHANGING row = row->* ). + ENDLOOP. ENDMETHOD. diff --git a/src/02/01/z2ui5_cl_smpc_app_656.clas.abap b/src/02/01/z2ui5_cl_smpc_app_656.clas.abap index 22e03a470..2fda0a045 100644 --- a/src/02/01/z2ui5_cl_smpc_app_656.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_656.clas.abap @@ -3,10 +3,109 @@ CLASS z2ui5_cl_smpc_app_656 DEFINITION PUBLIC. PUBLIC SECTION. INTERFACES z2ui5_if_app. + TYPES: + BEGIN OF ty_s_item, + id TYPE string, + filename TYPE string, + mediatype TYPE string, + imageurl TYPE string, + url TYPE string, + revision TYPE string, + status TYPE string, + filesize TYPE i, + lastmodifiedby TYPE string, + lastmodified TYPE string, + documenttype TYPE string, + previewable TYPE abap_bool, + trustedsource TYPE abap_bool, + uploadstate TYPE string, + icon TYPE string, + filesize_units TYPE string, + END OF ty_s_item. + TYPES: + BEGIN OF ty_s_selected, + filename TYPE string, + filecategoryselected TYPE string, + mediatype TYPE string, + filesize TYPE i, + END OF ty_s_selected. + TYPES: + BEGIN OF ty_s_type, + categoryid TYPE string, + categorytext TYPE string, + END OF ty_s_type. + DATA t_items TYPE STANDARD TABLE OF ty_s_item WITH EMPTY KEY. + " onSelectionChange: Download for one or more rows, the rest for exactly one + DATA download_enabled TYPE abap_bool. + DATA single_enabled TYPE abap_bool. + " the AddViaUrl fragment, in its Add URL and Edit URL shapes + DATA dialog_title TYPE string. + DATA apply_text TYPE string. + DATA url_required TYPE abap_bool. + DATA url_input TYPE string. + DATA url_state TYPE string. + DATA url_state_text TYPE string. + DATA name_input TYPE string. + DATA name_state TYPE string. + DATA name_state_text TYPE string. + " the FileUpload fragment: the files waiting for their document type + DATA t_selecteditems TYPE STANDARD TABLE OF ty_s_selected WITH EMPTY KEY. + DATA t_types TYPE STANDARD TABLE OF ty_s_type WITH EMPTY KEY. + DATA add_enabled TYPE abap_bool. + PROTECTED SECTION. DATA client TYPE REF TO z2ui5_if_client. + " the binding paths of the selected rows and of the row a removal asks about + DATA t_selected TYPE string_table. + DATA remove_path TYPE string. + DATA is_edit TYPE abap_bool. + DATA upload_no TYPE i. METHODS view_display. + METHODS popup_url_display. + METHODS popup_upload_display. + METHODS on_event. + METHODS url_apply. + METHODS remove_ask + IMPORTING + path TYPE string. + METHODS selection_reset. + METHODS add_enabled_set. + METHODS name_valid + RETURNING + VALUE(result) TYPE abap_bool. + METHODS url_valid + RETURNING + VALUE(result) TYPE abap_bool. + METHODS row_add + IMPORTING + filename TYPE string + mediatype TYPE string + url TYPE string + filesize TYPE i + documenttype TYPE string. + METHODS selected_index + RETURNING + VALUE(result) TYPE i. + METHODS row_index + IMPORTING + path TYPE string + RETURNING + VALUE(result) TYPE i. + METHODS row_derive + CHANGING + row TYPE ty_s_item. + METHODS icon_for + IMPORTING + mediatype TYPE string + filename TYPE string + RETURNING + VALUE(result) TYPE string. + METHODS size_with_units + IMPORTING + size TYPE i + RETURNING + VALUE(result) TYPE string. METHODS model_init. PRIVATE SECTION. @@ -23,6 +122,8 @@ CLASS z2ui5_cl_smpc_app_656 IMPLEMENTATION. view_display( ). ELSEIF client->check_on_navigated( ). view_display( ). + ELSEIF client->check_on_event( ). + on_event( ). ENDIF. ENDMETHOD. @@ -32,27 +133,889 @@ CLASS z2ui5_cl_smpc_app_656 IMPLEMENTATION. DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). - " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.ResponsiveTableFileDialogs/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) view->ele( n = `View` ns = `mvc` - )->a( n = `xmlns` v = `sap.m` - )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` - )->a( n = `height` v = `100%` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `xmlns:f` v = `sap.f` + )->a( n = `xmlns:core` v = `sap.ui.core` + )->a( n = `xmlns:upload` v = `sap.m.upload` + )->a( n = `xmlns:plugins` v = `sap.m.plugins` + )->a( n = `height` v = `100%` + )->a( n = `displayBlock` v = `true` + + )->ele( n = `DynamicPage` ns = `f` + )->a( n = `id` v = `page` + + )->ele( n = `content` ns = `f` + )->ele( `Table` + )->a( n = `id` v = `table-uploadSet` + )->a( n = `sticky` v = `ColumnHeaders,HeaderToolbar` + )->a( n = `width` v = `auto` + )->a( n = `mode` v = `MultiSelect` + )->a( n = `fixedLayout` v = `false` + )->a( n = `inset` v = `true` + )->a( n = `autoPopinMode` v = `true` + )->a( n = `hiddenInPopin` v = `None` + " IMAGEURL and UPLOADSTATE stay absent where the mock has + " none, so the view's undefined checks read as in the sample + )->a( n = `items` v = |\{ path: '{ client->_bind( val = t_items + path = abap_true + omit_initial_paths = VALUE #( ( `IMAGEURL` ) + ( `UPLOADSTATE` ) ) ) }', templateShareable: false \}| + )->a( n = `selectionChange` v = client->_event( val = `SELECTION` + arg = `$event.oSource.getSelectedContexts().join()` ) + + )->ele( `headerToolbar` + )->ele( `OverflowToolbar` + )->tag( `Title` + )->a( n = `text` v = |Documents (\{= ${ client->_bind( t_items ) }.length\})| + )->a( n = `level` v = `H2` + )->tag( `ToolbarSpacer` + + )->ele( `SearchField` + )->a( n = `width` v = `20%` + )->a( n = `liveChange` v = client->follow_up_action( val = client->cs_event-binding_call + t_arg = VALUE #( ( `table-uploadSet` ) + ( `items` ) + ( `filter` ) + ( `FILENAME` ) + ( `Contains` ) + ( `${$source>/value}` ) ) ) + + )->ele( `layoutData` + )->tag( `OverflowToolbarLayoutData` + )->a( n = `priority` v = `NeverOverflow` + + )->end( + )->end( + )->tag( `ToolbarSeparator` + )->tag( n = `ActionsPlaceholder` ns = `upload` + )->a( n = `id` v = `uploadButton` + )->a( n = `placeholderFor` v = `UploadButtonPlaceholder` + )->tag( `Button` + )->a( n = `id` v = `downloadSelectedButton` + )->a( n = `text` v = `Download` + )->a( n = `enabled` v = client->_bind( download_enabled ) + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin` ) + ( `download` ) + ( `$controller.getView().byId('table-uploadSet').getSelectedContexts()[0]` ) + ( `true` ) ) ) + + )->ele( `MenuButton` + )->a( n = `text` v = `Add` + + )->ele( `menu` + )->ele( `Menu` + )->tag( `MenuItem` + )->a( n = `text` v = `URL` + )->a( n = `press` v = client->_event( `ADD_URL` ) + + )->end( + )->end( + )->ele( `layoutData` + )->tag( `OverflowToolbarLayoutData` + )->a( n = `priority` v = `AlwaysOverflow` + + )->end( + )->end( + )->ele( `Button` + )->a( n = `id` v = `removeDocumentButton` + )->a( n = `text` v = `Remove` + )->a( n = `press` v = client->_event( `REMOVE_SELECTED` ) + )->a( n = `enabled` v = client->_bind( single_enabled ) + + )->ele( `layoutData` + )->tag( `OverflowToolbarLayoutData` + )->a( n = `priority` v = `AlwaysOverflow` + + )->end( + )->end( + )->ele( `Button` + )->a( n = `id` v = `renameButton` + )->a( n = `enabled` v = client->_bind( single_enabled ) + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin` ) + ( `renameItem` ) + ( `$controller.getView().byId('table-uploadSet').getSelectedContexts()[0]` ) ) ) + )->a( n = `text` v = `Rename` + + )->ele( `layoutData` + )->tag( `OverflowToolbarLayoutData` + )->a( n = `priority` v = `AlwaysOverflow` + + )->end( + )->end( + )->ele( `Button` + )->a( n = `id` v = `editUrlButton` + )->a( n = `text` v = `Edit URL` + )->a( n = `enabled` v = client->_bind( single_enabled ) + )->a( n = `press` v = client->_event( `EDIT_URL` ) + + )->ele( `layoutData` + )->tag( `OverflowToolbarLayoutData` + )->a( n = `priority` v = `AlwaysOverflow` + + )->end( + )->end( + )->end( + )->end( + )->ele( `dependents` + )->ele( n = `UploadSetwithTable` ns = `plugins` + " the id is added - the port calls the plugin by id where the + " controller kept the instance onActivated handed it + )->a( n = `id` v = `uploadSetPlugin` + )->a( n = `uploadUrl` v = `/uploadFiles` + )->a( n = `multiple` v = `true` + " the mock server's part: the upload is vetoed and the backend + " adds the row the fake 201 response would have created + )->a( n = `beforeUploadStarts` v = client->_event( val = `UPLOAD` + t_arg = VALUE #( ( `${$parameters>/item}.getFileName()` ) + ( `${$parameters>/item}.getMediaType()` ) + ( `${$parameters>/item}.getFileObject().size` ) ) + s_ctrl = VALUE #( check_prevent_default = abap_true + check_queue_last = abap_true ) ) + )->a( n = `itemRenamed` v = client->_event( val = `RENAMED` + t_arg = VALUE #( ( `${$parameters>/item}.getBindingContext().getPath()` ) + ( `${$parameters>/item}.getFileName()` ) ) ) + )->a( n = `cloudFilePickerEnabled` v = `true` + " itemValidationHandler is a JS callback - see the sidecar + )->a( n = `actions` v = `uploadButton` + + )->ele( n = `rowConfiguration` ns = `plugins` + " the paths name the model's upper-case ABAP fields + )->tag( n = `UploadItemConfiguration` ns = `upload` + )->a( n = `fileNamePath` v = `FILENAME` + )->a( n = `mediaTypePath` v = `MEDIATYPE` + )->a( n = `urlPath` v = `URL` + )->a( n = `previewablePath` v = `PREVIEWABLE` + )->a( n = `fileSizePath` v = `FILESIZE` + )->a( n = `isTrustedSourcePath` v = `TRUSTEDSOURCE` + + )->end( + )->end( + )->end( + )->ele( `columns` + )->ele( `Column` + )->a( n = `id` v = `fileName` + )->a( n = `importance` v = `High` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `File Name` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `id` - )->ele( `Page` - )->a( n = `title` v = `UploadSetwithTablePlugin.ResponsiveTableFileDialogs` + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `ID` - )->tag( `Text` - )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFileDialogs` ). + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `revision` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `Revision` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `status` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `Status` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `fileSize` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `File Size` + + )->end( + )->end( + )->ele( `Column` + )->a( n = `id` v = `lastModified` + + )->ele( `header` + )->tag( `Label` + )->a( n = `text` v = `Last Modified` + + )->end( + )->end( + )->tag( `Column` + )->a( n = `id` v = `actionButton` + )->a( n = `importance` v = `High` + + )->end( + )->ele( `items` + )->ele( `ColumnListItem` + )->a( n = `highlight` v = `{= ${UPLOADSTATE} === 'Complete' ? 'Indication05' : null }` + + )->ele( `cells` + )->ele( `HBox` + )->tag( `Image` + )->a( n = `src` v = `{IMAGEURL}` + )->a( n = `class` v = `sapMUSTItemImage sapMUSTItemIcon` + )->a( n = `visible` v = `{= ${IMAGEURL} !== undefined}` + " getIconSrc runs in ABAP: the row carries the finished icon + )->tag( n = `Icon` ns = `core` + )->a( n = `src` v = `{ICON}` + )->a( n = `visible` v = `{= ${IMAGEURL} === undefined || ${IMAGEURL} === '' }` + )->a( n = `class` v = `sapMUSTItemImage sapMUSTItemIcon` + + )->ele( `VBox` + )->a( n = `class` v = `sapUiTinyMargin sapUiSmallMarginBegin` + + )->tag( `Link` + )->a( n = `text` v = `{FILENAME}` + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin` ) + ( `openFilePreview` ) + ( `$event.oSource.getBindingContext()` ) ) ) + )->a( n = `class` v = `sapUiTinyMarginBottom` + )->tag( `Text` + )->a( n = `text` v = `{DOCUMENTTYPE}` + + )->end( + )->end( + )->tag( `Text` + )->a( n = `text` v = `{ID}` + )->tag( `Link` + )->a( n = `text` v = `{REVISION}` + )->tag( `Text` + )->a( n = `text` v = `{STATUS}` + " getFileSizeWithUnits runs in ABAP as well + )->tag( `Text` + )->a( n = `text` v = `{FILESIZE_UNITS}` + + )->ele( `VBox` + )->tag( `Text` + )->a( n = `text` v = `{LASTMODIFIEDBY}` + )->tag( `Text` + )->a( n = `class` v = `sapUiTinyMarginTop` + )->a( n = `text` v = `{LASTMODIFIED}` + + )->end( + )->tag( `Button` + )->a( n = `class` v = `sapUiTinyMarginBegin` + )->a( n = `type` v = `Transparent` + )->a( n = `icon` v = `sap-icon://decline` + )->a( n = `press` v = client->_event( val = `REMOVE_ROW` + arg = `$event.oSource.getBindingContext().getPath()` ) ). client->view_display( view->stringify( ) ). ENDMETHOD. + METHOD popup_url_display. + + DATA(popup) = z2ui5_cl_ui5_view_builder=>factory( ). + + popup->ele( n = `FragmentDefinition` ns = `core` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:core` v = `sap.ui.core` + )->a( n = `xmlns:form` v = `sap.ui.layout.form` + )->a( n = `templateShareable` v = `false` + )->a( n = `class` v = `sapUiTinyMarginTop` + + )->ele( `Dialog` + )->a( n = `id` v = `addViaUrlDialog` + )->a( n = `title` v = client->_bind( dialog_title ) + )->a( n = `contentWidth` v = `28rem` + )->a( n = `contentHeight` v = `15rem` + )->a( n = `class` v = `sapUiSmallMargin` + + )->ele( `content` + )->ele( n = `SimpleForm` ns = `form` + )->a( n = `editable` v = `true` + )->a( n = `id` v = `addViaUrlSimpleform` + + )->tag( `Label` + )->a( n = `id` v = `urlInputLabel` + )->a( n = `text` v = `URL` + )->a( n = `required` v = client->_bind( url_required ) + )->tag( `Input` + )->a( n = `id` v = `urlInput` + )->a( n = `value` v = client->_bind( url_input ) + )->a( n = `valueState` v = client->_bind( url_state ) + )->a( n = `valueStateText` v = client->_bind( url_state_text ) + )->tag( `Label` + )->a( n = `id` v = `nameInputLabel` + )->a( n = `text` v = `Name` + )->a( n = `required` v = `true` + )->tag( `Input` + )->a( n = `id` v = `nameInput` + )->a( n = `value` v = client->_bind( name_input ) + )->a( n = `valueState` v = client->_bind( name_state ) + )->a( n = `valueStateText` v = client->_bind( name_state_text ) + + )->end( + )->end( + )->ele( `beginButton` + )->tag( `Button` + )->a( n = `id` v = `addDocumentBtn` + )->a( n = `text` v = client->_bind( apply_text ) + )->a( n = `type` v = `Emphasized` + )->a( n = `press` v = client->_event( `URL_APPLY` ) + + )->end( + )->ele( `endButton` + )->tag( `Button` + )->a( n = `text` v = `Cancel` + )->a( n = `press` v = client->follow_up_action( client->cs_event-popup_close ) ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD popup_upload_display. + + DATA(popup) = z2ui5_cl_ui5_view_builder=>factory( ). + + popup->ele( n = `FragmentDefinition` ns = `core` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:core` v = `sap.ui.core` + )->a( n = `templateShareable` v = `false` + )->a( n = `class` v = `sapUiTinyMarginTop` + + )->ele( `Dialog` + )->a( n = `title` v = `Add Document by Upload` + )->a( n = `contentWidth` v = `34rem` + )->a( n = `contentHeight` v = `18rem` + )->a( n = `class` v = `sapUiSmallMargin` + + )->ele( `content` + )->ele( `Toolbar` + )->a( n = `class` v = `sapUiTinyMargin` + )->a( n = `style` v = `Clear` + + )->tag( `Title` + )->a( n = `text` v = `Documents` + )->tag( `ToolbarSpacer` + " uploadFilesHandler - the plugin's fileSelectionHandler opens the file dialog + )->tag( `Button` + )->a( n = `text` v = `Browse` + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin` ) ( `fileSelectionHandler` ) ) ) + + )->end( + )->ele( `Table` + )->a( n = `backgroundDesign` v = `Solid` + )->a( n = `width` v = `auto` + )->a( n = `fixedLayout` v = `false` + )->a( n = `class` v = `sapUiTinyMargin sapUiTableBorderVisible` + )->a( n = `items` v = |\{ path: '{ client->_bind( val = t_selecteditems path = abap_true ) }', templateShareable: false \}| + + )->ele( `columns` + )->ele( `Column` + )->tag( `Text` + )->a( n = `text` v = `Name` + + )->end( + )->ele( `Column` + )->tag( `Label` + )->a( n = `text` v = `Type` + )->a( n = `required` v = `true` + + )->end( + )->tag( `Column` + + )->end( + )->ele( `items` + )->ele( `ColumnListItem` + )->ele( `cells` + )->tag( `Text` + )->a( n = `text` v = `{FILENAME}` + + )->ele( `ComboBox` + )->a( n = `items` v = |\{ path: '{ client->_bind( val = t_types path = abap_true ) }', templateShareable: false \}| + )->a( n = `selectedKey` v = `{FILECATEGORYSELECTED}` + )->a( n = `selectionChange` v = client->_event( `TYPE_CHANGE` ) + )->a( n = `valueState` v = `{= ${FILECATEGORYSELECTED} ? 'None' : 'Error'}` + )->a( n = `valueStateText` v = `Select a valid document type` + + )->tag( n = `ListItem` ns = `core` + )->a( n = `key` v = `{CATEGORYID}` + )->a( n = `text` v = `{CATEGORYTEXT}` + + )->end( + " handleRemove reads the item and its reject callback from two + " core:CustomData - the row's path is all the backend needs + )->tag( `Button` + )->a( n = `type` v = `Transparent` + )->a( n = `icon` v = `sap-icon://decline` + )->a( n = `press` v = client->_event( val = `REMOVE_PENDING` + arg = `$event.oSource.getBindingContext().getPath()` ) + + )->end( + )->end( + )->end( + )->end( + )->end( + )->ele( `beginButton` + )->tag( `Button` + )->a( n = `text` v = `Add` + )->a( n = `type` v = `Emphasized` + )->a( n = `enabled` v = client->_bind( add_enabled ) + )->a( n = `press` v = client->_event( `UPLOAD_CONFIRM` ) + + )->end( + )->ele( `endButton` + )->tag( `Button` + )->a( n = `text` v = `Cancel` + )->a( n = `press` v = client->_event( `UPLOAD_CANCEL` ) ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get_event( ). + + WHEN `SELECTION`. + " onSelectionChange - the selected rows arrive as their binding paths + IF client->get_event_arg( ) IS INITIAL. + t_selected = VALUE #( ). + ELSE. + SPLIT client->get_event_arg( ) AT `,` INTO TABLE t_selected. + ENDIF. + download_enabled = xsdbool( t_selected IS NOT INITIAL ). + single_enabled = xsdbool( lines( t_selected ) = 1 ). + + WHEN `ADD_URL`. + " openAddOrEditDialog in its Add shape + is_edit = abap_false. + dialog_title = `Add URL`. + apply_text = `Add`. + url_required = abap_true. + url_input = ``. + name_input = ``. + url_state = `None`. + url_state_text = ``. + name_state = `None`. + name_state_text = ``. + popup_url_display( ). + + WHEN `EDIT_URL`. + " onEditUrl - the same fragment as Edit URL, filled from the selected row + DATA(current) = selected_index( ). + IF current = 0. + RETURN. + ENDIF. + DATA(row) = t_items[ current ]. + is_edit = abap_true. + dialog_title = `Edit URL`. + apply_text = `Apply`. + url_required = abap_false. + url_input = row-url. + name_input = row-filename. + url_state = `None`. + url_state_text = ``. + name_state = `None`. + name_state_text = ``. + popup_url_display( ). + + WHEN `URL_APPLY`. + url_apply( ). + + WHEN `EDIT_CONFIRM`. + IF client->get_event_arg( ) = `Save`. + " the Save button validates (value states) and applies regardless + name_valid( ). + url_valid( ). + DATA(target) = selected_index( ). + IF target > 0. + t_items[ target ]-filename = name_input. + t_items[ target ]-url = url_input. + ENDIF. + client->popup_destroy( ). + ENDIF. + + WHEN `REMOVE_SELECTED`. + IF t_selected IS NOT INITIAL. + remove_ask( t_selected[ 1 ] ). + ENDIF. + + WHEN `REMOVE_ROW`. + remove_ask( client->get_event_arg( ) ). + + WHEN `REMOVE_CLOSE`. + IF client->get_event_arg( ) = `Remove`. + DATA(index) = row_index( remove_path ). + IF index BETWEEN 1 AND lines( t_items ). + DELETE t_items INDEX index. + ENDIF. + selection_reset( ). + ENDIF. + + WHEN `UPLOAD`. + " itemValidationCallback - the picked file waits in the FileUpload dialog + " for its document type, preset to the first category + INSERT VALUE #( filename = client->get_event_arg( ) + filecategoryselected = t_types[ 1 ]-categoryid + mediatype = client->get_event_arg( 2 ) + filesize = CONV #( client->get_event_arg( 3 ) ) ) INTO TABLE t_selecteditems. + add_enabled_set( ). + popup_upload_display( ). + + WHEN `RENAMED`. + " onDocumentRenamedSuccess writes the new name into the row + DATA(renamed) = row_index( client->get_event_arg( ) ). + IF renamed BETWEEN 1 AND lines( t_items ). + t_items[ renamed ]-filename = client->get_event_arg( 2 ). + ENDIF. + client->message_toast_display( text = `Document Renamed.` duration = `2000` ). + + WHEN `TYPE_CHANGE`. + " the Add button's isAddButtonEnabled formatter, recomputed per choice + add_enabled_set( ). + + WHEN `REMOVE_PENDING`. + " handleRemove - the file leaves the dialog and is not uploaded + DATA(pending) = row_index( client->get_event_arg( ) ). + IF pending BETWEEN 1 AND lines( t_selecteditems ). + DELETE t_selecteditems INDEX pending. + ENDIF. + add_enabled_set( ). + + WHEN `UPLOAD_CONFIRM`. + " handleConfirmation - each file goes up with its document type, and the + " mock server files it under that type + LOOP AT t_selecteditems INTO DATA(selected). + row_add( filename = selected-filename + mediatype = selected-mediatype + url = `` + filesize = selected-filesize + documenttype = selected-filecategoryselected ). + ENDLOOP. + t_selecteditems = VALUE #( ). + client->popup_destroy( ). + client->message_toast_display( `Document Added` ). + + WHEN `UPLOAD_CANCEL`. + " closeFileUplaodFragment + t_selecteditems = VALUE #( ). + client->popup_destroy( ). + + ENDCASE. + + ENDMETHOD. + + + METHOD url_apply. + + " handleAddViaUrl + IF is_edit = abap_true. + IF name_valid( ) = abap_true. + " showEditConfirmation - a Message dialog in the Warning state + client->message_box_display( text = `You have made changes to this object. What would you like to do?` + type = `warning` + title = `Warning` + actions = VALUE #( ( `Save` ) ( `DiscardChanges` ) ) + emphasizedaction = `Save` + onclose = `EDIT_CONFIRM` ). + ELSE. + client->message_toast_display( `No Changes found` ). + ENDIF. + RETURN. + ENDIF. + DATA(has_error) = xsdbool( name_valid( ) = abap_false ). + IF url_valid( ) = abap_false. + has_error = abap_true. + ENDIF. + IF has_error = abap_false. + " uploadItemViaUrl - the mock server answers with the typed URL as the + " document URL and an empty file + row_add( filename = name_input + mediatype = `` + url = url_input + filesize = 0 + documenttype = `Invoice` ). + client->popup_destroy( ). + client->message_toast_display( `Document Added` ). + ENDIF. + + ENDMETHOD. + + + METHOD remove_ask. + + " removeItem - MessageBox.warning; the icon is the warning box's own + DATA(index) = row_index( path ). + IF index NOT BETWEEN 1 AND lines( t_items ). + RETURN. + ENDIF. + remove_path = path. + client->message_box_display( text = |Are you sure you want to remove the document { t_items[ index ]-filename } ?| + type = `warning` + actions = VALUE #( ( `Remove` ) ( `CANCEL` ) ) + emphasizedaction = `Remove` + styleclass = `sapMUSTRemovePopoverContainer` + initialfocus = `CANCEL` + onclose = `REMOVE_CLOSE` ). + + ENDMETHOD. + + + METHOD selection_reset. + + " oTable.removeSelections( ) - and the buttons follow the empty selection + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `table-uploadSet` ) ( `removeSelections` ) ) ). + t_selected = VALUE #( ). + download_enabled = abap_false. + single_enabled = abap_false. + + ENDMETHOD. + + + METHOD add_enabled_set. + + " isAddButtonEnabled - at least one file, and every file has a type + add_enabled = xsdbool( t_selecteditems IS NOT INITIAL + AND NOT line_exists( t_selecteditems[ filecategoryselected = `` ] ) ). + + ENDMETHOD. + + + METHOD name_valid. + + " _isValidName + IF name_input IS INITIAL. + name_state = `Error`. + name_state_text = `Text is either empty or contains special characters`. + ELSE. + name_state = `None`. + result = abap_true. + ENDIF. + + ENDMETHOD. + + + METHOD url_valid. + + " _validateAddOrEditUrlDialog's URL half - the sample's regex is unanchored, + " so a scheme followed by one non-blank character is what it requires + FIND REGEX `(ftp|http|https)://\S` IN url_input. + IF sy-subrc <> 0. + url_state = `Error`. + url_state_text = `Enter Valid URL`. + ELSE. + url_state = `None`. + result = abap_true. + ENDIF. + + ENDMETHOD. + + + METHOD row_add. + + " the mock server's Create branch - unshift the new document + upload_no = upload_no + 1. + DATA(row) = VALUE ty_s_item( id = |{ upload_no }| + filename = filename + mediatype = mediatype + url = url + uploadstate = `Complete` + revision = `00` + status = `In work` + filesize = filesize + lastmodifiedby = `Jane Burns` + lastmodified = `10/03/21, 10:03:00 PM` + documenttype = documenttype + trustedsource = abap_true ). + row_derive( CHANGING row = row ). + INSERT row INTO t_items INDEX 1. + + ENDMETHOD. + + + METHOD selected_index. + + " the one selected row the toolbar actions work on - 0 when there is none + IF t_selected IS INITIAL. + RETURN. + ENDIF. + result = row_index( t_selected[ 1 ] ). + IF result > lines( t_items ). + result = 0. + ENDIF. + + ENDMETHOD. + + + METHOD row_index. + + " a row's binding path ends in its 0-based index: /T_ITEMS/3 is the 4th row + DATA(slash) = find( val = path sub = `/` occ = -1 ). + IF slash < 0. + RETURN. + ENDIF. + DATA(digits) = substring( val = path off = slash + 1 ). + IF digits IS INITIAL OR digits CN `0123456789`. + RETURN. + ENDIF. + result = CONV i( digits ) + 1. + + ENDMETHOD. + + + METHOD row_derive. + + row-icon = icon_for( mediatype = row-mediatype filename = row-filename ). + row-filesize_units = size_with_units( row-filesize ). + + ENDMETHOD. + + + METHOD icon_for. + + " UploadSetwithTable.getIconForFileType: IconPool's media type table, or the + " file extension when there is no media type + IF mediatype IS NOT INITIAL. + CASE to_lower( mediatype ). + WHEN `application/msword` OR `application/vnd.google-apps.document` OR `application/rtf` + OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document`. + result = `sap-icon://doc-attachment`. + WHEN `application/pdf`. + result = `sap-icon://pdf-attachment`. + WHEN `application/msexcel` OR `application/vnd.ms-excel` OR `application/vnd.google-apps.spreadsheet` + OR `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` + OR `application/vnd.ms-excel.sheet.macroenabled.12` + OR `application/vnd.openxmlformats-officedocument.spreadsheetml.template` + OR `application/vnd.ms-excel.template.macroenabled.12` + OR `application/vnd.ms-excel.sheet.binary.macroenabled.12` + OR `application/vnd.ms-excel.addin.macroenabled.12`. + result = `sap-icon://excel-attachment`. + WHEN `application/vnd.ms-powerpoint` OR `application/vnd.google-apps.presentation` OR `application/mspowerpoint` + OR `application/vnd.openxmlformats-officedocument.presentationml.presentation` + OR `application/vnd.openxmlformats-officedocument.presentationml.slideshow`. + result = `sap-icon://ppt-attachment`. + WHEN `application/xml` OR `application/xhtml+xml` OR `application/x-httpd-php` OR `application/x-javascript` + OR `text/html`. + result = `sap-icon://attachment-html`. + WHEN `application/gzip` OR `application/x-rar-compressed` OR `application/x-tar` OR `application/zip`. + result = `sap-icon://attachment-zip-file`. + WHEN `audio/mpeg` OR `audio/voxware` OR `audio/x-aiff` OR `audio/x-midi` OR `audio/x-mpeg` OR `audio/x-m4a` + OR `audio/x-pn-realaudio` OR `audio/x-pn-realaudio-plugin` OR `audio/x-qt-stream` OR `audio/x-wav`. + result = `sap-icon://attachment-audio`. + WHEN `image/png` OR `image/tiff` OR `image/bmp` OR `image/jpeg` OR `image/gif`. + result = `sap-icon://attachment-photo`. + WHEN `text/plain` OR `text/comma-separated-values` OR `text/css` OR `text/javascript` OR `text/richtext` + OR `text/rtf` OR `text/tab-separated-values` OR `text/xml`. + result = `sap-icon://attachment-text-file`. + WHEN `video/mpeg` OR `video/mp4` OR `video/quicktime` OR `video/x-msvideo` OR `application/x-shockwave-flash`. + result = `sap-icon://attachment-video`. + WHEN OTHERS. + result = `sap-icon://document`. + ENDCASE. + RETURN. + ENDIF. + + DATA(dot) = find( val = filename sub = `.` occ = -1 ). + IF dot < 0. + result = `sap-icon://document`. + RETURN. + ENDIF. + CASE to_lower( substring( val = filename off = dot + 1 ) ). + WHEN `bmp` OR `jpg` OR `jpeg` OR `png`. + result = `sap-icon://card`. + WHEN `csv` OR `xls` OR `xlsx`. + result = `sap-icon://excel-attachment`. + WHEN `doc` OR `docx` OR `odt`. + result = `sap-icon://doc-attachment`. + WHEN `pdf`. + result = `sap-icon://pdf-attachment`. + WHEN `ppt` OR `pptx`. + result = `sap-icon://ppt-attachment`. + WHEN `txt`. + result = `sap-icon://document-text`. + WHEN OTHERS. + result = `sap-icon://document`. + ENDCASE. + + ENDMETHOD. + + + METHOD size_with_units. + + " UploadSetwithTable.getFileSizeWithUnits - KB below a megabyte, then MB, then GB + CONSTANTS kilobyte TYPE i VALUE 1024. + DATA(bytes) = CONV decfloat34( size ). + IF size < kilobyte * kilobyte. + result = |{ bytes / kilobyte DECIMALS = 2 } KB|. + ELSEIF size < kilobyte * kilobyte * kilobyte. + result = |{ bytes / kilobyte / kilobyte DECIMALS = 2 } MB|. + ELSE. + result = |{ bytes / kilobyte / kilobyte / kilobyte DECIMALS = 2 } GB|. + ENDIF. + + ENDMETHOD. + + METHOD model_init. - " TODO seed the default model (see the sample's controller / JSON mock) - RETURN. + " model/documents.json, every row - the document URLs point at the OpenUI5 host + t_items = VALUE #( + ( id = `23004569` filename = `Invoice summary.doc` mediatype = `application/msword` + imageurl = `https://sdk.openui5.org/test-resources/sap/m/images/invoice_manager.png` url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Business Plan Agenda.doc` + revision = `01` status = `In work` filesize = 200 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Invoice` previewable = abap_true ) + ( id = `23004589` filename = `Business Plan Topics.xls` mediatype = `application/vnd.ms-excel` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Business Plan Topics.xls` + revision = `00` status = `In work` filesize = 2400 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Invoice` previewable = abap_true ) + ( id = `23004578` filename = `Instructions.pdf` mediatype = `application/pdf` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Instructions.pdf` + revision = `01` status = `In work` filesize = 30000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Specification` previewable = abap_true trustedsource = abap_true ) + ( id = `23004579` filename = `Document.txt` mediatype = `text/plain` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Document.txt` + revision = `42` status = `In work` filesize = 420 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Document` previewable = abap_true ) + ( id = `23004581` filename = `Test Image.png` mediatype = `image/png` + imageurl = `https://sdk.openui5.org/test-resources/sap/m/images/invoice_manager.png` url = `https://sdk.openui5.org/test-resources/sap/m/images/invoice_manager.png` + revision = `06` status = `In work` filesize = 420 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Attachment` previewable = abap_true ) + ( id = `23004582` filename = `Test Attachment.gif` mediatype = `image/gif` + imageurl = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Animation.gif` url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Animation.gif` + revision = `11` status = `In work` filesize = 420 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Attachment` previewable = abap_true ) + ( id = `23004583` filename = `Test Video.mp4` mediatype = `video/mp4` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Video.mp4` + revision = `99` status = `In work` filesize = 420000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Attachment` previewable = abap_true ) + ( id = `23004590` filename = `Sample Zip File.zip` mediatype = `application/zip` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/sample-zip-file.zip` + revision = `00` status = `In work` filesize = 42000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/22, 10:20:00 PM` + documenttype = `Attachment` previewable = abap_true ) + ( id = `23004584` filename = `Transmission.vds` mediatype = `model/vnd.sap.vds` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/transmission.vds` + revision = `42` status = `In work` filesize = 123 lastmodifiedby = `Jane Burns` lastmodified = `10/03/22, 10:20:00 PM` + documenttype = `Attachment` previewable = abap_true ) ). + LOOP AT t_items REFERENCE INTO DATA(row). + row_derive( CHANGING row = row->* ). + ENDLOOP. + + " getFileCategories - the ComboBox's document types + t_types = VALUE #( + ( categoryid = `Invoice` categorytext = `Invoice` ) + ( categoryid = `Specification` categorytext = `Specification` ) + ( categoryid = `Attachment` categorytext = `Attachment` ) + ( categoryid = `Legal Document` categorytext = `Legal Document` ) ). ENDMETHOD. diff --git a/src/02/01/z2ui5_cl_smpc_app_657.clas.abap b/src/02/01/z2ui5_cl_smpc_app_657.clas.abap index bd0395df3..6d813841e 100644 --- a/src/02/01/z2ui5_cl_smpc_app_657.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_657.clas.abap @@ -48,6 +48,7 @@ CLASS z2ui5_cl_smpc_app_657 DEFINITION PUBLIC. METHODS view_display. METHODS popup_url_display. METHODS on_event. + METHODS url_apply. METHODS remove_ask IMPORTING path TYPE string. @@ -64,6 +65,9 @@ CLASS z2ui5_cl_smpc_app_657 DEFINITION PUBLIC. mediatype TYPE string url TYPE string filesize TYPE i. + METHODS selected_index + RETURNING + VALUE(result) TYPE i. METHODS row_index IMPORTING path TYPE string @@ -491,7 +495,11 @@ CLASS z2ui5_cl_smpc_app_657 IMPLEMENTATION. WHEN `EDIT_URL`. " onEditUrl - the same fragment as Edit URL, filled from the selected row - DATA(row) = t_items[ row_index( t_selected[ 1 ] ) ]. + DATA(current) = selected_index( ). + IF current = 0. + RETURN. + ENDIF. + DATA(row) = t_items[ current ]. is_edit = abap_true. dialog_title = `Edit URL`. apply_text = `Apply`. @@ -505,49 +513,25 @@ CLASS z2ui5_cl_smpc_app_657 IMPLEMENTATION. popup_url_display( ). WHEN `URL_APPLY`. - " handleAddViaUrl - IF is_edit = abap_true. - IF name_valid( ) = abap_true. - " showEditConfirmation - a Message dialog in the Warning state - client->message_box_display( text = `You have made changes to this object. What would you like to do?` - type = `warning` - title = `Warning` - actions = VALUE #( ( `Save` ) ( `DiscardChanges` ) ) - emphasizedaction = `Save` - onclose = `EDIT_CONFIRM` ). - ELSE. - client->message_toast_display( `No Changes found` ). - ENDIF. - RETURN. - ENDIF. - DATA(has_error) = xsdbool( name_valid( ) = abap_false ). - IF url_valid( ) = abap_false. - has_error = abap_true. - ENDIF. - IF has_error = abap_false. - " uploadItemViaUrl - the mock server answers with the typed URL as the - " document URL and an empty file - row_add( filename = name_input - mediatype = `` - url = url_input - filesize = 0 ). - client->popup_destroy( ). - client->message_toast_display( `Document Added` ). - ENDIF. + url_apply( ). WHEN `EDIT_CONFIRM`. IF client->get_event_arg( ) = `Save`. " the Save button validates (value states) and applies regardless name_valid( ). url_valid( ). - DATA(edited) = REF #( t_items[ row_index( t_selected[ 1 ] ) ] ). - edited->filename = name_input. - edited->url = url_input. + DATA(target) = selected_index( ). + IF target > 0. + t_items[ target ]-filename = name_input. + t_items[ target ]-url = url_input. + ENDIF. client->popup_destroy( ). ENDIF. WHEN `REMOVE_SELECTED`. - remove_ask( t_selected[ 1 ] ). + IF t_selected IS NOT INITIAL. + remove_ask( t_selected[ 1 ] ). + ENDIF. WHEN `REMOVE_ROW`. remove_ask( client->get_event_arg( ) ). @@ -582,6 +566,41 @@ CLASS z2ui5_cl_smpc_app_657 IMPLEMENTATION. ENDMETHOD. + METHOD url_apply. + + " handleAddViaUrl + IF is_edit = abap_true. + IF name_valid( ) = abap_true. + " showEditConfirmation - a Message dialog in the Warning state + client->message_box_display( text = `You have made changes to this object. What would you like to do?` + type = `warning` + title = `Warning` + actions = VALUE #( ( `Save` ) ( `DiscardChanges` ) ) + emphasizedaction = `Save` + onclose = `EDIT_CONFIRM` ). + ELSE. + client->message_toast_display( `No Changes found` ). + ENDIF. + RETURN. + ENDIF. + DATA(has_error) = xsdbool( name_valid( ) = abap_false ). + IF url_valid( ) = abap_false. + has_error = abap_true. + ENDIF. + IF has_error = abap_false. + " uploadItemViaUrl - the mock server answers with the typed URL as the + " document URL and an empty file + row_add( filename = name_input + mediatype = `` + url = url_input + filesize = 0 ). + client->popup_destroy( ). + client->message_toast_display( `Document Added` ). + ENDIF. + + ENDMETHOD. + + METHOD remove_ask. " removeItem - MessageBox.warning; the icon is the warning box's own @@ -665,6 +684,20 @@ CLASS z2ui5_cl_smpc_app_657 IMPLEMENTATION. ENDMETHOD. + METHOD selected_index. + + " the one selected row the toolbar actions work on - 0 when there is none + IF t_selected IS INITIAL. + RETURN. + ENDIF. + result = row_index( t_selected[ 1 ] ). + IF result > lines( t_items ). + result = 0. + ENDIF. + + ENDMETHOD. + + METHOD row_index. " a row's binding path ends in its 0-based index: /T_ITEMS/3 is the 4th row diff --git a/src/02/01/z2ui5_cl_smpc_app_658.clas.abap b/src/02/01/z2ui5_cl_smpc_app_658.clas.abap index 811dac064..a721511eb 100644 --- a/src/02/01/z2ui5_cl_smpc_app_658.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_658.clas.abap @@ -48,6 +48,7 @@ CLASS z2ui5_cl_smpc_app_658 DEFINITION PUBLIC. METHODS view_display. METHODS popup_url_display. METHODS on_event. + METHODS url_apply. METHODS remove_ask IMPORTING path TYPE string. @@ -63,6 +64,9 @@ CLASS z2ui5_cl_smpc_app_658 DEFINITION PUBLIC. filename TYPE string url TYPE string filesize TYPE i. + METHODS selected_index + RETURNING + VALUE(result) TYPE i. METHODS row_index IMPORTING path TYPE string @@ -485,7 +489,11 @@ CLASS z2ui5_cl_smpc_app_658 IMPLEMENTATION. WHEN `EDIT_URL`. " onEditUrl - the same fragment as Edit URL, filled from the selected row - DATA(row) = t_items[ row_index( t_selected[ 1 ] ) ]. + DATA(current) = selected_index( ). + IF current = 0. + RETURN. + ENDIF. + DATA(row) = t_items[ current ]. is_edit = abap_true. dialog_title = `Edit URL`. apply_text = `Apply`. @@ -499,46 +507,25 @@ CLASS z2ui5_cl_smpc_app_658 IMPLEMENTATION. popup_url_display( ). WHEN `URL_APPLY`. - " handleAddViaUrl - IF is_edit = abap_true. - IF name_valid( ) = abap_true. - " showEditConfirmation - a Message dialog in the Warning state - client->message_box_display( text = `You have made changes to this object. What would you like to do?` - type = `warning` - title = `Warning` - actions = VALUE #( ( `Save` ) ( `DiscardChanges` ) ) - emphasizedaction = `Save` - onclose = `EDIT_CONFIRM` ). - ELSE. - client->message_toast_display( `No Changes found` ). - ENDIF. - RETURN. - ENDIF. - DATA(has_error) = xsdbool( name_valid( ) = abap_false ). - IF url_valid( ) = abap_false. - has_error = abap_true. - ENDIF. - IF has_error = abap_false. - " uploadItemViaUrl - with the mock server switched off the upload of the - " empty file completes without a 201, so onUploadCompleted adds the row - " and shows no toast - row_add( filename = name_input url = url_input filesize = 0 ). - client->popup_destroy( ). - ENDIF. + url_apply( ). WHEN `EDIT_CONFIRM`. IF client->get_event_arg( ) = `Save`. " the Save button validates (value states) and applies regardless name_valid( ). url_valid( ). - DATA(edited) = REF #( t_items[ row_index( t_selected[ 1 ] ) ] ). - edited->filename = name_input. - edited->url = url_input. + DATA(target) = selected_index( ). + IF target > 0. + t_items[ target ]-filename = name_input. + t_items[ target ]-url = url_input. + ENDIF. client->popup_destroy( ). ENDIF. WHEN `REMOVE_SELECTED`. - remove_ask( t_selected[ 1 ] ). + IF t_selected IS NOT INITIAL. + remove_ask( t_selected[ 1 ] ). + ENDIF. WHEN `REMOVE_ROW`. remove_ask( client->get_event_arg( ) ). @@ -574,6 +561,38 @@ CLASS z2ui5_cl_smpc_app_658 IMPLEMENTATION. ENDMETHOD. + METHOD url_apply. + + " handleAddViaUrl + IF is_edit = abap_true. + IF name_valid( ) = abap_true. + " showEditConfirmation - a Message dialog in the Warning state + client->message_box_display( text = `You have made changes to this object. What would you like to do?` + type = `warning` + title = `Warning` + actions = VALUE #( ( `Save` ) ( `DiscardChanges` ) ) + emphasizedaction = `Save` + onclose = `EDIT_CONFIRM` ). + ELSE. + client->message_toast_display( `No Changes found` ). + ENDIF. + RETURN. + ENDIF. + DATA(has_error) = xsdbool( name_valid( ) = abap_false ). + IF url_valid( ) = abap_false. + has_error = abap_true. + ENDIF. + IF has_error = abap_false. + " uploadItemViaUrl - with the mock server switched off the upload of the + " empty file completes without a 201, so onUploadCompleted adds the row + " and shows no toast + row_add( filename = name_input url = url_input filesize = 0 ). + client->popup_destroy( ). + ENDIF. + + ENDMETHOD. + + METHOD remove_ask. " removeItem - MessageBox.warning; the icon is the warning box's own @@ -656,6 +675,20 @@ CLASS z2ui5_cl_smpc_app_658 IMPLEMENTATION. ENDMETHOD. + METHOD selected_index. + + " the one selected row the toolbar actions work on - 0 when there is none + IF t_selected IS INITIAL. + RETURN. + ENDIF. + result = row_index( t_selected[ 1 ] ). + IF result > lines( t_items ). + result = 0. + ENDIF. + + ENDMETHOD. + + METHOD row_index. " a row's binding path ends in its 0-based index: /T_ITEMS/3 is the 4th row diff --git a/src/02/01/z2ui5_cl_smpc_app_659.clas.abap b/src/02/01/z2ui5_cl_smpc_app_659.clas.abap index 6f6a32967..d00ea1323 100644 --- a/src/02/01/z2ui5_cl_smpc_app_659.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_659.clas.abap @@ -48,6 +48,7 @@ CLASS z2ui5_cl_smpc_app_659 DEFINITION PUBLIC. METHODS view_display. METHODS popup_url_display. METHODS on_event. + METHODS url_apply. METHODS remove_ask IMPORTING path TYPE string. @@ -64,6 +65,9 @@ CLASS z2ui5_cl_smpc_app_659 DEFINITION PUBLIC. mediatype TYPE string url TYPE string filesize TYPE i. + METHODS selected_index + RETURNING + VALUE(result) TYPE i. METHODS row_index IMPORTING path TYPE string @@ -486,7 +490,11 @@ CLASS z2ui5_cl_smpc_app_659 IMPLEMENTATION. WHEN `EDIT_URL`. " onEditUrl - the same fragment as Edit URL, filled from the selected row - DATA(row) = t_items[ row_index( t_selected[ 1 ] ) ]. + DATA(current) = selected_index( ). + IF current = 0. + RETURN. + ENDIF. + DATA(row) = t_items[ current ]. is_edit = abap_true. dialog_title = `Edit URL`. apply_text = `Apply`. @@ -500,49 +508,25 @@ CLASS z2ui5_cl_smpc_app_659 IMPLEMENTATION. popup_url_display( ). WHEN `URL_APPLY`. - " handleAddViaUrl - IF is_edit = abap_true. - IF name_valid( ) = abap_true. - " showEditConfirmation - a Message dialog in the Warning state - client->message_box_display( text = `You have made changes to this object. What would you like to do?` - type = `warning` - title = `Warning` - actions = VALUE #( ( `Save` ) ( `DiscardChanges` ) ) - emphasizedaction = `Save` - onclose = `EDIT_CONFIRM` ). - ELSE. - client->message_toast_display( `No Changes found` ). - ENDIF. - RETURN. - ENDIF. - DATA(has_error) = xsdbool( name_valid( ) = abap_false ). - IF url_valid( ) = abap_false. - has_error = abap_true. - ENDIF. - IF has_error = abap_false. - " uploadItemViaUrl - the mock server answers with the typed URL as the - " document URL and an empty file - row_add( filename = name_input - mediatype = `` - url = url_input - filesize = 0 ). - client->popup_destroy( ). - client->message_toast_display( `Document Added` ). - ENDIF. + url_apply( ). WHEN `EDIT_CONFIRM`. IF client->get_event_arg( ) = `Save`. " the Save button validates (value states) and applies regardless name_valid( ). url_valid( ). - DATA(edited) = REF #( t_items[ row_index( t_selected[ 1 ] ) ] ). - edited->filename = name_input. - edited->url = url_input. + DATA(target) = selected_index( ). + IF target > 0. + t_items[ target ]-filename = name_input. + t_items[ target ]-url = url_input. + ENDIF. client->popup_destroy( ). ENDIF. WHEN `REMOVE_SELECTED`. - remove_ask( t_selected[ 1 ] ). + IF t_selected IS NOT INITIAL. + remove_ask( t_selected[ 1 ] ). + ENDIF. WHEN `REMOVE_ROW`. remove_ask( client->get_event_arg( ) ). @@ -580,6 +564,41 @@ CLASS z2ui5_cl_smpc_app_659 IMPLEMENTATION. ENDMETHOD. + METHOD url_apply. + + " handleAddViaUrl + IF is_edit = abap_true. + IF name_valid( ) = abap_true. + " showEditConfirmation - a Message dialog in the Warning state + client->message_box_display( text = `You have made changes to this object. What would you like to do?` + type = `warning` + title = `Warning` + actions = VALUE #( ( `Save` ) ( `DiscardChanges` ) ) + emphasizedaction = `Save` + onclose = `EDIT_CONFIRM` ). + ELSE. + client->message_toast_display( `No Changes found` ). + ENDIF. + RETURN. + ENDIF. + DATA(has_error) = xsdbool( name_valid( ) = abap_false ). + IF url_valid( ) = abap_false. + has_error = abap_true. + ENDIF. + IF has_error = abap_false. + " uploadItemViaUrl - the mock server answers with the typed URL as the + " document URL and an empty file + row_add( filename = name_input + mediatype = `` + url = url_input + filesize = 0 ). + client->popup_destroy( ). + client->message_toast_display( `Document Added` ). + ENDIF. + + ENDMETHOD. + + METHOD remove_ask. " removeItem - MessageBox.warning; the icon is the warning box's own @@ -663,6 +682,20 @@ CLASS z2ui5_cl_smpc_app_659 IMPLEMENTATION. ENDMETHOD. + METHOD selected_index. + + " the one selected row the toolbar actions work on - 0 when there is none + IF t_selected IS INITIAL. + RETURN. + ENDIF. + result = row_index( t_selected[ 1 ] ). + IF result > lines( t_items ). + result = 0. + ENDIF. + + ENDMETHOD. + + METHOD row_index. " a row's binding path ends in its 0-based index: /T_ITEMS/3 is the 4th row diff --git a/src/02/01/z2ui5_cl_smpc_app_660.clas.abap b/src/02/01/z2ui5_cl_smpc_app_660.clas.abap index ba89c9147..9d4389e78 100644 --- a/src/02/01/z2ui5_cl_smpc_app_660.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_660.clas.abap @@ -3,10 +3,150 @@ CLASS z2ui5_cl_smpc_app_660 DEFINITION PUBLIC. PUBLIC SECTION. INTERFACES z2ui5_if_app. + " documents.json is a folder tree three levels deep - one row type per level, + " every level carrying every field, the upper two their ITEMS + TYPES: + BEGIN OF ty_s_item, + id TYPE string, + filename TYPE string, + mediatype TYPE string, + imageurl TYPE string, + url TYPE string, + revision TYPE string, + status TYPE string, + filesize TYPE i, + lastmodifiedby TYPE string, + lastmodified TYPE string, + documenttype TYPE string, + previewable TYPE abap_bool, + trustedsource TYPE abap_bool, + isdirectory TYPE abap_bool, + color TYPE string, + bgcolor TYPE string, + uploadstate TYPE string, + icon TYPE string, + filesize_units TYPE string, + END OF ty_s_item. + TYPES ty_t_item TYPE STANDARD TABLE OF ty_s_item WITH EMPTY KEY. + TYPES: + BEGIN OF ty_s_folder, + id TYPE string, + filename TYPE string, + mediatype TYPE string, + imageurl TYPE string, + url TYPE string, + revision TYPE string, + status TYPE string, + filesize TYPE i, + lastmodifiedby TYPE string, + lastmodified TYPE string, + documenttype TYPE string, + previewable TYPE abap_bool, + trustedsource TYPE abap_bool, + isdirectory TYPE abap_bool, + color TYPE string, + bgcolor TYPE string, + uploadstate TYPE string, + icon TYPE string, + filesize_units TYPE string, + items TYPE ty_t_item, + END OF ty_s_folder. + TYPES ty_t_folder TYPE STANDARD TABLE OF ty_s_folder WITH EMPTY KEY. + TYPES: + BEGIN OF ty_s_root, + id TYPE string, + filename TYPE string, + mediatype TYPE string, + imageurl TYPE string, + url TYPE string, + revision TYPE string, + status TYPE string, + filesize TYPE i, + lastmodifiedby TYPE string, + lastmodified TYPE string, + documenttype TYPE string, + previewable TYPE abap_bool, + trustedsource TYPE abap_bool, + isdirectory TYPE abap_bool, + color TYPE string, + bgcolor TYPE string, + uploadstate TYPE string, + icon TYPE string, + filesize_units TYPE string, + items TYPE ty_t_folder, + END OF ty_s_root. + DATA t_items TYPE STANDARD TABLE OF ty_s_root WITH EMPTY KEY. + " onSelectionChange: Download for one or more rows, the rest for exactly one + DATA download_enabled TYPE abap_bool. + DATA single_enabled TYPE abap_bool. + " the AddViaUrl fragment, in its Add URL and Edit URL shapes + DATA dialog_title TYPE string. + DATA apply_text TYPE string. + DATA url_required TYPE abap_bool. + DATA url_input TYPE string. + DATA url_state TYPE string. + DATA url_state_text TYPE string. + DATA name_input TYPE string. + DATA name_state TYPE string. + DATA name_state_text TYPE string. + PROTECTED SECTION. + TYPES ty_t_index TYPE STANDARD TABLE OF i WITH EMPTY KEY. + DATA client TYPE REF TO z2ui5_if_client. + " the binding paths of the selected rows and of the row a removal asks about + DATA t_selected TYPE string_table. + DATA remove_path TYPE string. + DATA is_edit TYPE abap_bool. + DATA upload_no TYPE i. METHODS view_display. + METHODS popup_url_display. + METHODS on_event. + METHODS url_apply. + METHODS remove_ask + IMPORTING + path TYPE string. + METHODS name_valid + RETURNING + VALUE(result) TYPE abap_bool. + METHODS url_valid + RETURNING + VALUE(result) TYPE abap_bool. + METHODS row_add + IMPORTING + filename TYPE string + mediatype TYPE string + url TYPE string + filesize TYPE i. + METHODS path_indices + IMPORTING + path TYPE string + RETURNING + VALUE(result) TYPE ty_t_index. + METHODS node_get + IMPORTING + path TYPE string + RETURNING + VALUE(result) TYPE ty_s_item. + METHODS node_rename + IMPORTING + path TYPE string + name TYPE string. + METHODS row_derive + CHANGING + row TYPE ty_s_item. + METHODS icon_for + IMPORTING + mediatype TYPE string + filename TYPE string + RETURNING + VALUE(result) TYPE string. + METHODS size_with_units + IMPORTING + size TYPE i + RETURNING + VALUE(result) TYPE string. METHODS model_init. PRIVATE SECTION. @@ -23,6 +163,8 @@ CLASS z2ui5_cl_smpc_app_660 IMPLEMENTATION. view_display( ). ELSEIF client->check_on_navigated( ). view_display( ). + ELSEIF client->check_on_event( ). + on_event( ). ENDIF. ENDMETHOD. @@ -32,27 +174,754 @@ CLASS z2ui5_cl_smpc_app_660 IMPLEMENTATION. DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). - " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.TreeTableSimple/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) view->ele( n = `View` ns = `mvc` - )->a( n = `xmlns` v = `sap.m` - )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` - )->a( n = `height` v = `100%` + )->a( n = `xmlns` v = `sap.ui.table` + )->a( n = `xmlns:m` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `xmlns:f` v = `sap.f` + )->a( n = `xmlns:core` v = `sap.ui.core` + )->a( n = `xmlns:upload` v = `sap.m.upload` + )->a( n = `xmlns:plugins` v = `sap.m.plugins` + )->a( n = `height` v = `100%` + )->a( n = `displayBlock` v = `true` + + )->ele( n = `DynamicPage` ns = `f` + )->a( n = `id` v = `page` + + )->ele( n = `content` ns = `f` + )->ele( `TreeTable` + )->a( n = `id` v = `table-uploadSet` + " IMAGEURL and UPLOADSTATE stay absent where the mock has + " none, so the view's undefined checks read as in the sample + )->a( n = `rows` v = client->_bind( val = t_items + omit_initial_paths = VALUE #( ( `IMAGEURL` ) + ( `UPLOADSTATE` ) ) ) + )->a( n = `selectionMode` v = `MultiToggle` + )->a( n = `rowSelectionChange` v = client->_event( val = `SELECTION` + arg = `$event.oSource.getBinding('rows').getSelectedContexts().join()` ) + + )->ele( `extension` + )->ele( n = `OverflowToolbar` ns = `m` + )->a( n = `style` v = `Clear` + + )->tag( n = `Title` ns = `m` + )->a( n = `text` v = |Documents (\{= ${ client->_bind( t_items ) }.length\})| + )->a( n = `level` v = `H2` + )->tag( n = `ToolbarSpacer` ns = `m` + )->tag( n = `ActionsPlaceholder` ns = `upload` + )->a( n = `id` v = `uploadButton` + )->a( n = `placeholderFor` v = `UploadButtonPlaceholder` + )->tag( n = `Button` ns = `m` + )->a( n = `id` v = `downloadSelectedButton` + )->a( n = `text` v = `Download` + )->a( n = `enabled` v = client->_bind( download_enabled ) + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin` ) + ( `download` ) + ( `$controller.getView().byId('table-uploadSet').getContextByIndex(` && + `$controller.getView().byId('table-uploadSet').getSelectedIndices()[0])` ) + ( `true` ) ) ) + + )->ele( n = `MenuButton` ns = `m` + )->a( n = `text` v = `Add` + + )->ele( n = `menu` ns = `m` + )->ele( n = `Menu` ns = `m` + )->tag( n = `MenuItem` ns = `m` + )->a( n = `text` v = `URL` + )->a( n = `press` v = client->_event( `ADD_URL` ) + + )->end( + )->end( + )->ele( n = `layoutData` ns = `m` + )->tag( n = `OverflowToolbarLayoutData` ns = `m` + )->a( n = `priority` v = `AlwaysOverflow` + + )->end( + )->end( + )->ele( n = `Button` ns = `m` + )->a( n = `id` v = `removeDocumentButton` + )->a( n = `text` v = `Remove` + )->a( n = `press` v = client->_event( `REMOVE_SELECTED` ) + )->a( n = `enabled` v = client->_bind( single_enabled ) + + )->ele( n = `layoutData` ns = `m` + )->tag( n = `OverflowToolbarLayoutData` ns = `m` + )->a( n = `priority` v = `AlwaysOverflow` + + )->end( + )->end( + )->ele( n = `Button` ns = `m` + )->a( n = `id` v = `renameButton` + )->a( n = `enabled` v = client->_bind( single_enabled ) + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin` ) + ( `renameItem` ) + ( `$controller.getView().byId('table-uploadSet').getContextByIndex(` && + `$controller.getView().byId('table-uploadSet').getSelectedIndices()[0])` ) ) ) + )->a( n = `text` v = `Rename` + + )->ele( n = `layoutData` ns = `m` + )->tag( n = `OverflowToolbarLayoutData` ns = `m` + )->a( n = `priority` v = `AlwaysOverflow` + + )->end( + )->end( + )->ele( n = `Button` ns = `m` + )->a( n = `id` v = `editUrlButton` + )->a( n = `text` v = `Edit URL` + )->a( n = `enabled` v = client->_bind( single_enabled ) + )->a( n = `press` v = client->_event( `EDIT_URL` ) + + )->ele( n = `layoutData` ns = `m` + )->tag( n = `OverflowToolbarLayoutData` ns = `m` + )->a( n = `priority` v = `AlwaysOverflow` + + )->end( + )->end( + )->end( + )->end( + )->ele( `dependents` + )->ele( n = `UploadSetwithTable` ns = `plugins` + " the id is added - the port calls the plugin by id where the + " controller kept the instance onActivated handed it + )->a( n = `id` v = `uploadSetPlugin` + )->a( n = `uploadUrl` v = `/uploadFiles` + )->a( n = `multiple` v = `true` + " the mock server's part: the upload is vetoed and the backend + " adds the row the fake 201 response would have created + )->a( n = `beforeUploadStarts` v = client->_event( val = `UPLOAD` + t_arg = VALUE #( ( `${$parameters>/item}.getFileName()` ) + ( `${$parameters>/item}.getMediaType()` ) + ( `${$parameters>/item}.getFileObject().size` ) ) + s_ctrl = VALUE #( check_prevent_default = abap_true + check_queue_last = abap_true ) ) + )->a( n = `itemRenamed` v = client->_event( val = `RENAMED` + t_arg = VALUE #( ( `${$parameters>/item}.getBindingContext().getPath()` ) + ( `${$parameters>/item}.getFileName()` ) ) ) + )->a( n = `cloudFilePickerEnabled` v = `true` + )->a( n = `actions` v = `uploadButton` + + " the paths name the model's upper-case ABAP fields + )->tag( n = `UploadItemConfiguration` ns = `upload` + )->a( n = `fileNamePath` v = `FILENAME` + )->a( n = `mediaTypePath` v = `MEDIATYPE` + )->a( n = `urlPath` v = `URL` + )->a( n = `previewablePath` v = `PREVIEWABLE` + )->a( n = `fileSizePath` v = `FILESIZE` + )->a( n = `isTrustedSourcePath` v = `TRUSTEDSOURCE` + )->a( n = `isDirectoryPath` v = `ISDIRECTORY` - )->ele( `Page` - )->a( n = `title` v = `UploadSetwithTablePlugin.TreeTableSimple` + )->end( + )->end( + )->ele( `rowSettingsTemplate` + )->tag( `RowSettings` + )->a( n = `highlight` v = `{= ${UPLOADSTATE} === 'Complete' ? 'Indication05' : null }` - )->tag( `Text` - )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.TreeTableSimple` ). + )->end( + )->ele( `columns` + )->ele( `Column` + )->a( n = `width` v = `40%` + + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `File Name` + + )->ele( `template` + )->ele( n = `HBox` ns = `m` + )->a( n = `class` v = `sapUiSmallMarginTop sapUiTinyMarginBottom` + + )->tag( n = `Image` ns = `m` + )->a( n = `src` v = `{IMAGEURL}` + )->a( n = `class` v = `sapMUSTItemImage sapMUSTItemIcon` + )->a( n = `visible` v = `{= ${IMAGEURL} !== undefined}` + " getIconSrc runs in ABAP: the row carries the finished icon + )->tag( n = `Icon` ns = `core` + )->a( n = `src` v = `{ICON}` + )->a( n = `visible` v = `{= ${IMAGEURL} === undefined || ${IMAGEURL} === '' }` + )->a( n = `class` v = `sapMUSTItemIcon` + )->a( n = `color` v = `{= ${ISDIRECTORY} ? ${COLOR} : '' }` + )->a( n = `backgroundColor` v = `{= ${ISDIRECTORY} ? ${BGCOLOR} : '' }` + + )->ele( n = `VBox` ns = `m` + )->a( n = `class` v = `sapUiTinyMargin sapUiSmallMarginBegin` + + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = `{FILENAME}` + )->a( n = `class` v = `sapUiSmallMarginBottom` + )->a( n = `visible` v = `{= ${ISDIRECTORY} === true }` + )->tag( n = `Link` ns = `m` + )->a( n = `text` v = `{FILENAME}` + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadSetPlugin` ) + ( `openFilePreview` ) + ( `$event.oSource.getBindingContext()` ) ) ) + )->a( n = `class` v = `sapUiTinyMarginBottom` + )->a( n = `visible` v = `{= ${ISDIRECTORY} === false }` + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = `{DOCUMENTTYPE}` + + )->end( + )->end( + )->end( + )->end( + )->ele( `Column` + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `Revision` + + )->ele( `template` + )->tag( n = `Link` ns = `m` + )->a( n = `text` v = `{REVISION}` + + )->end( + )->end( + )->ele( `Column` + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `Status` + + )->ele( `template` + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = `{STATUS}` + + )->end( + )->end( + )->ele( `Column` + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `File Size` + + " getFileSizeWithUnits runs in ABAP as well + )->ele( `template` + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = `{FILESIZE_UNITS}` + + )->end( + )->end( + )->ele( `Column` + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `Last Modified` + + )->ele( `template` + )->ele( n = `VBox` ns = `m` + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = `{LASTMODIFIEDBY}` + )->tag( n = `Text` ns = `m` + )->a( n = `class` v = `sapUiTinyMarginTop` + )->a( n = `text` v = `{LASTMODIFIED}` + + )->end( + )->end( + )->end( + )->ele( `Column` + )->ele( `template` + )->tag( n = `Button` ns = `m` + )->a( n = `class` v = `sapUiTinyMarginBegin` + )->a( n = `type` v = `Transparent` + )->a( n = `icon` v = `sap-icon://decline` + )->a( n = `press` v = client->_event( val = `REMOVE_ROW` + arg = `$event.oSource.getBindingContext().getPath()` ) + )->a( n = `visible` v = `{= ${ISDIRECTORY} === false }` ). client->view_display( view->stringify( ) ). ENDMETHOD. + METHOD popup_url_display. + + DATA(popup) = z2ui5_cl_ui5_view_builder=>factory( ). + + popup->ele( n = `FragmentDefinition` ns = `core` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:core` v = `sap.ui.core` + )->a( n = `xmlns:form` v = `sap.ui.layout.form` + )->a( n = `templateShareable` v = `false` + )->a( n = `class` v = `sapUiTinyMarginTop` + + )->ele( `Dialog` + )->a( n = `id` v = `addViaUrlDialog` + )->a( n = `title` v = client->_bind( dialog_title ) + )->a( n = `contentWidth` v = `28rem` + )->a( n = `contentHeight` v = `15rem` + )->a( n = `class` v = `sapUiSmallMargin` + + )->ele( `content` + )->ele( n = `SimpleForm` ns = `form` + )->a( n = `editable` v = `true` + )->a( n = `id` v = `addViaUrlSimpleform` + + )->tag( `Label` + )->a( n = `id` v = `urlInputLabel` + )->a( n = `text` v = `URL` + )->a( n = `required` v = client->_bind( url_required ) + )->tag( `Input` + )->a( n = `id` v = `urlInput` + )->a( n = `value` v = client->_bind( url_input ) + )->a( n = `valueState` v = client->_bind( url_state ) + )->a( n = `valueStateText` v = client->_bind( url_state_text ) + )->tag( `Label` + )->a( n = `id` v = `nameInputLabel` + )->a( n = `text` v = `Name` + )->a( n = `required` v = `true` + )->tag( `Input` + )->a( n = `id` v = `nameInput` + )->a( n = `value` v = client->_bind( name_input ) + )->a( n = `valueState` v = client->_bind( name_state ) + )->a( n = `valueStateText` v = client->_bind( name_state_text ) + + )->end( + )->end( + )->ele( `beginButton` + )->tag( `Button` + )->a( n = `id` v = `addDocumentBtn` + )->a( n = `text` v = client->_bind( apply_text ) + )->a( n = `type` v = `Emphasized` + )->a( n = `press` v = client->_event( `URL_APPLY` ) + + )->end( + )->ele( `endButton` + )->tag( `Button` + )->a( n = `text` v = `Cancel` + )->a( n = `press` v = client->follow_up_action( client->cs_event-popup_close ) ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get_event( ). + + WHEN `SELECTION`. + " onSelectionChange - the binding's selected contexts arrive as their paths; + " the buttons only count files, and only while no folder is selected + t_selected = VALUE #( ). + IF client->get_event_arg( ) IS NOT INITIAL. + SPLIT client->get_event_arg( ) AT `,` INTO TABLE t_selected. + ENDIF. + DATA(files) = 0. + DATA(folders) = 0. + LOOP AT t_selected INTO DATA(path). + IF node_get( path )-isdirectory = abap_true. + folders = folders + 1. + ELSE. + files = files + 1. + ENDIF. + ENDLOOP. + download_enabled = xsdbool( files > 0 AND folders = 0 ). + single_enabled = xsdbool( files = 1 AND folders = 0 ). + + WHEN `ADD_URL`. + " openAddOrEditDialog in its Add shape + is_edit = abap_false. + dialog_title = `Add URL`. + apply_text = `Add`. + url_required = abap_true. + url_input = ``. + name_input = ``. + url_state = `None`. + url_state_text = ``. + name_state = `None`. + name_state_text = ``. + popup_url_display( ). + + WHEN `EDIT_URL`. + " onEditUrl - the same fragment as Edit URL, filled from the selected row + IF t_selected IS INITIAL. + RETURN. + ENDIF. + DATA(row) = node_get( t_selected[ 1 ] ). + is_edit = abap_true. + dialog_title = `Edit URL`. + apply_text = `Apply`. + url_required = abap_false. + url_input = row-url. + name_input = row-filename. + url_state = `None`. + url_state_text = ``. + name_state = `None`. + name_state_text = ``. + popup_url_display( ). + + WHEN `URL_APPLY`. + url_apply( ). + + WHEN `EDIT_CONFIRM`. + IF client->get_event_arg( ) = `Save`. + " the Save button validates (value states) and applies regardless + name_valid( ). + url_valid( ). + " the sample looks the row up by id in the top-level /items only + IF t_selected IS NOT INITIAL. + DATA(edit_id) = node_get( t_selected[ 1 ] )-id. + LOOP AT t_items REFERENCE INTO DATA(top) WHERE id = edit_id AND id IS NOT INITIAL. + top->filename = name_input. + top->url = url_input. + ENDLOOP. + ENDIF. + client->popup_destroy( ). + ENDIF. + + WHEN `REMOVE_SELECTED`. + IF t_selected IS NOT INITIAL. + remove_ask( t_selected[ 1 ] ). + ENDIF. + + WHEN `REMOVE_ROW`. + remove_ask( client->get_event_arg( ) ). + + WHEN `REMOVE_CLOSE`. + " removeItem splices the TOP-LEVEL index of the path (split('/')[2]) out of + " /items - for a file inside a folder, that is its top-level folder + IF client->get_event_arg( ) = `Remove`. + DATA(levels) = path_indices( remove_path ). + IF levels IS NOT INITIAL AND levels[ 1 ] <= lines( t_items ). + DELETE t_items INDEX levels[ 1 ]. + ENDIF. + ENDIF. + + WHEN `UPLOAD`. + " the file the FileUploader picked, as the mock server would answer it + row_add( filename = client->get_event_arg( ) + mediatype = client->get_event_arg( 2 ) + url = `` + filesize = CONV #( client->get_event_arg( 3 ) ) ). + client->message_toast_display( `Document Added` ). + + WHEN `RENAMED`. + " onDocumentRenamedSuccess writes the new name into the row, at any depth + node_rename( path = client->get_event_arg( ) name = client->get_event_arg( 2 ) ). + client->message_toast_display( text = `Document Renamed.` duration = `2000` ). + + ENDCASE. + + ENDMETHOD. + + + METHOD url_apply. + + " handleAddViaUrl + IF is_edit = abap_true. + IF name_valid( ) = abap_true. + " showEditConfirmation - a Message dialog in the Warning state + client->message_box_display( text = `You have made changes to this object. What would you like to do?` + type = `warning` + title = `Warning` + actions = VALUE #( ( `Save` ) ( `DiscardChanges` ) ) + emphasizedaction = `Save` + onclose = `EDIT_CONFIRM` ). + ELSE. + client->message_toast_display( `No Changes found` ). + ENDIF. + RETURN. + ENDIF. + DATA(has_error) = xsdbool( name_valid( ) = abap_false ). + IF url_valid( ) = abap_false. + has_error = abap_true. + ENDIF. + IF has_error = abap_false. + " uploadItemViaUrl - the mock server answers with the typed URL as the + " document URL and an empty file + row_add( filename = name_input + mediatype = `` + url = url_input + filesize = 0 ). + client->popup_destroy( ). + client->message_toast_display( `Document Added` ). + ENDIF. + + ENDMETHOD. + + + METHOD remove_ask. + + " removeItem - MessageBox.warning; the icon is the warning box's own + DATA(node) = node_get( path ). + IF node IS INITIAL. + RETURN. + ENDIF. + remove_path = path. + client->message_box_display( text = |Are you sure you want to remove the document { node-filename } ?| + type = `warning` + actions = VALUE #( ( `Remove` ) ( `CANCEL` ) ) + emphasizedaction = `Remove` + styleclass = `sapMUSTRemovePopoverContainer` + initialfocus = `CANCEL` + onclose = `REMOVE_CLOSE` ). + + ENDMETHOD. + + + METHOD name_valid. + + " _isValidName + IF name_input IS INITIAL. + name_state = `Error`. + name_state_text = `Text is either empty or contains special characters`. + ELSE. + name_state = `None`. + result = abap_true. + ENDIF. + + ENDMETHOD. + + + METHOD url_valid. + + " _validateAddOrEditUrlDialog's URL half - the sample's regex is unanchored, + " so a scheme followed by one non-blank character is what it requires + FIND REGEX `(ftp|http|https)://\S` IN url_input. + IF sy-subrc <> 0. + url_state = `Error`. + url_state_text = `Enter Valid URL`. + ELSE. + url_state = `None`. + result = abap_true. + ENDIF. + + ENDMETHOD. + + + METHOD row_add. + + " the mock server's Create branch - unshift the new document + upload_no = upload_no + 1. + DATA(row) = VALUE ty_s_root( id = |{ upload_no }| + filename = filename + mediatype = mediatype + url = url + uploadstate = `Complete` + revision = `00` + status = `In work` + filesize = filesize + lastmodifiedby = `Jane Burns` + lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Invoice` + trustedsource = abap_true ). + row-icon = icon_for( mediatype = row-mediatype filename = row-filename ). + row-filesize_units = size_with_units( row-filesize ). + INSERT row INTO t_items INDEX 1. + + ENDMETHOD. + + + METHOD path_indices. + + " a row's binding path holds its index on every level, 0-based: + " /T_ITEMS/0/ITEMS/1 is the 2nd child of the 1st row + SPLIT path AT `/` INTO TABLE DATA(parts). + LOOP AT parts INTO DATA(part). + IF part IS NOT INITIAL AND part CO `0123456789`. + INSERT CONV i( part ) + 1 INTO TABLE result. + ENDIF. + ENDLOOP. + + ENDMETHOD. + + + METHOD node_get. + + DATA(levels) = path_indices( path ). + IF levels IS INITIAL OR levels[ 1 ] > lines( t_items ). + RETURN. + ENDIF. + DATA(root) = t_items[ levels[ 1 ] ]. + IF lines( levels ) = 1. + result = CORRESPONDING #( root ). + RETURN. + ENDIF. + IF levels[ 2 ] > lines( root-items ). + RETURN. + ENDIF. + DATA(folder) = root-items[ levels[ 2 ] ]. + IF lines( levels ) = 2. + result = CORRESPONDING #( folder ). + RETURN. + ENDIF. + IF levels[ 3 ] <= lines( folder-items ). + result = folder-items[ levels[ 3 ] ]. + ENDIF. + + ENDMETHOD. + + + METHOD node_rename. + + DATA(levels) = path_indices( path ). + IF levels IS INITIAL OR levels[ 1 ] > lines( t_items ). + RETURN. + ENDIF. + DATA(root) = REF #( t_items[ levels[ 1 ] ] ). + IF lines( levels ) = 1. + root->filename = name. + RETURN. + ENDIF. + IF levels[ 2 ] > lines( root->items ). + RETURN. + ENDIF. + DATA(folder) = REF #( root->items[ levels[ 2 ] ] ). + IF lines( levels ) = 2. + folder->filename = name. + RETURN. + ENDIF. + IF levels[ 3 ] <= lines( folder->items ). + folder->items[ levels[ 3 ] ]-filename = name. + ENDIF. + + ENDMETHOD. + + + METHOD row_derive. + + " getIconSrc shows a folder for a directory; a folder has no fileSize, so + " getFileSizeWithUnits leaves its cell empty + IF row-isdirectory = abap_true. + row-icon = `sap-icon://folder-full`. + RETURN. + ENDIF. + row-icon = icon_for( mediatype = row-mediatype filename = row-filename ). + row-filesize_units = size_with_units( row-filesize ). + + ENDMETHOD. + + + METHOD icon_for. + + " UploadSetwithTable.getIconForFileType: IconPool's media type table, or the + " file extension when there is no media type + IF mediatype IS NOT INITIAL. + CASE to_lower( mediatype ). + WHEN `application/msword` OR `application/vnd.google-apps.document` OR `application/rtf` + OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document`. + result = `sap-icon://doc-attachment`. + WHEN `application/pdf`. + result = `sap-icon://pdf-attachment`. + WHEN `application/msexcel` OR `application/vnd.ms-excel` OR `application/vnd.google-apps.spreadsheet` + OR `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` + OR `application/vnd.ms-excel.sheet.macroenabled.12` + OR `application/vnd.openxmlformats-officedocument.spreadsheetml.template` + OR `application/vnd.ms-excel.template.macroenabled.12` + OR `application/vnd.ms-excel.sheet.binary.macroenabled.12` + OR `application/vnd.ms-excel.addin.macroenabled.12`. + result = `sap-icon://excel-attachment`. + WHEN `application/vnd.ms-powerpoint` OR `application/vnd.google-apps.presentation` OR `application/mspowerpoint` + OR `application/vnd.openxmlformats-officedocument.presentationml.presentation` + OR `application/vnd.openxmlformats-officedocument.presentationml.slideshow`. + result = `sap-icon://ppt-attachment`. + WHEN `application/xml` OR `application/xhtml+xml` OR `application/x-httpd-php` OR `application/x-javascript` + OR `text/html`. + result = `sap-icon://attachment-html`. + WHEN `application/gzip` OR `application/x-rar-compressed` OR `application/x-tar` OR `application/zip`. + result = `sap-icon://attachment-zip-file`. + WHEN `audio/mpeg` OR `audio/voxware` OR `audio/x-aiff` OR `audio/x-midi` OR `audio/x-mpeg` OR `audio/x-m4a` + OR `audio/x-pn-realaudio` OR `audio/x-pn-realaudio-plugin` OR `audio/x-qt-stream` OR `audio/x-wav`. + result = `sap-icon://attachment-audio`. + WHEN `image/png` OR `image/tiff` OR `image/bmp` OR `image/jpeg` OR `image/gif`. + result = `sap-icon://attachment-photo`. + WHEN `text/plain` OR `text/comma-separated-values` OR `text/css` OR `text/javascript` OR `text/richtext` + OR `text/rtf` OR `text/tab-separated-values` OR `text/xml`. + result = `sap-icon://attachment-text-file`. + WHEN `video/mpeg` OR `video/mp4` OR `video/quicktime` OR `video/x-msvideo` OR `application/x-shockwave-flash`. + result = `sap-icon://attachment-video`. + WHEN OTHERS. + result = `sap-icon://document`. + ENDCASE. + RETURN. + ENDIF. + + DATA(dot) = find( val = filename sub = `.` occ = -1 ). + IF dot < 0. + result = `sap-icon://document`. + RETURN. + ENDIF. + CASE to_lower( substring( val = filename off = dot + 1 ) ). + WHEN `bmp` OR `jpg` OR `jpeg` OR `png`. + result = `sap-icon://card`. + WHEN `csv` OR `xls` OR `xlsx`. + result = `sap-icon://excel-attachment`. + WHEN `doc` OR `docx` OR `odt`. + result = `sap-icon://doc-attachment`. + WHEN `pdf`. + result = `sap-icon://pdf-attachment`. + WHEN `ppt` OR `pptx`. + result = `sap-icon://ppt-attachment`. + WHEN `txt`. + result = `sap-icon://document-text`. + WHEN OTHERS. + result = `sap-icon://document`. + ENDCASE. + + ENDMETHOD. + + + METHOD size_with_units. + + " UploadSetwithTable.getFileSizeWithUnits - KB below a megabyte, then MB, then GB + CONSTANTS kilobyte TYPE i VALUE 1024. + DATA(bytes) = CONV decfloat34( size ). + IF size < kilobyte * kilobyte. + result = |{ bytes / kilobyte DECIMALS = 2 } KB|. + ELSEIF size < kilobyte * kilobyte * kilobyte. + result = |{ bytes / kilobyte / kilobyte DECIMALS = 2 } MB|. + ELSE. + result = |{ bytes / kilobyte / kilobyte / kilobyte DECIMALS = 2 } GB|. + ENDIF. + + ENDMETHOD. + + METHOD model_init. - " TODO seed the default model (see the sample's controller / JSON mock) - RETURN. + " model/documents.json, every row - the document URLs point at the OpenUI5 host + t_items = VALUE #( + ( filename = `Documents` + isdirectory = abap_true color = `#ffffff` bgcolor = `#30914c` + items = VALUE #( + ( id = `23004579` filename = `Document.txt` mediatype = `text/plain` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Document.txt` + revision = `42` status = `In work` filesize = 420 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Document` previewable = abap_true isdirectory = abap_false ) + ( filename = `Invoices` + isdirectory = abap_true color = `#ffffff` bgcolor = `#30914c` + items = VALUE #( + ( id = `23004569` filename = `Invoice summary.doc` mediatype = `application/msword` + imageurl = `https://sdk.openui5.org/test-resources/sap/m/images/invoice_manager.png` url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Business Plan Agenda.doc` + revision = `01` status = `In work` filesize = 200 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Invoice` previewable = abap_true isdirectory = abap_false ) ) ) ) ) + ( id = `23004583` filename = `Test Video.mp4` mediatype = `video/mp4` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Video.mp4` + revision = `99` status = `In work` filesize = 420000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Attachment` previewable = abap_true isdirectory = abap_false ) + ( id = `23004590` filename = `Sample Zip File.zip` mediatype = `application/zip` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/sample-zip-file.zip` + revision = `00` status = `In work` filesize = 42000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/22, 10:20:00 PM` + documenttype = `Attachment` previewable = abap_true isdirectory = abap_false ) + ( filename = `Attachments` + isdirectory = abap_true color = `#ffffff` bgcolor = `#e76500` + items = VALUE #( + ( id = `23004578` filename = `Instructions.pdf` mediatype = `application/pdf` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Instructions.pdf` + revision = `01` status = `In work` filesize = 30000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + documenttype = `Specification` previewable = abap_true trustedsource = abap_true isdirectory = abap_false ) ) ) + ( id = `23004584` filename = `Transmission.vds` mediatype = `model/vnd.sap.vds` + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/transmission.vds` + revision = `42` status = `In work` filesize = 123 lastmodifiedby = `Jane Burns` lastmodified = `10/03/22, 10:20:00 PM` + documenttype = `Attachment` previewable = abap_true trustedsource = abap_true isdirectory = abap_false ) ). + " the derived ICON and FILESIZE_UNITS on every level + LOOP AT t_items REFERENCE INTO DATA(root). + DATA(root_item) = CORRESPONDING ty_s_item( root->* ). + row_derive( CHANGING row = root_item ). + root->icon = root_item-icon. + root->filesize_units = root_item-filesize_units. + LOOP AT root->items REFERENCE INTO DATA(folder). + DATA(folder_item) = CORRESPONDING ty_s_item( folder->* ). + row_derive( CHANGING row = folder_item ). + folder->icon = folder_item-icon. + folder->filesize_units = folder_item-filesize_units. + LOOP AT folder->items REFERENCE INTO DATA(item). + row_derive( CHANGING row = item->* ). + ENDLOOP. + ENDLOOP. + ENDLOOP. ENDMETHOD. From ce01391210dedde432480bf1f9f1d8fca97229c1 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 20 Oct 2026 14:56:12 +0000 Subject: [PATCH 08/33] Port the 48 samples of controls newer than UI5 1.71 (apps 624-671) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Batches b52 Avatar, b53 IllustratedMessage, b54 DynamicDateRange and ExpandableText, b55 p13n and VariantManagement, b56 UploadSetwithTable (sap.m), b49 AvatarGroup, SidePanel and ProductSwitch, b50 HeroBanner (sap.f). Every port declares its control as POST_171 and lives in src/02. Also: app 649's label 'Peter Mueller' restored to the original 'Peter Müller' (with 649/668/671 added to the 7bit_ascii exclusions); the scaffolder no longer clips GROUP-nested sample names to an identical 'sap.m...' description; generated @summary/@keywords/@origin headers and artefacts regenerated. Coverage 669 / 669. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx --- SAMPLES.md | 96 +- STATUS.md | 6 +- abaplint.jsonc | 2 +- catalogue-derived.json | 235 ++-- catalogue.json | 96 +- meta/z2ui5_cl_smpc_app_649.json | 4 - meta/z2ui5_cl_smpc_app_660.json | 38 +- meta/z2ui5_cl_smpc_app_661.json | 42 +- scripts/scaffold.mjs | 9 +- src/02/01/z2ui5_cl_smpc_app_624.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_625.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_626.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_627.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_628.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_629.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_630.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_631.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_632.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_633.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_634.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_635.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_636.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_637.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_638.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_639.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_640.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_641.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_642.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_643.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_644.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_645.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_646.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_647.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_648.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_649.clas.abap | 5 +- src/02/01/z2ui5_cl_smpc_app_650.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_651.clas.abap | 3 + src/02/01/z2ui5_cl_smpc_app_652.clas.abap | 9 +- src/02/01/z2ui5_cl_smpc_app_653.clas.abap | 9 +- src/02/01/z2ui5_cl_smpc_app_654.clas.abap | 9 +- src/02/01/z2ui5_cl_smpc_app_655.clas.abap | 9 +- src/02/01/z2ui5_cl_smpc_app_656.clas.abap | 9 +- src/02/01/z2ui5_cl_smpc_app_657.clas.abap | 9 +- src/02/01/z2ui5_cl_smpc_app_658.clas.abap | 9 +- src/02/01/z2ui5_cl_smpc_app_659.clas.abap | 9 +- src/02/01/z2ui5_cl_smpc_app_660.clas.abap | 35 +- src/02/01/z2ui5_cl_smpc_app_661.clas.abap | 1038 ++++++++++++++- src/02/04/z2ui5_cl_smpc_app_662.clas.abap | 3 + src/02/04/z2ui5_cl_smpc_app_663.clas.abap | 3 + src/02/04/z2ui5_cl_smpc_app_664.clas.abap | 3 + src/02/04/z2ui5_cl_smpc_app_665.clas.abap | 3 + src/02/04/z2ui5_cl_smpc_app_666.clas.abap | 3 + src/02/04/z2ui5_cl_smpc_app_667.clas.abap | 3 + src/02/04/z2ui5_cl_smpc_app_668.clas.abap | 3 + src/02/04/z2ui5_cl_smpc_app_669.clas.abap | 3 + src/02/04/z2ui5_cl_smpc_app_670.clas.abap | 3 + src/02/04/z2ui5_cl_smpc_app_671.clas.abap | 3 + src/z2ui5_cl_smpc_app_000.clas.abap | 1417 ++++++++++++++++++--- 58 files changed, 2753 insertions(+), 453 deletions(-) diff --git a/SAMPLES.md b/SAMPLES.md index 02b1bae56..9c5b12244 100644 --- a/SAMPLES.md +++ b/SAMPLES.md @@ -58,11 +58,11 @@ For what is NOT here — which demo kit samples are still unported and why — s | Sample | Class | |---|---| -| **sap.m.Avatar**
Avatar | [`Z2UI5_CL_SMPC_APP_624`](src/02/01/z2ui5_cl_smpc_app_624.clas.abap) | -| **sap.m.Avatar** — Avatar with toggling of Active state
AvatarActiveState | [`Z2UI5_CL_SMPC_APP_625`](src/02/01/z2ui5_cl_smpc_app_625.clas.abap) | -| **sap.m.Avatar** — Avatar with Badge Icon Color
AvatarBadgeIconColor | [`Z2UI5_CL_SMPC_APP_626`](src/02/01/z2ui5_cl_smpc_app_626.clas.abap) | -| **sap.m.Avatar** — Avatar with badgeValueState
AvatarValueState | [`Z2UI5_CL_SMPC_APP_627`](src/02/01/z2ui5_cl_smpc_app_627.clas.abap) | -| **sap.m.Avatar** — Avatar with Visual Affordance
AvatarWithAffordance | [`Z2UI5_CL_SMPC_APP_628`](src/02/01/z2ui5_cl_smpc_app_628.clas.abap) | +| **sap.m.Avatar**
This sample demonstrates different combinations of types, shapes, and sizes of the Avatar.
avatar sap.m scrollcontainer text grid vbox
○ generated · 5 deviations | [`Z2UI5_CL_SMPC_APP_624`](src/02/01/z2ui5_cl_smpc_app_624.clas.abap) | +| **sap.m.Avatar** — Avatar with toggling of Active state
This sample demonstrates toggling of Avatar Active state, when a User menu is opened/closed.
avatar sap.m avataractivestate popover list standardlistitem messagestrip
○ generated · 6 deviations | [`Z2UI5_CL_SMPC_APP_625`](src/02/01/z2ui5_cl_smpc_app_625.clas.abap) | +| **sap.m.Avatar** — Avatar with Badge Icon Color
This sample demonstrates different badge icon colors of the Avatar.
avatar sap.m avatarbadgeiconcolor scrollcontainer text grid vbox
○ generated · 3 deviations | [`Z2UI5_CL_SMPC_APP_626`](src/02/01/z2ui5_cl_smpc_app_626.clas.abap) | +| **sap.m.Avatar** — Avatar with badgeValueState
This sample demonstrates different badge value states of the Avatar.
avatar sap.m avatarvaluestate scrollcontainer grid vbox text
○ generated · 5 deviations | [`Z2UI5_CL_SMPC_APP_627`](src/02/01/z2ui5_cl_smpc_app_627.clas.abap) | +| **sap.m.Avatar** — Avatar with Visual Affordance
This sample demonstrates different combinations of types, shapes, and sizes of the Avatar with visual affordance.
avatar sap.m avatarwithaffordance scrollcontainer text grid vbox lightbox lightboxitem
○ generated · 4 deviations | [`Z2UI5_CL_SMPC_APP_628`](src/02/01/z2ui5_cl_smpc_app_628.clas.abap) | #### sap.m.Bar @@ -222,16 +222,16 @@ For what is NOT here — which demo kit samples are still unported and why — s | Sample | Class | |---|---| -| **sap.m.DynamicDateRange**
DynamicDateRange | [`Z2UI5_CL_SMPC_APP_639`](src/02/01/z2ui5_cl_smpc_app_639.clas.abap) | -| **sap.m.DynamicDateRange** — Dynamic Date Range with calendarWeekNumbering
DynamicDateRangeAndCalendarWeekNumbering | [`Z2UI5_CL_SMPC_APP_640`](src/02/01/z2ui5_cl_smpc_app_640.clas.abap) | -| **sap.m.DynamicDateRange** — Dynamic Date Range - Open by Another Control
DynamicDateRangeHidden | [`Z2UI5_CL_SMPC_APP_641`](src/02/01/z2ui5_cl_smpc_app_641.clas.abap) | -| **sap.m.DynamicDateRange** — Dynamic Date Range with Custom Options
DynamicDateRangeWithCustomOptions | [`Z2UI5_CL_SMPC_APP_642`](src/02/01/z2ui5_cl_smpc_app_642.clas.abap) | +| **sap.m.DynamicDateRange**
The dynamic date range is a control that offers a choice of absolute and relative dates, using different offset from the current date. The list of values offered must be defined by the application.
dynamicdaterange dynamic date range sap.m table overflowtoolbar title toolbarspacer label column text
○ generated · 7 deviations | [`Z2UI5_CL_SMPC_APP_639`](src/02/01/z2ui5_cl_smpc_app_639.clas.abap) | +| **sap.m.DynamicDateRange** — Dynamic Date Range with calendarWeekNumbering
This example shows the Dynamic Date Range control with Middle Eastern calendar week numbering.
dynamicdaterange dynamic date range sap.m dynamicdaterangeandcalendarweeknumbering table overflowtoolbar title toolbarspacer label column
○ generated · 9 deviations | [`Z2UI5_CL_SMPC_APP_640`](src/02/01/z2ui5_cl_smpc_app_640.clas.abap) | +| **sap.m.DynamicDateRange** — Dynamic Date Range - Open by Another Control
This example shows Dynamic Date Range which is opened by another control.
dynamicdaterange dynamic date range sap.m dynamicdaterangehidden title vbox label button link
○ generated · 6 deviations | [`Z2UI5_CL_SMPC_APP_641`](src/02/01/z2ui5_cl_smpc_app_641.clas.abap) | +| **sap.m.DynamicDateRange** — Dynamic Date Range with Custom Options
This example shows the Dynamic Date Range control with custom options for interval or date selection.
dynamicdaterange dynamic date range sap.m dynamicdaterangewithcustomoptions table overflowtoolbar title toolbarspacer label column
○ generated · 9 deviations | [`Z2UI5_CL_SMPC_APP_642`](src/02/01/z2ui5_cl_smpc_app_642.clas.abap) | #### sap.m.ExpandableText | Sample | Class | |---|---| -| **sap.m.ExpandableText**
ExpandableText | [`Z2UI5_CL_SMPC_APP_643`](src/02/01/z2ui5_cl_smpc_app_643.clas.abap) | +| **sap.m.ExpandableText**
The ExpandableText control can be used to display a larger texts inside a table, list or form.
expandabletext expandable text sap.m table column columnlistitem
○ generated · 4 deviations | [`Z2UI5_CL_SMPC_APP_643`](src/02/01/z2ui5_cl_smpc_app_643.clas.abap) | #### sap.m.FacetFilter @@ -340,16 +340,16 @@ For what is NOT here — which demo kit samples are still unported and why — s | Sample | Class | |---|---| -| **sap.m.IllustratedMessage** — Illustrated Message Enable Vertical Responsiveness
IllustratedMessageEVR | [`Z2UI5_CL_SMPC_APP_629`](src/02/01/z2ui5_cl_smpc_app_629.clas.abap) | -| **sap.m.IllustratedMessage** — A demo application that imports a Custom Illustration Set from an npm package
IllustratedMessageInAppCustom | [`Z2UI5_CL_SMPC_APP_630`](src/02/01/z2ui5_cl_smpc_app_630.clas.abap) | -| **sap.m.IllustratedMessage** — 'NoActivities' Illustrated Message in a Card
IllustratedMessageInCardNoActivities | [`Z2UI5_CL_SMPC_APP_631`](src/02/01/z2ui5_cl_smpc_app_631.clas.abap) | -| **sap.m.IllustratedMessage** — 'NoEmail' Illustrated Message in a Card
IllustratedMessageInCardNoEmail | [`Z2UI5_CL_SMPC_APP_632`](src/02/01/z2ui5_cl_smpc_app_632.clas.abap) | -| **sap.m.IllustratedMessage** — Illustrated Message in a Dialog
IllustratedMessageInDialog | [`Z2UI5_CL_SMPC_APP_633`](src/02/01/z2ui5_cl_smpc_app_633.clas.abap) | -| **sap.m.IllustratedMessage** — Default Illustration Set (sapIllus)
IllustratedMessageInPage | [`Z2UI5_CL_SMPC_APP_634`](src/02/01/z2ui5_cl_smpc_app_634.clas.abap) | -| **sap.m.IllustratedMessage** — Illustrated Message in a Page with Configurable Properties (Custom Illustration Set)
IllustratedMessageInPageCustom | [`Z2UI5_CL_SMPC_APP_635`](src/02/01/z2ui5_cl_smpc_app_635.clas.abap) | -| **sap.m.IllustratedMessage** — Illustrated Message in a Page with Configurable Properties (TNT Illustration Set)
IllustratedMessageInPageTNT | [`Z2UI5_CL_SMPC_APP_636`](src/02/01/z2ui5_cl_smpc_app_636.clas.abap) | -| **sap.m.IllustratedMessage** — Illustrative style illustrations using the 'src' property
IllustratedMessageInPageWithURI | [`Z2UI5_CL_SMPC_APP_637`](src/02/01/z2ui5_cl_smpc_app_637.clas.abap) | -| **sap.m.IllustratedMessage** — Illustrated Message Session Timeout
IllustratedMessageSessionTimeout | [`Z2UI5_CL_SMPC_APP_638`](src/02/01/z2ui5_cl_smpc_app_638.clas.abap) | +| **sap.m.IllustratedMessage** — Illustrated Message Enable Vertical Responsiveness
Demonstrates the IllustratedMessage's 'enableVerticalResponsiveness' property.
illustratedmessage illustrated message sap.m illustratedmessageevr responsivesplitter panecontainer splitpane splitterlayoutdata button vbox
○ generated · 2 deviations | [`Z2UI5_CL_SMPC_APP_629`](src/02/01/z2ui5_cl_smpc_app_629.clas.abap) | +| **sap.m.IllustratedMessage** — A demo application that imports a Custom Illustration Set from an npm package
Shows how to import a Custom Illustration from an npm package into a UI5 application for usage with IllustratedMessage.
illustratedmessage illustrated message sap.m illustratedmessageinappcustom simpleform label select item text button
○ generated · 5 deviations | [`Z2UI5_CL_SMPC_APP_630`](src/02/01/z2ui5_cl_smpc_app_630.clas.abap) | +| **sap.m.IllustratedMessage** — 'NoActivities' Illustrated Message in a Card
IllustratedMessage as content of sap.f.Card. 'NoActivities' illustration type is being used for the Illustrated Message.
illustratedmessage illustrated message sap.m illustratedmessageincardnoactivities card header button
○ generated · 1 deviation | [`Z2UI5_CL_SMPC_APP_631`](src/02/01/z2ui5_cl_smpc_app_631.clas.abap) | +| **sap.m.IllustratedMessage** — 'NoEmail' Illustrated Message in a Card
IllustratedMessage as content of sap.f.Card. 'NoEmail' illustration type is being used for the Illustrated Message.
illustratedmessage illustrated message sap.m illustratedmessageincardnoemail card header
○ generated · 1 deviation | [`Z2UI5_CL_SMPC_APP_632`](src/02/01/z2ui5_cl_smpc_app_632.clas.abap) | +| **sap.m.IllustratedMessage** — Illustrated Message in a Dialog
IllustratedMessage as content of sap.m.Dialog.
illustratedmessage illustrated message sap.m illustratedmessageindialog button dialog
○ generated · 2 deviations | [`Z2UI5_CL_SMPC_APP_633`](src/02/01/z2ui5_cl_smpc_app_633.clas.abap) | +| **sap.m.IllustratedMessage** — Default Illustration Set (sapIllus)
The available illustrations are from the default ('sapIllus') illustration set.
illustratedmessage illustrated message sap.m illustratedmessageinpage simpleform label columnelementdata switch text select item
○ generated · 6 deviations | [`Z2UI5_CL_SMPC_APP_634`](src/02/01/z2ui5_cl_smpc_app_634.clas.abap) | +| **sap.m.IllustratedMessage** — Illustrated Message in a Page with Configurable Properties (Custom Illustration Set)
The available properties of the IllustratedMessage are configurable in this sample. The available illustrations are from the 'custom' illustration set.
illustratedmessage illustrated message sap.m illustratedmessageinpagecustom simpleform label select item text button
○ generated · 4 deviations | [`Z2UI5_CL_SMPC_APP_635`](src/02/01/z2ui5_cl_smpc_app_635.clas.abap) | +| **sap.m.IllustratedMessage** — Illustrated Message in a Page with Configurable Properties (TNT Illustration Set)
The available properties of the IllustratedMessage are configurable in this sample. The available illustrations are from the 'tnt' illustration set.
illustratedmessage illustrated message sap.m illustratedmessageinpagetnt simpleform label columnelementdata select item text button
○ generated · 5 deviations | [`Z2UI5_CL_SMPC_APP_636`](src/02/01/z2ui5_cl_smpc_app_636.clas.abap) | +| **sap.m.IllustratedMessage** — Illustrative style illustrations using the 'src' property
The available illustrations are from the default illustration set with the use of the 'src' property.
illustratedmessage illustrated message sap.m illustratedmessageinpagewithuri simpleform label columnelementdata switch text select item
○ generated · 8 deviations | [`Z2UI5_CL_SMPC_APP_637`](src/02/01/z2ui5_cl_smpc_app_637.clas.abap) | +| **sap.m.IllustratedMessage** — Illustrated Message Session Timeout
All applications that require user sign-in should employ a mechanism for automating user sign-out. When the inactivity is about to reach that threshold, a session timeout dialog appears automatically to inform the user.
illustratedmessage illustrated message sap.m illustratedmessagesessiontimeout vbox label stepinput button dialog
○ generated · 5 deviations | [`Z2UI5_CL_SMPC_APP_638`](src/02/01/z2ui5_cl_smpc_app_638.clas.abap) | #### sap.m.Image @@ -990,7 +990,7 @@ For what is NOT here — which demo kit samples are still unported and why — s | Sample | Class | |---|---| -| **sap.m.VariantManagement** — VariantManagement using dedicated items
VariantManagement | [`Z2UI5_CL_SMPC_APP_651`](src/02/01/z2ui5_cl_smpc_app_651.clas.abap) | +| **sap.m.VariantManagement** — VariantManagement using dedicated items
VariantManagement with dedicated items
variantmanagement variant management sap.m panel overflowtoolbar title toolbarspacer button dynamicpage dynamicpagetitle variantitem
○ generated · 4 deviations | [`Z2UI5_CL_SMPC_APP_651`](src/02/01/z2ui5_cl_smpc_app_651.clas.abap) | #### sap.m.ViewSettingsDialog @@ -1127,7 +1127,7 @@ For what is NOT here — which demo kit samples are still unported and why — s | Sample | Class | |---|---| -| **sap.f.AvatarGroup**
AvatarGroup | [`Z2UI5_CL_SMPC_APP_662`](src/02/04/z2ui5_cl_smpc_app_662.clas.abap) | +| **sap.f.AvatarGroup**
This sample demonstrates the different group types and item sizes of the AvatarGroup control.
avatargroup avatar group sap.f slider verticallayout label avatargroupitem popover card hbox vbox
○ generated · 7 deviations | [`Z2UI5_CL_SMPC_APP_662`](src/02/04/z2ui5_cl_smpc_app_662.clas.abap) | #### sap.f.Card @@ -1185,18 +1185,18 @@ For what is NOT here — which demo kit samples are still unported and why — s | Sample | Class | |---|---| -| **sap.f.HeroBanner** — Hero Banner - Basic
HeroBannerBasic | [`Z2UI5_CL_SMPC_APP_667`](src/02/04/z2ui5_cl_smpc_app_667.clas.abap) | -| **sap.f.HeroBanner** — Hero Banner - Columns Ratio
HeroBannerColumnsRatio | [`Z2UI5_CL_SMPC_APP_668`](src/02/04/z2ui5_cl_smpc_app_668.clas.abap) | -| **sap.f.HeroBanner** — Hero Banner - Header Block and Actions Placement
HeroBannerHeaderBlockAndActionsPlacement | [`Z2UI5_CL_SMPC_APP_669`](src/02/04/z2ui5_cl_smpc_app_669.clas.abap) | -| **sap.f.HeroBanner** — Hero Banner - Integration Card
HeroBannerIntegrationCard | [`Z2UI5_CL_SMPC_APP_670`](src/02/04/z2ui5_cl_smpc_app_670.clas.abap) | -| **sap.f.HeroBanner** — Hero Banner - Use Cases
HeroBannerUseCases | [`Z2UI5_CL_SMPC_APP_671`](src/02/04/z2ui5_cl_smpc_app_671.clas.abap) | +| **sap.f.HeroBanner** — Hero Banner - Basic
A basic Hero Banner with a header text and overline text.
herobanner hero banner sap.f herobannerbasic vbox
○ generated · 1 deviation | [`Z2UI5_CL_SMPC_APP_667`](src/02/04/z2ui5_cl_smpc_app_667.clas.abap) | +| **sap.f.HeroBanner** — Hero Banner - Columns Ratio
Demonstrates the three columnsRatio options: single column (no endContent), Equal, and FirstWider.
herobanner hero banner sap.f herobannercolumnsratio html title vbox button text card header
○ generated · 2 deviations | [`Z2UI5_CL_SMPC_APP_668`](src/02/04/z2ui5_cl_smpc_app_668.clas.abap) | +| **sap.f.HeroBanner** — Hero Banner - Header Block and Actions Placement
Demonstrates actionsPlacement and headerBlockPlacement properties for controlling the position of the header and actions.
herobanner hero banner sap.f herobannerheaderblockandactionsplacement vbox button card header title
○ generated · 1 deviation | [`Z2UI5_CL_SMPC_APP_669`](src/02/04/z2ui5_cl_smpc_app_669.clas.abap) | +| **sap.f.HeroBanner** — Hero Banner - Integration Card
Demonstrates the use of sap.ui.integration.widgets.Card inside both the startContent (default slot) and endContent aggregations of the Hero Banner.
herobanner hero banner sap.f herobannerintegrationcard vbox button card
○ generated · 3 deviations | [`Z2UI5_CL_SMPC_APP_670`](src/02/04/z2ui5_cl_smpc_app_670.clas.abap) | +| **sap.f.HeroBanner** — Hero Banner - Use Cases
A collection of common Hero Banner use cases: header actions only, content with actions, actions below header, and header at bottom.
herobanner hero banner sap.f herobannerusecases html title vbox button text card header
○ generated · 2 deviations | [`Z2UI5_CL_SMPC_APP_671`](src/02/04/z2ui5_cl_smpc_app_671.clas.abap) | #### sap.f.ProductSwitch | Sample | Class | |---|---| | **sap.f.ProductSwitch** — Product Switch with Navigation
This sample demonstrates the navigation behavior of Product Switch, configurable by the app developer.
productswitch product switch sap.f productswitchnavigation verticallayout button text responsivepopover productswitchitem
◐ reviewed · 3 deviations | [`Z2UI5_CL_SMPC_APP_165`](src/02/04/z2ui5_cl_smpc_app_165.clas.abap) | -| **sap.f.ProductSwitch** — Product Switch with imageSrc
ProductSwitchItemWithImageSrc | [`Z2UI5_CL_SMPC_APP_666`](src/02/04/z2ui5_cl_smpc_app_666.clas.abap) | +| **sap.f.ProductSwitch** — Product Switch with imageSrc
This sample demonstrates the usage of Product Switch Item with imageSrc, configurable by the app developer.
productswitch product switch sap.f productswitchitemwithimagesrc verticallayout button text responsivepopover productswitchitem
○ generated · 4 deviations | [`Z2UI5_CL_SMPC_APP_666`](src/02/04/z2ui5_cl_smpc_app_666.clas.abap) | #### sap.f.ShellBar @@ -1213,9 +1213,9 @@ For what is NOT here — which demo kit samples are still unported and why — s | Sample | Class | |---|---| | **sap.f.SidePanel** — Side Panel with single action item
Demonstrates the usage of Side Panel with single action item.
sidepanel side panel sap.f single item button vbox label switch text sidepanelitem
◐ reviewed · 2 deviations | [`Z2UI5_CL_SMPC_APP_136`](src/02/04/z2ui5_cl_smpc_app_136.clas.abap) | -| **sap.f.SidePanel**
SidePanel | [`Z2UI5_CL_SMPC_APP_663`](src/02/04/z2ui5_cl_smpc_app_663.clas.abap) | -| **sap.f.SidePanel** — Side Panel with overflow menu
SidePanelOverflow | [`Z2UI5_CL_SMPC_APP_664`](src/02/04/z2ui5_cl_smpc_app_664.clas.abap) | -| **sap.f.SidePanel** — Resizable Side Panel
SidePanelResizable | [`Z2UI5_CL_SMPC_APP_665`](src/02/04/z2ui5_cl_smpc_app_665.clas.abap) | +| **sap.f.SidePanel**
Demonstrates the basic usage of Side Panel.
sidepanel side panel sap.f button vbox label switch select listitem text sidepanelitem
○ generated · 4 deviations | [`Z2UI5_CL_SMPC_APP_663`](src/02/04/z2ui5_cl_smpc_app_663.clas.abap) | +| **sap.f.SidePanel** — Side Panel with overflow menu
Demonstrates the usage of Side Panel with overflow menu on desktop and tablet devices.
sidepanel side panel sap.f sidepaneloverflow button vbox label switch text sidepanelitem
○ generated · 3 deviations | [`Z2UI5_CL_SMPC_APP_664`](src/02/04/z2ui5_cl_smpc_app_664.clas.abap) | +| **sap.f.SidePanel** — Resizable Side Panel
Demonstrates the usage of resizable Side Panel.
sidepanel side panel sap.f sidepanelresizable button vbox label switch text sidepanelitem input
○ generated · 3 deviations | [`Z2UI5_CL_SMPC_APP_665`](src/02/04/z2ui5_cl_smpc_app_665.clas.abap) | ### sap.ui.layout.form @@ -1398,16 +1398,16 @@ For what is NOT here — which demo kit samples are still unported and why — s | Sample | Class | |---|---| -| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - File Name validation configuration
UploadSetwithTablePlugin.FileNameValidationSample | [`Z2UI5_CL_SMPC_APP_652`](src/02/01/z2ui5_cl_smpc_app_652.clas.abap) | -| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - File Preview with Custom Page Content for non supported file types
| [`Z2UI5_CL_SMPC_APP_653`](src/02/01/z2ui5_cl_smpc_app_653.clas.abap) | -| **sap.m.plugins.UploadSetwithTable** — Plugin for Grid Table (sap.ui.table.Table)
UploadSetwithTablePlugin.GridTableSimple | [`Z2UI5_CL_SMPC_APP_654`](src/02/01/z2ui5_cl_smpc_app_654.clas.abap) | -| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - Multiple plugin instances with multiple tables
UploadSetwithTablePlugin.MultiplePluginInstances | [`Z2UI5_CL_SMPC_APP_655`](src/02/01/z2ui5_cl_smpc_app_655.clas.abap) | -| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - File upload with user dialogs
UploadSetwithTablePlugin.ResponsiveTableFileDialogs | [`Z2UI5_CL_SMPC_APP_656`](src/02/01/z2ui5_cl_smpc_app_656.clas.abap) | -| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - File Preview
UploadSetwithTablePlugin.ResponsiveTableFilePreview | [`Z2UI5_CL_SMPC_APP_657`](src/02/01/z2ui5_cl_smpc_app_657.clas.abap) | -| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - Upload Progress and Upload Termination
| [`Z2UI5_CL_SMPC_APP_658`](src/02/01/z2ui5_cl_smpc_app_658.clas.abap) | -| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table)
UploadSetwithTablePlugin.ResponsiveTableSimple | [`Z2UI5_CL_SMPC_APP_659`](src/02/01/z2ui5_cl_smpc_app_659.clas.abap) | -| **sap.m.plugins.UploadSetwithTable** — Plugin for Tree Table (sap.ui.table.TreeTable)
UploadSetwithTablePlugin.TreeTableSimple | [`Z2UI5_CL_SMPC_APP_660`](src/02/01/z2ui5_cl_smpc_app_660.clas.abap) | -| **sap.m.plugins.UploadSetwithTable** — Plugin for Tree Table with folder hierarchy & folder uploads
| [`Z2UI5_CL_SMPC_APP_661`](src/02/01/z2ui5_cl_smpc_app_661.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - File Name validation configuration
This example demonstrates the usage of fileNameValidationConfig property to configure file name validation for renaming a file.
uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.filenamevalidationsample dynamicpage vbox messagestrip text hbox checkbox
○ generated · 12 deviations | [`Z2UI5_CL_SMPC_APP_652`](src/02/01/z2ui5_cl_smpc_app_652.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - File Preview with Custom Page Content for non supported file types
This example showcases how to display custom page content for non supported file types in the FilePreviewDialog control.
uploadsetwithtable upload setwith table sap.m.plugins filepreviewcustompagecontent dynamicpage vbox messagestrip overflowtoolbar title toolbarspacer
○ generated · 12 deviations | [`Z2UI5_CL_SMPC_APP_653`](src/02/01/z2ui5_cl_smpc_app_653.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Grid Table (sap.ui.table.Table)
This example demonstrates the usage of UploadSetwithTable plugin for grid table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.
uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.gridtablesimple dynamicpage overflowtoolbar title toolbarspacer actionsplaceholder button
○ generated · 9 deviations | [`Z2UI5_CL_SMPC_APP_654`](src/02/01/z2ui5_cl_smpc_app_654.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - Multiple plugin instances with multiple tables
This example demonstrates the usage of multiple plugin instances with multiple tables. The plugin instances are created for each table and the uploaded files are displayed in their respective tables.
uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.multipleplugininstances dynamicpage vbox overflowtoolbar title toolbarspacer searchfield
○ generated · 11 deviations | [`Z2UI5_CL_SMPC_APP_655`](src/02/01/z2ui5_cl_smpc_app_655.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - File upload with user dialogs
This example demonstrates usage of itemValidationHandler callback to leverage additional validations and configurations for the items that are to be uploaded, and also the manual trigger of the upload process.
uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.responsivetablefiledialogs dynamicpage overflowtoolbar title toolbarspacer searchfield overflowtoolbarlayoutdata
○ generated · 11 deviations | [`Z2UI5_CL_SMPC_APP_656`](src/02/01/z2ui5_cl_smpc_app_656.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - File Preview
This example showcases how uploaded files can be previewed with FilePreviewDialog control and its related configuration. UploadSetwithTable plugin creates and uses default instance of FilePreviewDialog, if not defined.
uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.responsivetablefilepreview dynamicpage overflowtoolbar title toolbarspacer searchfield overflowtoolbarlayoutdata
○ generated · 11 deviations | [`Z2UI5_CL_SMPC_APP_657`](src/02/01/z2ui5_cl_smpc_app_657.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table) - Upload Progress and Upload Termination
This example demonstrates the progress or termination of the items that are being uploaded. The upload progress is displayed for each item that is being uploaded. The users can terminate the upload process at any time.
uploadsetwithtable upload setwith table sap.m.plugins responsivetableprogressindicator dynamicpage overflowtoolbar title toolbarspacer searchfield overflowtoolbarlayoutdata
○ generated · 10 deviations | [`Z2UI5_CL_SMPC_APP_658`](src/02/01/z2ui5_cl_smpc_app_658.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Responsive Table (sap.m.Table)
This example demonstrates the usage of UploadSetwithTable plugin for responsive table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.
uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.responsivetablesimple dynamicpage overflowtoolbar title toolbarspacer searchfield overflowtoolbarlayoutdata
○ generated · 10 deviations | [`Z2UI5_CL_SMPC_APP_659`](src/02/01/z2ui5_cl_smpc_app_659.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Tree Table (sap.ui.table.TreeTable)
This example demonstrates the usage of UploadSetwithTable plugin for tree table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.
uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.treetablesimple dynamicpage treetable overflowtoolbar title toolbarspacer actionsplaceholder
○ generated · 9 deviations | [`Z2UI5_CL_SMPC_APP_660`](src/02/01/z2ui5_cl_smpc_app_660.clas.abap) | +| **sap.m.plugins.UploadSetwithTable** — Plugin for Tree Table with folder hierarchy & folder uploads
This example demonstrates the usage of UploadSetwithTable plugin with a tree table featuring folder hierarchy, folder creation, folder uploads, folder navigation with breadcrumbs and folder management
uploadsetwithtable upload setwith table sap.m.plugins treetablewithfolderhierarchy dynamicpage treetable overflowtoolbar breadcrumbs link actionsplaceholder
○ generated · 10 deviations | [`Z2UI5_CL_SMPC_APP_661`](src/02/01/z2ui5_cl_smpc_app_661.clas.abap) | ### sap.ui.layout.cssgrid @@ -1446,13 +1446,13 @@ For what is NOT here — which demo kit samples are still unported and why — s | Sample | Class | |---|---| -| **sap.m.p13n.Container** — p13n.Container usage in a Dialog/Popover
p13n.Container | [`Z2UI5_CL_SMPC_APP_644`](src/02/01/z2ui5_cl_smpc_app_644.clas.abap) | -| **sap.m.p13n.Engine** — Personalization for responsive table
p13n.Engine | [`Z2UI5_CL_SMPC_APP_645`](src/02/01/z2ui5_cl_smpc_app_645.clas.abap) | -| **sap.m.p13n.Engine** — Personalization implementing custom filter controls
p13n.EngineCustomFilters | [`Z2UI5_CL_SMPC_APP_646`](src/02/01/z2ui5_cl_smpc_app_646.clas.abap) | -| **sap.m.p13n.Engine** — Personalization for grid list
p13n.EngineGridList | [`Z2UI5_CL_SMPC_APP_647`](src/02/01/z2ui5_cl_smpc_app_647.clas.abap) | -| **sap.m.p13n.Engine** — Personalization for grid table
p13n.EngineGridTable | [`Z2UI5_CL_SMPC_APP_648`](src/02/01/z2ui5_cl_smpc_app_648.clas.abap) | -| **sap.m.p13n.Engine** — Personalization with multiple SelectionControllers
p13n.EngineMultipleController | [`Z2UI5_CL_SMPC_APP_649`](src/02/01/z2ui5_cl_smpc_app_649.clas.abap) | -| **sap.m.p13n.Popup** — p13n.Popup usage
p13n.Popup | [`Z2UI5_CL_SMPC_APP_650`](src/02/01/z2ui5_cl_smpc_app_650.clas.abap) | +| **sap.m.p13n.Container** — p13n.Container usage in a Dialog/Popover
Dialog & Popover with a sap.m.P13nContainer as content.
container sap.m.p13n p13n.container vbox radiobuttongroup radiobutton label button text
○ generated · 5 deviations | [`Z2UI5_CL_SMPC_APP_644`](src/02/01/z2ui5_cl_smpc_app_644.clas.abap) | +| **sap.m.p13n.Engine** — Personalization for responsive table
Responsive Table using the personalization Engine
engine sap.m.p13n p13n.engine table overflowtoolbar title toolbarseparator toolbarspacer button text columnresizer menu
○ generated · 7 deviations | [`Z2UI5_CL_SMPC_APP_645`](src/02/01/z2ui5_cl_smpc_app_645.clas.abap) | +| **sap.m.p13n.Engine** — Personalization implementing custom filter controls
Filtering using the personalization Engine
engine sap.m.p13n p13n.enginecustomfilters table overflowtoolbar title toolbarseparator toolbarspacer button columnresizer menu quicksort
○ generated · 6 deviations | [`Z2UI5_CL_SMPC_APP_646`](src/02/01/z2ui5_cl_smpc_app_646.clas.abap) | +| **sap.m.p13n.Engine** — Personalization for grid list
GridList using the personalization Engine
engine sap.m.p13n p13n.enginegridlist vbox toolbar title toolbarseparator toolbarspacer button gridlist customlistitem flexitemdata
○ generated · 4 deviations | [`Z2UI5_CL_SMPC_APP_647`](src/02/01/z2ui5_cl_smpc_app_647.clas.abap) | +| **sap.m.p13n.Engine** — Personalization for grid table
Grid Table using the personalization Engine
engine sap.m.p13n p13n.enginegridtable table overflowtoolbar title toolbarseparator toolbarspacer button menu popup selectionpanel
○ generated · 6 deviations | [`Z2UI5_CL_SMPC_APP_648`](src/02/01/z2ui5_cl_smpc_app_648.clas.abap) | +| **sap.m.p13n.Engine** — Personalization with multiple SelectionControllers
Personalization for Reponsive Table using multiple SelectionControllers
engine sap.m.p13n p13n.enginemultiplecontroller table overflowtoolbar title toolbarseparator toolbarspacer button menu actionitem popup
○ generated · 6 deviations | [`Z2UI5_CL_SMPC_APP_649`](src/02/01/z2ui5_cl_smpc_app_649.clas.abap) | +| **sap.m.p13n.Popup** — p13n.Popup usage
Dialog with sap.m.p13n/* Panels
popup sap.m.p13n p13n.popup vbox button selectionpanel sortpanel grouppanel codeeditor
○ generated · 6 deviations | [`Z2UI5_CL_SMPC_APP_650`](src/02/01/z2ui5_cl_smpc_app_650.clas.abap) | ### sap.m.semantic diff --git a/STATUS.md b/STATUS.md index 8db67f617..7dacaf1c2 100644 --- a/STATUS.md +++ b/STATUS.md @@ -18,9 +18,9 @@ TRAINING.md; for what abap2UI5 can express see CAPABILITIES.md._ | Ports | **670** sidecars in `meta/` (src/01 OpenUI5 <= 1.71: 401 · src/02 OpenUI5 > 1.71: 269) | | Per library | sap.f: 46 · sap.m: 431 · sap.tnt: 17 · sap.ui: 131 · sap.uxap: 45 | | Status ladder | 256 `generated` · 355 `reviewed` · 59 `checked` (live-verified) | -| Deviations | 10 DROPPED_171 · 161 IMPROVISED · 1937 NOTE · 349 POST_171 | -| Open LIVE_TESTs | **0 ports** carry at least one `LIVE_TEST` deviation — the automated close path is the e2e interaction harness (AGENTS §6 `e2e_smoke`) | -| Declared gate skips | 2 structural-diff · 5 render-smoke · 0 data-fidelity · 1 property-gate (each re-verified per run — a stale skip FAILS) | +| Deviations | 10 DROPPED_171 · 214 IMPROVISED · 25 LIVE_TEST · 2040 NOTE · 396 POST_171 | +| Open LIVE_TESTs | **25 ports** carry at least one `LIVE_TEST` deviation — the automated close path is the e2e interaction harness (AGENTS §6 `e2e_smoke`) | +| Declared gate skips | 2 structural-diff · 8 render-smoke · 0 data-fidelity · 1 property-gate (each re-verified per run — a stale skip FAILS) | | Out-of-scope ported samples | `z2ui5_cl_smpc_app_121 (sap.m.sample.UploadSet — deprecated)` — all decided KEEP permanently 2026-07-30 (per-app rationale in ui5/scope-exceptions.json, revertible); the source-backed scope gate stays hard for NEW undecided entries | | Hold-out set (generator KPI) | **24** reserved samples in `ui5/holdout.json` · **12** spent as measurements (now ordinary ports: 098, 100, 101, 103, 153, 154, 210, 212, 229, 237, 242, 243) · results: 2 probe section(s) in [docs/history.md](docs/history.md): "Hold-out probe #2 (2026-07-26) — fidelity way up, syntax is the new frontier" · "Hold-out regeneration probe #1 (2026-07-19) — baseline set" — the measurement TRAINING.md "Measuring progress" defines, and the one number that still measures the generator with the portable backlog closed | diff --git a/abaplint.jsonc b/abaplint.jsonc index b2efc8368..e54da99d7 100644 --- a/abaplint.jsonc +++ b/abaplint.jsonc @@ -289,7 +289,7 @@ // d'erables) - written here the way the original writes them. "7bit_ascii": { "exclude": [ - "z2ui5_cl_smpc_app_(012|040|092|103|104|114|134|185|191|194|215|218|254|290|302|303|350|356|357|358|360|445|525|558|565|572|575|578|579|580|584|611)\\.clas\\.", + "z2ui5_cl_smpc_app_(012|040|092|103|104|114|134|185|191|194|215|218|254|290|302|303|350|356|357|358|360|445|525|558|565|572|575|578|579|580|584|611|649|668|671)\\.clas\\.", "z2ui5_cl_smpc_app_000\\.clas\\.", "z2ui5_cl_smpc_demo_\\d+\\.clas\\." ] diff --git a/catalogue-derived.json b/catalogue-derived.json index 4cc937d0d..222c46cd0 100644 --- a/catalogue-derived.json +++ b/catalogue-derived.json @@ -35,6 +35,8 @@ "1.100", "1.101", "1.103", + "1.104", + "1.105", "1.106", "1.107", "1.109", @@ -57,11 +59,13 @@ "1.132", "1.133", "1.134", + "1.136", "1.137", "1.139", "1.140", "1.142", "1.143", + "1.146", "1.147", "1.149", "1.150", @@ -371,6 +375,22 @@ "sap.m.LinkTileContent", "sap.m.OverflowToolbarMenuButton", "sap.m.OverflowToolbarToggleButton", + "sap.m.DynamicDateRange", + "sap.m.ExpandableText", + "sap.m.p13n.AbstractContainerItem", + "sap.m.p13n.Container", + "sap.m.p13n.GroupPanel", + "sap.m.p13n.Popup", + "sap.m.p13n.SelectionPanel", + "sap.m.p13n.SortPanel", + "sap.m.table.columnmenu.QuickGroup", + "sap.m.table.columnmenu.QuickGroupItem", + "sap.m.VariantItem", + "sap.m.VariantManagement", + "sap.m.plugins.UploadSetwithTable", + "sap.m.upload.ActionsPlaceholder", + "sap.m.upload.UploadItemConfiguration", + "sap.m.upload.FilePreviewDialog", "sap.f.ShellBar", "sap.f.cards.CardBadgeCustomData", "sap.ui.unified.Menu", @@ -399,6 +419,9 @@ "sap.f.FlexibleColumnLayoutDataForDesktop", "sap.f.FlexibleColumnLayoutDataForTablet", "sap.tnt.SideNavigation", + "sap.f.AvatarGroup", + "sap.f.AvatarGroupItem", + "sap.f.HeroBanner", "sap.tnt.NavigationListGroup", "sap.tnt.ToolHeaderUtilitySeparator", "sap.tnt.SideNavigationSearchField", @@ -461,7 +484,7 @@ ], "counts": { "ports": 689, - "controls": 389 + "controls": 408 }, "ports": [ {"class":"z2ui5_cl_smpc_app_001","description":"Use the Action List Item to trigger an action directly from a list","minUi5":"1.71","needs":[],"controls":[0,1,2],"controlCount":7}, @@ -573,7 +596,7 @@ {"class":"z2ui5_cl_smpc_app_107","description":"Semantic Page Master/Detail","minUi5":"1.71","needs":[],"controls":[3,78,122,123,147,137,112,124,138,126,128,139,129,140,141,142,131,143,144,145,132,133,134,135,146,15,2,136],"controlCount":30}, {"class":"z2ui5_cl_smpc_app_108","description":"PlanningCalendar with only one row without row header. On click on an interval a new appointment is created.","minUi5":"1.150","needs":[{"type":"member-too-new","name":"sap.ui.unified.CalendarAppointment.ariaHasPopup","since":"1.150"}],"controls":[175,176,20,33,9,2,177],"controlCount":8}, {"class":"z2ui5_cl_smpc_app_109","description":"SinglePlanningCalendar with multiple date selection functionality.","minUi5":"1.123","needs":[{"type":"member-too-new","name":"sap.m.SinglePlanningCalendar.selectedDatesChange","since":"1.123"},{"type":"member-too-new","name":"sap.m.SinglePlanningCalendar.weekNumberPress","since":"1.123"},{"type":"icon-too-new","name":"select-appointments","since":"1.96"}],"controls":[12,4,52,178,179,265,180,181,33,174,9,2,177],"controlCount":13}, - {"class":"z2ui5_cl_smpc_app_110","description":"Shell Bar example showing the control title as part of a mega menu, configurable by the app developer.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"}],"controls":[302,258,167,168,2],"controlCount":6}, + {"class":"z2ui5_cl_smpc_app_110","description":"Shell Bar example showing the control title as part of a mega menu, configurable by the app developer.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"}],"controls":[318,258,167,168,2],"controlCount":6}, {"class":"z2ui5_cl_smpc_app_111","description":"","minUi5":"1.71","needs":[],"controls":[50,51,19,12,46,90,20,21,9,2],"controlCount":11}, {"class":"z2ui5_cl_smpc_app_112","description":"Basic example of Color Picker. Note that you have to set the Color Picker mode to HSL to take advantage of the responsiveness of the control on a mobile device.","minUi5":"1.71","needs":[],"controls":[3,5,171,9,18,2,186],"controlCount":10}, {"class":"z2ui5_cl_smpc_app_113","description":"InfoLabel with all available color schemes","minUi5":"1.74","needs":[{"type":"member-too-new","name":"sap.tnt.InfoLabel.icon","since":"1.74"}],"controls":[58,75,7,251,2],"controlCount":33}, @@ -581,7 +604,7 @@ {"class":"z2ui5_cl_smpc_app_115","description":"Basic example showing most controls which are intended to be used inside a table.","minUi5":"1.71","needs":[],"controls":[3,23,29,117,45,12,13,149,83,4,5,14,7,20,150,56,15,2,188,189,190],"controlCount":48}, {"class":"z2ui5_cl_smpc_app_116","description":"This example shows subsections in expanded and collapsed mode.","minUi5":"1.71","needs":[],"controls":[12,7,2,26,214,215,216,217],"controlCount":81}, {"class":"z2ui5_cl_smpc_app_117","description":"This sample illustrates how to specify the predefined header and the content of the Card control.","minUi5":"1.71","needs":[],"controls":[35,39,3,29,43,117,11,1,83,7,20,9,15,2],"controlCount":21}, - {"class":"z2ui5_cl_smpc_app_118","description":"Different types of cards types arranged in a sap.f.GridContainer.","minUi5":"1.128","needs":[{"type":"control-too-new","name":"sap.f.cards.CardBadgeCustomData","since":"1.128"},{"type":"control-too-new","name":"sap.f.cards.CardBadgeCustomData","since":"1.128"},{"type":"control-too-new","name":"sap.f.cards.CardBadgeCustomData","since":"1.128"},{"type":"control-too-new","name":"sap.f.cards.CardBadgeCustomData","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.announcementText","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.announcementText","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.announcementText","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.announcementText","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.icon","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.icon","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.state","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.visibilityMode","since":"1.128"},{"type":"event-parameter-too-new","name":"sap.ui.integration.widgets.Card.parameters","since":"1.76"},{"type":"event-parameter-too-new","name":"sap.ui.integration.widgets.Card.parameters","since":"1.76"},{"type":"event-parameter-too-new","name":"sap.ui.integration.widgets.Card.parameters","since":"1.76"},{"type":"event-parameter-too-new","name":"sap.ui.integration.widgets.Card.parameters","since":"1.76"},{"type":"event-parameter-too-new","name":"sap.ui.integration.widgets.Card.parameters","since":"1.76"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"}],"controls":[209,210,237,302,303,258,73,74,167,168,20,2,211],"controlCount":37}, + {"class":"z2ui5_cl_smpc_app_118","description":"Different types of cards types arranged in a sap.f.GridContainer.","minUi5":"1.128","needs":[{"type":"control-too-new","name":"sap.f.cards.CardBadgeCustomData","since":"1.128"},{"type":"control-too-new","name":"sap.f.cards.CardBadgeCustomData","since":"1.128"},{"type":"control-too-new","name":"sap.f.cards.CardBadgeCustomData","since":"1.128"},{"type":"control-too-new","name":"sap.f.cards.CardBadgeCustomData","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.announcementText","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.announcementText","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.announcementText","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.announcementText","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.icon","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.icon","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.state","since":"1.128"},{"type":"member-too-new","name":"sap.f.cards.CardBadgeCustomData.visibilityMode","since":"1.128"},{"type":"event-parameter-too-new","name":"sap.ui.integration.widgets.Card.parameters","since":"1.76"},{"type":"event-parameter-too-new","name":"sap.ui.integration.widgets.Card.parameters","since":"1.76"},{"type":"event-parameter-too-new","name":"sap.ui.integration.widgets.Card.parameters","since":"1.76"},{"type":"event-parameter-too-new","name":"sap.ui.integration.widgets.Card.parameters","since":"1.76"},{"type":"event-parameter-too-new","name":"sap.ui.integration.widgets.Card.parameters","since":"1.76"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"}],"controls":[209,210,237,318,319,258,73,74,167,168,20,2,211],"controlCount":37}, {"class":"z2ui5_cl_smpc_app_119","description":"Shows a FixFlex control with a vertical layout.","minUi5":"1.71","needs":[],"controls":[55,7,24,2,191],"controlCount":5}, {"class":"z2ui5_cl_smpc_app_120","description":"With the HTML controls you can easily embed any kind of HTML content into your UI5 mobile application.","minUi5":"1.71","needs":[],"controls":[24,2,16],"controlCount":3}, {"class":"z2ui5_cl_smpc_app_121","description":"This sample shows an Upload Set control with a list of files to be uploaded and actions you can perform on them.","minUi5":"1.103","needs":[{"type":"control-too-new","name":"sap.m.upload.UploadSetToolbarPlaceholder","since":"1.103"},{"type":"member-too-new","name":"sap.m.upload.UploadSet.mode","since":"1.100"},{"type":"member-too-new","name":"sap.m.upload.UploadSet.afterItemRemoved","since":"1.83"}],"controls":[3,156,83,4,5,8,266,267,268,2],"controlCount":12}, @@ -591,15 +614,15 @@ {"class":"z2ui5_cl_smpc_app_125","description":"Simple splitter example with two content areas","minUi5":"1.71","needs":[],"controls":[40,3,2,194,195],"controlCount":7}, {"class":"z2ui5_cl_smpc_app_126","description":"Basic File Uploader Example","minUi5":"1.71","needs":[],"controls":[3,24,2,16,121],"controlCount":5}, {"class":"z2ui5_cl_smpc_app_127","description":"Many controls provide the associations ariaLabelledBy and ariaDescribedBy for accessibility purposes. The InvisibleText control can be used by application to provide hidden texts on the UI which can be referenced via these associations.","minUi5":"1.71","needs":[],"controls":[3,19,11,12,5,20,21,8,22,2],"controlCount":35}, - {"class":"z2ui5_cl_smpc_app_128","description":"SideNavigation in container with fixed width.","minUi5":"1.121","needs":[{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"icon-too-new","name":"people-connected","since":"1.96"}],"controls":[3,9,252,330,253,329,2],"controlCount":28}, + {"class":"z2ui5_cl_smpc_app_128","description":"SideNavigation in container with fixed width.","minUi5":"1.121","needs":[{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"icon-too-new","name":"people-connected","since":"1.96"}],"controls":[3,9,252,349,253,345,2],"controlCount":28}, {"class":"z2ui5_cl_smpc_app_129","description":"Formats and parses only the integer digits. The decimal digits are ignored.","minUi5":"1.71","needs":[],"controls":[45,12,7,2,26],"controlCount":14}, {"class":"z2ui5_cl_smpc_app_130","description":"A control's busy indicator can be used to block parts of the screen until an operation has finished. In this example we block the content of only one out of two panels.","minUi5":"1.71","needs":[],"controls":[3,5,46,7,21,8,56,2],"controlCount":9}, {"class":"z2ui5_cl_smpc_app_131","description":"Sample provides a link to the Theme Parameter Toolbox. There you can easily search, preview, and filter semantic theme parameters.","minUi5":"1.71","needs":[],"controls":[13,89,2,16],"controlCount":4}, - {"class":"z2ui5_cl_smpc_app_132","description":"SideNavigation with tags for status indicators and metadata.","minUi5":"1.149","needs":[{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"}],"controls":[3,83,9,252,330,253,329,2],"controlCount":31}, + {"class":"z2ui5_cl_smpc_app_132","description":"SideNavigation with tags for status indicators and metadata.","minUi5":"1.149","needs":[{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"}],"controls":[3,83,9,252,349,253,345,2],"controlCount":31}, {"class":"z2ui5_cl_smpc_app_133","description":"This is a sample for GridList with different modes of selection.","minUi5":"1.71","needs":[],"controls":[50,51,11,55,12,86,87,20,9,24,2,54],"controlCount":20}, - {"class":"z2ui5_cl_smpc_app_134","description":"ToolHeader that mimics the content of the Shell.","minUi5":"1.96","needs":[{"type":"icon-too-new","name":"da","since":"1.96"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,3,55,123,52,75,6,7,20,8,312,331,2],"controlCount":36}, + {"class":"z2ui5_cl_smpc_app_134","description":"ToolHeader that mimics the content of the Shell.","minUi5":"1.96","needs":[{"type":"icon-too-new","name":"da","since":"1.96"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,3,55,123,52,75,6,7,20,8,328,350,2],"controlCount":36}, {"class":"z2ui5_cl_smpc_app_135","description":"Formats the number by using the parameters defined for the given currency code. Either currency symbol, currency code or none of them can be included in the final formatted string. It parses the given string into an array which contains both the currency number and currency code.","minUi5":"1.71","needs":[],"controls":[45,12,7,2,26],"controlCount":18}, - {"class":"z2ui5_cl_smpc_app_136","description":"Demonstrates the usage of Side Panel with single action item.","minUi5":"1.107","needs":[{"type":"control-too-new","name":"sap.f.SidePanel","since":"1.107"},{"type":"aggregation-too-new","name":"sap.f.SidePanel.items","since":"1.107"},{"type":"aggregation-too-new","name":"sap.f.SidePanel.mainContent","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanel.toggle","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"}],"controls":[320,321,3,12,5,53,7,9,2],"controlCount":26}, + {"class":"z2ui5_cl_smpc_app_136","description":"Demonstrates the usage of Side Panel with single action item.","minUi5":"1.107","needs":[{"type":"control-too-new","name":"sap.f.SidePanel","since":"1.107"},{"type":"aggregation-too-new","name":"sap.f.SidePanel.items","since":"1.107"},{"type":"aggregation-too-new","name":"sap.f.SidePanel.mainContent","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanel.toggle","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"}],"controls":[336,337,3,12,5,53,7,9,2],"controlCount":26}, {"class":"z2ui5_cl_smpc_app_137","description":"Example for multi-header of table","minUi5":"1.71","needs":[],"controls":[45,12,4,5,7,20,2,188,189],"controlCount":27}, {"class":"z2ui5_cl_smpc_app_138","description":"Attaches side content area which is next to the main content of the page on larger screens taking different ratios between the two on different screen sizes and on phone size screens the side content area falls down under the main content area. Best viewed in full screen.","minUi5":"1.71","needs":[],"controls":[3,5,90,7,20,21,24,2,196],"controlCount":13}, {"class":"z2ui5_cl_smpc_app_139","description":"Calendar where the user can select a single day","minUi5":"1.71","needs":[],"controls":[3,12,7,24,2,61,16,182,200],"controlCount":9}, @@ -615,7 +638,7 @@ {"class":"z2ui5_cl_smpc_app_149","description":"Card Explorer is the application where you can learn more about integration cards.","minUi5":"1.71","needs":[],"controls":[55,13,9,2],"controlCount":4}, {"class":"z2ui5_cl_smpc_app_150","description":"Example how to use CodeEditor with IconTabHeader to create a tab-based experience.","minUi5":"1.71","needs":[],"controls":[74,93,187,2],"controlCount":5}, {"class":"z2ui5_cl_smpc_app_151","description":"islamic Calendar with secondary gregorian type","minUi5":"1.71","needs":[],"controls":[3,12,7,2,61,16,182],"controlCount":7}, - {"class":"z2ui5_cl_smpc_app_152","description":"Shell Bar example with a menu button and a plain title.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"}],"controls":[302,258,2],"controlCount":3}, + {"class":"z2ui5_cl_smpc_app_152","description":"Shell Bar example with a menu button and a plain title.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"}],"controls":[318,258,2],"controlCount":3}, {"class":"z2ui5_cl_smpc_app_153","description":"The sap.m.MaskInput control allows users to easily enter data in a certain format and in a fixed-width input (for example: date, time, credit card number, and others).","minUi5":"1.96","needs":[{"type":"member-too-new","name":"sap.m.MaskInput.showClearIcon","since":"1.96"},{"type":"member-too-new","name":"sap.m.MaskInput.showClearIcon","since":"1.96"},{"type":"member-too-new","name":"sap.m.MaskInput.showClearIcon","since":"1.96"},{"type":"member-too-new","name":"sap.m.MaskInput.showClearIcon","since":"1.96"}],"controls":[40,12,269,270,5,2,26],"controlCount":21}, {"class":"z2ui5_cl_smpc_app_154","description":"The control can be used for embedding formatted HTML text into your application.","minUi5":"1.71","needs":[],"controls":[44,9,2],"controlCount":3}, {"class":"z2ui5_cl_smpc_app_155","description":"Checkboxes allow users to select a subset of options. If you want to offer an off/on setting you should use the Switch control instead.","minUi5":"1.121","needs":[{"type":"member-too-new","name":"sap.m.CheckBox.required","since":"1.121"}],"controls":[23,12,9,2,197,26],"controlCount":26}, @@ -628,14 +651,14 @@ {"class":"z2ui5_cl_smpc_app_162","description":"The Horizontal Layout control is a simple way to align multiple controls horizontally. By default the contained controls are not wrapped. If you want more sophisticated layout options, consider Grid or Flex Box based layouts.","minUi5":"1.71","needs":[],"controls":[55,2,61],"controlCount":5}, {"class":"z2ui5_cl_smpc_app_163","description":"Toolbar items can be displayed depending on the current device.","minUi5":"1.71","needs":[],"controls":[148,3,5,7,21,8,18,2],"controlCount":21}, {"class":"z2ui5_cl_smpc_app_164","description":"Example for the different row modes","minUi5":"1.119","needs":[{"type":"member-too-new","name":"sap.ui.table.Table.rowMode","since":"1.119"}],"controls":[12,13,4,5,86,87,7,20,2,188,189],"controlCount":26}, - {"class":"z2ui5_cl_smpc_app_165","description":"This sample demonstrates the navigation behavior of Product Switch, configurable by the app developer.","minUi5":"1.72","needs":[{"type":"control-too-new","name":"sap.f.ProductSwitch","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitch.change","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitch.items","since":"1.72"},{"type":"aggregation-too-new","name":"sap.f.ProductSwitch.items","since":"1.72"},{"type":"control-too-new","name":"sap.f.ProductSwitchItem","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.src","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.subTitle","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.target","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.targetSrc","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.title","since":"1.72"}],"controls":[322,323,3,171,7,18,2,16],"controlCount":10}, + {"class":"z2ui5_cl_smpc_app_165","description":"This sample demonstrates the navigation behavior of Product Switch, configurable by the app developer.","minUi5":"1.72","needs":[{"type":"control-too-new","name":"sap.f.ProductSwitch","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitch.change","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitch.items","since":"1.72"},{"type":"aggregation-too-new","name":"sap.f.ProductSwitch.items","since":"1.72"},{"type":"control-too-new","name":"sap.f.ProductSwitchItem","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.src","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.subTitle","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.target","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.targetSrc","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.title","since":"1.72"}],"controls":[338,339,3,171,7,18,2,16],"controlCount":10}, {"class":"z2ui5_cl_smpc_app_166","description":"This sample demonstrates the use of a DraftIndicator in the footer area.","minUi5":"1.71","needs":[],"controls":[226,227,228,229,230,231,232,3,27,28,63,78,122,81,30,83,32,7,20,2,61,16,136],"controlCount":36}, - {"class":"z2ui5_cl_smpc_app_167","description":"A tool page layout with vertical navigation","minUi5":"1.133","needs":[{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"}],"controls":[3,34,118,52,235,75,7,8,252,253,329,312,331,313,18,2],"controlCount":52}, + {"class":"z2ui5_cl_smpc_app_167","description":"A tool page layout with vertical navigation","minUi5":"1.133","needs":[{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"}],"controls":[3,34,118,52,235,75,7,8,252,253,345,328,350,329,18,2],"controlCount":52}, {"class":"z2ui5_cl_smpc_app_168","description":"This sample represents the general usage of GridContainer.","minUi5":"1.71","needs":[],"controls":[35,209,210,237,39,3,29,43,117,104,11,94,12,1,71,83,46,75,53,7,72,20,33,9,15,2,211],"controlCount":73}, {"class":"z2ui5_cl_smpc_app_169","description":"Take advantage of sap.ui.layout.GridData to control the appearance of individual Grid children.","minUi5":"1.71","needs":[],"controls":[44,89,90,20,24,2,77,197,16],"controlCount":76}, {"class":"z2ui5_cl_smpc_app_170","description":"Dynamic Page freestyle example with a responsive sap.m.Table in the content area, showing that each control can be placed in the title and the header content areas.","minUi5":"1.71","needs":[],"controls":[35,36,37,38,233,234,10,3,27,28,173,12,13,81,30,31,83,4,52,235,32,7,20,21,8,18,2,61,16],"controlCount":61}, {"class":"z2ui5_cl_smpc_app_171","description":"Display Currencies in Table","minUi5":"1.71","needs":[],"controls":[27,28,30,31,32,7,2,190],"controlCount":15}, - {"class":"z2ui5_cl_smpc_app_172","description":"SideNavigation with unselectable parent items.","minUi5":"1.116","needs":[{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"}],"controls":[3,9,252,253,329,2],"controlCount":19}, + {"class":"z2ui5_cl_smpc_app_172","description":"SideNavigation with unselectable parent items.","minUi5":"1.116","needs":[{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"}],"controls":[3,9,252,253,345,2],"controlCount":19}, {"class":"z2ui5_cl_smpc_app_173","description":"The Vertical Layout control is a simple way to align multiple controls vertically. If you want more sophisticated layout options, consider Grid or Flex Box based layouts.","minUi5":"1.71","needs":[],"controls":[55,2,16],"controlCount":5}, {"class":"z2ui5_cl_smpc_app_174","description":"Shows how row highlights and alternating row colors can be used.","minUi5":"1.71","needs":[],"controls":[12,4,5,14,7,20,33,8,15,2,188,198,189,190],"controlCount":29}, {"class":"z2ui5_cl_smpc_app_175","description":"A SimpleForm that uses Toolbars as Form header and FormContainer headers.","minUi5":"1.71","needs":[],"controls":[3,45,12,14,20,21,8,9,15,2,197,26],"controlCount":35}, @@ -681,17 +704,17 @@ {"class":"z2ui5_cl_smpc_app_215","description":"Shows a FixFlex control where the minFlexSize is set to 400px.","minUi5":"1.71","needs":[],"controls":[27,28,81,82,30,156,31,83,4,32,7,20,2,191],"controlCount":26}, {"class":"z2ui5_cl_smpc_app_216","description":"This is an example of an ObjectPageHeaderContent.","minUi5":"1.71","needs":[],"controls":[3,12,81,31,83,205,7,150,219,2,16,220,221],"controlCount":32}, {"class":"z2ui5_cl_smpc_app_217","description":"This is an example of an ObjectPageHeader containing mainly KPIs.","minUi5":"1.71","needs":[],"controls":[12,81,31,7,107,2,16,26,214,222,215,216,217],"controlCount":56}, - {"class":"z2ui5_cl_smpc_app_218","description":"Shell Bar example with configured search functionality.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"}],"controls":[324,302,258,167,168,166,2],"controlCount":8}, + {"class":"z2ui5_cl_smpc_app_218","description":"Shell Bar example with configured search functionality.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"}],"controls":[340,318,258,167,168,166,2],"controlCount":8}, {"class":"z2ui5_cl_smpc_app_219","description":"Shows a FixFlex control with a horizontal layout.","minUi5":"1.71","needs":[],"controls":[55,7,24,2,191],"controlCount":5}, {"class":"z2ui5_cl_smpc_app_220","description":"Calendar with minimum date 2000-01-01 and maximum date 2050-12-31, some disabled days (in January 2016) and ability to show or hide week numbers.","minUi5":"1.71","needs":[],"controls":[58,12,53,7,24,2,61,16,182,200],"controlCount":12}, - {"class":"z2ui5_cl_smpc_app_221","description":"ToolHeader can contain IconTabHeader. When both controls are combined, the IconTabHeader supports only inline text. No icons can be used.","minUi5":"1.121","needs":[{"type":"member-too-new","name":"sap.m.IconTabFilter.interactionMode","since":"1.121"},{"type":"member-too-new","name":"sap.m.IconTabFilter.interactionMode","since":"1.121"},{"type":"member-too-new","name":"sap.m.IconTabFilter.interactionMode","since":"1.121"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"}],"controls":[3,74,93,167,255,168,52,7,312,2],"controlCount":78}, - {"class":"z2ui5_cl_smpc_app_222","description":"This layout displays a variable number of grid columns depending on available screen size. Grid row's height is dynamically determined by the height of the highest grid element on this row.","minUi5":"1.72","needs":[{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnLayout","since":"1.72"}],"controls":[50,51,12,46,90,20,33,21,9,2,310,311],"controlCount":41}, + {"class":"z2ui5_cl_smpc_app_221","description":"ToolHeader can contain IconTabHeader. When both controls are combined, the IconTabHeader supports only inline text. No icons can be used.","minUi5":"1.121","needs":[{"type":"member-too-new","name":"sap.m.IconTabFilter.interactionMode","since":"1.121"},{"type":"member-too-new","name":"sap.m.IconTabFilter.interactionMode","since":"1.121"},{"type":"member-too-new","name":"sap.m.IconTabFilter.interactionMode","since":"1.121"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"}],"controls":[3,74,93,167,255,168,52,7,328,2],"controlCount":78}, + {"class":"z2ui5_cl_smpc_app_222","description":"This layout displays a variable number of grid columns depending on available screen size. Grid row's height is dynamically determined by the height of the highest grid element on this row.","minUi5":"1.72","needs":[{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnLayout","since":"1.72"}],"controls":[50,51,12,46,90,20,33,21,9,2,326,327],"controlCount":41}, {"class":"z2ui5_cl_smpc_app_223","description":"The BlockLayout Cells can have links as titles. The link text overwrites the title text.","minUi5":"1.71","needs":[],"controls":[12,13,89,86,87,90,7,2,47,48,49,16,26],"controlCount":33}, {"class":"z2ui5_cl_smpc_app_224","description":"'Single selection' forces the user to choose exactly one out of many items. With the 'multi' selection the user can pick multiple items at the same time. This is helpful for e.g. batch processing. With 'includeItem' the selection is also changed when pressing the item.","minUi5":"1.71","needs":[],"controls":[1,4,14,76,20,8,15,2],"controlCount":12}, {"class":"z2ui5_cl_smpc_app_225","description":"This example demonstrates the Strict layout and the column resizing of the table.","minUi5":"1.91","needs":[{"type":"control-too-new","name":"sap.m.plugins.ColumnResizer","since":"1.91"},{"type":"member-too-new","name":"sap.m.Table.autoPopinMode","since":"1.76"}],"controls":[27,28,30,31,32,7,272,2],"controlCount":19}, {"class":"z2ui5_cl_smpc_app_226","description":"The major layout features of the Grid control are shown in this example. Features like indentation, making content visible/invisible based on the screen size, moving content forward and backwards are demonstrated.","minUi5":"1.71","needs":[],"controls":[55,7,20,2,77,197,16],"controlCount":24}, - {"class":"z2ui5_cl_smpc_app_227","description":"Menu with Item Eventing","minUi5":"1.84","needs":[{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"}],"controls":[3,2,61,304,305,306],"controlCount":14}, - {"class":"z2ui5_cl_smpc_app_228","description":"Menu with Menu Eventing","minUi5":"1.84","needs":[{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"}],"controls":[3,2,61,304,305,306],"controlCount":14}, + {"class":"z2ui5_cl_smpc_app_227","description":"Menu with Item Eventing","minUi5":"1.84","needs":[{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"}],"controls":[3,2,61,320,321,322],"controlCount":14}, + {"class":"z2ui5_cl_smpc_app_228","description":"Menu with Menu Eventing","minUi5":"1.84","needs":[{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"}],"controls":[3,2,61,320,321,322],"controlCount":14}, {"class":"z2ui5_cl_smpc_app_229","description":"The Popover controls allows to show contextual information without leaving the current page. Press somewhere outside the popover to close it.","minUi5":"1.84","needs":[{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"},{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"}],"controls":[3,55,4,235,8,18,2,16],"controlCount":16}, {"class":"z2ui5_cl_smpc_app_230","description":"Use of dynamic bound model mapping","minUi5":"1.71","needs":[],"controls":[7,107,2,26],"controlCount":5}, {"class":"z2ui5_cl_smpc_app_232","description":"This example demonstrates how to define shortcuts using commands in your application","minUi5":"1.84","needs":[{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"},{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"}],"controls":[40,3,29,45,12,5,46,235,14,53,21,8,15,2],"controlCount":47}, @@ -702,8 +725,8 @@ {"class":"z2ui5_cl_smpc_app_237","description":"The ObjectMarker is a small building block representing an object by an icon or text and icon. Often it is used in a table.","minUi5":"1.71","needs":[],"controls":[27,28,30,156,32,7,2],"controlCount":12}, {"class":"z2ui5_cl_smpc_app_238","description":"Dynamic Page containing an sap.m.IconTabBar in the sticky subheader content area.","minUi5":"1.71","needs":[],"controls":[35,36,37,38,233,234,10,3,27,28,173,73,74,12,13,81,30,31,83,4,235,32,7,20,21,8,18,2,61,16],"controlCount":67}, {"class":"z2ui5_cl_smpc_app_239","description":"This example demonstrates ObjectPage with ObjectPageHeaderActionButtons and a GenericTag in the header.","minUi5":"1.71","needs":[],"controls":[10,173,12,13,81,83,7,20,24,2,61,16,26,218,222,215,216,217],"controlCount":105}, - {"class":"z2ui5_cl_smpc_app_240","description":"An example of adding navigatable legend to the calendar.","minUi5":"1.71","needs":[],"controls":[24,2,16,182,307,292,290],"controlCount":7}, - {"class":"z2ui5_cl_smpc_app_241","description":"SideNavigation with press event parameters and preventDefault.","minUi5":"1.137","needs":[{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.altKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.altKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.altKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.ctrlKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.ctrlKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.ctrlKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.metaKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.metaKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.metaKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.shiftKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.shiftKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.shiftKey","since":"1.137"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"}],"controls":[3,23,34,11,45,12,9,252,253,329,18,2],"controlCount":20}, + {"class":"z2ui5_cl_smpc_app_240","description":"An example of adding navigatable legend to the calendar.","minUi5":"1.71","needs":[],"controls":[24,2,16,182,323,292,290],"controlCount":7}, + {"class":"z2ui5_cl_smpc_app_241","description":"SideNavigation with press event parameters and preventDefault.","minUi5":"1.137","needs":[{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.altKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.altKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.altKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.ctrlKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.ctrlKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.ctrlKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.metaKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.metaKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.metaKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.shiftKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.shiftKey","since":"1.137"},{"type":"event-parameter-too-new","name":"sap.tnt.NavigationListItem.shiftKey","since":"1.137"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"}],"controls":[3,23,34,11,45,12,9,252,253,345,18,2],"controlCount":20}, {"class":"z2ui5_cl_smpc_app_242","description":"The Nav Container stacks multiple pages and offers an API to switch between them with some animation. Typically application developers would use the App control which inherits from NavContainer.","minUi5":"1.111","needs":[{"type":"member-too-new","name":"sap.m.NavContainer.navigationFinished","since":"1.111"}],"controls":[3,19,11,118,4,5,14,9,256,24,15,2],"controlCount":39}, {"class":"z2ui5_cl_smpc_app_243","description":"The Responsive Popover is an abstraction of Popover and Dialog. On the phone a Dialog will be shown. On tablet and desktop a Popover is shown.","minUi5":"1.129","needs":[{"type":"aggregation-too-new","name":"sap.m.ResponsivePopover.footer","since":"1.129"},{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"},{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"}],"controls":[3,55,4,171,8,18,2,16],"controlCount":16}, {"class":"z2ui5_cl_smpc_app_244","description":"Dynamic Page demonstrating the breakpointChange event to adjust Avatar sizes responsively based on breakpoints.","minUi5":"1.147","needs":[{"type":"member-too-new","name":"sap.f.DynamicPage.breakpointChange","since":"1.147"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[36,37,38,258,10,3,58,11,12,13,89,156,4,123,52,7,20,8,9,2,16],"controlCount":59}, @@ -730,7 +753,7 @@ {"class":"z2ui5_cl_smpc_app_265","description":"This sample shows how bound filters work. It features a table of customers with a 'Select' control in each row. The 'Select' control uses the customer's region to filter the list of available account managers.","minUi5":"1.71","needs":[],"controls":[12,14,7,20,15,2,188,189],"controlCount":13}, {"class":"z2ui5_cl_smpc_app_266","description":"Nested Splitter example with 7 content areas","minUi5":"1.71","needs":[],"controls":[40,3,2,194,195],"controlCount":24}, {"class":"z2ui5_cl_smpc_app_267","description":"The side content and the main content take 50%/50% of the container on all screen sizes except on phone screens where there is a button implemented to toggle between each other.","minUi5":"1.71","needs":[],"controls":[3,55,5,90,7,20,21,9,24,2,196],"controlCount":16}, - {"class":"z2ui5_cl_smpc_app_268","description":"Example of ColorPicker in a popover using the thin wrapper control sap.ui.unified.ColorPickerPopover.","minUi5":"1.85","needs":[{"type":"member-too-new","name":"sap.ui.unified.ColorPickerPopover.liveChange","since":"1.85"}],"controls":[27,28,45,12,32,7,2,308],"controlCount":25}, + {"class":"z2ui5_cl_smpc_app_268","description":"Example of ColorPicker in a popover using the thin wrapper control sap.ui.unified.ColorPickerPopover.","minUi5":"1.85","needs":[{"type":"member-too-new","name":"sap.ui.unified.ColorPickerPopover.liveChange","since":"1.85"}],"controls":[27,28,45,12,32,7,2,324],"controlCount":25}, {"class":"z2ui5_cl_smpc_app_269","description":"Product page with comments example.","minUi5":"1.71","needs":[],"controls":[3,68,69,55,1,5,90,7,20,21,8,9,24,2,196,16],"controlCount":22}, {"class":"z2ui5_cl_smpc_app_270","description":"CSSGrid example nested grids.","minUi5":"1.71","needs":[],"controls":[4,46,90,7,20,9,24,2,192,193],"controlCount":30}, {"class":"z2ui5_cl_smpc_app_271","description":"Example of setting customLayout for different layout (screen) sizes.","minUi5":"1.71","needs":[],"controls":[11,4,46,86,87,90,7,20,33,9,24,2,192,203,204],"controlCount":43}, @@ -761,19 +784,19 @@ {"class":"z2ui5_cl_smpc_app_296","description":"You can filter the items in the filter details page using different string filter operators.","minUi5":"1.71","needs":[],"controls":[3,114,115,116,2,16],"controlCount":12}, {"class":"z2ui5_cl_smpc_app_297","description":"You can have custom tabs with your own defined content in the View Settings Dialog, as shown in this example.","minUi5":"1.132","needs":[{"type":"member-too-new","name":"sap.m.ViewSettingsDialog.beforeClose","since":"1.132"}],"controls":[3,117,12,46,86,87,276,114,115,116,24,2,16],"controlCount":59}, {"class":"z2ui5_cl_smpc_app_298","description":"The View Settings Dialog is standard UI pattern for specifying sorting, grouping and filtering. For a table it should be triggered by a button in the table header with the 'drop-down-list' icon. The active filter should be shown with the table's info bar. This example also shows the context menu for the items in the Table control.","minUi5":"1.137","needs":[{"type":"control-too-new","name":"sap.m.table.columnmenu.QuickResize","since":"1.137"},{"type":"member-too-new","name":"sap.m.table.columnmenu.QuickResize.change","since":"1.137"},{"type":"control-too-new","name":"sap.m.table.columnmenu.ActionItem","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.ActionItem.label","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.ActionItem.press","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.Menu","since":"1.110"},{"type":"aggregation-too-new","name":"sap.m.table.columnmenu.Menu.items","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.QuickSort","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.QuickSort.change","since":"1.110"},{"type":"aggregation-too-new","name":"sap.m.table.columnmenu.QuickSort.items","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.QuickSortItem","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.QuickSortItem.key","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.QuickSortItem.label","since":"1.110"},{"type":"member-too-new","name":"sap.m.Column.headerMenu","since":"1.98"}],"controls":[3,27,28,30,31,4,5,32,7,20,33,8,114,115,116,277,278,279,280,281,2],"controlCount":50}, - {"class":"z2ui5_cl_smpc_app_299","description":"SideNavigation with a quick create action button.","minUi5":"1.133","needs":[{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"}],"controls":[3,34,45,12,9,252,253,329,18,2],"controlCount":17}, - {"class":"z2ui5_cl_smpc_app_300","description":"SideNavigation with long texts that wrap.","minUi5":"1.133","needs":[{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.SideNavigation.width","since":"1.120"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"}],"controls":[3,34,45,12,9,252,330,253,329,18,2],"controlCount":40}, - {"class":"z2ui5_cl_smpc_app_301","description":"SideNavigation in a responsive popover.","minUi5":"1.134","needs":[{"type":"member-too-new","name":"sap.tnt.SideNavigation.design","since":"1.134"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListGroup.expanded","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.SideNavigation.width","since":"1.120"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"}],"controls":[302,40,258,3,34,118,171,75,7,9,252,330,253,329,313,18,22,2],"controlCount":75}, - {"class":"z2ui5_cl_smpc_app_302","description":"A tool page layout with horizontal navigation (on desktop and tablet) and vertical navigation (on phone)","minUi5":"1.121","needs":[{"type":"member-too-new","name":"sap.m.IconTabFilter.interactionMode","since":"1.121"},{"type":"aggregation-too-new","name":"sap.tnt.ToolPage.subHeader","since":"1.93"},{"type":"member-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,3,74,93,55,118,123,52,75,6,7,20,174,8,252,253,329,312,331,313,2],"controlCount":51}, - {"class":"z2ui5_cl_smpc_app_303","description":"A tool page layout with horizontal navigation","minUi5":"1.121","needs":[{"type":"member-too-new","name":"sap.m.IconTabFilter.interactionMode","since":"1.121"},{"type":"aggregation-too-new","name":"sap.tnt.ToolPage.subHeader","since":"1.93"},{"type":"member-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,3,74,93,55,118,123,52,75,6,7,20,174,8,312,331,313,2],"controlCount":45}, + {"class":"z2ui5_cl_smpc_app_299","description":"SideNavigation with a quick create action button.","minUi5":"1.133","needs":[{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"}],"controls":[3,34,45,12,9,252,253,345,18,2],"controlCount":17}, + {"class":"z2ui5_cl_smpc_app_300","description":"SideNavigation with long texts that wrap.","minUi5":"1.133","needs":[{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.SideNavigation.width","since":"1.120"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"}],"controls":[3,34,45,12,9,252,349,253,345,18,2],"controlCount":40}, + {"class":"z2ui5_cl_smpc_app_301","description":"SideNavigation in a responsive popover.","minUi5":"1.134","needs":[{"type":"member-too-new","name":"sap.tnt.SideNavigation.design","since":"1.134"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListGroup.expanded","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.SideNavigation.width","since":"1.120"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"}],"controls":[318,40,258,3,34,118,171,75,7,9,252,349,253,345,329,18,22,2],"controlCount":75}, + {"class":"z2ui5_cl_smpc_app_302","description":"A tool page layout with horizontal navigation (on desktop and tablet) and vertical navigation (on phone)","minUi5":"1.121","needs":[{"type":"member-too-new","name":"sap.m.IconTabFilter.interactionMode","since":"1.121"},{"type":"aggregation-too-new","name":"sap.tnt.ToolPage.subHeader","since":"1.93"},{"type":"member-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,3,74,93,55,118,123,52,75,6,7,20,174,8,252,253,345,328,350,329,2],"controlCount":51}, + {"class":"z2ui5_cl_smpc_app_303","description":"A tool page layout with horizontal navigation","minUi5":"1.121","needs":[{"type":"member-too-new","name":"sap.m.IconTabFilter.interactionMode","since":"1.121"},{"type":"aggregation-too-new","name":"sap.tnt.ToolPage.subHeader","since":"1.93"},{"type":"member-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"aggregation-too-new","name":"sap.m.IconTabFilter.items","since":"1.77"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,3,74,93,55,118,123,52,75,6,7,20,174,8,328,350,329,2],"controlCount":45}, {"class":"z2ui5_cl_smpc_app_304","description":"Calendar with more than one month","minUi5":"1.71","needs":[],"controls":[3,12,7,2,61,16,182,200],"controlCount":8}, {"class":"z2ui5_cl_smpc_app_305","description":"An example of recommended implementation of deselection logic when the calendar is in single selection mode.","minUi5":"1.95","needs":[{"type":"member-too-new","name":"sap.ui.unified.Calendar.showCurrentDateButton","since":"1.95"}],"controls":[12,7,24,2,61,16,182],"controlCount":7}, {"class":"z2ui5_cl_smpc_app_306","description":"Calendar where the user can select an interval or entire week (either by selecting its week number or by using SHIFT + Space).","minUi5":"1.71","needs":[],"controls":[12,7,24,2,61,16,182],"controlCount":10}, {"class":"z2ui5_cl_smpc_app_307","description":"Calendar where the user can select multiple days, entire weeks (either by selecting its week number or by using SHIFT + Space) and ranges (using SHIFT + ENTER/Left mouse click).","minUi5":"1.71","needs":[],"controls":[3,1,76,24,2,16,182],"controlCount":7}, - {"class":"z2ui5_cl_smpc_app_308","description":"Calendar with special days and legend","minUi5":"1.81","needs":[{"type":"member-too-new","name":"sap.ui.unified.DateTypeRange.secondaryType","since":"1.81"},{"type":"member-too-new","name":"sap.ui.unified.DateTypeRange.secondaryType","since":"1.81"},{"type":"member-too-new","name":"sap.ui.unified.DateTypeRange.color","since":"1.76"},{"type":"member-too-new","name":"sap.ui.unified.DateTypeRange.color","since":"1.76"}],"controls":[33,24,2,16,182,307,292,290],"controlCount":12}, + {"class":"z2ui5_cl_smpc_app_308","description":"Calendar with special days and legend","minUi5":"1.81","needs":[{"type":"member-too-new","name":"sap.ui.unified.DateTypeRange.secondaryType","since":"1.81"},{"type":"member-too-new","name":"sap.ui.unified.DateTypeRange.secondaryType","since":"1.81"},{"type":"member-too-new","name":"sap.ui.unified.DateTypeRange.color","since":"1.76"},{"type":"member-too-new","name":"sap.ui.unified.DateTypeRange.color","since":"1.76"}],"controls":[33,24,2,16,182,323,292,290],"controlCount":12}, {"class":"z2ui5_cl_smpc_app_309","description":"Basic example of Color Picker. Note that you have to set the Color Picker mode to HSL to take advantage of the responsiveness of the control on a mobile device.","minUi5":"1.71","needs":[],"controls":[3,5,171,9,18,2,186],"controlCount":10}, {"class":"z2ui5_cl_smpc_app_310","description":"Basic example of Color Picker. Note that you have to set the Color Picker mode to HSL to take advantage of the responsiveness of the control on a mobile device.","minUi5":"1.71","needs":[],"controls":[3,5,171,9,18,2,186],"controlCount":10}, - {"class":"z2ui5_cl_smpc_app_311","description":"Some menu items can be added to groups to allow single or multiple item selection.","minUi5":"1.127","needs":[{"type":"member-too-new","name":"sap.ui.unified.MenuItem.selected","since":"1.127"},{"type":"member-too-new","name":"sap.ui.unified.MenuItem.selected","since":"1.127"},{"type":"member-too-new","name":"sap.ui.unified.MenuItem.selected","since":"1.127"},{"type":"control-too-new","name":"sap.ui.unified.MenuItemGroup","since":"1.127"},{"type":"control-too-new","name":"sap.ui.unified.MenuItemGroup","since":"1.127"},{"type":"control-too-new","name":"sap.ui.unified.MenuItemGroup","since":"1.127"},{"type":"aggregation-too-new","name":"sap.ui.unified.MenuItemGroup.items","since":"1.127"},{"type":"aggregation-too-new","name":"sap.ui.unified.MenuItemGroup.items","since":"1.127"},{"type":"aggregation-too-new","name":"sap.ui.unified.MenuItemGroup.items","since":"1.127"},{"type":"member-too-new","name":"sap.ui.unified.MenuItemGroup.itemSelectionMode","since":"1.127"},{"type":"member-too-new","name":"sap.ui.unified.MenuItemGroup.itemSelectionMode","since":"1.127"},{"type":"member-too-new","name":"sap.ui.unified.MenuItemGroup.itemSelectionMode","since":"1.127"},{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"}],"controls":[3,9,2,304,305,309],"controlCount":22}, + {"class":"z2ui5_cl_smpc_app_311","description":"Some menu items can be added to groups to allow single or multiple item selection.","minUi5":"1.127","needs":[{"type":"member-too-new","name":"sap.ui.unified.MenuItem.selected","since":"1.127"},{"type":"member-too-new","name":"sap.ui.unified.MenuItem.selected","since":"1.127"},{"type":"member-too-new","name":"sap.ui.unified.MenuItem.selected","since":"1.127"},{"type":"control-too-new","name":"sap.ui.unified.MenuItemGroup","since":"1.127"},{"type":"control-too-new","name":"sap.ui.unified.MenuItemGroup","since":"1.127"},{"type":"control-too-new","name":"sap.ui.unified.MenuItemGroup","since":"1.127"},{"type":"aggregation-too-new","name":"sap.ui.unified.MenuItemGroup.items","since":"1.127"},{"type":"aggregation-too-new","name":"sap.ui.unified.MenuItemGroup.items","since":"1.127"},{"type":"aggregation-too-new","name":"sap.ui.unified.MenuItemGroup.items","since":"1.127"},{"type":"member-too-new","name":"sap.ui.unified.MenuItemGroup.itemSelectionMode","since":"1.127"},{"type":"member-too-new","name":"sap.ui.unified.MenuItemGroup.itemSelectionMode","since":"1.127"},{"type":"member-too-new","name":"sap.ui.unified.MenuItemGroup.itemSelectionMode","since":"1.127"},{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"}],"controls":[3,9,2,320,321,325],"controlCount":22}, {"class":"z2ui5_cl_smpc_app_312","description":"Form with one single group in a fullscreen app with a label field ratio of 3:5:4 in all sizes besides size S (12:12:0).","minUi5":"1.71","needs":[],"controls":[102,3,45,5,14,7,9,15,107,2,197,152,153,154,155],"controlCount":39}, {"class":"z2ui5_cl_smpc_app_313","description":"Form with one single group in a fullscreen app for long labels and fields, so some more space is available on medium screens (4:7:0). To avoid heavily stretched forms on extra large screens, the form gets a two-column layout in this size (4:7:0).","minUi5":"1.71","needs":[],"controls":[102,3,45,5,14,7,9,15,107,2,197,152,153,154,155],"controlCount":39}, {"class":"z2ui5_cl_smpc_app_314","description":"Form with two groups with long labels and fields in a fullscreen app.","minUi5":"1.71","needs":[],"controls":[102,3,45,5,14,7,9,15,107,2,197,152,153,154,155],"controlCount":49}, @@ -810,22 +833,22 @@ {"class":"z2ui5_cl_smpc_app_345","description":"You can see how the different properties of the sap.ui.layout.Grid affect it's final appearance.","minUi5":"1.71","needs":[],"controls":[44,89,90,20,24,2,77,16],"controlCount":114}, {"class":"z2ui5_cl_smpc_app_346","description":"Example of setting gridAutoRows and gridAutoColumns properties.","minUi5":"1.71","needs":[],"controls":[12,4,46,7,20,33,21,9,24,2,192,26],"controlCount":76}, {"class":"z2ui5_cl_smpc_app_347","description":"Example of setting the gridGap property and using of Layout Data.","minUi5":"1.71","needs":[],"controls":[45,12,4,46,90,7,20,9,24,2,192,193,26],"controlCount":37}, - {"class":"z2ui5_cl_smpc_app_348","description":"Example of using ResponsiveColumnLayout.","minUi5":"1.72","needs":[{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnLayout","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnLayout.layoutChange","since":"1.72"}],"controls":[35,12,46,90,7,20,33,21,9,2,192,310,311],"controlCount":80}, + {"class":"z2ui5_cl_smpc_app_348","description":"Example of using ResponsiveColumnLayout.","minUi5":"1.72","needs":[{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.rows","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnLayout","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnLayout.layoutChange","since":"1.72"}],"controls":[35,12,46,90,7,20,33,21,9,2,192,326,327],"controlCount":80}, {"class":"z2ui5_cl_smpc_app_349","description":"Example of setting gridTemplateRows and gridTemplateColumns properties.","minUi5":"1.71","needs":[],"controls":[29,12,4,46,90,7,20,9,24,15,2,192,26],"controlCount":49}, - {"class":"z2ui5_cl_smpc_app_350","description":"Example of using several grids nested in one main grid with ResponsiveColumnLayout, in order to achieve responsive home page design.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnLayout","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnLayout.layoutChange","since":"1.72"}],"controls":[35,209,210,237,39,258,3,11,55,13,1,71,75,76,7,20,33,8,9,312,313,2,211,192,310,311],"controlCount":102}, + {"class":"z2ui5_cl_smpc_app_350","description":"Example of using several grids nested in one main grid with ResponsiveColumnLayout, in order to achieve responsive home page design.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnItemLayoutData.columns","since":"1.72"},{"type":"control-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnLayout","since":"1.72"},{"type":"member-too-new","name":"sap.ui.layout.cssgrid.ResponsiveColumnLayout.layoutChange","since":"1.72"}],"controls":[35,209,210,237,39,258,3,11,55,13,1,71,75,76,7,20,33,8,9,328,329,2,211,192,326,327],"controlCount":102}, {"class":"z2ui5_cl_smpc_app_351","description":"Splitter where you can change contentAreas and their sizes live","minUi5":"1.71","needs":[],"controls":[40,3,23,11,45,5,7,24,2,61,194,195,16],"controlCount":22}, {"class":"z2ui5_cl_smpc_app_352","description":"Example which shows the different aggregations of the table","minUi5":"1.71","needs":[],"controls":[64,65,66,11,12,13,83,4,5,6,7,20,8,56,2,188,189,190],"controlCount":30}, - {"class":"z2ui5_cl_smpc_app_353","description":"Shows various drag-and-drop capabilities along with custom context menu alternatives for each action.","minUi5":"1.121","needs":[{"type":"control-too-new","name":"sap.m.plugins.ContextMenuSetting","since":"1.121"},{"type":"control-too-new","name":"sap.m.plugins.ContextMenuSetting","since":"1.121"},{"type":"member-too-new","name":"sap.m.plugins.ContextMenuSetting.scope","since":"1.121"},{"type":"member-too-new","name":"sap.m.plugins.ContextMenuSetting.scope","since":"1.121"}],"controls":[3,11,167,168,4,5,7,20,8,9,314,183,184,185,2,188,189],"controlCount":46}, + {"class":"z2ui5_cl_smpc_app_353","description":"Shows various drag-and-drop capabilities along with custom context menu alternatives for each action.","minUi5":"1.121","needs":[{"type":"control-too-new","name":"sap.m.plugins.ContextMenuSetting","since":"1.121"},{"type":"control-too-new","name":"sap.m.plugins.ContextMenuSetting","since":"1.121"},{"type":"member-too-new","name":"sap.m.plugins.ContextMenuSetting.scope","since":"1.121"},{"type":"member-too-new","name":"sap.m.plugins.ContextMenuSetting.scope","since":"1.121"}],"controls":[3,11,167,168,4,5,7,20,8,9,330,183,184,185,2,188,189],"controlCount":46}, {"class":"z2ui5_cl_smpc_app_354","description":"Example showing the different facets of filtering within a table","minUi5":"1.71","needs":[],"controls":[3,12,13,83,4,5,6,7,20,33,174,8,2,188,189,190],"controlCount":30}, {"class":"z2ui5_cl_smpc_app_355","description":"Example which focuses the handling of the table related Menus","minUi5":"1.71","needs":[],"controls":[12,13,167,168,4,5,7,20,33,8,2,188,189],"controlCount":28}, {"class":"z2ui5_cl_smpc_app_356","description":"Example showing the behavior of MultiSelectionPlugin","minUi5":"1.71","needs":[],"controls":[45,12,4,5,14,7,20,33,174,8,15,2,188,189,212,190],"controlCount":32}, {"class":"z2ui5_cl_smpc_app_357","description":"OData related example","minUi5":"1.128","needs":[{"type":"member-too-new","name":"sap.ui.table.Table.scrollThreshold","since":"1.128"}],"controls":[213,3,12,4,5,86,87,7,20,8,2,188,189,190],"controlCount":30}, {"class":"z2ui5_cl_smpc_app_358","description":"Shows an example how an OData metadata driven table creation can look like.","minUi5":"1.71","needs":[],"controls":[213,12,4,5,7,20,2,188,189,190],"controlCount":69}, - {"class":"z2ui5_cl_smpc_app_359","description":"Shows how row actions can be used.","minUi5":"1.72","needs":[{"type":"member-too-new","name":"sap.ui.table.RowSettings.navigated","since":"1.72"}],"controls":[12,4,5,14,7,20,33,8,15,2,188,315,316,198,189,190],"controlCount":29}, - {"class":"z2ui5_cl_smpc_app_360","description":"Shows cell selection, copy and paste interaction in the table.","minUi5":"1.119","needs":[{"type":"control-too-new","name":"sap.m.plugins.CellSelector","since":"1.119"},{"type":"control-too-new","name":"sap.ui.table.rowmodes.Fixed","since":"1.119"},{"type":"member-too-new","name":"sap.ui.table.rowmodes.Fixed.rowCount","since":"1.119"},{"type":"aggregation-too-new","name":"sap.ui.table.Table.rowMode","since":"1.119"},{"type":"control-too-new","name":"sap.m.plugins.CopyProvider","since":"1.110"},{"type":"member-too-new","name":"sap.m.plugins.CopyProvider.copy","since":"1.110"},{"type":"member-too-new","name":"sap.m.plugins.CopyProvider.extractData","since":"1.110"},{"type":"control-too-new","name":"sap.m.plugins.PasteProvider","since":"1.91"},{"type":"member-too-new","name":"sap.m.plugins.PasteProvider.pasteFor","since":"1.91"}],"controls":[213,3,12,4,123,5,14,7,20,8,287,288,317,15,2,188,189,212,318,190],"controlCount":34}, + {"class":"z2ui5_cl_smpc_app_359","description":"Shows how row actions can be used.","minUi5":"1.72","needs":[{"type":"member-too-new","name":"sap.ui.table.RowSettings.navigated","since":"1.72"}],"controls":[12,4,5,14,7,20,33,8,15,2,188,331,332,198,189,190],"controlCount":29}, + {"class":"z2ui5_cl_smpc_app_360","description":"Shows cell selection, copy and paste interaction in the table.","minUi5":"1.119","needs":[{"type":"control-too-new","name":"sap.m.plugins.CellSelector","since":"1.119"},{"type":"control-too-new","name":"sap.ui.table.rowmodes.Fixed","since":"1.119"},{"type":"member-too-new","name":"sap.ui.table.rowmodes.Fixed.rowCount","since":"1.119"},{"type":"aggregation-too-new","name":"sap.ui.table.Table.rowMode","since":"1.119"},{"type":"control-too-new","name":"sap.m.plugins.CopyProvider","since":"1.110"},{"type":"member-too-new","name":"sap.m.plugins.CopyProvider.copy","since":"1.110"},{"type":"member-too-new","name":"sap.m.plugins.CopyProvider.extractData","since":"1.110"},{"type":"control-too-new","name":"sap.m.plugins.PasteProvider","since":"1.91"},{"type":"member-too-new","name":"sap.m.plugins.PasteProvider.pasteFor","since":"1.91"}],"controls":[213,3,12,4,123,5,14,7,20,8,287,288,333,15,2,188,189,212,334,190],"controlCount":34}, {"class":"z2ui5_cl_smpc_app_361","description":"Selection example showing selection modes and selection behaviors of table.","minUi5":"1.71","needs":[],"controls":[3,23,29,117,45,12,13,83,4,5,14,53,7,20,8,56,15,2,188,189,190],"controlCount":54}, {"class":"z2ui5_cl_smpc_app_362","description":"Example showing the different kinds of sorting capabilities","minUi5":"1.71","needs":[],"controls":[3,12,13,4,5,7,20,8,2,188,189],"controlCount":25}, - {"class":"z2ui5_cl_smpc_app_363","description":"Example which shows table freeze with fixed columns","minUi5":"1.119","needs":[{"type":"control-too-new","name":"sap.ui.table.rowmodes.Fixed","since":"1.119"},{"type":"member-too-new","name":"sap.ui.table.rowmodes.Fixed.fixedBottomRowCount","since":"1.119"},{"type":"member-too-new","name":"sap.ui.table.rowmodes.Fixed.fixedTopRowCount","since":"1.119"},{"type":"aggregation-too-new","name":"sap.ui.table.Table.rowMode","since":"1.119"}],"controls":[3,23,29,117,45,12,13,83,4,5,14,7,20,8,56,15,2,188,189,318,190],"controlCount":49}, + {"class":"z2ui5_cl_smpc_app_363","description":"Example which shows table freeze with fixed columns","minUi5":"1.119","needs":[{"type":"control-too-new","name":"sap.ui.table.rowmodes.Fixed","since":"1.119"},{"type":"member-too-new","name":"sap.ui.table.rowmodes.Fixed.fixedBottomRowCount","since":"1.119"},{"type":"member-too-new","name":"sap.ui.table.rowmodes.Fixed.fixedTopRowCount","since":"1.119"},{"type":"aggregation-too-new","name":"sap.ui.table.Table.rowMode","since":"1.119"}],"controls":[3,23,29,117,45,12,13,83,4,5,14,7,20,8,56,15,2,188,189,334,190],"controlCount":49}, {"class":"z2ui5_cl_smpc_app_364","description":"Illustrates how to bind to data from an OData model without using $metadata annotations or navigation properties. Instead, treeAnnotationProperties is filled for the TreeBinding.","minUi5":"1.71","needs":[],"controls":[12,7,2,188,202],"controlCount":14}, {"class":"z2ui5_cl_smpc_app_365","description":"Shows how hierarchy maintenance can be done using drag and drop.","minUi5":"1.71","needs":[],"controls":[3,12,4,5,14,7,20,8,15,183,2,188,202,190],"controlCount":21}, {"class":"z2ui5_cl_smpc_app_366","description":"Illustrates how to bind to data from an OData model using $metadata annotations.","minUi5":"1.71","needs":[],"controls":[12,7,2,188,202],"controlCount":14}, @@ -869,7 +892,7 @@ {"class":"z2ui5_cl_smpc_app_404","description":"This example shows different TimePicker value states.","minUi5":"1.71","needs":[],"controls":[58,12,165,9,2],"controlCount":5}, {"class":"z2ui5_cl_smpc_app_405","description":"This page shows flexible sizing with a Toolbar. The upper part extends with its content, but doesn't react to viewport changes. The lower part reacts to the viewport size. The table inside takes the available space. If the minimum size of the table is reached, the page begins to scroll.","minUi5":"1.119","needs":[{"type":"aggregation-too-new","name":"sap.ui.table.AnalyticalTable.rowMode","since":"1.119"},{"type":"control-too-new","name":"sap.ui.table.rowmodes.Auto","since":"1.119"},{"type":"member-too-new","name":"sap.ui.table.rowmodes.Auto.rowContentHeight","since":"1.119"}],"controls":[3,19,12,4,5,6,86,87,7,20,8,9,107,2,26,282,283,284],"controlCount":38}, {"class":"z2ui5_cl_smpc_app_406","description":"This page shows flexible sizing with an Icon Tab Bar: The upper part extends with its content, but doesn't react to viewport changes. The Icon Tab Bar reacts to the viewport size. The table inside takes the available space. If the minimum size of the table is reached, the page begins to scroll.","minUi5":"1.119","needs":[{"type":"aggregation-too-new","name":"sap.ui.table.AnalyticalTable.rowMode","since":"1.119"},{"type":"control-too-new","name":"sap.ui.table.rowmodes.Auto","since":"1.119"},{"type":"member-too-new","name":"sap.ui.table.rowmodes.Auto.rowContentHeight","since":"1.119"}],"controls":[3,19,73,74,12,4,5,6,86,87,7,8,9,107,2,26,282,283,284],"controlCount":43}, - {"class":"z2ui5_cl_smpc_app_407","description":"SideNavigation with a search field in the filter section and filterable navigation items.","minUi5":"1.151","needs":[{"type":"member-too-new","name":"sap.tnt.NavigationList.highlightedText","since":"1.151"},{"type":"aggregation-too-new","name":"sap.tnt.SideNavigation.filterSection","since":"1.151"},{"type":"control-too-new","name":"sap.tnt.SideNavigationSearchField","since":"1.151"},{"type":"member-too-new","name":"sap.tnt.SideNavigationSearchField.ariaControls","since":"1.150"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListGroup.expanded","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListGroup.expanded","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListGroup.items","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListGroup.items","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListGroup.visible","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListGroup.visible","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"}],"controls":[3,34,55,118,83,123,52,75,6,7,20,174,8,252,330,253,329,332,312,313,18,2],"controlCount":48}, + {"class":"z2ui5_cl_smpc_app_407","description":"SideNavigation with a search field in the filter section and filterable navigation items.","minUi5":"1.151","needs":[{"type":"member-too-new","name":"sap.tnt.NavigationList.highlightedText","since":"1.151"},{"type":"aggregation-too-new","name":"sap.tnt.SideNavigation.filterSection","since":"1.151"},{"type":"control-too-new","name":"sap.tnt.SideNavigationSearchField","since":"1.151"},{"type":"member-too-new","name":"sap.tnt.SideNavigationSearchField.ariaControls","since":"1.150"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"aggregation-too-new","name":"sap.tnt.NavigationListItem.tag","since":"1.149"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.ariaHasPopup","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.design","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.press","since":"1.133"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"control-too-new","name":"sap.tnt.NavigationListGroup","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListGroup.expanded","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListGroup.expanded","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListGroup.items","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListGroup.items","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListGroup.visible","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListGroup.visible","since":"1.121"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"},{"type":"member-too-new","name":"sap.tnt.NavigationListItem.selectable","since":"1.116"}],"controls":[3,34,55,118,83,123,52,75,6,7,20,174,8,252,349,253,345,351,328,329,18,2],"controlCount":48}, {"class":"z2ui5_cl_smpc_app_408","description":"This example shows the different layout of the blocks based on their ColumnLayout.","minUi5":"1.71","needs":[],"controls":[7,24,2,214,222,215,216,217],"controlCount":17}, {"class":"z2ui5_cl_smpc_app_409","description":"Uses a block in a view of another block","minUi5":"1.71","needs":[],"controls":[24,2,214,215,216,217],"controlCount":6}, {"class":"z2ui5_cl_smpc_app_410","description":"Uses of a block that is firing a dummy event","minUi5":"1.71","needs":[],"controls":[3,9,24,2,214,215,216,217],"controlCount":9}, @@ -911,8 +934,8 @@ {"class":"z2ui5_cl_smpc_app_446","description":"Subtle links should be used to indicate less important links in tables with a large number of links. In this example all columns contain links, only the first column is non-subtle.","minUi5":"1.71","needs":[],"controls":[27,28,13,30,32,7,20,21,2],"controlCount":20}, {"class":"z2ui5_cl_smpc_app_447","description":"MessageBox with the option to display detailed information.","minUi5":"1.71","needs":[],"controls":[3,2,16],"controlCount":6}, {"class":"z2ui5_cl_smpc_app_448","description":"Integration of Draft Indicator inside Semantic Page","minUi5":"1.71","needs":[],"controls":[63,45,12,78,122,82,124,128,129,130,131,2,26,136],"controlCount":14}, - {"class":"z2ui5_cl_smpc_app_449","description":"Flexible Column Layout where the first and the last columns have custom Landmark Info","minUi5":"1.95","needs":[{"type":"aggregation-too-new","name":"sap.f.FlexibleColumnLayout.landmarkInfo","since":"1.95"},{"type":"control-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo","since":"1.95"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo.firstColumnLabel","since":"1.95"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo.lastColumnLabel","since":"1.95"}],"controls":[236,325,3,5,9,2],"controlCount":11}, - {"class":"z2ui5_cl_smpc_app_450","description":"Flexible Column Layout where the all the arrows have custom Landmark Info","minUi5":"1.95","needs":[{"type":"aggregation-too-new","name":"sap.f.FlexibleColumnLayout.landmarkInfo","since":"1.95"},{"type":"control-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo","since":"1.95"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo.firstColumnBackArrowLabel","since":"1.95"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo.lastColumnForwardArrowLabel","since":"1.95"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo.middleColumnBackArrowLabel","since":"1.95"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo.middleColumnForwardArrowLabel","since":"1.95"}],"controls":[236,325,3,5,9,2],"controlCount":11}, + {"class":"z2ui5_cl_smpc_app_449","description":"Flexible Column Layout where the first and the last columns have custom Landmark Info","minUi5":"1.95","needs":[{"type":"aggregation-too-new","name":"sap.f.FlexibleColumnLayout.landmarkInfo","since":"1.95"},{"type":"control-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo","since":"1.95"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo.firstColumnLabel","since":"1.95"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo.lastColumnLabel","since":"1.95"}],"controls":[236,341,3,5,9,2],"controlCount":11}, + {"class":"z2ui5_cl_smpc_app_450","description":"Flexible Column Layout where the all the arrows have custom Landmark Info","minUi5":"1.95","needs":[{"type":"aggregation-too-new","name":"sap.f.FlexibleColumnLayout.landmarkInfo","since":"1.95"},{"type":"control-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo","since":"1.95"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo.firstColumnBackArrowLabel","since":"1.95"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo.lastColumnForwardArrowLabel","since":"1.95"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo.middleColumnBackArrowLabel","since":"1.95"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutAccessibleLandmarkInfo.middleColumnForwardArrowLabel","since":"1.95"}],"controls":[236,341,3,5,9,2],"controlCount":11}, {"class":"z2ui5_cl_smpc_app_451","description":"This example shows how you can add additional text and an Icon to the tabs in TabContainer.","minUi5":"1.71","needs":[],"controls":[108,109,7,107,2,152,153,154,155],"controlCount":15}, {"class":"z2ui5_cl_smpc_app_452","description":"Demonstrates MessageStrips with different colorSet and colorScheme properties.","minUi5":"1.143","needs":[{"type":"member-too-new","name":"sap.m.MessageStrip.colorScheme","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorScheme","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorScheme","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorScheme","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorScheme","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorScheme","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorScheme","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorScheme","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorScheme","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorScheme","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorSet","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorSet","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorSet","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorSet","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorSet","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorSet","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorSet","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorSet","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorSet","since":"1.143"},{"type":"member-too-new","name":"sap.m.MessageStrip.colorSet","since":"1.143"}],"controls":[12,89,46,14,15,2,61,16],"controlCount":19}, {"class":"z2ui5_cl_smpc_app_453","description":"This is a responsive Object Header with a Title, 2 Statuses/Attributes rendered next to the title in a fullScreenOptimized mode (fullScreenOptimized = true).","minUi5":"1.71","needs":[],"controls":[73,74,55,13,81,82,156,83,7,2,16],"controlCount":18}, @@ -1041,17 +1064,17 @@ {"class":"z2ui5_cl_smpc_app_576","description":"This is a good example of how to vertically align different elements within a Table's ColumnListItem row template.","minUi5":"1.71","needs":[],"controls":[27,28,45,30,31,4,32,7,20,2],"controlCount":17}, {"class":"z2ui5_cl_smpc_app_577","description":"FlexibleColumnLayout where the app programmatically scrolls to some item within the newly navigated column, once the column is fully resized","minUi5":"1.77","needs":[{"type":"member-too-new","name":"sap.f.FlexibleColumnLayout.restoreFocusOnBackNavigation","since":"1.77"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayout.autoFocus","since":"1.76"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayout.columnResize","since":"1.76"}],"controls":[36,37,38,236,3,12,89,81,83,7,20,2,61,16,26,218,215,216,217],"controlCount":25}, {"class":"z2ui5_cl_smpc_app_578","description":"Flexible Column Layout as an app with routing that displays different pages in the initial column. The first page is only displayed in OneColumn layout type","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[36,38,236,258,3,27,28,58,12,30,31,4,123,6,32,7,20,8,9,2,26,218,215,216,217],"controlCount":79}, - {"class":"z2ui5_cl_smpc_app_579","description":"Flexible Column Layout as an app with routing that starts with a single initial column.","minUi5":"1.128","needs":[{"type":"control-too-new","name":"sap.f.FlexibleColumnLayoutData","since":"1.128"},{"type":"aggregation-too-new","name":"sap.f.FlexibleColumnLayoutData.desktopLayoutData","since":"1.128"},{"type":"aggregation-too-new","name":"sap.f.FlexibleColumnLayoutData.tabletLayoutData","since":"1.128"},{"type":"control-too-new","name":"sap.f.FlexibleColumnLayoutDataForDesktop","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForDesktop.threeColumnsBeginExpandedEndHidden","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForDesktop.threeColumnsEndExpanded","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForDesktop.threeColumnsMidExpanded","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForDesktop.threeColumnsMidExpandedEndHidden","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForDesktop.twoColumnsBeginExpanded","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForDesktop.twoColumnsMidExpanded","since":"1.128"},{"type":"control-too-new","name":"sap.f.FlexibleColumnLayoutDataForTablet","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForTablet.threeColumnsBeginExpandedEndHidden","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForTablet.threeColumnsEndExpanded","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForTablet.threeColumnsMidExpanded","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForTablet.threeColumnsMidExpandedEndHidden","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForTablet.twoColumnsBeginExpanded","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForTablet.twoColumnsMidExpanded","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayout.restoreFocusOnBackNavigation","since":"1.77"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayout.autoFocus","since":"1.76"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[36,38,236,326,327,328,258,3,27,28,58,12,13,30,31,4,123,6,32,7,20,8,9,2,26,218,215,216,217],"controlCount":78}, + {"class":"z2ui5_cl_smpc_app_579","description":"Flexible Column Layout as an app with routing that starts with a single initial column.","minUi5":"1.128","needs":[{"type":"control-too-new","name":"sap.f.FlexibleColumnLayoutData","since":"1.128"},{"type":"aggregation-too-new","name":"sap.f.FlexibleColumnLayoutData.desktopLayoutData","since":"1.128"},{"type":"aggregation-too-new","name":"sap.f.FlexibleColumnLayoutData.tabletLayoutData","since":"1.128"},{"type":"control-too-new","name":"sap.f.FlexibleColumnLayoutDataForDesktop","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForDesktop.threeColumnsBeginExpandedEndHidden","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForDesktop.threeColumnsEndExpanded","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForDesktop.threeColumnsMidExpanded","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForDesktop.threeColumnsMidExpandedEndHidden","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForDesktop.twoColumnsBeginExpanded","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForDesktop.twoColumnsMidExpanded","since":"1.128"},{"type":"control-too-new","name":"sap.f.FlexibleColumnLayoutDataForTablet","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForTablet.threeColumnsBeginExpandedEndHidden","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForTablet.threeColumnsEndExpanded","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForTablet.threeColumnsMidExpanded","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForTablet.threeColumnsMidExpandedEndHidden","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForTablet.twoColumnsBeginExpanded","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayoutDataForTablet.twoColumnsMidExpanded","since":"1.128"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayout.restoreFocusOnBackNavigation","since":"1.77"},{"type":"member-too-new","name":"sap.f.FlexibleColumnLayout.autoFocus","since":"1.76"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[36,38,236,342,343,344,258,3,27,28,58,12,13,30,31,4,123,6,32,7,20,8,9,2,26,218,215,216,217],"controlCount":78}, {"class":"z2ui5_cl_smpc_app_580","description":"Flexible Column Layout as an app with routing that starts with two initial columns.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[36,38,236,258,3,27,28,58,12,13,30,31,4,123,6,32,7,20,8,9,2,26,218,215,216,217],"controlCount":75}, {"class":"z2ui5_cl_smpc_app_581","description":"This is a sample for GridList item templates representing a typical tools page dashboard style.","minUi5":"1.71","needs":[],"controls":[50,51,3,19,11,12,83,4,46,7,20,33,21,8,9,251,56,2,224],"controlCount":88}, {"class":"z2ui5_cl_smpc_app_582","description":"This sample demonstrates the keyboard navigation between multiple grids","minUi5":"1.71","needs":[],"controls":[50,51,40,12,5,90,20,33,9,2,192,54,193,203,204],"controlCount":37}, - {"class":"z2ui5_cl_smpc_app_583","description":"Shell Bar example with enabled Product Switch, configurable by the app developer. The Product Switch control is in experimental state.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"control-too-new","name":"sap.f.ProductSwitch","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitch.change","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitch.items","since":"1.72"},{"type":"aggregation-too-new","name":"sap.f.ProductSwitch.items","since":"1.72"},{"type":"control-too-new","name":"sap.f.ProductSwitchItem","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.src","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.subTitle","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.target","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.targetSrc","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.title","since":"1.72"}],"controls":[322,323,302,258,171,18,2],"controlCount":7}, - {"class":"z2ui5_cl_smpc_app_584","description":"Example of Shell Bar in combination with Flexible Column Layout.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[36,38,236,302,258,3,27,28,58,11,12,13,167,168,30,31,4,123,5,6,32,7,20,8,9,2,26,218,215,216,217],"controlCount":81}, - {"class":"z2ui5_cl_smpc_app_585","description":"Example of Shell Bar in combination with Split App.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"}],"controls":[324,302,258,167,168,118,75,7,252,253,329,313,2],"controlCount":24}, + {"class":"z2ui5_cl_smpc_app_583","description":"Shell Bar example with enabled Product Switch, configurable by the app developer. The Product Switch control is in experimental state.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"control-too-new","name":"sap.f.ProductSwitch","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitch.change","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitch.items","since":"1.72"},{"type":"aggregation-too-new","name":"sap.f.ProductSwitch.items","since":"1.72"},{"type":"control-too-new","name":"sap.f.ProductSwitchItem","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.src","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.subTitle","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.target","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.targetSrc","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.title","since":"1.72"}],"controls":[338,339,318,258,171,18,2],"controlCount":7}, + {"class":"z2ui5_cl_smpc_app_584","description":"Example of Shell Bar in combination with Flexible Column Layout.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[36,38,236,318,258,3,27,28,58,11,12,13,167,168,30,31,4,123,5,6,32,7,20,8,9,2,26,218,215,216,217],"controlCount":81}, + {"class":"z2ui5_cl_smpc_app_585","description":"Example of Shell Bar in combination with Split App.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"}],"controls":[340,318,258,167,168,118,75,7,252,253,345,329,2],"controlCount":24}, {"class":"z2ui5_cl_smpc_app_586","description":"AnchorBar has a different behavior based on the device","minUi5":"1.71","needs":[],"controls":[12,7,20,2,26,218,215,216,217],"controlCount":81}, {"class":"z2ui5_cl_smpc_app_587","description":"This example shows how to visualize numbers in parenthesis after the corresponding section titles in the AnchorBar","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,3,58,55,12,13,123,205,7,20,9,107,2,77,197,61,16,26,218,215,216,217],"controlCount":142}, {"class":"z2ui5_cl_smpc_app_588","description":"Object Page demonstrating how beforeNavigate event can be used to prevent default navigation behaviour","minUi5":"1.118","needs":[{"type":"member-too-new","name":"sap.uxap.ObjectPageLayout.beforeNavigate","since":"1.118"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,3,34,58,55,12,13,123,46,205,7,20,9,18,107,2,77,197,61,16,26,218,215,216,217],"controlCount":154}, - {"class":"z2ui5_cl_smpc_app_589","description":"ObjectPage sample with blocks that use different view types","minUi5":"1.127","needs":[{"type":"member-too-new","name":"sap.uxap.ObjectPageAccessibleLandmarkInfo.headerContentLabel","since":"1.127"}],"controls":[10,3,55,12,13,4,46,205,7,8,9,2,61,16,26,319,214,222,215,216,217],"controlCount":57}, + {"class":"z2ui5_cl_smpc_app_589","description":"ObjectPage sample with blocks that use different view types","minUi5":"1.127","needs":[{"type":"member-too-new","name":"sap.uxap.ObjectPageAccessibleLandmarkInfo.headerContentLabel","since":"1.127"}],"controls":[10,3,55,12,13,4,46,205,7,8,9,2,61,16,26,335,214,222,215,216,217],"controlCount":57}, {"class":"z2ui5_cl_smpc_app_590","description":"Object Page that focuses its first editable input in the currently selected section.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,10,3,58,55,45,12,13,205,14,7,20,9,15,2,61,16,207,26,218,215,216,217],"controlCount":81}, {"class":"z2ui5_cl_smpc_app_591","description":"Object Page automatically adjusts form layout to match block column layout","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,10,3,58,55,45,12,13,123,205,7,20,9,107,2,61,16,208,152,153,154,26,218,215,216,217],"controlCount":70}, {"class":"z2ui5_cl_smpc_app_592","description":"This sample showcases the lazy loading using the stashed property of the ObjectPageLazyLoader. It enables usage of lazy loading without the need to have Blocks","minUi5":"1.71","needs":[],"controls":[3,12,123,7,20,9,2,26,218,215,223,216,217],"controlCount":22}, @@ -1086,72 +1109,72 @@ {"class":"z2ui5_cl_smpc_app_621","description":"In this example assisted input is provided with table-like suggestions where several columns can display more details.","minUi5":"1.89","needs":[{"type":"member-too-new","name":"sap.m.Input.enableTableAutoPopinMode","since":"1.89"}],"controls":[27,28,45,12,2,16],"controlCount":47}, {"class":"z2ui5_cl_smpc_app_622","description":"Input checks are handled via the validation of the data binding. In this example there are two inputs that are validated (a) while the user types and (b) when the user continues the process. If the built-in validation types are not sufficient you can create your own, like the email type in this example.","minUi5":"1.71","needs":[],"controls":[3,45,12,2,16],"controlCount":7}, {"class":"z2ui5_cl_smpc_app_623","description":"This example demonstrates the different input field states, e.g. disabled, editable, with value help and value help only.","minUi5":"1.71","needs":[],"controls":[45,12,163,76,18,2,16],"controlCount":13}, - {"class":"z2ui5_cl_smpc_app_624","description":"This sample demonstrates different combinations of types, shapes, and sizes of the Avatar.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_625","description":"This sample demonstrates toggling of Avatar Active state, when a User menu is opened/closed.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_626","description":"This sample demonstrates different badge icon colors of the Avatar.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_627","description":"This sample demonstrates different badge value states of the Avatar.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_628","description":"This sample demonstrates different combinations of types, shapes, and sizes of the Avatar with visual affordance.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_629","description":"Demonstrates the IllustratedMessage's 'enableVerticalResponsiveness' property.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_630","description":"Shows how to import a Custom Illustration from an npm package into a UI5 application for usage with IllustratedMessage.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_631","description":"IllustratedMessage as content of sap.f.Card. 'NoActivities' illustration type is being used for the Illustrated Message.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_632","description":"IllustratedMessage as content of sap.f.Card. 'NoEmail' illustration type is being used for the Illustrated Message.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_633","description":"IllustratedMessage as content of sap.m.Dialog.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_634","description":"The available illustrations are from the default ('sapIllus') illustration set.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_635","description":"The available properties of the IllustratedMessage are configurable in this sample. The available illustrations are from the 'custom' illustration set.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_636","description":"The available properties of the IllustratedMessage are configurable in this sample. The available illustrations are from the 'tnt' illustration set.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_637","description":"The available illustrations are from the default illustration set with the use of the 'src' property.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_638","description":"All applications that require user sign-in should employ a mechanism for automating user sign-out. When the inactivity is about to reach that threshold, a session timeout dialog appears automatically to inform the user.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_639","description":"The dynamic date range is a control that offers a choice of absolute and relative dates, using different offset from the current date. The list of values offered must be defined by the application.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_640","description":"This example shows the Dynamic Date Range control with Middle Eastern calendar week numbering.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_641","description":"This example shows Dynamic Date Range which is opened by another control.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_642","description":"This example shows the Dynamic Date Range control with custom options for interval or date selection.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_643","description":"The ExpandableText control can be used to display a larger texts inside a table, list or form.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_644","description":"Dialog & Popover with a sap.m.P13nContainer as content.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_645","description":"Responsive Table using the personalization Engine","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_646","description":"Filtering using the personalization Engine","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_647","description":"GridList using the personalization Engine","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_648","description":"Grid Table using the personalization Engine","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_649","description":"Personalization for Reponsive Table using multiple SelectionControllers","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_650","description":"Dialog with sap.m.p13n/* Panels","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_651","description":"VariantManagement with dedicated items","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_652","description":"This example demonstrates the usage of fileNameValidationConfig property to configure file name validation for renaming a file.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_653","description":"This example showcases how to display custom page content for non supported file types in the FilePreviewDialog control. The custom page content is displayed when the user tries to preview a file that is not supported by the FilePreviewDialog control. This sample demonstrates usage of customPageConentHandler property as a callback function to display custom page content.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_654","description":"This example demonstrates the usage of UploadSetwithTable plugin for grid table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_655","description":"This example demonstrates the usage of multiple plugin instances with multiple tables. The plugin instances are created for each table and the uploaded files are displayed in their respective tables.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_656","description":"This example demonstrates usage of itemValidationHandler callback to leverage additional validations and configurations for the items that are to be uploaded, and also the manual trigger of the upload process. The user input can be captured for each file with the help of the user dialog implemented at the application controller, before its upload.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_657","description":"This example showcases how uploaded files can be previewed with FilePreviewDialog control and its related configuration. UploadSetwithTable plugin creates and uses default instance of FilePreviewDialog, if not defined.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_658","description":"This example demonstrates the progress or termination of the items that are being uploaded. The upload progress is displayed for each item that is being uploaded. The users can terminate the upload process at any time.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_659","description":"This example demonstrates the usage of UploadSetwithTable plugin for responsive table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_660","description":"This example demonstrates the usage of UploadSetwithTable plugin for tree table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_661","description":"This example demonstrates the usage of UploadSetwithTable plugin with a tree table featuring folder hierarchy, folder creation, folder uploads, folder navigation with breadcrumbs and folder management","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_662","description":"This sample demonstrates the different group types and item sizes of the AvatarGroup control.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_663","description":"Demonstrates the basic usage of Side Panel.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_664","description":"Demonstrates the usage of Side Panel with overflow menu on desktop and tablet devices.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_665","description":"Demonstrates the usage of resizable Side Panel.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_666","description":"This sample demonstrates the usage of Product Switch Item with imageSrc, configurable by the app developer.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_667","description":"A basic Hero Banner with a header text and overline text.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_668","description":"Demonstrates the three columnsRatio options: single column (no endContent), Equal, and FirstWider.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_669","description":"Demonstrates actionsPlacement and headerBlockPlacement properties for controlling the position of the header and actions.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_670","description":"Demonstrates the use of sap.ui.integration.widgets.Card inside both the startContent (default slot) and endContent aggregations of the Hero Banner.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_app_671","description":"A collection of common Hero Banner use cases: header actions only, content with actions, actions below header, and header at bottom.","minUi5":"1.71","needs":[],"controls":[5,7,2],"controlCount":3}, - {"class":"z2ui5_cl_smpc_demo_001","description":"","minUi5":"1.71","needs":[],"controls":[247,248,229,230,40,3,27,28,68,69,58,19,11,73,74,106,12,1,81,30,31,83,5,46,205,6,333,32,7,20,21,8,9,56,2,16,26],"controlCount":77}, - {"class":"z2ui5_cl_smpc_demo_002","description":"","minUi5":"1.71","needs":[],"controls":[236,239,243,246,229,230,40,3,27,28,73,74,55,12,13,1,387,81,30,100,31,83,4,52,5,6,32,7,20,21,8,9,114,115,116,107,2,61,16,26],"controlCount":88}, + {"class":"z2ui5_cl_smpc_app_624","description":"This sample demonstrates different combinations of types, shapes, and sizes of the Avatar.","minUi5":"1.117","needs":[{"type":"member-too-new","name":"sap.m.Avatar.enabled","since":"1.117"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.customDisplaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.fallbackIcon","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.showBorder","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.showBorder","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,75,7,9,2,77],"controlCount":123}, + {"class":"z2ui5_cl_smpc_app_625","description":"This sample demonstrates toggling of Avatar Active state, when a User menu is opened/closed.","minUi5":"1.120","needs":[{"type":"member-too-new","name":"sap.m.Avatar.active","since":"1.120"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.showBorder","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Popover.titleAlignment","since":"1.72"}],"controls":[258,1,89,235,76,2],"controlCount":13}, + {"class":"z2ui5_cl_smpc_app_626","description":"This sample demonstrates different badge icon colors of the Avatar.","minUi5":"1.132","needs":[{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIconColor","since":"1.132"},{"type":"member-too-new","name":"sap.m.Avatar.badgeValueState","since":"1.116"},{"type":"member-too-new","name":"sap.m.Avatar.badgeValueState","since":"1.116"},{"type":"member-too-new","name":"sap.m.Avatar.badgeValueState","since":"1.116"},{"type":"member-too-new","name":"sap.m.Avatar.badgeValueState","since":"1.116"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"}],"controls":[258,75,7,9,2,77],"controlCount":80}, + {"class":"z2ui5_cl_smpc_app_627","description":"This sample demonstrates different badge value states of the Avatar.","minUi5":"1.116","needs":[{"type":"member-too-new","name":"sap.m.Avatar.badgeValueState","since":"1.116"},{"type":"member-too-new","name":"sap.m.Avatar.badgeValueState","since":"1.116"},{"type":"member-too-new","name":"sap.m.Avatar.badgeValueState","since":"1.116"},{"type":"member-too-new","name":"sap.m.Avatar.badgeValueState","since":"1.116"},{"type":"member-too-new","name":"sap.m.Avatar.badgeValueState","since":"1.116"},{"type":"icon-too-new","name":"information","since":"1.80"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeTooltip","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeTooltip","since":"1.77"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.imageFitType","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,75,7,9,2,77],"controlCount":18}, + {"class":"z2ui5_cl_smpc_app_628","description":"This sample demonstrates different combinations of types, shapes, and sizes of the Avatar with visual affordance.","minUi5":"1.77","needs":[{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeIcon","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeTooltip","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeTooltip","since":"1.77"},{"type":"member-too-new","name":"sap.m.Avatar.badgeTooltip","since":"1.77"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"aggregation-too-new","name":"sap.m.Avatar.detailBox","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displaySize","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.imageFitType","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,97,98,75,7,9,2,77],"controlCount":31}, + {"class":"z2ui5_cl_smpc_app_629","description":"Demonstrates the IllustratedMessage's 'enableVerticalResponsiveness' property.","minUi5":"1.104","needs":[{"type":"member-too-new","name":"sap.m.IllustratedMessage.enableVerticalResponsiveness","since":"1.104"},{"type":"control-too-new","name":"sap.m.IllustratedMessage","since":"1.98"},{"type":"aggregation-too-new","name":"sap.m.IllustratedMessage.additionalContent","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.illustrationType","since":"1.98"}],"controls":[3,273,9,2,159,160,161,195],"controlCount":9}, + {"class":"z2ui5_cl_smpc_app_630","description":"Shows how to import a Custom Illustration from an npm package into a UI5 application for usage with IllustratedMessage.","minUi5":"1.98","needs":[{"type":"control-too-new","name":"sap.m.IllustratedMessage","since":"1.98"},{"type":"aggregation-too-new","name":"sap.m.IllustratedMessage.additionalContent","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.description","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.illustrationSize","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.illustrationType","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.title","since":"1.98"}],"controls":[3,273,12,5,14,7,15,2,26],"controlCount":9}, + {"class":"z2ui5_cl_smpc_app_631","description":"IllustratedMessage as content of sap.f.Card. 'NoActivities' illustration type is being used for the Illustrated Message.","minUi5":"1.98","needs":[{"type":"control-too-new","name":"sap.m.IllustratedMessage","since":"1.98"},{"type":"aggregation-too-new","name":"sap.m.IllustratedMessage.additionalContent","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.illustrationType","since":"1.98"}],"controls":[35,39,3,273,2],"controlCount":5}, + {"class":"z2ui5_cl_smpc_app_632","description":"IllustratedMessage as content of sap.f.Card. 'NoEmail' illustration type is being used for the Illustrated Message.","minUi5":"1.98","needs":[{"type":"control-too-new","name":"sap.m.IllustratedMessage","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.illustrationType","since":"1.98"}],"controls":[35,39,273,2],"controlCount":4}, + {"class":"z2ui5_cl_smpc_app_633","description":"IllustratedMessage as content of sap.m.Dialog.","minUi5":"1.98","needs":[{"type":"control-too-new","name":"sap.m.IllustratedMessage","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.illustrationType","since":"1.98"}],"controls":[3,34,273,18,2],"controlCount":6}, + {"class":"z2ui5_cl_smpc_app_634","description":"The available illustrations are from the default ('sapIllus') illustration set.","minUi5":"1.104","needs":[{"type":"member-too-new","name":"sap.m.IllustratedMessage.enableVerticalResponsiveness","since":"1.104"},{"type":"control-too-new","name":"sap.m.IllustratedMessage","since":"1.98"},{"type":"aggregation-too-new","name":"sap.m.IllustratedMessage.additionalContent","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.illustrationSize","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.illustrationType","since":"1.98"}],"controls":[3,273,12,167,255,168,5,14,53,7,256,15,2,207,26],"controlCount":29}, + {"class":"z2ui5_cl_smpc_app_635","description":"The available properties of the IllustratedMessage are configurable in this sample. The available illustrations are from the 'custom' illustration set.","minUi5":"1.98","needs":[{"type":"control-too-new","name":"sap.m.IllustratedMessage","since":"1.98"},{"type":"aggregation-too-new","name":"sap.m.IllustratedMessage.additionalContent","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.description","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.illustrationSize","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.illustrationType","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.title","since":"1.98"}],"controls":[3,273,12,5,14,7,15,2,26],"controlCount":9}, + {"class":"z2ui5_cl_smpc_app_636","description":"The available properties of the IllustratedMessage are configurable in this sample. The available illustrations are from the 'tnt' illustration set.","minUi5":"1.98","needs":[{"type":"control-too-new","name":"sap.m.IllustratedMessage","since":"1.98"},{"type":"aggregation-too-new","name":"sap.m.IllustratedMessage.additionalContent","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.description","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.illustrationSize","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.illustrationType","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.title","since":"1.98"}],"controls":[3,273,12,5,14,7,15,2,207,26],"controlCount":17}, + {"class":"z2ui5_cl_smpc_app_637","description":"The available illustrations are from the default illustration set with the use of the 'src' property.","minUi5":"1.132","needs":[{"type":"member-too-new","name":"sap.m.IllustratedMessage.src","since":"1.132"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.enableVerticalResponsiveness","since":"1.104"},{"type":"control-too-new","name":"sap.m.IllustratedMessage","since":"1.98"},{"type":"aggregation-too-new","name":"sap.m.IllustratedMessage.additionalContent","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.description","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.illustrationSize","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.title","since":"1.98"}],"controls":[3,273,12,5,14,53,7,15,2,207,26],"controlCount":23}, + {"class":"z2ui5_cl_smpc_app_638","description":"All applications that require user sign-in should employ a mechanism for automating user sign-out. When the inactivity is about to reach that threshold, a session timeout dialog appears automatically to inform the user.","minUi5":"1.98","needs":[{"type":"control-too-new","name":"sap.m.IllustratedMessage","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.description","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.illustrationType","since":"1.98"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.title","since":"1.98"}],"controls":[3,34,273,12,88,9,18,2],"controlCount":12}, + {"class":"z2ui5_cl_smpc_app_639","description":"The dynamic date range is a control that offers a choice of absolute and relative dates, using different offset from the current date. The list of values offered must be defined by the application.","minUi5":"1.92","needs":[{"type":"control-too-new","name":"sap.m.DynamicDateRange","since":"1.92"},{"type":"member-too-new","name":"sap.m.DynamicDateRange.change","since":"1.92"},{"type":"member-too-new","name":"sap.m.DynamicDateRange.placeholder","since":"1.92"},{"type":"member-too-new","name":"sap.m.DynamicDateRange.valueState","since":"1.92"},{"type":"member-too-new","name":"sap.m.DynamicDateRange.width","since":"1.92"}],"controls":[27,28,302,12,31,4,32,7,20,8,2,16],"controlCount":20}, + {"class":"z2ui5_cl_smpc_app_640","description":"This example shows the Dynamic Date Range control with Middle Eastern calendar week numbering.","minUi5":"1.111","needs":[{"type":"member-too-new","name":"sap.m.DynamicDateRange.calendarWeekNumbering","since":"1.111"},{"type":"control-too-new","name":"sap.m.DynamicDateRange","since":"1.92"},{"type":"member-too-new","name":"sap.m.DynamicDateRange.change","since":"1.92"},{"type":"member-too-new","name":"sap.m.DynamicDateRange.placeholder","since":"1.92"},{"type":"member-too-new","name":"sap.m.DynamicDateRange.valueState","since":"1.92"},{"type":"member-too-new","name":"sap.m.DynamicDateRange.width","since":"1.92"}],"controls":[27,28,302,12,31,4,32,7,20,8,2,16],"controlCount":20}, + {"class":"z2ui5_cl_smpc_app_641","description":"This example shows Dynamic Date Range which is opened by another control.","minUi5":"1.105","needs":[{"type":"member-too-new","name":"sap.m.DynamicDateRange.hideInput","since":"1.105"},{"type":"control-too-new","name":"sap.m.DynamicDateRange","since":"1.92"},{"type":"member-too-new","name":"sap.m.DynamicDateRange.change","since":"1.92"},{"type":"member-too-new","name":"sap.m.Link.ariaHasPopup","since":"1.86"},{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"},{"type":"member-too-new","name":"sap.m.Button.ariaHasPopup","since":"1.84"}],"controls":[3,302,12,13,20,9,2],"controlCount":12}, + {"class":"z2ui5_cl_smpc_app_642","description":"This example shows the Dynamic Date Range control with custom options for interval or date selection.","minUi5":"1.92","needs":[{"type":"control-too-new","name":"sap.m.DynamicDateRange","since":"1.92"},{"type":"member-too-new","name":"sap.m.DynamicDateRange.change","since":"1.92"},{"type":"member-too-new","name":"sap.m.DynamicDateRange.placeholder","since":"1.92"},{"type":"member-too-new","name":"sap.m.DynamicDateRange.valueState","since":"1.92"},{"type":"member-too-new","name":"sap.m.DynamicDateRange.width","since":"1.92"}],"controls":[27,28,302,12,31,4,32,7,20,8,2],"controlCount":25}, + {"class":"z2ui5_cl_smpc_app_643","description":"The ExpandableText control can be used to display a larger texts inside a table, list or form.","minUi5":"1.87","needs":[{"type":"control-too-new","name":"sap.m.ExpandableText","since":"1.87"},{"type":"member-too-new","name":"sap.m.ExpandableText.overflowMode","since":"1.87"},{"type":"member-too-new","name":"sap.m.ExpandableText.text","since":"1.87"},{"type":"member-too-new","name":"sap.m.Table.autoPopinMode","since":"1.76"}],"controls":[27,28,303,32,7,2],"controlCount":15}, + {"class":"z2ui5_cl_smpc_app_644","description":"Dialog & Popover with a sap.m.P13nContainer as content.","minUi5":"1.96","needs":[{"type":"control-too-new","name":"sap.m.p13n.AbstractContainerItem","since":"1.96"},{"type":"control-too-new","name":"sap.m.p13n.AbstractContainerItem","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.AbstractContainerItem.key","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.AbstractContainerItem.key","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.AbstractContainerItem.text","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.AbstractContainerItem.text","since":"1.96"},{"type":"control-too-new","name":"sap.m.p13n.Container","since":"1.96"},{"type":"control-too-new","name":"sap.m.p13n.Container","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.Container.defaultView","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.Container.defaultView","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.Container.listLayout","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.Container.listLayout","since":"1.96"}],"controls":[3,34,12,96,111,171,7,9,304,305,2],"controlCount":24}, + {"class":"z2ui5_cl_smpc_app_645","description":"Responsive Table using the personalization Engine","minUi5":"1.110","needs":[{"type":"control-too-new","name":"sap.m.table.columnmenu.Menu","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.Menu.beforeOpen","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.Menu.showTableSettingsButton","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.Menu.tableSettingsPressed","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.QuickGroup","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.QuickGroup.change","since":"1.110"},{"type":"aggregation-too-new","name":"sap.m.table.columnmenu.QuickGroup.items","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.QuickGroupItem","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.QuickGroupItem.grouped","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.QuickGroupItem.key","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.QuickGroupItem.label","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.QuickSort","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.QuickSort.change","since":"1.110"},{"type":"aggregation-too-new","name":"sap.m.table.columnmenu.QuickSort.items","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.QuickSortItem","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.QuickSortItem.key","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.QuickSortItem.label","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.QuickSortItem.sortOrder","since":"1.110"},{"type":"aggregation-too-new","name":"sap.m.Table.noData","since":"1.101"},{"type":"member-too-new","name":"sap.m.Column.headerMenu","since":"1.98"},{"type":"control-too-new","name":"sap.m.IllustratedMessage","since":"1.98"},{"type":"control-too-new","name":"sap.m.p13n.Popup","since":"1.97"},{"type":"member-too-new","name":"sap.m.p13n.Popup.close","since":"1.97"},{"type":"aggregation-too-new","name":"sap.m.p13n.Popup.panels","since":"1.97"},{"type":"control-too-new","name":"sap.m.p13n.SelectionPanel","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.enableCount","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.showHeader","since":"1.96"},{"type":"control-too-new","name":"sap.m.p13n.SortPanel","since":"1.96"},{"type":"control-too-new","name":"sap.m.plugins.ColumnResizer","since":"1.91"},{"type":"member-too-new","name":"sap.m.plugins.ColumnResizer.columnResize","since":"1.91"},{"type":"member-too-new","name":"sap.m.Table.autoPopinMode","since":"1.76"}],"controls":[3,27,28,273,4,5,32,7,20,174,8,306,307,308,309,272,278,310,311,280,281,183,2],"controlCount":31}, + {"class":"z2ui5_cl_smpc_app_646","description":"Filtering using the personalization Engine","minUi5":"1.110","needs":[{"type":"control-too-new","name":"sap.m.table.columnmenu.ActionItem","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.ActionItem","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.ActionItem","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.ActionItem.icon","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.ActionItem.icon","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.ActionItem.icon","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.ActionItem.label","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.ActionItem.label","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.ActionItem.label","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.Menu","since":"1.110"},{"type":"aggregation-too-new","name":"sap.m.table.columnmenu.Menu.items","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.QuickGroup","since":"1.110"},{"type":"aggregation-too-new","name":"sap.m.table.columnmenu.QuickGroup.items","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.QuickGroupItem","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.QuickSort","since":"1.110"},{"type":"aggregation-too-new","name":"sap.m.table.columnmenu.QuickSort.items","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.QuickSortItem","since":"1.110"},{"type":"aggregation-too-new","name":"sap.m.Table.noData","since":"1.101"},{"type":"member-too-new","name":"sap.m.Column.headerMenu","since":"1.98"},{"type":"member-too-new","name":"sap.m.Column.headerMenu","since":"1.98"},{"type":"member-too-new","name":"sap.m.Column.headerMenu","since":"1.98"},{"type":"member-too-new","name":"sap.m.Column.headerMenu","since":"1.98"},{"type":"control-too-new","name":"sap.m.IllustratedMessage","since":"1.98"},{"type":"member-too-new","name":"sap.m.MultiInput.showClearIcon","since":"1.94"},{"type":"member-too-new","name":"sap.m.MultiInput.showClearIcon","since":"1.94"},{"type":"member-too-new","name":"sap.m.MultiInput.showClearIcon","since":"1.94"},{"type":"member-too-new","name":"sap.m.MultiInput.showClearIcon","since":"1.94"},{"type":"control-too-new","name":"sap.m.plugins.ColumnResizer","since":"1.91"},{"type":"member-too-new","name":"sap.m.Table.autoPopinMode","since":"1.76"}],"controls":[3,27,28,34,273,12,149,4,5,32,7,20,150,174,8,9,272,277,278,310,311,280,281,15,183,2],"controlCount":52}, + {"class":"z2ui5_cl_smpc_app_647","description":"GridList using the personalization Engine","minUi5":"1.97","needs":[{"type":"control-too-new","name":"sap.m.p13n.Popup","since":"1.97"},{"type":"member-too-new","name":"sap.m.p13n.Popup.close","since":"1.97"},{"type":"aggregation-too-new","name":"sap.m.p13n.Popup.panels","since":"1.97"},{"type":"control-too-new","name":"sap.m.p13n.SelectionPanel","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.enableCount","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.showHeader","since":"1.96"}],"controls":[50,3,43,19,11,12,20,21,174,8,9,307,308,56,2],"controlCount":27}, + {"class":"z2ui5_cl_smpc_app_648","description":"Grid Table using the personalization Engine","minUi5":"1.119","needs":[{"type":"member-too-new","name":"sap.ui.table.Table.rowMode","since":"1.119"},{"type":"control-too-new","name":"sap.m.table.columnmenu.Menu","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.Menu.showTableSettingsButton","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.Menu.tableSettingsPressed","since":"1.110"},{"type":"member-too-new","name":"sap.ui.table.Column.headerMenu","since":"1.110"},{"type":"member-too-new","name":"sap.m.IllustratedMessage.enableVerticalResponsiveness","since":"1.104"},{"type":"control-too-new","name":"sap.m.IllustratedMessage","since":"1.98"},{"type":"control-too-new","name":"sap.m.p13n.Popup","since":"1.97"},{"type":"member-too-new","name":"sap.m.p13n.Popup.close","since":"1.97"},{"type":"aggregation-too-new","name":"sap.m.p13n.Popup.panels","since":"1.97"},{"type":"control-too-new","name":"sap.m.p13n.SelectionPanel","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.enableCount","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.showHeader","since":"1.96"},{"type":"control-too-new","name":"sap.m.p13n.SortPanel","since":"1.96"}],"controls":[3,273,12,4,5,7,20,174,8,307,308,309,278,2,188,189],"controlCount":18}, + {"class":"z2ui5_cl_smpc_app_649","description":"Personalization for Reponsive Table using multiple SelectionControllers","minUi5":"1.110","needs":[{"type":"control-too-new","name":"sap.m.table.columnmenu.ActionItem","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.ActionItem.icon","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.ActionItem.label","since":"1.110"},{"type":"member-too-new","name":"sap.m.table.columnmenu.ActionItem.press","since":"1.110"},{"type":"control-too-new","name":"sap.m.table.columnmenu.Menu","since":"1.110"},{"type":"aggregation-too-new","name":"sap.m.table.columnmenu.Menu.items","since":"1.110"},{"type":"aggregation-too-new","name":"sap.m.Table.noData","since":"1.101"},{"type":"member-too-new","name":"sap.m.Column.headerMenu","since":"1.98"},{"type":"control-too-new","name":"sap.m.IllustratedMessage","since":"1.98"},{"type":"control-too-new","name":"sap.m.p13n.Popup","since":"1.97"},{"type":"control-too-new","name":"sap.m.p13n.Popup","since":"1.97"},{"type":"member-too-new","name":"sap.m.p13n.Popup.close","since":"1.97"},{"type":"member-too-new","name":"sap.m.p13n.Popup.close","since":"1.97"},{"type":"aggregation-too-new","name":"sap.m.p13n.Popup.panels","since":"1.97"},{"type":"aggregation-too-new","name":"sap.m.p13n.Popup.panels","since":"1.97"},{"type":"control-too-new","name":"sap.m.p13n.SelectionPanel","since":"1.96"},{"type":"control-too-new","name":"sap.m.p13n.SelectionPanel","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.enableCount","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.enableCount","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.enableReorder","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.showHeader","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.showHeader","since":"1.96"},{"type":"member-too-new","name":"sap.m.Table.autoPopinMode","since":"1.76"}],"controls":[3,27,28,273,4,5,32,7,20,174,8,307,308,277,278,183,2],"controlCount":22}, + {"class":"z2ui5_cl_smpc_app_650","description":"Dialog with sap.m.p13n/* Panels","minUi5":"1.97","needs":[{"type":"control-too-new","name":"sap.m.p13n.Popup","since":"1.97"},{"type":"member-too-new","name":"sap.m.p13n.Popup.close","since":"1.97"},{"type":"member-too-new","name":"sap.m.p13n.Popup.open","since":"1.97"},{"type":"aggregation-too-new","name":"sap.m.p13n.Popup.panels","since":"1.97"},{"type":"member-too-new","name":"sap.m.p13n.Popup.title","since":"1.97"},{"type":"member-too-new","name":"sap.m.p13n.Popup.warningText","since":"1.97"},{"type":"control-too-new","name":"sap.m.p13n.SelectionPanel","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.change","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.enableCount","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.showHeader","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SelectionPanel.title","since":"1.96"},{"type":"control-too-new","name":"sap.m.p13n.SortPanel","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SortPanel.change","since":"1.96"},{"type":"member-too-new","name":"sap.m.p13n.SortPanel.title","since":"1.96"}],"controls":[3,9,306,307,308,309,187,2],"controlCount":8}, + {"class":"z2ui5_cl_smpc_app_651","description":"VariantManagement with dedicated items","minUi5":"1.103","needs":[{"type":"control-too-new","name":"sap.m.VariantManagement","since":"1.103"},{"type":"member-too-new","name":"sap.m.VariantManagement.defaultKey","since":"1.103"},{"type":"member-too-new","name":"sap.m.VariantManagement.items","since":"1.103"},{"type":"aggregation-too-new","name":"sap.m.VariantManagement.items","since":"1.103"},{"type":"member-too-new","name":"sap.m.VariantManagement.manage","since":"1.103"},{"type":"member-too-new","name":"sap.m.VariantManagement.modified","since":"1.103"},{"type":"member-too-new","name":"sap.m.VariantManagement.popoverTitle","since":"1.103"},{"type":"member-too-new","name":"sap.m.VariantManagement.save","since":"1.103"},{"type":"member-too-new","name":"sap.m.VariantManagement.select","since":"1.103"},{"type":"member-too-new","name":"sap.m.VariantManagement.selectedKey","since":"1.103"},{"type":"member-too-new","name":"sap.m.VariantManagement.showFooter","since":"1.103"}],"controls":[36,38,3,4,46,20,8,312,313,2],"controlCount":10}, + {"class":"z2ui5_cl_smpc_app_652","description":"This example demonstrates the usage of fileNameValidationConfig property to configure file name validation for renaming a file.","minUi5":"1.136","needs":[{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.fileNameValidationConfig","since":"1.136"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.isTrustedSourcePath","since":"1.125"},{"type":"control-too-new","name":"sap.m.plugins.UploadSetwithTable","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.actions","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.beforeUploadStarts","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.cloudFilePickerEnabled","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.itemRenamed","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.multiple","since":"1.124"},{"type":"aggregation-too-new","name":"sap.m.plugins.UploadSetwithTable.rowConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.uploadUrl","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.UploadItemConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileNamePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileSizePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.mediaTypePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.previewablePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.urlPath","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.ActionsPlaceholder","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.ActionsPlaceholder.placeholderFor","since":"1.120"},{"type":"member-too-new","name":"sap.m.Table.hiddenInPopin","since":"1.77"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Table.autoPopinMode","since":"1.76"}],"controls":[36,3,23,27,28,34,11,55,45,12,13,167,255,168,89,4,52,6,32,7,20,174,8,9,314,315,316,18,56,2,26],"controlCount":72}, + {"class":"z2ui5_cl_smpc_app_653","description":"This example showcases how to display custom page content for non supported file types in the FilePreviewDialog control. The custom page content is displayed when the user tries to preview a file that is not supported by the FilePreviewDialog control. This sample demonstrates usage of customPageConentHandler property as a callback function to display custom page content.","minUi5":"1.125","needs":[{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.isTrustedSourcePath","since":"1.125"},{"type":"control-too-new","name":"sap.m.plugins.UploadSetwithTable","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.actions","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.beforeUploadStarts","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.cloudFilePickerEnabled","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.itemRenamed","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.multiple","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.previewDialog","since":"1.124"},{"type":"aggregation-too-new","name":"sap.m.plugins.UploadSetwithTable.rowConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.uploadUrl","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.UploadItemConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileNamePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileSizePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.mediaTypePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.previewablePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.urlPath","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.ActionsPlaceholder","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.ActionsPlaceholder.placeholderFor","since":"1.120"},{"type":"control-too-new","name":"sap.m.upload.FilePreviewDialog","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.FilePreviewDialog.maxFileSizeforPreview","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.FilePreviewDialog.showCarouselArrows","since":"1.120"},{"type":"member-too-new","name":"sap.m.Table.hiddenInPopin","since":"1.77"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Table.autoPopinMode","since":"1.76"}],"controls":[36,3,27,28,34,11,55,45,12,13,167,255,168,89,4,52,6,32,7,20,174,8,9,314,315,317,316,18,56,2,26],"controlCount":64}, + {"class":"z2ui5_cl_smpc_app_654","description":"This example demonstrates the usage of UploadSetwithTable plugin for grid table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.","minUi5":"1.125","needs":[{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.isTrustedSourcePath","since":"1.125"},{"type":"control-too-new","name":"sap.m.plugins.UploadSetwithTable","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.actions","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.beforeUploadStarts","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.cloudFilePickerEnabled","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.itemRenamed","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.multiple","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.uploadUrl","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.UploadItemConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileNamePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileSizePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.mediaTypePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.previewablePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.urlPath","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.ActionsPlaceholder","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.ActionsPlaceholder.placeholderFor","since":"1.120"}],"controls":[36,3,34,11,55,45,12,13,167,255,168,4,52,7,20,8,9,314,315,316,18,56,2,26,188,198,189],"controlCount":57}, + {"class":"z2ui5_cl_smpc_app_655","description":"This example demonstrates the usage of multiple plugin instances with multiple tables. The plugin instances are created for each table and the uploaded files are displayed in their respective tables.","minUi5":"1.125","needs":[{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.isTrustedSourcePath","since":"1.125"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.isTrustedSourcePath","since":"1.125"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.isTrustedSourcePath","since":"1.125"},{"type":"control-too-new","name":"sap.m.plugins.UploadSetwithTable","since":"1.124"},{"type":"control-too-new","name":"sap.m.plugins.UploadSetwithTable","since":"1.124"},{"type":"control-too-new","name":"sap.m.plugins.UploadSetwithTable","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.actions","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.actions","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.actions","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.beforeUploadStarts","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.beforeUploadStarts","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.beforeUploadStarts","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.cloudFilePickerEnabled","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.cloudFilePickerEnabled","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.cloudFilePickerEnabled","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.multiple","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.multiple","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.multiple","since":"1.124"},{"type":"aggregation-too-new","name":"sap.m.plugins.UploadSetwithTable.rowConfiguration","since":"1.124"},{"type":"aggregation-too-new","name":"sap.m.plugins.UploadSetwithTable.rowConfiguration","since":"1.124"},{"type":"aggregation-too-new","name":"sap.m.plugins.UploadSetwithTable.rowConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.uploadUrl","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.uploadUrl","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.uploadUrl","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.UploadItemConfiguration","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.UploadItemConfiguration","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.UploadItemConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileNamePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileNamePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileNamePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileSizePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileSizePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileSizePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.mediaTypePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.mediaTypePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.mediaTypePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.previewablePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.previewablePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.previewablePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.urlPath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.urlPath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.urlPath","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.ActionsPlaceholder","since":"1.120"},{"type":"control-too-new","name":"sap.m.upload.ActionsPlaceholder","since":"1.120"},{"type":"control-too-new","name":"sap.m.upload.ActionsPlaceholder","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.ActionsPlaceholder.placeholderFor","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.ActionsPlaceholder.placeholderFor","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.ActionsPlaceholder.placeholderFor","since":"1.120"},{"type":"member-too-new","name":"sap.m.Table.hiddenInPopin","since":"1.77"},{"type":"member-too-new","name":"sap.m.Table.hiddenInPopin","since":"1.77"},{"type":"member-too-new","name":"sap.m.Table.hiddenInPopin","since":"1.77"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Table.autoPopinMode","since":"1.76"},{"type":"member-too-new","name":"sap.m.Table.autoPopinMode","since":"1.76"},{"type":"member-too-new","name":"sap.m.Table.autoPopinMode","since":"1.76"}],"controls":[36,3,27,28,11,55,12,13,4,52,6,32,7,20,174,8,9,314,315,316,256,56,2],"controlCount":123}, + {"class":"z2ui5_cl_smpc_app_656","description":"This example demonstrates usage of itemValidationHandler callback to leverage additional validations and configurations for the items that are to be uploaded, and also the manual trigger of the upload process. The user input can be captured for each file with the help of the user dialog implemented at the application controller, before its upload.","minUi5":"1.125","needs":[{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.isTrustedSourcePath","since":"1.125"},{"type":"control-too-new","name":"sap.m.plugins.UploadSetwithTable","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.actions","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.beforeUploadStarts","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.cloudFilePickerEnabled","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.itemRenamed","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.multiple","since":"1.124"},{"type":"aggregation-too-new","name":"sap.m.plugins.UploadSetwithTable.rowConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.uploadUrl","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.UploadItemConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileNamePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileSizePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.mediaTypePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.previewablePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.urlPath","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.ActionsPlaceholder","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.ActionsPlaceholder.placeholderFor","since":"1.120"},{"type":"member-too-new","name":"sap.m.Table.hiddenInPopin","since":"1.77"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Table.autoPopinMode","since":"1.76"}],"controls":[36,3,27,28,29,34,11,55,45,12,13,167,255,168,4,52,6,32,7,20,21,174,8,9,314,315,316,18,56,151,2,26],"controlCount":79}, + {"class":"z2ui5_cl_smpc_app_657","description":"This example showcases how uploaded files can be previewed with FilePreviewDialog control and its related configuration. UploadSetwithTable plugin creates and uses default instance of FilePreviewDialog, if not defined.","minUi5":"1.125","needs":[{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.isTrustedSourcePath","since":"1.125"},{"type":"control-too-new","name":"sap.m.plugins.UploadSetwithTable","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.actions","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.beforeUploadStarts","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.cloudFilePickerEnabled","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.itemRenamed","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.multiple","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.previewDialog","since":"1.124"},{"type":"aggregation-too-new","name":"sap.m.plugins.UploadSetwithTable.rowConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.uploadUrl","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.UploadItemConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileNamePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileSizePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.mediaTypePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.previewablePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.urlPath","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.ActionsPlaceholder","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.ActionsPlaceholder.placeholderFor","since":"1.120"},{"type":"control-too-new","name":"sap.m.upload.FilePreviewDialog","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.FilePreviewDialog.maxFileSizeforPreview","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.FilePreviewDialog.showCarouselArrows","since":"1.120"},{"type":"member-too-new","name":"sap.m.Table.hiddenInPopin","since":"1.77"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Table.autoPopinMode","since":"1.76"}],"controls":[36,3,27,28,34,11,55,45,12,13,167,255,168,4,52,6,32,7,20,174,8,9,314,315,317,316,18,56,2,26],"controlCount":61}, + {"class":"z2ui5_cl_smpc_app_658","description":"This example demonstrates the progress or termination of the items that are being uploaded. The upload progress is displayed for each item that is being uploaded. The users can terminate the upload process at any time.","minUi5":"1.125","needs":[{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.isTrustedSourcePath","since":"1.125"},{"type":"control-too-new","name":"sap.m.plugins.UploadSetwithTable","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.actions","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.cloudFilePickerEnabled","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.itemRenamed","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.multiple","since":"1.124"},{"type":"aggregation-too-new","name":"sap.m.plugins.UploadSetwithTable.rowConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.uploadCompleted","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.uploadUrl","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.UploadItemConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileNamePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileSizePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.mediaTypePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.previewablePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.urlPath","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.ActionsPlaceholder","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.ActionsPlaceholder.placeholderFor","since":"1.120"},{"type":"member-too-new","name":"sap.m.Table.hiddenInPopin","since":"1.77"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Table.autoPopinMode","since":"1.76"}],"controls":[36,3,27,28,34,11,55,45,12,13,167,255,168,4,52,6,32,7,20,174,8,9,314,315,316,18,56,2,26],"controlCount":60}, + {"class":"z2ui5_cl_smpc_app_659","description":"This example demonstrates the usage of UploadSetwithTable plugin for responsive table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.","minUi5":"1.142","needs":[{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.itemRenameCanceled","since":"1.142"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.isTrustedSourcePath","since":"1.125"},{"type":"control-too-new","name":"sap.m.plugins.UploadSetwithTable","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.actions","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.beforeUploadStarts","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.cloudFilePickerEnabled","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.itemRenamed","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.multiple","since":"1.124"},{"type":"aggregation-too-new","name":"sap.m.plugins.UploadSetwithTable.rowConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.uploadUrl","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.UploadItemConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileNamePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileSizePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.mediaTypePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.previewablePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.urlPath","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.ActionsPlaceholder","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.ActionsPlaceholder.placeholderFor","since":"1.120"},{"type":"member-too-new","name":"sap.m.Table.hiddenInPopin","since":"1.77"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Column.importance","since":"1.76"},{"type":"member-too-new","name":"sap.m.Table.autoPopinMode","since":"1.76"}],"controls":[36,3,27,28,34,11,55,45,12,13,167,255,168,4,52,6,32,7,20,174,8,9,314,315,316,18,56,2,26],"controlCount":60}, + {"class":"z2ui5_cl_smpc_app_660","description":"This example demonstrates the usage of UploadSetwithTable plugin for tree table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.","minUi5":"1.139","needs":[{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.isDirectoryPath","since":"1.139"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.isTrustedSourcePath","since":"1.125"},{"type":"control-too-new","name":"sap.m.plugins.UploadSetwithTable","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.actions","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.beforeUploadStarts","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.cloudFilePickerEnabled","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.itemRenamed","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.multiple","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.uploadUrl","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.UploadItemConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileNamePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileSizePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.mediaTypePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.previewablePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.urlPath","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.ActionsPlaceholder","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.ActionsPlaceholder.placeholderFor","since":"1.120"}],"controls":[36,3,34,11,55,45,12,13,167,255,168,4,52,7,20,8,9,314,315,316,18,56,2,26,188,198,202],"controlCount":52}, + {"class":"z2ui5_cl_smpc_app_661","description":"This example demonstrates the usage of UploadSetwithTable plugin with a tree table featuring folder hierarchy, folder creation, folder uploads, folder navigation with breadcrumbs and folder management","minUi5":"1.139","needs":[{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.isDirectoryPath","since":"1.139"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.isTrustedSourcePath","since":"1.125"},{"type":"control-too-new","name":"sap.m.plugins.UploadSetwithTable","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.actions","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.beforeUploadStarts","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.itemRenamed","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.multiple","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.uploadEnabled","since":"1.124"},{"type":"member-too-new","name":"sap.m.plugins.UploadSetwithTable.uploadUrl","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.UploadItemConfiguration","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileNamePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.fileSizePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.mediaTypePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.previewablePath","since":"1.124"},{"type":"member-too-new","name":"sap.m.upload.UploadItemConfiguration.urlPath","since":"1.124"},{"type":"control-too-new","name":"sap.m.upload.ActionsPlaceholder","since":"1.120"},{"type":"member-too-new","name":"sap.m.upload.ActionsPlaceholder.placeholderFor","since":"1.120"}],"controls":[36,10,3,34,11,55,45,12,13,4,7,9,314,315,316,18,56,2,188,198,202],"controlCount":48}, + {"class":"z2ui5_cl_smpc_app_662","description":"This sample demonstrates the different group types and item sizes of the AvatarGroup control.","minUi5":"1.73","needs":[{"type":"control-too-new","name":"sap.f.AvatarGroup","since":"1.73"},{"type":"control-too-new","name":"sap.f.AvatarGroup","since":"1.73"},{"type":"member-too-new","name":"sap.f.AvatarGroup.avatarDisplaySize","since":"1.73"},{"type":"member-too-new","name":"sap.f.AvatarGroup.avatarDisplaySize","since":"1.73"},{"type":"member-too-new","name":"sap.f.AvatarGroup.groupType","since":"1.73"},{"type":"member-too-new","name":"sap.f.AvatarGroup.groupType","since":"1.73"},{"type":"member-too-new","name":"sap.f.AvatarGroup.items","since":"1.73"},{"type":"member-too-new","name":"sap.f.AvatarGroup.items","since":"1.73"},{"type":"member-too-new","name":"sap.f.AvatarGroup.press","since":"1.73"},{"type":"member-too-new","name":"sap.f.AvatarGroup.press","since":"1.73"},{"type":"control-too-new","name":"sap.f.AvatarGroupItem","since":"1.73"},{"type":"control-too-new","name":"sap.f.AvatarGroupItem","since":"1.73"},{"type":"member-too-new","name":"sap.f.AvatarGroupItem.fallbackIcon","since":"1.73"},{"type":"member-too-new","name":"sap.f.AvatarGroupItem.fallbackIcon","since":"1.73"},{"type":"member-too-new","name":"sap.f.AvatarGroupItem.initials","since":"1.73"},{"type":"member-too-new","name":"sap.f.AvatarGroupItem.initials","since":"1.73"},{"type":"member-too-new","name":"sap.f.AvatarGroupItem.src","since":"1.73"},{"type":"member-too-new","name":"sap.f.AvatarGroupItem.src","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.backgroundColor","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.fallbackIcon","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.fallbackIcon","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.fallbackIcon","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.initials","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.press","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"},{"type":"member-too-new","name":"sap.m.Page.titleAlignment","since":"1.72"},{"type":"member-too-new","name":"sap.m.Page.titleAlignment","since":"1.72"},{"type":"member-too-new","name":"sap.m.Popover.titleAlignment","since":"1.72"}],"controls":[346,347,35,258,11,12,118,5,235,90,7,20,9,18,2,77,16],"controlCount":52}, + {"class":"z2ui5_cl_smpc_app_663","description":"Demonstrates the basic usage of Side Panel.","minUi5":"1.146","needs":[{"type":"aggregation-too-new","name":"sap.f.SidePanelItem.title","since":"1.146"},{"type":"control-too-new","name":"sap.f.SidePanel","since":"1.107"},{"type":"aggregation-too-new","name":"sap.f.SidePanel.items","since":"1.107"},{"type":"aggregation-too-new","name":"sap.f.SidePanel.mainContent","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanel.sidePanelPosition","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanel.toggle","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"}],"controls":[336,337,3,45,12,5,14,53,7,20,9,151,2],"controlCount":47}, + {"class":"z2ui5_cl_smpc_app_664","description":"Demonstrates the usage of Side Panel with overflow menu on desktop and tablet devices.","minUi5":"1.107","needs":[{"type":"control-too-new","name":"sap.f.SidePanel","since":"1.107"},{"type":"aggregation-too-new","name":"sap.f.SidePanel.items","since":"1.107"},{"type":"aggregation-too-new","name":"sap.f.SidePanel.mainContent","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanel.toggle","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"}],"controls":[336,337,3,12,5,53,7,9,2],"controlCount":61}, + {"class":"z2ui5_cl_smpc_app_665","description":"Demonstrates the usage of resizable Side Panel.","minUi5":"1.107","needs":[{"type":"control-too-new","name":"sap.f.SidePanel","since":"1.107"},{"type":"aggregation-too-new","name":"sap.f.SidePanel.items","since":"1.107"},{"type":"aggregation-too-new","name":"sap.f.SidePanel.mainContent","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanel.sidePanelResizable","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanel.toggle","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"control-too-new","name":"sap.f.SidePanelItem","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"},{"type":"member-too-new","name":"sap.f.SidePanelItem.icon","since":"1.107"}],"controls":[336,337,3,45,12,5,53,7,9,2],"controlCount":35}, + {"class":"z2ui5_cl_smpc_app_666","description":"This sample demonstrates the usage of Product Switch Item with imageSrc, configurable by the app developer.","minUi5":"1.140","needs":[{"type":"member-too-new","name":"sap.f.ProductSwitchItem.imageSrc","since":"1.140"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.imageSrc","since":"1.140"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.imageSrc","since":"1.140"},{"type":"control-too-new","name":"sap.f.ProductSwitch","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitch.change","since":"1.72"},{"type":"aggregation-too-new","name":"sap.f.ProductSwitch.items","since":"1.72"},{"type":"control-too-new","name":"sap.f.ProductSwitchItem","since":"1.72"},{"type":"control-too-new","name":"sap.f.ProductSwitchItem","since":"1.72"},{"type":"control-too-new","name":"sap.f.ProductSwitchItem","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.src","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.src","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.src","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.subTitle","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.subTitle","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.subTitle","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.target","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.target","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.target","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.targetSrc","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.targetSrc","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.targetSrc","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.title","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.title","since":"1.72"},{"type":"member-too-new","name":"sap.f.ProductSwitchItem.title","since":"1.72"}],"controls":[338,339,3,171,7,18,2,16],"controlCount":12}, + {"class":"z2ui5_cl_smpc_app_667","description":"A basic Hero Banner with a header text and overline text.","minUi5":"1.152","needs":[{"type":"control-too-new","name":"sap.f.HeroBanner","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.headerText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.overlineText","since":"1.152"}],"controls":[348,5,9,2],"controlCount":4}, + {"class":"z2ui5_cl_smpc_app_668","description":"Demonstrates the three columnsRatio options: single column (no endContent), Equal, and FirstWider.","minUi5":"1.152","needs":[{"type":"control-too-new","name":"sap.f.HeroBanner","since":"1.152"},{"type":"control-too-new","name":"sap.f.HeroBanner","since":"1.152"},{"type":"control-too-new","name":"sap.f.HeroBanner","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.actions","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.columnsRatio","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.columnsRatio","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.endContent","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.endContent","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.headerText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.headerText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.headerText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.overlineText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.overlineText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.overlineText","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.startContent","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.startContent","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.startContent","since":"1.152"}],"controls":[35,348,39,3,5,7,20,9,24,2],"controlCount":31}, + {"class":"z2ui5_cl_smpc_app_669","description":"Demonstrates actionsPlacement and headerBlockPlacement properties for controlling the position of the header and actions.","minUi5":"1.152","needs":[{"type":"control-too-new","name":"sap.f.HeroBanner","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.actions","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.actionsPlacement","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.columnsRatio","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.endContent","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.headerBlockPlacement","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.headerText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.overlineText","since":"1.152"}],"controls":[35,348,39,3,5,20,9,2],"controlCount":11}, + {"class":"z2ui5_cl_smpc_app_670","description":"Demonstrates the use of sap.ui.integration.widgets.Card inside both the startContent (default slot) and endContent aggregations of the Hero Banner.","minUi5":"1.152","needs":[{"type":"control-too-new","name":"sap.f.HeroBanner","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.actions","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.columnsRatio","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.endContent","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.headerText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.overlineText","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.startContent","since":"1.152"}],"controls":[348,3,5,9,2,211],"controlCount":8}, + {"class":"z2ui5_cl_smpc_app_671","description":"A collection of common Hero Banner use cases: header actions only, content with actions, actions below header, and header at bottom.","minUi5":"1.152","needs":[{"type":"control-too-new","name":"sap.f.HeroBanner","since":"1.152"},{"type":"control-too-new","name":"sap.f.HeroBanner","since":"1.152"},{"type":"control-too-new","name":"sap.f.HeroBanner","since":"1.152"},{"type":"control-too-new","name":"sap.f.HeroBanner","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.actions","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.actions","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.actions","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.actions","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.actionsPlacement","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.columnsRatio","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.columnsRatio","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.endContent","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.endContent","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.headerBlockPlacement","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.headerText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.headerText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.headerText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.headerText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.overlineText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.overlineText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.overlineText","since":"1.152"},{"type":"member-too-new","name":"sap.f.HeroBanner.overlineText","since":"1.152"},{"type":"aggregation-too-new","name":"sap.f.HeroBanner.startContent","since":"1.152"}],"controls":[35,348,39,3,5,7,20,9,24,2],"controlCount":34}, + {"class":"z2ui5_cl_smpc_demo_001","description":"","minUi5":"1.71","needs":[],"controls":[247,248,229,230,40,3,27,28,68,69,58,19,11,73,74,106,12,1,81,30,31,83,5,46,205,6,352,32,7,20,21,8,9,56,2,16,26],"controlCount":77}, + {"class":"z2ui5_cl_smpc_demo_002","description":"","minUi5":"1.71","needs":[],"controls":[236,239,243,246,229,230,40,3,27,28,73,74,55,12,13,1,406,81,30,100,31,83,4,52,5,6,32,7,20,21,8,9,114,115,116,107,2,61,16,26],"controlCount":88}, {"class":"z2ui5_cl_smpc_demo_003","description":"","minUi5":"1.71","needs":[],"controls":[36,38,3,12,175,291,176,289,171,14,178,179,265,180,20,9,15,2,16,177,292],"controlCount":35}, - {"class":"z2ui5_cl_smpc_demo_004","description":"","minUi5":"1.71","needs":[],"controls":[236,40,102,3,41,23,117,58,44,11,55,45,12,97,98,13,1,269,270,78,122,118,81,82,30,100,83,5,147,46,103,84,75,6,86,87,76,7,60,20,33,21,8,9,164,114,115,116,119,120,24,2,47,48,49,77,197,16,152,153,154,155,26,388],"controlCount":414}, - {"class":"z2ui5_cl_smpc_demo_005","description":"","minUi5":"1.71","needs":[],"controls":[40,27,28,73,74,12,82,30,31,6,333,32,7,33,21,8,130,133,2,26],"controlCount":33}, - {"class":"z2ui5_cl_smpc_sapui5_001","description":"","minUi5":"1.71","needs":[],"controls":[3,58,13,5,333,7,334,335,2,77,197,336,337],"controlCount":35}, - {"class":"z2ui5_cl_smpc_sapui5_002","description":"","minUi5":"1.71","needs":[],"controls":[58,13,5,333,7,338,339,2,77,197,16,336,337],"controlCount":36}, - {"class":"z2ui5_cl_smpc_sapui5_003","description":"","minUi5":"1.71","needs":[],"controls":[58,13,5,333,7,340,341,2,77,197,16,336,337],"controlCount":27}, - {"class":"z2ui5_cl_smpc_sapui5_004","description":"","minUi5":"1.71","needs":[],"controls":[13,5,333,342,2,77,61,16,336,337],"controlCount":20}, - {"class":"z2ui5_cl_smpc_sapui5_005","description":"","minUi5":"1.71","needs":[],"controls":[5,333,343,344,2],"controlCount":5}, - {"class":"z2ui5_cl_smpc_sapui5_006","description":"","minUi5":"1.71","needs":[],"controls":[5,333,345,346,347,2],"controlCount":6}, - {"class":"z2ui5_cl_smpc_sapui5_007","description":"","minUi5":"1.71","needs":[],"controls":[5,333,348,349,2],"controlCount":5}, - {"class":"z2ui5_cl_smpc_sapui5_008","description":"","minUi5":"1.92","needs":[{"type":"aggregation-too-new","name":"sap.m.QuickViewPage.avatar","since":"1.92"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,5,263,260,261,262,350,351,352,353,354,355,356,18,2],"controlCount":19}, - {"class":"z2ui5_cl_smpc_sapui5_009","description":"","minUi5":"1.71","needs":[],"controls":[58,5,46,85,333,90,7,357,358,359,360,24,2],"controlCount":16}, - {"class":"z2ui5_cl_smpc_sapui5_010","description":"","minUi5":"1.71","needs":[],"controls":[5,333,2,361,362,363,364,365,366,367,368,369],"controlCount":12}, - {"class":"z2ui5_cl_smpc_sapui5_011","description":"","minUi5":"1.71","needs":[],"controls":[45,12,5,333,370,2,26],"controlCount":10}, - {"class":"z2ui5_cl_smpc_sapui5_012","description":"","minUi5":"1.96","needs":[{"type":"member-too-new","name":"sap.m.ComboBox.showClearIcon","since":"1.96"}],"controls":[36,37,38,3,29,333,20,371,372,15,2,373,374,375,376,377],"controlCount":18}, - {"class":"z2ui5_cl_smpc_sapui5_013","description":"","minUi5":"1.71","needs":[],"controls":[378,379,380,381,382,383,89,5,7,2,188,202],"controlCount":14}, - {"class":"z2ui5_cl_smpc_sapui5_014","description":"","minUi5":"1.71","needs":[],"controls":[378,379,384,385,380,381,382,386,12,89,5,75,333,7,256,2,188,202],"controlCount":19} + {"class":"z2ui5_cl_smpc_demo_004","description":"","minUi5":"1.71","needs":[],"controls":[236,40,102,3,41,23,117,58,44,11,55,45,12,97,98,13,1,269,270,78,122,118,81,82,30,100,83,5,147,46,103,84,75,6,86,87,76,7,60,20,33,21,8,9,164,114,115,116,119,120,24,2,47,48,49,77,197,16,152,153,154,155,26,407],"controlCount":414}, + {"class":"z2ui5_cl_smpc_demo_005","description":"","minUi5":"1.71","needs":[],"controls":[40,27,28,73,74,12,82,30,31,6,352,32,7,33,21,8,130,133,2,26],"controlCount":33}, + {"class":"z2ui5_cl_smpc_sapui5_001","description":"","minUi5":"1.71","needs":[],"controls":[3,58,13,5,352,7,353,354,2,77,197,355,356],"controlCount":35}, + {"class":"z2ui5_cl_smpc_sapui5_002","description":"","minUi5":"1.71","needs":[],"controls":[58,13,5,352,7,357,358,2,77,197,16,355,356],"controlCount":36}, + {"class":"z2ui5_cl_smpc_sapui5_003","description":"","minUi5":"1.71","needs":[],"controls":[58,13,5,352,7,359,360,2,77,197,16,355,356],"controlCount":27}, + {"class":"z2ui5_cl_smpc_sapui5_004","description":"","minUi5":"1.71","needs":[],"controls":[13,5,352,361,2,77,61,16,355,356],"controlCount":20}, + {"class":"z2ui5_cl_smpc_sapui5_005","description":"","minUi5":"1.71","needs":[],"controls":[5,352,362,363,2],"controlCount":5}, + {"class":"z2ui5_cl_smpc_sapui5_006","description":"","minUi5":"1.71","needs":[],"controls":[5,352,364,365,366,2],"controlCount":6}, + {"class":"z2ui5_cl_smpc_sapui5_007","description":"","minUi5":"1.71","needs":[],"controls":[5,352,367,368,2],"controlCount":5}, + {"class":"z2ui5_cl_smpc_sapui5_008","description":"","minUi5":"1.92","needs":[{"type":"aggregation-too-new","name":"sap.m.QuickViewPage.avatar","since":"1.92"},{"type":"control-too-new","name":"sap.m.Avatar","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.displayShape","since":"1.73"},{"type":"member-too-new","name":"sap.m.Avatar.src","since":"1.73"}],"controls":[258,5,263,260,261,262,369,370,371,372,373,374,375,18,2],"controlCount":19}, + {"class":"z2ui5_cl_smpc_sapui5_009","description":"","minUi5":"1.71","needs":[],"controls":[58,5,46,85,352,90,7,376,377,378,379,24,2],"controlCount":16}, + {"class":"z2ui5_cl_smpc_sapui5_010","description":"","minUi5":"1.71","needs":[],"controls":[5,352,2,380,381,382,383,384,385,386,387,388],"controlCount":12}, + {"class":"z2ui5_cl_smpc_sapui5_011","description":"","minUi5":"1.71","needs":[],"controls":[45,12,5,352,389,2,26],"controlCount":10}, + {"class":"z2ui5_cl_smpc_sapui5_012","description":"","minUi5":"1.96","needs":[{"type":"member-too-new","name":"sap.m.ComboBox.showClearIcon","since":"1.96"}],"controls":[36,37,38,3,29,352,20,390,391,15,2,392,393,394,395,396],"controlCount":18}, + {"class":"z2ui5_cl_smpc_sapui5_013","description":"","minUi5":"1.71","needs":[],"controls":[397,398,399,400,401,402,89,5,7,2,188,202],"controlCount":14}, + {"class":"z2ui5_cl_smpc_sapui5_014","description":"","minUi5":"1.71","needs":[],"controls":[397,398,403,404,399,400,401,405,12,89,5,75,352,7,256,2,188,202],"controlCount":19} ] } diff --git a/catalogue.json b/catalogue.json index 6aa3ec114..ce3994b87 100644 --- a/catalogue.json +++ b/catalogue.json @@ -657,54 +657,54 @@ {"class":"z2ui5_cl_smpc_app_621","file":"src/02/01/z2ui5_cl_smpc_app_621.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.InputAssistedTabularSuggestions","entity":"sap.m.Input","title":"Input - Assisted Tabular Suggestions","summary":"In this example assisted input is provided with table-like suggestions where several columns can display more details.","keywords":"input sap.m inputassistedtabularsuggestions verticallayout column label columnlistitem","status":"generated","deviations":["NOTE","POST_171"]}, {"class":"z2ui5_cl_smpc_app_622","file":"src/01/01/z2ui5_cl_smpc_app_622.clas.abap","category":"src/01","library":"sap.m","sample":"sap.m.sample.InputChecked","entity":"sap.m.Input","title":"Input - Checked","summary":"Input checks are handled via the validation of the data binding. In this example there are two inputs that are validated (a) while the user types and (b) when the user continues the process.","keywords":"input sap.m inputchecked verticallayout label button","status":"generated","deviations":["IMPROVISED","NOTE"]}, {"class":"z2ui5_cl_smpc_app_623","file":"src/01/01/z2ui5_cl_smpc_app_623.clas.abap","category":"src/01","library":"sap.m","sample":"sap.m.sample.InputStates","entity":"sap.m.Input","title":"Input - States","summary":"This example demonstrates the different input field states, e.g. disabled, editable, with value help and value help only.","keywords":"input sap.m inputstates verticallayout label selectdialog standardlistitem","status":"generated","deviations":["NOTE"]}, - {"class":"z2ui5_cl_smpc_app_624","file":"src/02/01/z2ui5_cl_smpc_app_624.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.Avatar","entity":"sap.m.Avatar","title":"Avatar","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_625","file":"src/02/01/z2ui5_cl_smpc_app_625.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.AvatarActiveState","entity":"sap.m.Avatar","title":"Avatar with toggling of Active state","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_626","file":"src/02/01/z2ui5_cl_smpc_app_626.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.AvatarBadgeIconColor","entity":"sap.m.Avatar","title":"Avatar with Badge Icon Color","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_627","file":"src/02/01/z2ui5_cl_smpc_app_627.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.AvatarValueState","entity":"sap.m.Avatar","title":"Avatar with badgeValueState","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_628","file":"src/02/01/z2ui5_cl_smpc_app_628.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.AvatarWithAffordance","entity":"sap.m.Avatar","title":"Avatar with Visual Affordance","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_629","file":"src/02/01/z2ui5_cl_smpc_app_629.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageEVR","entity":"sap.m.IllustratedMessage","title":"Illustrated Message Enable Vertical Responsiveness","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_630","file":"src/02/01/z2ui5_cl_smpc_app_630.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInAppCustom","entity":"sap.m.IllustratedMessage","title":"A demo application that imports a Custom Illustration Set from an npm package","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_631","file":"src/02/01/z2ui5_cl_smpc_app_631.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInCardNoActivities","entity":"sap.m.IllustratedMessage","title":"'NoActivities' Illustrated Message in a Card","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_632","file":"src/02/01/z2ui5_cl_smpc_app_632.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInCardNoEmail","entity":"sap.m.IllustratedMessage","title":"'NoEmail' Illustrated Message in a Card","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_633","file":"src/02/01/z2ui5_cl_smpc_app_633.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInDialog","entity":"sap.m.IllustratedMessage","title":"Illustrated Message in a Dialog","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_634","file":"src/02/01/z2ui5_cl_smpc_app_634.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInPage","entity":"sap.m.IllustratedMessage","title":"Default Illustration Set (sapIllus)","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_635","file":"src/02/01/z2ui5_cl_smpc_app_635.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInPageCustom","entity":"sap.m.IllustratedMessage","title":"Illustrated Message in a Page with Configurable Properties (Custom Illustration Set)","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_636","file":"src/02/01/z2ui5_cl_smpc_app_636.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInPageTNT","entity":"sap.m.IllustratedMessage","title":"Illustrated Message in a Page with Configurable Properties (TNT Illustration Set)","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_637","file":"src/02/01/z2ui5_cl_smpc_app_637.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInPageWithURI","entity":"sap.m.IllustratedMessage","title":"Illustrative style illustrations using the 'src' property","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_638","file":"src/02/01/z2ui5_cl_smpc_app_638.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageSessionTimeout","entity":"sap.m.IllustratedMessage","title":"Illustrated Message Session Timeout","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_639","file":"src/02/01/z2ui5_cl_smpc_app_639.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.DynamicDateRange","entity":"sap.m.DynamicDateRange","title":"Dynamic Date Range","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_640","file":"src/02/01/z2ui5_cl_smpc_app_640.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.DynamicDateRangeAndCalendarWeekNumbering","entity":"sap.m.DynamicDateRange","title":"Dynamic Date Range with calendarWeekNumbering","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_641","file":"src/02/01/z2ui5_cl_smpc_app_641.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.DynamicDateRangeHidden","entity":"sap.m.DynamicDateRange","title":"Dynamic Date Range - Open by Another Control","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_642","file":"src/02/01/z2ui5_cl_smpc_app_642.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.DynamicDateRangeWithCustomOptions","entity":"sap.m.DynamicDateRange","title":"Dynamic Date Range with Custom Options","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_643","file":"src/02/01/z2ui5_cl_smpc_app_643.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.ExpandableText","entity":"sap.m.ExpandableText","title":"Expandable Text","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_644","file":"src/02/01/z2ui5_cl_smpc_app_644.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.Container","entity":"sap.m.p13n.Container","title":"p13n.Container usage in a Dialog/Popover","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_645","file":"src/02/01/z2ui5_cl_smpc_app_645.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.Engine","entity":"sap.m.p13n.Engine","title":"Personalization for responsive table","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_646","file":"src/02/01/z2ui5_cl_smpc_app_646.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.EngineCustomFilters","entity":"sap.m.p13n.Engine","title":"Personalization implementing custom filter controls","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_647","file":"src/02/01/z2ui5_cl_smpc_app_647.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.EngineGridList","entity":"sap.m.p13n.Engine","title":"Personalization for grid list","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_648","file":"src/02/01/z2ui5_cl_smpc_app_648.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.EngineGridTable","entity":"sap.m.p13n.Engine","title":"Personalization for grid table","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_649","file":"src/02/01/z2ui5_cl_smpc_app_649.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.EngineMultipleController","entity":"sap.m.p13n.Engine","title":"Personalization with multiple SelectionControllers","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_650","file":"src/02/01/z2ui5_cl_smpc_app_650.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.Popup","entity":"sap.m.p13n.Popup","title":"p13n.Popup usage","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_651","file":"src/02/01/z2ui5_cl_smpc_app_651.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.VariantManagement","entity":"sap.m.VariantManagement","title":"VariantManagement using dedicated items","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_652","file":"src/02/01/z2ui5_cl_smpc_app_652.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.FileNameValidationSample","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - File Name validation configuration","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_653","file":"src/02/01/z2ui5_cl_smpc_app_653.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.FilePreviewCustomPageContent","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - File Preview with Custom Page Content for non supported file types","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_654","file":"src/02/01/z2ui5_cl_smpc_app_654.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.GridTableSimple","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Grid Table (sap.ui.table.Table)","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_655","file":"src/02/01/z2ui5_cl_smpc_app_655.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.MultiplePluginInstances","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - Multiple plugin instances with multiple tables","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_656","file":"src/02/01/z2ui5_cl_smpc_app_656.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFileDialogs","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - File upload with user dialogs","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_657","file":"src/02/01/z2ui5_cl_smpc_app_657.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFilePreview","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - File Preview","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_658","file":"src/02/01/z2ui5_cl_smpc_app_658.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableProgressIndicator","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - Upload Progress and Upload Termination","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_659","file":"src/02/01/z2ui5_cl_smpc_app_659.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableSimple","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table)","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_660","file":"src/02/01/z2ui5_cl_smpc_app_660.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.TreeTableSimple","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Tree Table (sap.ui.table.TreeTable)","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_661","file":"src/02/01/z2ui5_cl_smpc_app_661.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.TreeTableWithFolderHierarchy","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Tree Table with folder hierarchy & folder uploads","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_662","file":"src/02/04/z2ui5_cl_smpc_app_662.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.AvatarGroup","entity":"sap.f.AvatarGroup","title":"Avatar Group","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_663","file":"src/02/04/z2ui5_cl_smpc_app_663.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.SidePanel","entity":"sap.f.SidePanel","title":"Side Panel","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_664","file":"src/02/04/z2ui5_cl_smpc_app_664.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.SidePanelOverflow","entity":"sap.f.SidePanel","title":"Side Panel with overflow menu","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_665","file":"src/02/04/z2ui5_cl_smpc_app_665.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.SidePanelResizable","entity":"sap.f.SidePanel","title":"Resizable Side Panel","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_666","file":"src/02/04/z2ui5_cl_smpc_app_666.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.ProductSwitchItemWithImageSrc","entity":"sap.f.ProductSwitch","title":"Product Switch with imageSrc","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_667","file":"src/02/04/z2ui5_cl_smpc_app_667.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerBasic","entity":"sap.f.HeroBanner","title":"Hero Banner - Basic","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_668","file":"src/02/04/z2ui5_cl_smpc_app_668.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerColumnsRatio","entity":"sap.f.HeroBanner","title":"Hero Banner - Columns Ratio","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_669","file":"src/02/04/z2ui5_cl_smpc_app_669.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerHeaderBlockAndActionsPlacement","entity":"sap.f.HeroBanner","title":"Hero Banner - Header Block and Actions Placement","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_670","file":"src/02/04/z2ui5_cl_smpc_app_670.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerIntegrationCard","entity":"sap.f.HeroBanner","title":"Hero Banner - Integration Card","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, - {"class":"z2ui5_cl_smpc_app_671","file":"src/02/04/z2ui5_cl_smpc_app_671.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerUseCases","entity":"sap.f.HeroBanner","title":"Hero Banner - Use Cases","summary":"","keywords":"","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_624","file":"src/02/01/z2ui5_cl_smpc_app_624.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.Avatar","entity":"sap.m.Avatar","title":"Avatar","summary":"This sample demonstrates different combinations of types, shapes, and sizes of the Avatar.","keywords":"avatar sap.m scrollcontainer text grid vbox","status":"generated","deviations":["NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_625","file":"src/02/01/z2ui5_cl_smpc_app_625.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.AvatarActiveState","entity":"sap.m.Avatar","title":"Avatar with toggling of Active state","summary":"This sample demonstrates toggling of Avatar Active state, when a User menu is opened/closed.","keywords":"avatar sap.m avataractivestate popover list standardlistitem messagestrip","status":"generated","deviations":["LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_626","file":"src/02/01/z2ui5_cl_smpc_app_626.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.AvatarBadgeIconColor","entity":"sap.m.Avatar","title":"Avatar with Badge Icon Color","summary":"This sample demonstrates different badge icon colors of the Avatar.","keywords":"avatar sap.m avatarbadgeiconcolor scrollcontainer text grid vbox","status":"generated","deviations":["NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_627","file":"src/02/01/z2ui5_cl_smpc_app_627.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.AvatarValueState","entity":"sap.m.Avatar","title":"Avatar with badgeValueState","summary":"This sample demonstrates different badge value states of the Avatar.","keywords":"avatar sap.m avatarvaluestate scrollcontainer grid vbox text","status":"generated","deviations":["NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_628","file":"src/02/01/z2ui5_cl_smpc_app_628.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.AvatarWithAffordance","entity":"sap.m.Avatar","title":"Avatar with Visual Affordance","summary":"This sample demonstrates different combinations of types, shapes, and sizes of the Avatar with visual affordance.","keywords":"avatar sap.m avatarwithaffordance scrollcontainer text grid vbox lightbox lightboxitem","status":"generated","deviations":["NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_629","file":"src/02/01/z2ui5_cl_smpc_app_629.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageEVR","entity":"sap.m.IllustratedMessage","title":"Illustrated Message Enable Vertical Responsiveness","summary":"Demonstrates the IllustratedMessage's 'enableVerticalResponsiveness' property.","keywords":"illustratedmessage illustrated message sap.m illustratedmessageevr responsivesplitter panecontainer splitpane splitterlayoutdata button vbox","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_630","file":"src/02/01/z2ui5_cl_smpc_app_630.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInAppCustom","entity":"sap.m.IllustratedMessage","title":"A demo application that imports a Custom Illustration Set from an npm package","summary":"Shows how to import a Custom Illustration from an npm package into a UI5 application for usage with IllustratedMessage.","keywords":"illustratedmessage illustrated message sap.m illustratedmessageinappcustom simpleform label select item text button","status":"generated","deviations":["IMPROVISED","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_631","file":"src/02/01/z2ui5_cl_smpc_app_631.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInCardNoActivities","entity":"sap.m.IllustratedMessage","title":"'NoActivities' Illustrated Message in a Card","summary":"IllustratedMessage as content of sap.f.Card. 'NoActivities' illustration type is being used for the Illustrated Message.","keywords":"illustratedmessage illustrated message sap.m illustratedmessageincardnoactivities card header button","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_632","file":"src/02/01/z2ui5_cl_smpc_app_632.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInCardNoEmail","entity":"sap.m.IllustratedMessage","title":"'NoEmail' Illustrated Message in a Card","summary":"IllustratedMessage as content of sap.f.Card. 'NoEmail' illustration type is being used for the Illustrated Message.","keywords":"illustratedmessage illustrated message sap.m illustratedmessageincardnoemail card header","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_633","file":"src/02/01/z2ui5_cl_smpc_app_633.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInDialog","entity":"sap.m.IllustratedMessage","title":"Illustrated Message in a Dialog","summary":"IllustratedMessage as content of sap.m.Dialog.","keywords":"illustratedmessage illustrated message sap.m illustratedmessageindialog button dialog","status":"generated","deviations":["NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_634","file":"src/02/01/z2ui5_cl_smpc_app_634.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInPage","entity":"sap.m.IllustratedMessage","title":"Default Illustration Set (sapIllus)","summary":"The available illustrations are from the default ('sapIllus') illustration set.","keywords":"illustratedmessage illustrated message sap.m illustratedmessageinpage simpleform label columnelementdata switch text select item","status":"generated","deviations":["NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_635","file":"src/02/01/z2ui5_cl_smpc_app_635.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInPageCustom","entity":"sap.m.IllustratedMessage","title":"Illustrated Message in a Page with Configurable Properties (Custom Illustration Set)","summary":"The available properties of the IllustratedMessage are configurable in this sample. The available illustrations are from the 'custom' illustration set.","keywords":"illustratedmessage illustrated message sap.m illustratedmessageinpagecustom simpleform label select item text button","status":"generated","deviations":["IMPROVISED","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_636","file":"src/02/01/z2ui5_cl_smpc_app_636.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInPageTNT","entity":"sap.m.IllustratedMessage","title":"Illustrated Message in a Page with Configurable Properties (TNT Illustration Set)","summary":"The available properties of the IllustratedMessage are configurable in this sample. The available illustrations are from the 'tnt' illustration set.","keywords":"illustratedmessage illustrated message sap.m illustratedmessageinpagetnt simpleform label columnelementdata select item text button","status":"generated","deviations":["IMPROVISED","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_637","file":"src/02/01/z2ui5_cl_smpc_app_637.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageInPageWithURI","entity":"sap.m.IllustratedMessage","title":"Illustrative style illustrations using the 'src' property","summary":"The available illustrations are from the default illustration set with the use of the 'src' property.","keywords":"illustratedmessage illustrated message sap.m illustratedmessageinpagewithuri simpleform label columnelementdata switch text select item","status":"generated","deviations":["IMPROVISED","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_638","file":"src/02/01/z2ui5_cl_smpc_app_638.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.IllustratedMessageSessionTimeout","entity":"sap.m.IllustratedMessage","title":"Illustrated Message Session Timeout","summary":"All applications that require user sign-in should employ a mechanism for automating user sign-out. When the inactivity is about to reach that threshold, a session timeout dialog appears automatically to inform the user.","keywords":"illustratedmessage illustrated message sap.m illustratedmessagesessiontimeout vbox label stepinput button dialog","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_639","file":"src/02/01/z2ui5_cl_smpc_app_639.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.DynamicDateRange","entity":"sap.m.DynamicDateRange","title":"Dynamic Date Range","summary":"The dynamic date range is a control that offers a choice of absolute and relative dates, using different offset from the current date. The list of values offered must be defined by the application.","keywords":"dynamicdaterange dynamic date range sap.m table overflowtoolbar title toolbarspacer label column text","status":"generated","deviations":["LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_640","file":"src/02/01/z2ui5_cl_smpc_app_640.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.DynamicDateRangeAndCalendarWeekNumbering","entity":"sap.m.DynamicDateRange","title":"Dynamic Date Range with calendarWeekNumbering","summary":"This example shows the Dynamic Date Range control with Middle Eastern calendar week numbering.","keywords":"dynamicdaterange dynamic date range sap.m dynamicdaterangeandcalendarweeknumbering table overflowtoolbar title toolbarspacer label column","status":"generated","deviations":["LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_641","file":"src/02/01/z2ui5_cl_smpc_app_641.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.DynamicDateRangeHidden","entity":"sap.m.DynamicDateRange","title":"Dynamic Date Range - Open by Another Control","summary":"This example shows Dynamic Date Range which is opened by another control.","keywords":"dynamicdaterange dynamic date range sap.m dynamicdaterangehidden title vbox label button link","status":"generated","deviations":["LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_642","file":"src/02/01/z2ui5_cl_smpc_app_642.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.DynamicDateRangeWithCustomOptions","entity":"sap.m.DynamicDateRange","title":"Dynamic Date Range with Custom Options","summary":"This example shows the Dynamic Date Range control with custom options for interval or date selection.","keywords":"dynamicdaterange dynamic date range sap.m dynamicdaterangewithcustomoptions table overflowtoolbar title toolbarspacer label column","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_643","file":"src/02/01/z2ui5_cl_smpc_app_643.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.ExpandableText","entity":"sap.m.ExpandableText","title":"Expandable Text","summary":"The ExpandableText control can be used to display a larger texts inside a table, list or form.","keywords":"expandabletext expandable text sap.m table column columnlistitem","status":"generated","deviations":["NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_644","file":"src/02/01/z2ui5_cl_smpc_app_644.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.Container","entity":"sap.m.p13n.Container","title":"p13n.Container usage in a Dialog/Popover","summary":"Dialog & Popover with a sap.m.P13nContainer as content.","keywords":"container sap.m.p13n p13n.container vbox radiobuttongroup radiobutton label button text","status":"generated","deviations":["LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_645","file":"src/02/01/z2ui5_cl_smpc_app_645.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.Engine","entity":"sap.m.p13n.Engine","title":"Personalization for responsive table","summary":"Responsive Table using the personalization Engine","keywords":"engine sap.m.p13n p13n.engine table overflowtoolbar title toolbarseparator toolbarspacer button text columnresizer menu","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_646","file":"src/02/01/z2ui5_cl_smpc_app_646.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.EngineCustomFilters","entity":"sap.m.p13n.Engine","title":"Personalization implementing custom filter controls","summary":"Filtering using the personalization Engine","keywords":"engine sap.m.p13n p13n.enginecustomfilters table overflowtoolbar title toolbarseparator toolbarspacer button columnresizer menu quicksort","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_647","file":"src/02/01/z2ui5_cl_smpc_app_647.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.EngineGridList","entity":"sap.m.p13n.Engine","title":"Personalization for grid list","summary":"GridList using the personalization Engine","keywords":"engine sap.m.p13n p13n.enginegridlist vbox toolbar title toolbarseparator toolbarspacer button gridlist customlistitem flexitemdata","status":"generated","deviations":["IMPROVISED","LIVE_TEST","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_648","file":"src/02/01/z2ui5_cl_smpc_app_648.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.EngineGridTable","entity":"sap.m.p13n.Engine","title":"Personalization for grid table","summary":"Grid Table using the personalization Engine","keywords":"engine sap.m.p13n p13n.enginegridtable table overflowtoolbar title toolbarseparator toolbarspacer button menu popup selectionpanel","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_649","file":"src/02/01/z2ui5_cl_smpc_app_649.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.EngineMultipleController","entity":"sap.m.p13n.Engine","title":"Personalization with multiple SelectionControllers","summary":"Personalization for Reponsive Table using multiple SelectionControllers","keywords":"engine sap.m.p13n p13n.enginemultiplecontroller table overflowtoolbar title toolbarseparator toolbarspacer button menu actionitem popup","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_650","file":"src/02/01/z2ui5_cl_smpc_app_650.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.p13n.Popup","entity":"sap.m.p13n.Popup","title":"p13n.Popup usage","summary":"Dialog with sap.m.p13n/* Panels","keywords":"popup sap.m.p13n p13n.popup vbox button selectionpanel sortpanel grouppanel codeeditor","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_651","file":"src/02/01/z2ui5_cl_smpc_app_651.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.VariantManagement","entity":"sap.m.VariantManagement","title":"VariantManagement using dedicated items","summary":"VariantManagement with dedicated items","keywords":"variantmanagement variant management sap.m panel overflowtoolbar title toolbarspacer button dynamicpage dynamicpagetitle variantitem","status":"generated","deviations":["LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_652","file":"src/02/01/z2ui5_cl_smpc_app_652.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.FileNameValidationSample","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - File Name validation configuration","summary":"This example demonstrates the usage of fileNameValidationConfig property to configure file name validation for renaming a file.","keywords":"uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.filenamevalidationsample dynamicpage vbox messagestrip text hbox checkbox","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_653","file":"src/02/01/z2ui5_cl_smpc_app_653.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.FilePreviewCustomPageContent","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - File Preview with Custom Page Content for non supported file types","summary":"This example showcases how to display custom page content for non supported file types in the FilePreviewDialog control.","keywords":"uploadsetwithtable upload setwith table sap.m.plugins filepreviewcustompagecontent dynamicpage vbox messagestrip overflowtoolbar title toolbarspacer","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_654","file":"src/02/01/z2ui5_cl_smpc_app_654.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.GridTableSimple","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Grid Table (sap.ui.table.Table)","summary":"This example demonstrates the usage of UploadSetwithTable plugin for grid table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.","keywords":"uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.gridtablesimple dynamicpage overflowtoolbar title toolbarspacer actionsplaceholder button","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_655","file":"src/02/01/z2ui5_cl_smpc_app_655.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.MultiplePluginInstances","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - Multiple plugin instances with multiple tables","summary":"This example demonstrates the usage of multiple plugin instances with multiple tables. The plugin instances are created for each table and the uploaded files are displayed in their respective tables.","keywords":"uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.multipleplugininstances dynamicpage vbox overflowtoolbar title toolbarspacer searchfield","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_656","file":"src/02/01/z2ui5_cl_smpc_app_656.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFileDialogs","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - File upload with user dialogs","summary":"This example demonstrates usage of itemValidationHandler callback to leverage additional validations and configurations for the items that are to be uploaded, and also the manual trigger of the upload process.","keywords":"uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.responsivetablefiledialogs dynamicpage overflowtoolbar title toolbarspacer searchfield overflowtoolbarlayoutdata","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_657","file":"src/02/01/z2ui5_cl_smpc_app_657.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFilePreview","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - File Preview","summary":"This example showcases how uploaded files can be previewed with FilePreviewDialog control and its related configuration. UploadSetwithTable plugin creates and uses default instance of FilePreviewDialog, if not defined.","keywords":"uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.responsivetablefilepreview dynamicpage overflowtoolbar title toolbarspacer searchfield overflowtoolbarlayoutdata","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_658","file":"src/02/01/z2ui5_cl_smpc_app_658.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableProgressIndicator","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table) - Upload Progress and Upload Termination","summary":"This example demonstrates the progress or termination of the items that are being uploaded. The upload progress is displayed for each item that is being uploaded. The users can terminate the upload process at any time.","keywords":"uploadsetwithtable upload setwith table sap.m.plugins responsivetableprogressindicator dynamicpage overflowtoolbar title toolbarspacer searchfield overflowtoolbarlayoutdata","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_659","file":"src/02/01/z2ui5_cl_smpc_app_659.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableSimple","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Responsive Table (sap.m.Table)","summary":"This example demonstrates the usage of UploadSetwithTable plugin for responsive table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.","keywords":"uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.responsivetablesimple dynamicpage overflowtoolbar title toolbarspacer searchfield overflowtoolbarlayoutdata","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_660","file":"src/02/01/z2ui5_cl_smpc_app_660.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.TreeTableSimple","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Tree Table (sap.ui.table.TreeTable)","summary":"This example demonstrates the usage of UploadSetwithTable plugin for tree table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table.","keywords":"uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.treetablesimple dynamicpage treetable overflowtoolbar title toolbarspacer actionsplaceholder","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_661","file":"src/02/01/z2ui5_cl_smpc_app_661.clas.abap","category":"src/02","library":"sap.m","sample":"sap.m.sample.UploadSetwithTablePlugin.TreeTableWithFolderHierarchy","entity":"sap.m.plugins.UploadSetwithTable","title":"Plugin for Tree Table with folder hierarchy & folder uploads","summary":"This example demonstrates the usage of UploadSetwithTable plugin with a tree table featuring folder hierarchy, folder creation, folder uploads, folder navigation with breadcrumbs and folder management","keywords":"uploadsetwithtable upload setwith table sap.m.plugins treetablewithfolderhierarchy dynamicpage treetable overflowtoolbar breadcrumbs link actionsplaceholder","status":"generated","deviations":["IMPROVISED","LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_662","file":"src/02/04/z2ui5_cl_smpc_app_662.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.AvatarGroup","entity":"sap.f.AvatarGroup","title":"Avatar Group","summary":"This sample demonstrates the different group types and item sizes of the AvatarGroup control.","keywords":"avatargroup avatar group sap.f slider verticallayout label avatargroupitem popover card hbox vbox","status":"generated","deviations":["IMPROVISED","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_663","file":"src/02/04/z2ui5_cl_smpc_app_663.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.SidePanel","entity":"sap.f.SidePanel","title":"Side Panel","summary":"Demonstrates the basic usage of Side Panel.","keywords":"sidepanel side panel sap.f button vbox label switch select listitem text sidepanelitem","status":"generated","deviations":["IMPROVISED","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_664","file":"src/02/04/z2ui5_cl_smpc_app_664.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.SidePanelOverflow","entity":"sap.f.SidePanel","title":"Side Panel with overflow menu","summary":"Demonstrates the usage of Side Panel with overflow menu on desktop and tablet devices.","keywords":"sidepanel side panel sap.f sidepaneloverflow button vbox label switch text sidepanelitem","status":"generated","deviations":["IMPROVISED","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_665","file":"src/02/04/z2ui5_cl_smpc_app_665.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.SidePanelResizable","entity":"sap.f.SidePanel","title":"Resizable Side Panel","summary":"Demonstrates the usage of resizable Side Panel.","keywords":"sidepanel side panel sap.f sidepanelresizable button vbox label switch text sidepanelitem input","status":"generated","deviations":["IMPROVISED","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_666","file":"src/02/04/z2ui5_cl_smpc_app_666.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.ProductSwitchItemWithImageSrc","entity":"sap.f.ProductSwitch","title":"Product Switch with imageSrc","summary":"This sample demonstrates the usage of Product Switch Item with imageSrc, configurable by the app developer.","keywords":"productswitch product switch sap.f productswitchitemwithimagesrc verticallayout button text responsivepopover productswitchitem","status":"generated","deviations":["NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_667","file":"src/02/04/z2ui5_cl_smpc_app_667.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerBasic","entity":"sap.f.HeroBanner","title":"Hero Banner - Basic","summary":"A basic Hero Banner with a header text and overline text.","keywords":"herobanner hero banner sap.f herobannerbasic vbox","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_668","file":"src/02/04/z2ui5_cl_smpc_app_668.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerColumnsRatio","entity":"sap.f.HeroBanner","title":"Hero Banner - Columns Ratio","summary":"Demonstrates the three columnsRatio options: single column (no endContent), Equal, and FirstWider.","keywords":"herobanner hero banner sap.f herobannercolumnsratio html title vbox button text card header","status":"generated","deviations":["NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_669","file":"src/02/04/z2ui5_cl_smpc_app_669.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerHeaderBlockAndActionsPlacement","entity":"sap.f.HeroBanner","title":"Hero Banner - Header Block and Actions Placement","summary":"Demonstrates actionsPlacement and headerBlockPlacement properties for controlling the position of the header and actions.","keywords":"herobanner hero banner sap.f herobannerheaderblockandactionsplacement vbox button card header title","status":"generated","deviations":["POST_171"]}, + {"class":"z2ui5_cl_smpc_app_670","file":"src/02/04/z2ui5_cl_smpc_app_670.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerIntegrationCard","entity":"sap.f.HeroBanner","title":"Hero Banner - Integration Card","summary":"Demonstrates the use of sap.ui.integration.widgets.Card inside both the startContent (default slot) and endContent aggregations of the Hero Banner.","keywords":"herobanner hero banner sap.f herobannerintegrationcard vbox button card","status":"generated","deviations":["LIVE_TEST","NOTE","POST_171"]}, + {"class":"z2ui5_cl_smpc_app_671","file":"src/02/04/z2ui5_cl_smpc_app_671.clas.abap","category":"src/02","library":"sap.f","sample":"sap.f.sample.HeroBannerUseCases","entity":"sap.f.HeroBanner","title":"Hero Banner - Use Cases","summary":"A collection of common Hero Banner use cases: header actions only, content with actions, actions below header, and header at bottom.","keywords":"herobanner hero banner sap.f herobannerusecases html title vbox button text card header","status":"generated","deviations":["NOTE","POST_171"]}, {"class":"z2ui5_cl_smpc_demo_001","file":"src/04/z2ui5_cl_smpc_demo_001.clas.abap","category":"src/04","library":"sap.m","sample":"","entity":"","title":"Manage Products","summary":"Created with the 'Worklist App' tutorial. - the UI5 demo app \"Manage Products\", rebuilt as one self-contained abap2UI5 class.","keywords":"manage products app title icontabbar icontabfilter icontabseparator table toolbar toolbarspacer searchfield column","status":"demoapp","deviations":[]}, {"class":"z2ui5_cl_smpc_demo_002","file":"src/04/z2ui5_cl_smpc_demo_002.clas.abap","category":"src/04","library":"sap.m","sample":"","entity":"","title":"Browse Orders","summary":"Master-detail app for browsing orders. - the UI5 demo app \"Browse Orders\", rebuilt as one self-contained abap2UI5 class.","keywords":"browse orders app flexiblecolumnlayout viewsettingsdialog viewsettingsfilteritem viewsettingsitem title list toolbar overflowtoolbar searchfield","status":"demoapp","deviations":[]}, {"class":"z2ui5_cl_smpc_demo_003","file":"src/04/z2ui5_cl_smpc_demo_003.clas.abap","category":"src/04","library":"sap.m","sample":"","entity":"","title":"Team Calendar","summary":"Calendar demo app for team and team members. - the UI5 demo app \"Team Calendar\", rebuilt as one self-contained abap2UI5 class.","keywords":"team calendar app dynamicpagetitle title verticallayout responsivepopover planningcalendarlegend calendarlegenditem planningcalendar select button","status":"demoapp","deviations":[]}, diff --git a/meta/z2ui5_cl_smpc_app_649.json b/meta/z2ui5_cl_smpc_app_649.json index c0b0901b7..8db4eca9b 100644 --- a/meta/z2ui5_cl_smpc_app_649.json +++ b/meta/z2ui5_cl_smpc_app_649.json @@ -24,10 +24,6 @@ "type": "IMPROVISED", "what": "Engine.getInstance( ).register( ) with a Columns and a Rows SelectionController and Engine.show( ) are controller JavaScript no abap2UI5 wire can run. The port does the Engine's work in the backend: it keeps the order and visibility of the table's columns and of its five items in ABAP, and each settings button (and the column menu's Columns ActionItem) opens a p13n:Popup with one p13n:SelectionPanel (showHeader/enableCount as the SelectionController creates it, enableReorder false for Rows) - two Popup and two SelectionPanel controls the port declares in the table's dependents, which the original view does not have. Before opening, the backend hands each panel the controller's adaptation data via setP13nData (visible entries first in state order, then the hidden ones sorted by label; labels from the two MetadataHelpers); on close with reason Ok the panel's getP13nData( true ) comes back and handleStateChange is reproduced in ABAP: every column/item hidden, the state's entries shown and moved to the front in state order. The view emits the Column and ColumnListItem controls (and every item's Text cells, which follow their column) from those two tables in a loop, so a state change is a view rebuild. The Engine's popups carry the panel's title (Fields) and contentHeight 35rem/contentWidth 32rem, which the declared Popup controls do not." }, - { - "type": "NOTE", - "what": "the rows' MetadataHelper labels the first person 'Peter Müller'; the port writes the label as 'Peter Mueller' (the spelling the row's own lastName cell uses), because the corpus keeps its ABAP sources 7-bit ASCII (abaplint 7bit_ascii) and an ABAP literal has no escape for the umlaut." - }, { "type": "NOTE", "what": "onColumnMove computes the drop position from the dragged/dropped column indices and applyState( { Columns: [ { key, position } ] } ) moves the column there. The port transports both columns' p13nKey custom data and the dropPosition, does the same arithmetic on the backend's column order and moves the key in the visible-column state before re-emitting the view. The original handler searches the retrieved state with oColumn.data('p13nKey') on plain state objects, which throws as soon as the state holds a column, so in the demo kit the drop does not move anything; the port implements the move the handler evidently intends (the identical handler of sap.m.sample.p13n.Engine, which uses .key)." diff --git a/meta/z2ui5_cl_smpc_app_660.json b/meta/z2ui5_cl_smpc_app_660.json index ec974135d..ddc960a19 100644 --- a/meta/z2ui5_cl_smpc_app_660.json +++ b/meta/z2ui5_cl_smpc_app_660.json @@ -5,15 +5,47 @@ "file": "src/02/01/z2ui5_cl_smpc_app_660.clas.abap", "batch": "b56", "audit": { - "frontend_action": false, - "event_t_arg": false + "frontend_action": true, + "event_t_arg": true }, "status": "generated", "checked": null, "deviations": [ { "type": "POST_171", - "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.124." + "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1 in the sap.ui.table.TreeTable's dependents as plugins:UploadSetwithTable (the original's dotted m:plugins.UploadSetwithTable), with the UploadItemConfiguration as its default rowConfiguration aggregation; the app needs a UI5 release >= 1.124. Every member it carries (uploadUrl, multiple, cloudFilePickerEnabled, the actions association, beforeUploadStarts, itemRenamed) is as new as the plugin." + }, + { + "type": "POST_171", + "what": "the plugin's companion controls are kept 1:1 and are post-1.71 too: sap.m.upload.ActionsPlaceholder (@since 1.120, with placeholderFor - the toolbar slot the plugin renders its upload button into) and sap.m.upload.UploadItemConfiguration (@since 1.124; fileNamePath, mediaTypePath, urlPath, previewablePath and fileSizePath @1.124, isTrustedSourcePath @1.125 and isDirectoryPath @1.139 - the app needs UI5 >= 1.139), written upload:UploadItemConfiguration for the original's dotted m:upload.UploadItemConfiguration." + }, + { + "type": "NOTE", + "what": "The named JSONModel documents (manifest dataSource model/documents.json) is folded into the default model: every {documents>x} binding is the row field {X} and the TreeTable's rows are the bound T_ITEMS - documents.json is a folder tree three levels deep, so T_ITEMS has one row type per level (every level carrying every field, the upper two their ITEMS; an empty ITEMS array is a leaf to the JSON tree binding, like the original's absent property). All nine nodes (three folders, six files) are inlined; the revision and id columns of the original are commented out of its view, so revision is not carried (id is - the Edit URL lookup uses it); the url and imageUrl fields are host-absolutized to https://sdk.openui5.org/test-resources/... because an abap2UI5 app has no demo-kit root to resolve the relative test-resources paths against. The UploadItemConfiguration paths name the upper-case ABAP fields (FILENAME, MEDIATYPE, URL, PREVIEWABLE, FILESIZE, TRUSTEDSOURCE) instead of fileName/mediaType/... - the same model columns. IMAGEURL and UPLOADSTATE are bound with omit_initial_paths, so a row the mock gives no imageUrl/uploadState still reads undefined and the original's own Image/Icon visible expressions and the RowSettings highlight expression decide exactly as in the sample." + }, + { + "type": "NOTE", + "what": "The controller formatters getIconSrc (sap-icon://folder-full for a directory, else UploadSetwithTable.getIconForFileType - IconPool's media-type table, the file-extension fallback with sap-icon://card for images) and getFileSizeWithUnits (KB/MB/GB with two decimals; a folder has no fileSize, so its cell stays empty) run in ABAP (icon_for, size_with_units) and the row carries the finished values in two port fields, ICON and FILESIZE_UNITS, which core:Icon.src and the File Size Text bind - the thin-frontend rule; the {parts: [...], formatter: ...} bindings are gone with them." + }, + { + "type": "IMPROVISED", + "what": "Upload: the sample starts a sinon fake XHR server (model/mockserver.js) in beforeUploadStarts, which answers the POST to /uploadFiles with 201 and unshifts the new document. There is no such endpoint behind an abap2UI5 app, so the port plays the mock server's part in the backend: beforeUploadStarts is a backend wire with check_prevent_default (the plugin's own veto - no XHR is sent) that transports the item's file name, media type and size, and the backend unshifts the row the mock server would have created (uploadState Complete, revision 00, In work, Jane Burns, Invoice, trustedSource) and shows the 'Document Added' toast at once rather than after the sample's one-second setTimeout. Lost with it: the uploaded file's blob: object URL (an uploaded row has an empty url, so it cannot be previewed or downloaded) and the random uid id (a running number); uploadCompleted and onActivated are not wired (no upload completes, and the plugin is addressed by an added id uploadSetPlugin instead of the instance onActivated handed the controller); URLListValidator.add('blob') is dropped. Several files picked at once fire beforeUploadStarts back to back and abap2UI5 runs one round-trip at a time: check_queue_last keeps the last one, so only the first and the last of them are added." + }, + { + "type": "IMPROVISED", + "what": "onDownloadFiles maps the TreeTable's getSelectedIndices( ) to contexts and calls the plugin's download( context, true ) for EVERY selected row; a UI5 event expression has no loop, so the port's Download button calls download for the first selected row only, through a view-wired control_by_id on the plugin whose argument is $controller.getView().byId('table-uploadSet').getContextByIndex(...getSelectedIndices()[0])." + }, + { + "type": "LIVE_TEST", + "what": "Unverified in a running system: (a) the plugin calls by id (uploadSetPlugin, an id the original does not carry) through the unlisted-method path of control_by_id - openFilePreview with the template Link's $event.oSource.getBindingContext(), renameItem and download with $controller.getView().byId('table-uploadSet').getContextByIndex($controller.getView().byId('table-uploadSet').getSelectedIndices()[0]) - each handing the live Context object through castArgAuto untouched; (b) rowSelectionChange transporting $event.oSource.getBinding('rows').getSelectedContexts().join() (Context.toString is the binding path, e.g. /T_ITEMS/0/ITEMS/1) and the itemRenamed wire reading ${$parameters>/item}.getBindingContext().getPath(); (c) the vetoed beforeUploadStarts and ${$parameters>/item}.getFileObject().size." + }, + { + "type": "NOTE", + "what": "onSelectionChange reads the rows binding's selected contexts and tells files from folders: Download is enabled for one or more selected files, Remove/Rename/Edit URL for exactly one file, and both stay disabled as soon as a folder is selected - two bound flags, decided in the backend from the selected rows' binding paths. onDocumentRenamedSuccess writes the new name into the renamed node at whatever depth it sits (the itemRenamed wire carries its path and the item's file name) and toasts 'Document Renamed.' with duration 2000. The controller's quirks are kept: removeItem splices index split('/')[2] of the row's path out of /items - for a file inside a folder that is its TOP-LEVEL folder, which is removed with everything in it - and its removeSelections( ) does not exist on sap.ui.table.TreeTable, so the selection stays; the Edit URL Save looks the selected row up by id in the top-level /items only, so for a file inside a folder the original's Object.assign throws and nothing is saved - the port saves nothing either, without the error." + }, + { + "type": "IMPROVISED", + "what": "The AddViaUrl fragment is the port's popup with its ids kept (addViaUrlDialog, addViaUrlSimpleform, urlInputLabel, urlInput, nameInputLabel, nameInput, addDocumentBtn), and what openAddOrEditDialog / _isValidName / _validateAddOrEditUrlDialog set through Element.getElementById is bound instead: the Dialog title (Add URL / Edit URL), the begin button text (Add / Apply), urlInputLabel.required, both Input values and their valueState / valueStateText. Cancel closes it with popup_close. Add validates name and URL in the backend (the unanchored URL regex reduced to its required part, a ftp/http/https scheme followed by a non-blank) and then adds the row directly - uploadItemViaUrl takes a JS Promise and the controller adds a documentUrl header field to the item, neither transportable, and the mock server's answer is exactly that row (the URL as typed, an empty media type and size 0). showEditConfirmation's controller-built sap.m.Dialog (type Message, state Warning, title Warning, Save / DiscardChanges) is a MessageBox.warning with the same title, text, actions and Save emphasized; Save updates the selected row's fileName and url and closes the fragment, DiscardChanges only closes the box. removeItem's MessageBox.warning keeps its text, actions Remove/CANCEL, emphasizedAction, styleClass and initialFocus; its explicit icon option is the warning box's own icon anyway." } ] } diff --git a/meta/z2ui5_cl_smpc_app_661.json b/meta/z2ui5_cl_smpc_app_661.json index a6bb2f74c..fc9859aac 100644 --- a/meta/z2ui5_cl_smpc_app_661.json +++ b/meta/z2ui5_cl_smpc_app_661.json @@ -5,15 +5,51 @@ "file": "src/02/01/z2ui5_cl_smpc_app_661.clas.abap", "batch": "b56", "audit": { - "frontend_action": false, - "event_t_arg": false + "frontend_action": true, + "event_t_arg": true }, "status": "generated", "checked": null, "deviations": [ { "type": "POST_171", - "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.124." + "what": "the sap.m.plugins.UploadSetwithTable control (since UI5 1.124) is newer than 1.71 and is the whole point of this sample - kept 1:1 in the sap.ui.table.TreeTable's dependents as plugins:UploadSetwithTable (the original's dotted m:plugins.UploadSetwithTable) with its own id uploadPlugin and the UploadItemConfiguration as its default rowConfiguration aggregation; the app needs a UI5 release >= 1.124. Every member it carries (uploadUrl, multiple, uploadEnabled, the actions association, beforeUploadStarts, itemRenamed) is as new as the plugin." + }, + { + "type": "POST_171", + "what": "the plugin's companion controls are kept 1:1 and are post-1.71 too: sap.m.upload.ActionsPlaceholder (@since 1.120, with placeholderFor - the toolbar slot the plugin renders its upload button into) and sap.m.upload.UploadItemConfiguration (@since 1.124; fileNamePath, mediaTypePath, urlPath, previewablePath and fileSizePath @1.124, isTrustedSourcePath @1.125 and isDirectoryPath @1.139 - the app needs UI5 >= 1.139), written upload:UploadItemConfiguration for the original's dotted m:upload.UploadItemConfiguration." + }, + { + "type": "NOTE", + "what": "The named JSONModel documents (loaded in onInit from model/documents.json) is folded into the default model, and the folder navigation moves from the frontend to the backend. The controller re-binds the TreeTable's rows to /items (bindTableItems) and keeps /history and the Breadcrumbs' currentLocationText in the model; the port keeps the whole tree flat in a PROTECTED table (every node with its parent's documentId - all 15 nodes of documents.json, the document URLs host-absolutized to https://sdk.openui5.org/test-resources/...) and binds the rows to T_ITEMS, which it rebuilds as the open folder's subtree (one row type per level, four levels - the depth of documents.json; a folder created deeper than four levels below the open folder exists but is not shown until one navigates closer), and binds the Breadcrumbs' links to T_HISTORY and currentLocationText to CURRENTLOCATIONTEXT. The rowConfiguration paths name the upper-case ABAP fields (FILENAME, MIMETYPE, URL, SIZE, ISDIRECTORY, PREVIEWABLE, TRUSTEDSOURCE) instead of fileName/mimeType/... - the same columns. The mock's type and thumbnailUrl keys are not carried: nothing binds them. IMAGEURL (no node has one) and UPLOADSTATE are bound with omit_initial_paths, so the original's undefined checks in the Image/Icon visible expressions and the RowSettings highlight decide as in the sample." + }, + { + "type": "NOTE", + "what": "The controller formatters getIconSrc (sap-icon://folder-full for a directory, else UploadSetwithTable.getIconForFileType - IconPool's media-type table, the file-extension fallback) and formatFileSize (getFileSizeWithUnits: KB/MB/GB with two decimals - a folder's size 0 reads 0.00 KB as in the original) run in ABAP and the node carries the finished values in two port fields, ICON and SIZE_UNITS, which core:Icon.src and the File Size Text bind - the thin-frontend rule; the {parts: [...], formatter: ...} bindings are gone with them." + }, + { + "type": "IMPROVISED", + "what": "Upload: the sample starts a sinon fake XHR server (model/mockserver.js, started with the open folder's path) in beforeUploadStarts, which answers the POST to ./uploadFiles with 201 and files the new document into the open folder in front of its first file. There is no such endpoint behind an abap2UI5 app, so the port plays the mock server's part in the backend: beforeUploadStarts is a backend wire with check_prevent_default (the plugin's own veto - no XHR is sent) that transports the item's file name, media type and size, and the backend inserts the document into the open folder behind its folders (uploadedBy Current User, uploadState Complete, trustedSource) and shows 'Upload completed successfully.' at once rather than after the controller's two-second setTimeout in uploadCompleted. Lost with it: the uploaded file's blob: object URL (an uploaded row has an empty url, so it cannot be previewed or downloaded), the random uid documentId (upload-), and the browser-locale uploadedDate (new Date().toLocaleDateString()) - the port writes the server date in the ISO form the mock's own dates use (the same for a folder created with Add Folder). uploadCompleted and onActivated are not wired (no upload completes, and the plugin is addressed by its own id uploadPlugin); URLListValidator.add('blob') is dropped. Several files picked at once fire beforeUploadStarts back to back and abap2UI5 runs one round-trip at a time: check_queue_last keeps the last one, so only the first and the last of them are added." + }, + { + "type": "NOTE", + "what": "TreeTable.toggleOpenState='.onToggleOpenState' is not wired: the controller's handler is empty (its comment says no action is needed), and a backend wire with nothing to do would only cost a round-trip per expand and collapse." + }, + { + "type": "NOTE", + "what": "The controller's handlers are ported 1:1 in the backend: onSelectionChange (the rows binding's selected contexts arrive as their paths - Download for files only, Rename for exactly one file or one folder, Remove All only while every item of the open folder is selected); onItemPress / navigateToFolder (a folder Link opens the folder: the rows, the history up to its parent and the current location text) and onBreadcrumbPress (a history Link, found by its binding path - the controller's indexOfLink - opens that level, Attachments the root; the -1 branch for the current location text cannot fire, the Breadcrumbs render it as text); onDownloadFiles (one click per selected file through the DOWNLOAD_B64_FILE frontend action - the same anchor trick the controller builds with document.createElement - and its toasts); onCreateFolder / onCreateFolderDialogPress / createFolderWithName (the CreateFolderDialog fragment as the popup with folderNameInput bound, the empty-name and duplicate-name toasts, the new folder unshifted into the one selected folder or the open one, with the controller's fields and toast texts); onRemoveItemHandler (MessageBox.confirm 'Delete File', and on OK the file is filtered out of the OPEN folder's items - for a file shown inside an expanded subfolder that deletes nothing while the toast still says it did, as in the original); onRemoveAllHandler / deleteAllSelectedItems (its checks, the 'Delete All Items' confirm and the count toast; a removed folder takes its content with it). After a navigation the port also clears the TreeTable's selection (clearSelection) and the three buttons - the controller's bindRows drops the selection too but leaves the buttons as they were. The Create dialog is destroyed on Create where the controller only closes it for reuse; it opens empty either way." + }, + { + "type": "IMPROVISED", + "what": "onRenameItem decides per selected row: a folder goes to renameFolderWithDialog, a sap.m.Dialog the controller builds in JS (title Rename Folder, an Input with the current name at width 100%, OK emphasized and Cancel) - the port builds that Dialog as its popup, so its Dialog, Input and the two Button controls are controls the original's views do not contain; OK renames the folder when the trimmed name is new and toasts 'Folder renamed successfully'. A file goes to the plugin's renameItem( context ), which only the browser can hand over, so the Rename button's press carries TWO handlers separated by ';' (UI5's EventHandlerResolver splits them): the backend RENAME event and a view-wired control_by_id renameItem on uploadPlugin whose argument is the first selected context of the rows binding - or null when that row is a folder, which renameItem ignores. onDocumentRenamedSuccess writes the new name into the node in the backend and toasts 'File renamed successfully' (duration 2000)." + }, + { + "type": "LIVE_TEST", + "what": "Unverified in a running system: (a) the two-handler press on the Rename button (.eB(...); .eF(...)) and its renameItem argument $controller.getView().byId('table-uploadSet').getBinding('rows').getSelectedContexts()[0] (null for a folder) through the unlisted-method path of control_by_id, and openFilePreview with the Link's $event.oSource.getBindingContext(); (b) rowSelectionChange transporting $event.oSource.getBinding('rows').getSelectedContexts().join() (Context.toString is the binding path) and the itemRenamed wire reading ${$parameters>/item}.getBindingContext().getPath(); (c) the vetoed beforeUploadStarts and ${$parameters>/item}.getFileObject().size; (d) DOWNLOAD_B64_FILE with an https test-resources URL and clearSelection after a navigation." + }, + { + "type": "NOTE", + "what": "The sample ships view/fragment/AddViaUrl.fragment.xml (a Dialog addViaUrlDialog with contentWidth and contentHeight under a core:FragmentDefinition carrying templateShareable and class, holding a form:SimpleForm addViaUrlSimpleform with two Label controls urlInputLabel and nameInputLabel - both required - two Input controls urlInput and nameInput, and the Button controls addDocumentBtn and Cancel), but nothing in this variant loads it: its view has no Add menu and its controller no openAddOrEditDialog. The port does not build the dead fragment, so structural_diff, which unions every archived fragment with the view, counts its controls, attributes and ids as missing." } ] } diff --git a/scripts/scaffold.mjs b/scripts/scaffold.mjs index f2b8920a2..ebc42cfd6 100644 --- a/scripts/scaffold.mjs +++ b/scripts/scaffold.mjs @@ -303,6 +303,13 @@ CLASS ${cls} IMPLEMENTATION. ENDCLASS. `; +/* A GROUP-nested sample (`UploadSetwithTablePlugin.ResponsiveTableFilePreview`) + * often does not fit the 60 characters, and clipping it at a word left only + * `sap.m...` - identical for every child of the group, which abaplint's + * identical_descriptions rejects. The child name is what tells them apart. */ +const descript = `${lib} - ${name}`.length > 60 && name.includes('.') + ? `${lib} - ${name.slice(name.lastIndexOf('.') + 1)}` + : `${lib} - ${name}`; const clasXml = ` @@ -310,7 +317,7 @@ const clasXml = ` ${cls.toUpperCase()} E - ${clipAtWord(`${lib} - ${name}`, 60)} + ${clipAtWord(descript, 60)} 1 X X diff --git a/src/02/01/z2ui5_cl_smpc_app_624.clas.abap b/src/02/01/z2ui5_cl_smpc_app_624.clas.abap index 362585c1a..78be59829 100644 --- a/src/02/01/z2ui5_cl_smpc_app_624.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_624.clas.abap @@ -1,3 +1,6 @@ +" @keywords avatar sap.m scrollcontainer text grid vbox +" @summary This sample demonstrates different combinations of types, shapes, and sizes of the Avatar. +" @origin sap.m.sample.Avatar - https://sdk.openui5.org/entity/sap.m.Avatar/sample/sap.m.sample.Avatar (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_624 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_625.clas.abap b/src/02/01/z2ui5_cl_smpc_app_625.clas.abap index 8107ccd40..bebcbe376 100644 --- a/src/02/01/z2ui5_cl_smpc_app_625.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_625.clas.abap @@ -1,3 +1,6 @@ +" @keywords avatar sap.m avataractivestate popover list standardlistitem messagestrip +" @summary This sample demonstrates toggling of Avatar Active state, when a User menu is opened/closed. +" @origin sap.m.sample.AvatarActiveState - https://sdk.openui5.org/entity/sap.m.Avatar/sample/sap.m.sample.AvatarActiveState (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_625 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_626.clas.abap b/src/02/01/z2ui5_cl_smpc_app_626.clas.abap index faef1c615..2cb132b23 100644 --- a/src/02/01/z2ui5_cl_smpc_app_626.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_626.clas.abap @@ -1,3 +1,6 @@ +" @keywords avatar sap.m avatarbadgeiconcolor scrollcontainer text grid vbox +" @summary This sample demonstrates different badge icon colors of the Avatar. +" @origin sap.m.sample.AvatarBadgeIconColor - https://sdk.openui5.org/entity/sap.m.Avatar/sample/sap.m.sample.AvatarBadgeIconColor (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_626 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_627.clas.abap b/src/02/01/z2ui5_cl_smpc_app_627.clas.abap index 7d9879f11..cbee8869d 100644 --- a/src/02/01/z2ui5_cl_smpc_app_627.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_627.clas.abap @@ -1,3 +1,6 @@ +" @keywords avatar sap.m avatarvaluestate scrollcontainer grid vbox text +" @summary This sample demonstrates different badge value states of the Avatar. +" @origin sap.m.sample.AvatarValueState - https://sdk.openui5.org/entity/sap.m.Avatar/sample/sap.m.sample.AvatarValueState (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_627 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_628.clas.abap b/src/02/01/z2ui5_cl_smpc_app_628.clas.abap index 835158b03..90dc0c19b 100644 --- a/src/02/01/z2ui5_cl_smpc_app_628.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_628.clas.abap @@ -1,3 +1,6 @@ +" @keywords avatar sap.m avatarwithaffordance scrollcontainer text grid vbox lightbox lightboxitem +" @summary This sample demonstrates different combinations of types, shapes, and sizes of the Avatar with visual affordance. +" @origin sap.m.sample.AvatarWithAffordance - https://sdk.openui5.org/entity/sap.m.Avatar/sample/sap.m.sample.AvatarWithAffordance (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_628 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_629.clas.abap b/src/02/01/z2ui5_cl_smpc_app_629.clas.abap index 5c6b6d079..5c2dd8a88 100644 --- a/src/02/01/z2ui5_cl_smpc_app_629.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_629.clas.abap @@ -1,3 +1,6 @@ +" @keywords illustratedmessage illustrated message sap.m illustratedmessageevr responsivesplitter panecontainer splitpane splitterlayoutdata button vbox +" @summary Demonstrates the IllustratedMessage's 'enableVerticalResponsiveness' property. +" @origin sap.m.sample.IllustratedMessageEVR - https://sdk.openui5.org/entity/sap.m.IllustratedMessage/sample/sap.m.sample.IllustratedMessageEVR (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_629 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_630.clas.abap b/src/02/01/z2ui5_cl_smpc_app_630.clas.abap index bf58ae6fd..d169a05cd 100644 --- a/src/02/01/z2ui5_cl_smpc_app_630.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_630.clas.abap @@ -1,3 +1,6 @@ +" @keywords illustratedmessage illustrated message sap.m illustratedmessageinappcustom simpleform label select item text button +" @summary Shows how to import a Custom Illustration from an npm package into a UI5 application for usage with IllustratedMessage. +" @origin sap.m.sample.IllustratedMessageInAppCustom - https://sdk.openui5.org/entity/sap.m.IllustratedMessage/sample/sap.m.sample.IllustratedMessageInAppCustom (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_630 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_631.clas.abap b/src/02/01/z2ui5_cl_smpc_app_631.clas.abap index 31717b7b8..fe2a2baa3 100644 --- a/src/02/01/z2ui5_cl_smpc_app_631.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_631.clas.abap @@ -1,3 +1,6 @@ +" @keywords illustratedmessage illustrated message sap.m illustratedmessageincardnoactivities card header button +" @summary IllustratedMessage as content of sap.f.Card. 'NoActivities' illustration type is being used for the Illustrated Message. +" @origin sap.m.sample.IllustratedMessageInCardNoActivities - https://sdk.openui5.org/entity/sap.m.IllustratedMessage/sample/sap.m.sample.IllustratedMessageInCardNoActivities (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_631 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_632.clas.abap b/src/02/01/z2ui5_cl_smpc_app_632.clas.abap index bd89470d3..bdd9a56bc 100644 --- a/src/02/01/z2ui5_cl_smpc_app_632.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_632.clas.abap @@ -1,3 +1,6 @@ +" @keywords illustratedmessage illustrated message sap.m illustratedmessageincardnoemail card header +" @summary IllustratedMessage as content of sap.f.Card. 'NoEmail' illustration type is being used for the Illustrated Message. +" @origin sap.m.sample.IllustratedMessageInCardNoEmail - https://sdk.openui5.org/entity/sap.m.IllustratedMessage/sample/sap.m.sample.IllustratedMessageInCardNoEmail (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_632 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_633.clas.abap b/src/02/01/z2ui5_cl_smpc_app_633.clas.abap index ebde02f95..0a5b42cf7 100644 --- a/src/02/01/z2ui5_cl_smpc_app_633.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_633.clas.abap @@ -1,3 +1,6 @@ +" @keywords illustratedmessage illustrated message sap.m illustratedmessageindialog button dialog +" @summary IllustratedMessage as content of sap.m.Dialog. +" @origin sap.m.sample.IllustratedMessageInDialog - https://sdk.openui5.org/entity/sap.m.IllustratedMessage/sample/sap.m.sample.IllustratedMessageInDialog (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_633 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_634.clas.abap b/src/02/01/z2ui5_cl_smpc_app_634.clas.abap index ef2a49f29..83c9355f9 100644 --- a/src/02/01/z2ui5_cl_smpc_app_634.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_634.clas.abap @@ -1,3 +1,6 @@ +" @keywords illustratedmessage illustrated message sap.m illustratedmessageinpage simpleform label columnelementdata switch text select item +" @summary The available illustrations are from the default ('sapIllus') illustration set. +" @origin sap.m.sample.IllustratedMessageInPage - https://sdk.openui5.org/entity/sap.m.IllustratedMessage/sample/sap.m.sample.IllustratedMessageInPage (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_634 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_635.clas.abap b/src/02/01/z2ui5_cl_smpc_app_635.clas.abap index c81ede042..aee114252 100644 --- a/src/02/01/z2ui5_cl_smpc_app_635.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_635.clas.abap @@ -1,3 +1,6 @@ +" @keywords illustratedmessage illustrated message sap.m illustratedmessageinpagecustom simpleform label select item text button +" @summary The available properties of the IllustratedMessage are configurable in this sample. The available illustrations are from the 'custom' illustration set. +" @origin sap.m.sample.IllustratedMessageInPageCustom - https://sdk.openui5.org/entity/sap.m.IllustratedMessage/sample/sap.m.sample.IllustratedMessageInPageCustom (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_635 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_636.clas.abap b/src/02/01/z2ui5_cl_smpc_app_636.clas.abap index 4b352ddbf..418cc1852 100644 --- a/src/02/01/z2ui5_cl_smpc_app_636.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_636.clas.abap @@ -1,3 +1,6 @@ +" @keywords illustratedmessage illustrated message sap.m illustratedmessageinpagetnt simpleform label columnelementdata select item text button +" @summary The available properties of the IllustratedMessage are configurable in this sample. The available illustrations are from the 'tnt' illustration set. +" @origin sap.m.sample.IllustratedMessageInPageTNT - https://sdk.openui5.org/entity/sap.m.IllustratedMessage/sample/sap.m.sample.IllustratedMessageInPageTNT (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_636 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_637.clas.abap b/src/02/01/z2ui5_cl_smpc_app_637.clas.abap index 61619d6b1..883e3544f 100644 --- a/src/02/01/z2ui5_cl_smpc_app_637.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_637.clas.abap @@ -1,3 +1,6 @@ +" @keywords illustratedmessage illustrated message sap.m illustratedmessageinpagewithuri simpleform label columnelementdata switch text select item +" @summary The available illustrations are from the default illustration set with the use of the 'src' property. +" @origin sap.m.sample.IllustratedMessageInPageWithURI - https://sdk.openui5.org/entity/sap.m.IllustratedMessage/sample/sap.m.sample.IllustratedMessageInPageWithURI (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_637 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_638.clas.abap b/src/02/01/z2ui5_cl_smpc_app_638.clas.abap index 6c0c523a2..0302c81b4 100644 --- a/src/02/01/z2ui5_cl_smpc_app_638.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_638.clas.abap @@ -1,3 +1,6 @@ +" @keywords illustratedmessage illustrated message sap.m illustratedmessagesessiontimeout vbox label stepinput button dialog +" @summary All applications that require user sign-in should employ a mechanism for automating user sign-out. When the inactivity is about to reach that threshold, a session timeout dialog appears automatically to inform the user. +" @origin sap.m.sample.IllustratedMessageSessionTimeout - https://sdk.openui5.org/entity/sap.m.IllustratedMessage/sample/sap.m.sample.IllustratedMessageSessionTimeout (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_638 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_639.clas.abap b/src/02/01/z2ui5_cl_smpc_app_639.clas.abap index 4ad44c53f..0835c9326 100644 --- a/src/02/01/z2ui5_cl_smpc_app_639.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_639.clas.abap @@ -1,3 +1,6 @@ +" @keywords dynamicdaterange dynamic date range sap.m table overflowtoolbar title toolbarspacer label column text +" @summary The dynamic date range is a control that offers a choice of absolute and relative dates, using different offset from the current date. The list of values offered must be defined by the application. +" @origin sap.m.sample.DynamicDateRange - https://sdk.openui5.org/entity/sap.m.DynamicDateRange/sample/sap.m.sample.DynamicDateRange (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_639 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_640.clas.abap b/src/02/01/z2ui5_cl_smpc_app_640.clas.abap index f74b4e300..d2d3fcfcc 100644 --- a/src/02/01/z2ui5_cl_smpc_app_640.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_640.clas.abap @@ -1,3 +1,6 @@ +" @keywords dynamicdaterange dynamic date range sap.m dynamicdaterangeandcalendarweeknumbering table overflowtoolbar title toolbarspacer label column +" @summary This example shows the Dynamic Date Range control with Middle Eastern calendar week numbering. +" @origin sap.m.sample.DynamicDateRangeAndCalendarWeekNumbering - https://sdk.openui5.org/entity/sap.m.DynamicDateRange/sample/sap.m.sample.DynamicDateRangeAndCalendarWeekNumbering (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_640 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_641.clas.abap b/src/02/01/z2ui5_cl_smpc_app_641.clas.abap index 87fbdf2d0..97c4a5bff 100644 --- a/src/02/01/z2ui5_cl_smpc_app_641.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_641.clas.abap @@ -1,3 +1,6 @@ +" @keywords dynamicdaterange dynamic date range sap.m dynamicdaterangehidden title vbox label button link +" @summary This example shows Dynamic Date Range which is opened by another control. +" @origin sap.m.sample.DynamicDateRangeHidden - https://sdk.openui5.org/entity/sap.m.DynamicDateRange/sample/sap.m.sample.DynamicDateRangeHidden (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_641 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_642.clas.abap b/src/02/01/z2ui5_cl_smpc_app_642.clas.abap index 158a1a2a1..be75ab83e 100644 --- a/src/02/01/z2ui5_cl_smpc_app_642.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_642.clas.abap @@ -1,3 +1,6 @@ +" @keywords dynamicdaterange dynamic date range sap.m dynamicdaterangewithcustomoptions table overflowtoolbar title toolbarspacer label column +" @summary This example shows the Dynamic Date Range control with custom options for interval or date selection. +" @origin sap.m.sample.DynamicDateRangeWithCustomOptions - https://sdk.openui5.org/entity/sap.m.DynamicDateRange/sample/sap.m.sample.DynamicDateRangeWithCustomOptions (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_642 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_643.clas.abap b/src/02/01/z2ui5_cl_smpc_app_643.clas.abap index f3f65c4db..f8d20118f 100644 --- a/src/02/01/z2ui5_cl_smpc_app_643.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_643.clas.abap @@ -1,3 +1,6 @@ +" @keywords expandabletext expandable text sap.m table column columnlistitem +" @summary The ExpandableText control can be used to display a larger texts inside a table, list or form. +" @origin sap.m.sample.ExpandableText - https://sdk.openui5.org/entity/sap.m.ExpandableText/sample/sap.m.sample.ExpandableText (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_643 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_644.clas.abap b/src/02/01/z2ui5_cl_smpc_app_644.clas.abap index 1b775749f..11df63f2c 100644 --- a/src/02/01/z2ui5_cl_smpc_app_644.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_644.clas.abap @@ -1,3 +1,6 @@ +" @keywords container sap.m.p13n p13n.container vbox radiobuttongroup radiobutton label button text +" @summary Dialog & Popover with a sap.m.P13nContainer as content. +" @origin sap.m.sample.p13n.Container - https://sdk.openui5.org/entity/sap.m.p13n.Container/sample/sap.m.sample.p13n.Container (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_644 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_645.clas.abap b/src/02/01/z2ui5_cl_smpc_app_645.clas.abap index 659eda7a2..06246696c 100644 --- a/src/02/01/z2ui5_cl_smpc_app_645.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_645.clas.abap @@ -1,3 +1,6 @@ +" @keywords engine sap.m.p13n p13n.engine table overflowtoolbar title toolbarseparator toolbarspacer button text columnresizer menu +" @summary Responsive Table using the personalization Engine +" @origin sap.m.sample.p13n.Engine - https://sdk.openui5.org/entity/sap.m.p13n.Engine/sample/sap.m.sample.p13n.Engine (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_645 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_646.clas.abap b/src/02/01/z2ui5_cl_smpc_app_646.clas.abap index 40d9944b7..37fe7afbd 100644 --- a/src/02/01/z2ui5_cl_smpc_app_646.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_646.clas.abap @@ -1,3 +1,6 @@ +" @keywords engine sap.m.p13n p13n.enginecustomfilters table overflowtoolbar title toolbarseparator toolbarspacer button columnresizer menu quicksort +" @summary Filtering using the personalization Engine +" @origin sap.m.sample.p13n.EngineCustomFilters - https://sdk.openui5.org/entity/sap.m.p13n.Engine/sample/sap.m.sample.p13n.EngineCustomFilters (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_646 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_647.clas.abap b/src/02/01/z2ui5_cl_smpc_app_647.clas.abap index 5f54d29a4..6dae08d60 100644 --- a/src/02/01/z2ui5_cl_smpc_app_647.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_647.clas.abap @@ -1,3 +1,6 @@ +" @keywords engine sap.m.p13n p13n.enginegridlist vbox toolbar title toolbarseparator toolbarspacer button gridlist customlistitem flexitemdata +" @summary GridList using the personalization Engine +" @origin sap.m.sample.p13n.EngineGridList - https://sdk.openui5.org/entity/sap.m.p13n.Engine/sample/sap.m.sample.p13n.EngineGridList (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_647 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_648.clas.abap b/src/02/01/z2ui5_cl_smpc_app_648.clas.abap index 645bef4bf..640750e76 100644 --- a/src/02/01/z2ui5_cl_smpc_app_648.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_648.clas.abap @@ -1,3 +1,6 @@ +" @keywords engine sap.m.p13n p13n.enginegridtable table overflowtoolbar title toolbarseparator toolbarspacer button menu popup selectionpanel +" @summary Grid Table using the personalization Engine +" @origin sap.m.sample.p13n.EngineGridTable - https://sdk.openui5.org/entity/sap.m.p13n.Engine/sample/sap.m.sample.p13n.EngineGridTable (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_648 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_649.clas.abap b/src/02/01/z2ui5_cl_smpc_app_649.clas.abap index 827aaab17..402b088ae 100644 --- a/src/02/01/z2ui5_cl_smpc_app_649.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_649.clas.abap @@ -1,3 +1,6 @@ +" @keywords engine sap.m.p13n p13n.enginemultiplecontroller table overflowtoolbar title toolbarseparator toolbarspacer button menu actionitem popup +" @summary Personalization for Reponsive Table using multiple SelectionControllers +" @origin sap.m.sample.p13n.EngineMultipleController - https://sdk.openui5.org/entity/sap.m.p13n.Engine/sample/sap.m.sample.p13n.EngineMultipleController (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_649 DEFINITION PUBLIC. PUBLIC SECTION. @@ -373,7 +376,7 @@ CLASS z2ui5_cl_smpc_app_649 IMPLEMENTATION. " the static items of the view; the labels are the rows' MetadataHelper's t_rows = VALUE #( - ( key = `P1` label = `Peter Mueller` id = `P1` firstname = `Peter` lastname = `Mueller` city = `Walldorf` size = `1.75` visible = abap_true ) + ( key = `P1` label = `Peter Müller` id = `P1` firstname = `Peter` lastname = `Mueller` city = `Walldorf` size = `1.75` visible = abap_true ) ( key = `P2` label = `Petra Maier` id = `P2` firstname = `Petra` lastname = `Maier` city = `Walldorf` size = `1.85` visible = abap_true ) ( key = `P3` label = `Thomas Smith` id = `P3` firstname = `Thomas` lastname = `Smith` city = `Walldorf` size = `1.95` visible = abap_true ) ( key = `P4` label = `John Williams` id = `P4` firstname = `John` lastname = `Williams` city = `Walldorf` size = `1.65` visible = abap_true ) diff --git a/src/02/01/z2ui5_cl_smpc_app_650.clas.abap b/src/02/01/z2ui5_cl_smpc_app_650.clas.abap index 55c2d506e..f41e9147f 100644 --- a/src/02/01/z2ui5_cl_smpc_app_650.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_650.clas.abap @@ -1,3 +1,6 @@ +" @keywords popup sap.m.p13n p13n.popup vbox button selectionpanel sortpanel grouppanel codeeditor +" @summary Dialog with sap.m.p13n/* Panels +" @origin sap.m.sample.p13n.Popup - https://sdk.openui5.org/entity/sap.m.p13n.Popup/sample/sap.m.sample.p13n.Popup (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_650 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_651.clas.abap b/src/02/01/z2ui5_cl_smpc_app_651.clas.abap index 9a5c5b9d3..d0fb65a1d 100644 --- a/src/02/01/z2ui5_cl_smpc_app_651.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_651.clas.abap @@ -1,3 +1,6 @@ +" @keywords variantmanagement variant management sap.m panel overflowtoolbar title toolbarspacer button dynamicpage dynamicpagetitle variantitem +" @summary VariantManagement with dedicated items +" @origin sap.m.sample.VariantManagement - https://sdk.openui5.org/entity/sap.m.VariantManagement/sample/sap.m.sample.VariantManagement (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_651 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/01/z2ui5_cl_smpc_app_652.clas.abap b/src/02/01/z2ui5_cl_smpc_app_652.clas.abap index 0fd1c427c..0d0debef1 100644 --- a/src/02/01/z2ui5_cl_smpc_app_652.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_652.clas.abap @@ -1,3 +1,6 @@ +" @keywords uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.filenamevalidationsample dynamicpage vbox messagestrip text hbox checkbox +" @summary This example demonstrates the usage of fileNameValidationConfig property to configure file name validation for renaming a file. +" @origin sap.m.sample.UploadSetwithTablePlugin.FileNameValidationSample - https://sdk.openui5.org/entity/sap.m.plugins.UploadSetwithTable/sample/sap.m.sample.UploadSetwithTablePlugin.FileNameValidationSample (status: generated) CLASS z2ui5_cl_smpc_app_652 DEFINITION PUBLIC. PUBLIC SECTION. @@ -865,7 +868,8 @@ CLASS z2ui5_cl_smpc_app_652 IMPLEMENTATION. " UploadSetwithTable.getIconForFileType: IconPool's media type table, or the " file extension when there is no media type IF mediatype IS NOT INITIAL. - CASE to_lower( mediatype ). + DATA(type) = to_lower( mediatype ). + CASE type. WHEN `application/msword` OR `application/vnd.google-apps.document` OR `application/rtf` OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document`. result = `sap-icon://doc-attachment`. @@ -909,7 +913,8 @@ CLASS z2ui5_cl_smpc_app_652 IMPLEMENTATION. result = `sap-icon://document`. RETURN. ENDIF. - CASE to_lower( substring( val = filename off = dot + 1 ) ). + DATA(extension) = to_lower( substring( val = filename off = dot + 1 ) ). + CASE extension. WHEN `bmp` OR `jpg` OR `jpeg` OR `png`. result = `sap-icon://card`. WHEN `csv` OR `xls` OR `xlsx`. diff --git a/src/02/01/z2ui5_cl_smpc_app_653.clas.abap b/src/02/01/z2ui5_cl_smpc_app_653.clas.abap index 25882260d..a9ac0007b 100644 --- a/src/02/01/z2ui5_cl_smpc_app_653.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_653.clas.abap @@ -1,3 +1,6 @@ +" @keywords uploadsetwithtable upload setwith table sap.m.plugins filepreviewcustompagecontent dynamicpage vbox messagestrip overflowtoolbar title toolbarspacer +" @summary This example showcases how to display custom page content for non supported file types in the FilePreviewDialog control. +" @origin sap.m.sample.UploadSetwithTablePlugin.FilePreviewCustomPageContent - https://sdk.openui5.org/entity/sap.m.plugins.UploadSetwithTable/sample/sap.m.sample.UploadSetwithTablePlugin.FilePreviewCustomPageContent (status: generated) CLASS z2ui5_cl_smpc_app_653 DEFINITION PUBLIC. PUBLIC SECTION. @@ -740,7 +743,8 @@ CLASS z2ui5_cl_smpc_app_653 IMPLEMENTATION. " UploadSetwithTable.getIconForFileType: IconPool's media type table, or the " file extension when there is no media type IF mediatype IS NOT INITIAL. - CASE to_lower( mediatype ). + DATA(type) = to_lower( mediatype ). + CASE type. WHEN `application/msword` OR `application/vnd.google-apps.document` OR `application/rtf` OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document`. result = `sap-icon://doc-attachment`. @@ -784,7 +788,8 @@ CLASS z2ui5_cl_smpc_app_653 IMPLEMENTATION. result = `sap-icon://document`. RETURN. ENDIF. - CASE to_lower( substring( val = filename off = dot + 1 ) ). + DATA(extension) = to_lower( substring( val = filename off = dot + 1 ) ). + CASE extension. WHEN `bmp` OR `jpg` OR `jpeg` OR `png`. result = `sap-icon://card`. WHEN `csv` OR `xls` OR `xlsx`. diff --git a/src/02/01/z2ui5_cl_smpc_app_654.clas.abap b/src/02/01/z2ui5_cl_smpc_app_654.clas.abap index 0865506f3..7b95890a2 100644 --- a/src/02/01/z2ui5_cl_smpc_app_654.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_654.clas.abap @@ -1,3 +1,6 @@ +" @keywords uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.gridtablesimple dynamicpage overflowtoolbar title toolbarspacer actionsplaceholder button +" @summary This example demonstrates the usage of UploadSetwithTable plugin for grid table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table. +" @origin sap.m.sample.UploadSetwithTablePlugin.GridTableSimple - https://sdk.openui5.org/entity/sap.m.plugins.UploadSetwithTable/sample/sap.m.sample.UploadSetwithTablePlugin.GridTableSimple (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_654 DEFINITION PUBLIC. PUBLIC SECTION. @@ -681,7 +684,8 @@ CLASS z2ui5_cl_smpc_app_654 IMPLEMENTATION. " UploadSetwithTable.getIconForFileType: IconPool's media type table, or the " file extension when there is no media type IF mediatype IS NOT INITIAL. - CASE to_lower( mediatype ). + DATA(type) = to_lower( mediatype ). + CASE type. WHEN `application/msword` OR `application/vnd.google-apps.document` OR `application/rtf` OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document`. result = `sap-icon://doc-attachment`. @@ -725,7 +729,8 @@ CLASS z2ui5_cl_smpc_app_654 IMPLEMENTATION. result = `sap-icon://document`. RETURN. ENDIF. - CASE to_lower( substring( val = filename off = dot + 1 ) ). + DATA(extension) = to_lower( substring( val = filename off = dot + 1 ) ). + CASE extension. WHEN `bmp` OR `jpg` OR `jpeg` OR `png`. result = `sap-icon://card`. WHEN `csv` OR `xls` OR `xlsx`. diff --git a/src/02/01/z2ui5_cl_smpc_app_655.clas.abap b/src/02/01/z2ui5_cl_smpc_app_655.clas.abap index 070347c3d..69633749c 100644 --- a/src/02/01/z2ui5_cl_smpc_app_655.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_655.clas.abap @@ -1,3 +1,6 @@ +" @keywords uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.multipleplugininstances dynamicpage vbox overflowtoolbar title toolbarspacer searchfield +" @summary This example demonstrates the usage of multiple plugin instances with multiple tables. The plugin instances are created for each table and the uploaded files are displayed in their respective tables. +" @origin sap.m.sample.UploadSetwithTablePlugin.MultiplePluginInstances - https://sdk.openui5.org/entity/sap.m.plugins.UploadSetwithTable/sample/sap.m.sample.UploadSetwithTablePlugin.MultiplePluginInstances (status: generated) CLASS z2ui5_cl_smpc_app_655 DEFINITION PUBLIC. PUBLIC SECTION. @@ -850,7 +853,8 @@ CLASS z2ui5_cl_smpc_app_655 IMPLEMENTATION. " UploadSetwithTable.getIconForFileType: IconPool's media type table, or the " file extension when there is no media type IF mediatype IS NOT INITIAL. - CASE to_lower( mediatype ). + DATA(type) = to_lower( mediatype ). + CASE type. WHEN `application/msword` OR `application/vnd.google-apps.document` OR `application/rtf` OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document`. result = `sap-icon://doc-attachment`. @@ -894,7 +898,8 @@ CLASS z2ui5_cl_smpc_app_655 IMPLEMENTATION. result = `sap-icon://document`. RETURN. ENDIF. - CASE to_lower( substring( val = filename off = dot + 1 ) ). + DATA(extension) = to_lower( substring( val = filename off = dot + 1 ) ). + CASE extension. WHEN `bmp` OR `jpg` OR `jpeg` OR `png`. result = `sap-icon://card`. WHEN `csv` OR `xls` OR `xlsx`. diff --git a/src/02/01/z2ui5_cl_smpc_app_656.clas.abap b/src/02/01/z2ui5_cl_smpc_app_656.clas.abap index 2fda0a045..823387013 100644 --- a/src/02/01/z2ui5_cl_smpc_app_656.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_656.clas.abap @@ -1,3 +1,6 @@ +" @keywords uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.responsivetablefiledialogs dynamicpage overflowtoolbar title toolbarspacer searchfield overflowtoolbarlayoutdata +" @summary This example demonstrates usage of itemValidationHandler callback to leverage additional validations and configurations for the items that are to be uploaded, and also the manual trigger of the upload process. +" @origin sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFileDialogs - https://sdk.openui5.org/entity/sap.m.plugins.UploadSetwithTable/sample/sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFileDialogs (status: generated) CLASS z2ui5_cl_smpc_app_656 DEFINITION PUBLIC. PUBLIC SECTION. @@ -886,7 +889,8 @@ CLASS z2ui5_cl_smpc_app_656 IMPLEMENTATION. " UploadSetwithTable.getIconForFileType: IconPool's media type table, or the " file extension when there is no media type IF mediatype IS NOT INITIAL. - CASE to_lower( mediatype ). + DATA(type) = to_lower( mediatype ). + CASE type. WHEN `application/msword` OR `application/vnd.google-apps.document` OR `application/rtf` OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document`. result = `sap-icon://doc-attachment`. @@ -930,7 +934,8 @@ CLASS z2ui5_cl_smpc_app_656 IMPLEMENTATION. result = `sap-icon://document`. RETURN. ENDIF. - CASE to_lower( substring( val = filename off = dot + 1 ) ). + DATA(extension) = to_lower( substring( val = filename off = dot + 1 ) ). + CASE extension. WHEN `bmp` OR `jpg` OR `jpeg` OR `png`. result = `sap-icon://card`. WHEN `csv` OR `xls` OR `xlsx`. diff --git a/src/02/01/z2ui5_cl_smpc_app_657.clas.abap b/src/02/01/z2ui5_cl_smpc_app_657.clas.abap index 6d813841e..739ca2ed2 100644 --- a/src/02/01/z2ui5_cl_smpc_app_657.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_657.clas.abap @@ -1,3 +1,6 @@ +" @keywords uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.responsivetablefilepreview dynamicpage overflowtoolbar title toolbarspacer searchfield overflowtoolbarlayoutdata +" @summary This example showcases how uploaded files can be previewed with FilePreviewDialog control and its related configuration. UploadSetwithTable plugin creates and uses default instance of FilePreviewDialog, if not defined. +" @origin sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFilePreview - https://sdk.openui5.org/entity/sap.m.plugins.UploadSetwithTable/sample/sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableFilePreview (status: generated) CLASS z2ui5_cl_smpc_app_657 DEFINITION PUBLIC. PUBLIC SECTION. @@ -727,7 +730,8 @@ CLASS z2ui5_cl_smpc_app_657 IMPLEMENTATION. " UploadSetwithTable.getIconForFileType: IconPool's media type table, or the " file extension when there is no media type IF mediatype IS NOT INITIAL. - CASE to_lower( mediatype ). + DATA(type) = to_lower( mediatype ). + CASE type. WHEN `application/msword` OR `application/vnd.google-apps.document` OR `application/rtf` OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document`. result = `sap-icon://doc-attachment`. @@ -771,7 +775,8 @@ CLASS z2ui5_cl_smpc_app_657 IMPLEMENTATION. result = `sap-icon://document`. RETURN. ENDIF. - CASE to_lower( substring( val = filename off = dot + 1 ) ). + DATA(extension) = to_lower( substring( val = filename off = dot + 1 ) ). + CASE extension. WHEN `bmp` OR `jpg` OR `jpeg` OR `png`. result = `sap-icon://card`. WHEN `csv` OR `xls` OR `xlsx`. diff --git a/src/02/01/z2ui5_cl_smpc_app_658.clas.abap b/src/02/01/z2ui5_cl_smpc_app_658.clas.abap index a721511eb..c58e27ba3 100644 --- a/src/02/01/z2ui5_cl_smpc_app_658.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_658.clas.abap @@ -1,3 +1,6 @@ +" @keywords uploadsetwithtable upload setwith table sap.m.plugins responsivetableprogressindicator dynamicpage overflowtoolbar title toolbarspacer searchfield overflowtoolbarlayoutdata +" @summary This example demonstrates the progress or termination of the items that are being uploaded. The upload progress is displayed for each item that is being uploaded. The users can terminate the upload process at any time. +" @origin sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableProgressIndicator - https://sdk.openui5.org/entity/sap.m.plugins.UploadSetwithTable/sample/sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableProgressIndicator (status: generated) CLASS z2ui5_cl_smpc_app_658 DEFINITION PUBLIC. PUBLIC SECTION. @@ -718,7 +721,8 @@ CLASS z2ui5_cl_smpc_app_658 IMPLEMENTATION. " UploadSetwithTable.getIconForFileType: IconPool's media type table, or the " file extension when there is no media type IF mediatype IS NOT INITIAL. - CASE to_lower( mediatype ). + DATA(type) = to_lower( mediatype ). + CASE type. WHEN `application/msword` OR `application/vnd.google-apps.document` OR `application/rtf` OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document`. result = `sap-icon://doc-attachment`. @@ -762,7 +766,8 @@ CLASS z2ui5_cl_smpc_app_658 IMPLEMENTATION. result = `sap-icon://document`. RETURN. ENDIF. - CASE to_lower( substring( val = filename off = dot + 1 ) ). + DATA(extension) = to_lower( substring( val = filename off = dot + 1 ) ). + CASE extension. WHEN `bmp` OR `jpg` OR `jpeg` OR `png`. result = `sap-icon://card`. WHEN `csv` OR `xls` OR `xlsx`. diff --git a/src/02/01/z2ui5_cl_smpc_app_659.clas.abap b/src/02/01/z2ui5_cl_smpc_app_659.clas.abap index d00ea1323..53d8982fe 100644 --- a/src/02/01/z2ui5_cl_smpc_app_659.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_659.clas.abap @@ -1,3 +1,6 @@ +" @keywords uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.responsivetablesimple dynamicpage overflowtoolbar title toolbarspacer searchfield overflowtoolbarlayoutdata +" @summary This example demonstrates the usage of UploadSetwithTable plugin for responsive table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table. +" @origin sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableSimple - https://sdk.openui5.org/entity/sap.m.plugins.UploadSetwithTable/sample/sap.m.sample.UploadSetwithTablePlugin.ResponsiveTableSimple (status: generated) CLASS z2ui5_cl_smpc_app_659 DEFINITION PUBLIC. PUBLIC SECTION. @@ -725,7 +728,8 @@ CLASS z2ui5_cl_smpc_app_659 IMPLEMENTATION. " UploadSetwithTable.getIconForFileType: IconPool's media type table, or the " file extension when there is no media type IF mediatype IS NOT INITIAL. - CASE to_lower( mediatype ). + DATA(type) = to_lower( mediatype ). + CASE type. WHEN `application/msword` OR `application/vnd.google-apps.document` OR `application/rtf` OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document`. result = `sap-icon://doc-attachment`. @@ -769,7 +773,8 @@ CLASS z2ui5_cl_smpc_app_659 IMPLEMENTATION. result = `sap-icon://document`. RETURN. ENDIF. - CASE to_lower( substring( val = filename off = dot + 1 ) ). + DATA(extension) = to_lower( substring( val = filename off = dot + 1 ) ). + CASE extension. WHEN `bmp` OR `jpg` OR `jpeg` OR `png`. result = `sap-icon://card`. WHEN `csv` OR `xls` OR `xlsx`. diff --git a/src/02/01/z2ui5_cl_smpc_app_660.clas.abap b/src/02/01/z2ui5_cl_smpc_app_660.clas.abap index 9d4389e78..cda6e8de3 100644 --- a/src/02/01/z2ui5_cl_smpc_app_660.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_660.clas.abap @@ -1,3 +1,6 @@ +" @keywords uploadsetwithtable upload setwith table sap.m.plugins uploadsetwithtableplugin.treetablesimple dynamicpage treetable overflowtoolbar title toolbarspacer actionsplaceholder +" @summary This example demonstrates the usage of UploadSetwithTable plugin for tree table with the features of upload, download, drag & drop, remove and rename of files. It also demonstrates how the uploaded files can be displayed in a table. +" @origin sap.m.sample.UploadSetwithTablePlugin.TreeTableSimple - https://sdk.openui5.org/entity/sap.m.plugins.UploadSetwithTable/sample/sap.m.sample.UploadSetwithTablePlugin.TreeTableSimple (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_660 DEFINITION PUBLIC. PUBLIC SECTION. @@ -12,7 +15,6 @@ CLASS z2ui5_cl_smpc_app_660 DEFINITION PUBLIC. mediatype TYPE string, imageurl TYPE string, url TYPE string, - revision TYPE string, status TYPE string, filesize TYPE i, lastmodifiedby TYPE string, @@ -35,7 +37,6 @@ CLASS z2ui5_cl_smpc_app_660 DEFINITION PUBLIC. mediatype TYPE string, imageurl TYPE string, url TYPE string, - revision TYPE string, status TYPE string, filesize TYPE i, lastmodifiedby TYPE string, @@ -59,7 +60,6 @@ CLASS z2ui5_cl_smpc_app_660 DEFINITION PUBLIC. mediatype TYPE string, imageurl TYPE string, url TYPE string, - revision TYPE string, status TYPE string, filesize TYPE i, lastmodifiedby TYPE string, @@ -364,16 +364,6 @@ CLASS z2ui5_cl_smpc_app_660 IMPLEMENTATION. )->end( )->end( )->end( - )->ele( `Column` - )->tag( n = `Label` ns = `m` - )->a( n = `text` v = `Revision` - - )->ele( `template` - )->tag( n = `Link` ns = `m` - )->a( n = `text` v = `{REVISION}` - - )->end( - )->end( )->ele( `Column` )->tag( n = `Label` ns = `m` )->a( n = `text` v = `Status` @@ -690,7 +680,6 @@ CLASS z2ui5_cl_smpc_app_660 IMPLEMENTATION. mediatype = mediatype url = url uploadstate = `Complete` - revision = `00` status = `In work` filesize = filesize lastmodifiedby = `Jane Burns` @@ -789,7 +778,8 @@ CLASS z2ui5_cl_smpc_app_660 IMPLEMENTATION. " UploadSetwithTable.getIconForFileType: IconPool's media type table, or the " file extension when there is no media type IF mediatype IS NOT INITIAL. - CASE to_lower( mediatype ). + DATA(type) = to_lower( mediatype ). + CASE type. WHEN `application/msword` OR `application/vnd.google-apps.document` OR `application/rtf` OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document`. result = `sap-icon://doc-attachment`. @@ -833,7 +823,8 @@ CLASS z2ui5_cl_smpc_app_660 IMPLEMENTATION. result = `sap-icon://document`. RETURN. ENDIF. - CASE to_lower( substring( val = filename off = dot + 1 ) ). + DATA(extension) = to_lower( substring( val = filename off = dot + 1 ) ). + CASE extension. WHEN `bmp` OR `jpg` OR `jpeg` OR `png`. result = `sap-icon://card`. WHEN `csv` OR `xls` OR `xlsx`. @@ -878,33 +869,33 @@ CLASS z2ui5_cl_smpc_app_660 IMPLEMENTATION. items = VALUE #( ( id = `23004579` filename = `Document.txt` mediatype = `text/plain` url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Document.txt` - revision = `42` status = `In work` filesize = 420 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + status = `In work` filesize = 420 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` documenttype = `Document` previewable = abap_true isdirectory = abap_false ) ( filename = `Invoices` isdirectory = abap_true color = `#ffffff` bgcolor = `#30914c` items = VALUE #( ( id = `23004569` filename = `Invoice summary.doc` mediatype = `application/msword` imageurl = `https://sdk.openui5.org/test-resources/sap/m/images/invoice_manager.png` url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Business Plan Agenda.doc` - revision = `01` status = `In work` filesize = 200 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + status = `In work` filesize = 200 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` documenttype = `Invoice` previewable = abap_true isdirectory = abap_false ) ) ) ) ) ( id = `23004583` filename = `Test Video.mp4` mediatype = `video/mp4` url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Video.mp4` - revision = `99` status = `In work` filesize = 420000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + status = `In work` filesize = 420000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` documenttype = `Attachment` previewable = abap_true isdirectory = abap_false ) ( id = `23004590` filename = `Sample Zip File.zip` mediatype = `application/zip` url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/sample-zip-file.zip` - revision = `00` status = `In work` filesize = 42000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/22, 10:20:00 PM` + status = `In work` filesize = 42000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/22, 10:20:00 PM` documenttype = `Attachment` previewable = abap_true isdirectory = abap_false ) ( filename = `Attachments` isdirectory = abap_true color = `#ffffff` bgcolor = `#e76500` items = VALUE #( ( id = `23004578` filename = `Instructions.pdf` mediatype = `application/pdf` url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Instructions.pdf` - revision = `01` status = `In work` filesize = 30000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` + status = `In work` filesize = 30000 lastmodifiedby = `Jane Burns` lastmodified = `10/03/21, 10:03:00 PM` documenttype = `Specification` previewable = abap_true trustedsource = abap_true isdirectory = abap_false ) ) ) ( id = `23004584` filename = `Transmission.vds` mediatype = `model/vnd.sap.vds` url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/transmission.vds` - revision = `42` status = `In work` filesize = 123 lastmodifiedby = `Jane Burns` lastmodified = `10/03/22, 10:20:00 PM` + status = `In work` filesize = 123 lastmodifiedby = `Jane Burns` lastmodified = `10/03/22, 10:20:00 PM` documenttype = `Attachment` previewable = abap_true trustedsource = abap_true isdirectory = abap_false ) ). " the derived ICON and FILESIZE_UNITS on every level LOOP AT t_items REFERENCE INTO DATA(root). diff --git a/src/02/01/z2ui5_cl_smpc_app_661.clas.abap b/src/02/01/z2ui5_cl_smpc_app_661.clas.abap index 8fd4dc69b..a3200d6d5 100644 --- a/src/02/01/z2ui5_cl_smpc_app_661.clas.abap +++ b/src/02/01/z2ui5_cl_smpc_app_661.clas.abap @@ -1,12 +1,208 @@ +" @keywords uploadsetwithtable upload setwith table sap.m.plugins treetablewithfolderhierarchy dynamicpage treetable overflowtoolbar breadcrumbs link actionsplaceholder +" @summary This example demonstrates the usage of UploadSetwithTable plugin with a tree table featuring folder hierarchy, folder creation, folder uploads, folder navigation with breadcrumbs and folder management +" @origin sap.m.sample.UploadSetwithTablePlugin.TreeTableWithFolderHierarchy - https://sdk.openui5.org/entity/sap.m.plugins.UploadSetwithTable/sample/sap.m.sample.UploadSetwithTablePlugin.TreeTableWithFolderHierarchy (status: generated) CLASS z2ui5_cl_smpc_app_661 DEFINITION PUBLIC. PUBLIC SECTION. INTERFACES z2ui5_if_app. + " the rows the TreeTable shows: the open folder's content, four levels deep + TYPES: + BEGIN OF ty_s_level4, + documentid TYPE string, + filename TYPE string, + mimetype TYPE string, + imageurl TYPE string, + url TYPE string, + size TYPE i, + uploadeddate TYPE string, + uploadedby TYPE string, + isdirectory TYPE abap_bool, + status TYPE string, + documenttype TYPE string, + previewable TYPE abap_bool, + trustedsource TYPE abap_bool, + color TYPE string, + bgcolor TYPE string, + uploadstate TYPE string, + icon TYPE string, + size_units TYPE string, + END OF ty_s_level4. + TYPES ty_t_level4 TYPE STANDARD TABLE OF ty_s_level4 WITH EMPTY KEY. + TYPES: + BEGIN OF ty_s_level3, + documentid TYPE string, + filename TYPE string, + mimetype TYPE string, + imageurl TYPE string, + url TYPE string, + size TYPE i, + uploadeddate TYPE string, + uploadedby TYPE string, + isdirectory TYPE abap_bool, + status TYPE string, + documenttype TYPE string, + previewable TYPE abap_bool, + trustedsource TYPE abap_bool, + color TYPE string, + bgcolor TYPE string, + uploadstate TYPE string, + icon TYPE string, + size_units TYPE string, + items TYPE ty_t_level4, + END OF ty_s_level3. + TYPES ty_t_level3 TYPE STANDARD TABLE OF ty_s_level3 WITH EMPTY KEY. + TYPES: + BEGIN OF ty_s_level2, + documentid TYPE string, + filename TYPE string, + mimetype TYPE string, + imageurl TYPE string, + url TYPE string, + size TYPE i, + uploadeddate TYPE string, + uploadedby TYPE string, + isdirectory TYPE abap_bool, + status TYPE string, + documenttype TYPE string, + previewable TYPE abap_bool, + trustedsource TYPE abap_bool, + color TYPE string, + bgcolor TYPE string, + uploadstate TYPE string, + icon TYPE string, + size_units TYPE string, + items TYPE ty_t_level3, + END OF ty_s_level2. + TYPES ty_t_level2 TYPE STANDARD TABLE OF ty_s_level2 WITH EMPTY KEY. + TYPES: + BEGIN OF ty_s_level1, + documentid TYPE string, + filename TYPE string, + mimetype TYPE string, + imageurl TYPE string, + url TYPE string, + size TYPE i, + uploadeddate TYPE string, + uploadedby TYPE string, + isdirectory TYPE abap_bool, + status TYPE string, + documenttype TYPE string, + previewable TYPE abap_bool, + trustedsource TYPE abap_bool, + color TYPE string, + bgcolor TYPE string, + uploadstate TYPE string, + icon TYPE string, + size_units TYPE string, + items TYPE ty_t_level2, + END OF ty_s_level1. + TYPES: + BEGIN OF ty_s_history, + name TYPE string, + path TYPE string, + END OF ty_s_history. + DATA t_items TYPE STANDARD TABLE OF ty_s_level1 WITH EMPTY KEY. + DATA currentlocationtext TYPE string. + DATA t_history TYPE STANDARD TABLE OF ty_s_history WITH EMPTY KEY. + " onSelectionChange's three buttons + DATA download_enabled TYPE abap_bool. + DATA rename_enabled TYPE abap_bool. + DATA removeall_enabled TYPE abap_bool. + " the CreateFolderDialog fragment and the controller-built Rename Folder dialog + DATA folder_name TYPE string. + DATA rename_name TYPE string. + PROTECTED SECTION. + " the whole documents.json tree, flat: every node names its parent folder + TYPES: + BEGIN OF ty_s_doc, + parentid TYPE string, + documentid TYPE string, + filename TYPE string, + mimetype TYPE string, + imageurl TYPE string, + url TYPE string, + size TYPE i, + uploadeddate TYPE string, + uploadedby TYPE string, + isdirectory TYPE abap_bool, + status TYPE string, + documenttype TYPE string, + previewable TYPE abap_bool, + trustedsource TYPE abap_bool, + color TYPE string, + bgcolor TYPE string, + uploadstate TYPE string, + icon TYPE string, + size_units TYPE string, + END OF ty_s_doc. + TYPES ty_t_index TYPE STANDARD TABLE OF i WITH EMPTY KEY. + DATA client TYPE REF TO z2ui5_if_client. + DATA t_docs TYPE STANDARD TABLE OF ty_s_doc WITH EMPTY KEY. + " the folder the table shows - initial is the root, Attachments + DATA current_id TYPE string. + " the documentIds of the selected rows, of the row a removal asks about and + " of the folder being renamed + DATA t_selected TYPE string_table. + DATA remove_id TYPE string. + DATA rename_id TYPE string. + DATA new_no TYPE i. METHODS view_display. + METHODS popup_folder_display. + METHODS popup_rename_display. + METHODS on_event. + METHODS selection_set + IMPORTING + paths TYPE string. + METHODS download. + METHODS folder_create + IMPORTING + name TYPE string. + METHODS folder_open + IMPORTING + id TYPE string. + METHODS remove_all_ask. + METHODS remove_selected. + METHODS rows_build. + METHODS children_count + IMPORTING + parent TYPE string + RETURNING + VALUE(result) TYPE i. + METHODS doc_at_path + IMPORTING + path TYPE string + RETURNING + VALUE(result) TYPE string. + METHODS doc_delete + IMPORTING + id TYPE string. + METHODS doc_insert + IMPORTING + doc TYPE ty_s_doc + after_folders TYPE abap_bool. + METHODS path_indices + IMPORTING + path TYPE string + RETURNING + VALUE(result) TYPE ty_t_index. + METHODS row_derive + CHANGING + row TYPE ty_s_doc. + METHODS icon_for + IMPORTING + mediatype TYPE string + filename TYPE string + RETURNING + VALUE(result) TYPE string. + METHODS size_with_units + IMPORTING + size TYPE i + RETURNING + VALUE(result) TYPE string. METHODS model_init. PRIVATE SECTION. @@ -23,6 +219,8 @@ CLASS z2ui5_cl_smpc_app_661 IMPLEMENTATION. view_display( ). ELSEIF client->check_on_navigated( ). view_display( ). + ELSEIF client->check_on_event( ). + on_event( ). ENDIF. ENDMETHOD. @@ -32,27 +230,847 @@ CLASS z2ui5_cl_smpc_app_661 IMPLEMENTATION. DATA(view) = z2ui5_cl_ui5_view_builder=>factory( ). - " TODO rebuild ui5/sap.m/UploadSetwithTablePlugin.TreeTableWithFolderHierarchy/*.view.xml 1:1 here (sap.m.plugins.UploadSetwithTable) view->ele( n = `View` ns = `mvc` - )->a( n = `xmlns` v = `sap.m` - )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` - )->a( n = `height` v = `100%` + )->a( n = `xmlns` v = `sap.ui.table` + )->a( n = `xmlns:m` v = `sap.m` + )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc` + )->a( n = `xmlns:f` v = `sap.f` + )->a( n = `xmlns:core` v = `sap.ui.core` + )->a( n = `xmlns:upload` v = `sap.m.upload` + )->a( n = `xmlns:plugins` v = `sap.m.plugins` + )->a( n = `height` v = `100%` + )->a( n = `displayBlock` v = `true` + + )->ele( n = `DynamicPage` ns = `f` + )->a( n = `id` v = `page` + + )->ele( n = `content` ns = `f` + " onToggleOpenState is an empty handler - the wire is not built + )->ele( `TreeTable` + )->a( n = `id` v = `table-uploadSet` + " IMAGEURL and UPLOADSTATE stay absent where the data has none, so + " the view's undefined checks read as in the sample + )->a( n = `rows` v = client->_bind( val = t_items + omit_initial_paths = VALUE #( ( `IMAGEURL` ) + ( `UPLOADSTATE` ) ) ) + )->a( n = `selectionMode` v = `MultiToggle` + )->a( n = `rowSelectionChange` v = client->_event( val = `SELECTION` + arg = `$event.oSource.getBinding('rows').getSelectedContexts().join()` ) + + )->ele( `extension` + )->ele( n = `OverflowToolbar` ns = `m` + )->a( n = `style` v = `Clear` + + )->ele( n = `Breadcrumbs` ns = `m` + )->a( n = `id` v = `breadcrumbs` + )->a( n = `currentLocationText` v = client->_bind( currentlocationtext ) + )->a( n = `links` v = client->_bind( t_history ) + + )->tag( n = `Link` ns = `m` + )->a( n = `press` v = client->_event( val = `CRUMB` + arg = `$event.oSource.getBindingContext().getPath()` ) + )->a( n = `text` v = `{NAME}` + + )->end( + )->tag( n = `ActionsPlaceholder` ns = `upload` + )->a( n = `id` v = `uploadButton` + )->a( n = `placeholderFor` v = `UploadButtonPlaceholder` + )->tag( n = `Button` ns = `m` + )->a( n = `id` v = `downloadSelectedButton` + )->a( n = `text` v = `Download` + )->a( n = `enabled` v = client->_bind( download_enabled ) + )->a( n = `press` v = client->_event( `DOWNLOAD` ) + )->tag( n = `Button` ns = `m` + )->a( n = `id` v = `addFolderButton` + )->a( n = `text` v = `Add Folder` + )->a( n = `press` v = client->_event( `ADD_FOLDER` ) + )->a( n = `icon` v = `sap-icon://add-folder` + " onRenameItem: a folder gets the controller's dialog (backend), a file + " the plugin's renameItem - the second handler hands it the selected + " context, or null for a folder, which renameItem ignores + )->tag( n = `Button` ns = `m` + )->a( n = `id` v = `renameButton` + )->a( n = `text` v = `Rename` + )->a( n = `enabled` v = client->_bind( rename_enabled ) + )->a( n = `press` v = client->_event( `RENAME` ) && `; ` && + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadPlugin` ) + ( `renameItem` ) + ( `$controller.getView().byId('table-uploadSet').getBinding('rows')` && + `.getSelectedContexts()[0].getProperty('ISDIRECTORY') ? null : ` && + `$controller.getView().byId('table-uploadSet').getBinding('rows')` && + `.getSelectedContexts()[0]` ) ) ) + )->tag( n = `Button` ns = `m` + )->a( n = `id` v = `removeAllButton` + )->a( n = `text` v = `Remove All` + )->a( n = `enabled` v = client->_bind( removeall_enabled ) + )->a( n = `press` v = client->_event( `REMOVE_ALL` ) + + )->end( + )->end( + )->ele( `dependents` + )->ele( n = `UploadSetwithTable` ns = `plugins` + )->a( n = `id` v = `uploadPlugin` + )->a( n = `uploadUrl` v = `./uploadFiles` + )->a( n = `multiple` v = `true` + )->a( n = `uploadEnabled` v = `true` + " the mock server's part: the upload is vetoed and the backend + " files the document into the open folder + )->a( n = `beforeUploadStarts` v = client->_event( val = `UPLOAD` + t_arg = VALUE #( ( `${$parameters>/item}.getFileName()` ) + ( `${$parameters>/item}.getMediaType()` ) + ( `${$parameters>/item}.getFileObject().size` ) ) + s_ctrl = VALUE #( check_prevent_default = abap_true + check_queue_last = abap_true ) ) + )->a( n = `itemRenamed` v = client->_event( val = `RENAMED` + t_arg = VALUE #( ( `${$parameters>/item}.getBindingContext().getPath()` ) + ( `${$parameters>/item}.getFileName()` ) ) ) + )->a( n = `actions` v = `uploadButton` + + " the paths name the model's upper-case ABAP fields + )->tag( n = `UploadItemConfiguration` ns = `upload` + )->a( n = `fileNamePath` v = `FILENAME` + )->a( n = `mediaTypePath` v = `MIMETYPE` + )->a( n = `urlPath` v = `URL` + )->a( n = `fileSizePath` v = `SIZE` + )->a( n = `isDirectoryPath` v = `ISDIRECTORY` + )->a( n = `previewablePath` v = `PREVIEWABLE` + )->a( n = `isTrustedSourcePath` v = `TRUSTEDSOURCE` + + )->end( + )->end( + )->ele( `rowSettingsTemplate` + )->tag( `RowSettings` + )->a( n = `highlight` v = `{= ${UPLOADSTATE} === 'Complete' ? 'Indication05' : null }` + + )->end( + )->ele( `columns` + )->ele( `Column` + )->a( n = `width` v = `40%` + + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `File Name` + + )->ele( `template` + )->ele( n = `HBox` ns = `m` + )->a( n = `class` v = `sapUiSmallMarginTop sapUiTinyMarginBottom` + + )->tag( n = `Image` ns = `m` + )->a( n = `src` v = `{IMAGEURL}` + )->a( n = `class` v = `sapMUSTItemImage sapMUSTItemIcon` + )->a( n = `visible` v = `{= ${IMAGEURL} !== undefined}` + " getIconSrc runs in ABAP: the row carries the finished icon + )->tag( n = `Icon` ns = `core` + )->a( n = `src` v = `{ICON}` + )->a( n = `visible` v = `{= ${IMAGEURL} === undefined || ${IMAGEURL} === '' }` + )->a( n = `class` v = `sapMUSTItemIcon` + )->a( n = `color` v = `{= ${ISDIRECTORY} ? ${COLOR} : '' }` + )->a( n = `backgroundColor` v = `{= ${ISDIRECTORY} ? ${BGCOLOR} : '' }` + + )->ele( n = `VBox` ns = `m` + )->a( n = `class` v = `sapUiTinyMargin sapUiSmallMarginBegin` + + )->tag( n = `Link` ns = `m` + )->a( n = `text` v = `{FILENAME}` + )->a( n = `press` v = client->_event( val = `OPEN_FOLDER` + arg = `$event.oSource.getBindingContext().getPath()` ) + )->a( n = `class` v = `sapUiSmallMarginBottom` + )->a( n = `visible` v = `{= ${ISDIRECTORY} === true }` + )->tag( n = `Link` ns = `m` + )->a( n = `text` v = `{FILENAME}` + )->a( n = `press` v = client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `uploadPlugin` ) + ( `openFilePreview` ) + ( `$event.oSource.getBindingContext()` ) ) ) + )->a( n = `class` v = `sapUiTinyMarginBottom` + )->a( n = `visible` v = `{= ${ISDIRECTORY} === false }` + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = `{DOCUMENTTYPE}` + + )->end( + )->end( + )->end( + )->end( + )->ele( `Column` + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `Status` + + )->ele( `template` + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = `{STATUS}` + + )->end( + )->end( + )->ele( `Column` + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `File Size` - )->ele( `Page` - )->a( n = `title` v = `UploadSetwithTablePlugin.TreeTableWithFolderHierarchy` + " formatFileSize runs in ABAP as well + )->ele( `template` + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = `{SIZE_UNITS}` - )->tag( `Text` - )->a( n = `text` v = `TODO: port sap.m.sample.UploadSetwithTablePlugin.TreeTableWithFolderHierarchy` ). + )->end( + )->end( + )->ele( `Column` + )->tag( n = `Label` ns = `m` + )->a( n = `text` v = `Last Modified` + + )->ele( `template` + )->ele( n = `VBox` ns = `m` + )->tag( n = `Text` ns = `m` + )->a( n = `text` v = `{UPLOADEDBY}` + )->tag( n = `Text` ns = `m` + )->a( n = `class` v = `sapUiTinyMarginTop` + )->a( n = `text` v = `{UPLOADEDDATE}` + + )->end( + )->end( + )->end( + )->ele( `Column` + )->ele( `template` + )->tag( n = `Button` ns = `m` + )->a( n = `class` v = `sapUiTinyMarginBegin` + )->a( n = `type` v = `Transparent` + )->a( n = `icon` v = `sap-icon://decline` + )->a( n = `press` v = client->_event( val = `REMOVE_ROW` + arg = `$event.oSource.getBindingContext().getPath()` ) + )->a( n = `visible` v = `{= ${ISDIRECTORY} === false }` + )->a( n = `tooltip` v = `Delete File` ). client->view_display( view->stringify( ) ). ENDMETHOD. + METHOD popup_folder_display. + + DATA(popup) = z2ui5_cl_ui5_view_builder=>factory( ). + + popup->ele( n = `FragmentDefinition` ns = `core` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:core` v = `sap.ui.core` + + )->ele( `Dialog` + )->a( n = `title` v = `Create New Folder` + )->a( n = `class` v = `sapUiMediumMargin` + + )->ele( `content` + )->ele( `VBox` + )->a( n = `class` v = `sapUiMediumMargin` + + )->tag( `Label` + )->a( n = `text` v = `Folder name:` + )->tag( `Input` + )->a( n = `id` v = `folderNameInput` + )->a( n = `value` v = client->_bind( folder_name ) + )->a( n = `placeholder` v = `Enter folder name` + + )->end( + )->end( + )->ele( `buttons` + )->tag( `Button` + )->a( n = `text` v = `Create` + )->a( n = `type` v = `Emphasized` + )->a( n = `press` v = client->_event( `CREATE_FOLDER` ) + )->tag( `Button` + )->a( n = `text` v = `Cancel` + )->a( n = `press` v = client->follow_up_action( client->cs_event-popup_close ) ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD popup_rename_display. + + " renameFolderWithDialog builds this Dialog in the controller + DATA(popup) = z2ui5_cl_ui5_view_builder=>factory( ). + + popup->ele( n = `FragmentDefinition` ns = `core` + )->a( n = `xmlns` v = `sap.m` + )->a( n = `xmlns:core` v = `sap.ui.core` + + )->ele( `Dialog` + )->a( n = `title` v = `Rename Folder` + + )->ele( `content` + )->tag( `Input` + )->a( n = `value` v = client->_bind( rename_name ) + )->a( n = `width` v = `100%` + + )->end( + )->ele( `beginButton` + )->tag( `Button` + )->a( n = `text` v = `OK` + )->a( n = `type` v = `Emphasized` + )->a( n = `press` v = client->_event( `RENAME_FOLDER_OK` ) + + )->end( + )->ele( `endButton` + )->tag( `Button` + )->a( n = `text` v = `Cancel` + )->a( n = `press` v = client->follow_up_action( client->cs_event-popup_close ) ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get_event( ). + + WHEN `SELECTION`. + selection_set( client->get_event_arg( ) ). + + WHEN `DOWNLOAD`. + download( ). + + WHEN `ADD_FOLDER`. + " onCreateFolder - the dialog opens with an empty name + folder_name = ``. + popup_folder_display( ). + + WHEN `CREATE_FOLDER`. + " onCreateFolderDialogPress - an empty name keeps the dialog open + DATA(name) = condense( folder_name ). + IF name IS INITIAL. + client->message_toast_display( `Please enter a folder name` ). + RETURN. + ENDIF. + client->popup_destroy( ). + folder_create( name ). + + WHEN `RENAME`. + " onRenameItem - the plugin renames a file (the press's second handler); + " a folder is renamed in the controller's own dialog + IF lines( t_selected ) <> 1. + client->message_toast_display( `Please select exactly one item to rename` ). + RETURN. + ENDIF. + DATA(selected) = t_docs[ documentid = t_selected[ 1 ] ]. + IF selected-isdirectory = abap_true. + rename_id = selected-documentid. + rename_name = selected-filename. + popup_rename_display( ). + ENDIF. + + WHEN `RENAME_FOLDER_OK`. + DATA(folder) = REF #( t_docs[ documentid = rename_id ] ). + DATA(new_name) = condense( rename_name ). + IF new_name IS NOT INITIAL AND new_name <> folder->filename. + folder->filename = new_name. + rows_build( ). + client->message_toast_display( `Folder renamed successfully` ). + ENDIF. + client->popup_destroy( ). + + WHEN `RENAMED`. + " onDocumentRenamedSuccess + DATA(renamed) = doc_at_path( client->get_event_arg( ) ). + IF renamed IS NOT INITIAL. + t_docs[ documentid = renamed ]-filename = client->get_event_arg( 2 ). + rows_build( ). + client->message_toast_display( text = `File renamed successfully` duration = `2000` ). + ENDIF. + + WHEN `OPEN_FOLDER`. + " onItemPress - navigateToFolder + folder_open( doc_at_path( client->get_event_arg( ) ) ). + + WHEN `CRUMB`. + " onBreadcrumbPress - a link is one level of the history + DATA(crumb) = path_indices( client->get_event_arg( ) ). + IF crumb IS INITIAL OR crumb[ 1 ] > lines( t_history ). + RETURN. + ENDIF. + DATA(entry) = t_history[ crumb[ 1 ] ]. + folder_open( entry-path ). + + WHEN `REMOVE_ROW`. + " onRemoveItemHandler - files only, the button is hidden on folders + DATA(doc) = t_docs[ documentid = doc_at_path( client->get_event_arg( ) ) ]. + IF doc-isdirectory = abap_true. + client->message_toast_display( `Folder deletion is not allowed` ). + RETURN. + ENDIF. + remove_id = doc-documentid. + client->message_box_display( text = |Are you sure you want to delete the file '{ doc-filename }'?| + type = `confirm` + title = `Delete File` + onclose = `REMOVE_CLOSE` ). + + WHEN `REMOVE_CLOSE`. + " the file is filtered out of the OPEN folder's items + IF client->get_event_arg( ) = `OK`. + DATA(removed) = t_docs[ documentid = remove_id ]-filename. + DELETE t_docs WHERE documentid = remove_id AND parentid = current_id. + rows_build( ). + client->message_toast_display( |File '{ removed }' deleted successfully| ). + ENDIF. + + WHEN `REMOVE_ALL`. + remove_all_ask( ). + + WHEN `REMOVE_ALL_CLOSE`. + IF client->get_event_arg( ) = `OK`. + remove_selected( ). + ENDIF. + + WHEN `UPLOAD`. + " the mock server files the upload into the open folder, after its folders + new_no = new_no + 1. + DATA(file) = VALUE ty_s_doc( parentid = current_id + documentid = |upload-{ new_no }| + filename = client->get_event_arg( ) + mimetype = client->get_event_arg( 2 ) + size = CONV #( client->get_event_arg( 3 ) ) + uploadeddate = |{ sy-datum DATE = ISO }| + uploadedby = `Current User` + uploadstate = `Complete` + trustedsource = abap_true ). + row_derive( CHANGING row = file ). + doc_insert( doc = file after_folders = abap_true ). + rows_build( ). + client->message_toast_display( `Upload completed successfully.` ). + + ENDCASE. + + ENDMETHOD. + + + METHOD selection_set. + + " onSelectionChange - files and folders are told apart, and Remove All needs + " every item of the open folder selected + t_selected = VALUE #( ). + IF paths IS NOT INITIAL. + SPLIT paths AT `,` INTO TABLE DATA(selected_paths). + LOOP AT selected_paths INTO DATA(path). + DATA(id) = doc_at_path( path ). + IF id IS NOT INITIAL. + INSERT id INTO TABLE t_selected. + ENDIF. + ENDLOOP. + ENDIF. + DATA(files) = 0. + DATA(folders) = 0. + LOOP AT t_selected INTO id. + IF t_docs[ documentid = id ]-isdirectory = abap_true. + folders = folders + 1. + ELSE. + files = files + 1. + ENDIF. + ENDLOOP. + DATA(total) = children_count( current_id ). + removeall_enabled = xsdbool( t_selected IS NOT INITIAL AND lines( t_selected ) = total AND total > 0 ). + IF files > 0 AND folders = 0. + download_enabled = abap_true. + rename_enabled = xsdbool( files = 1 ). + ELSEIF folders > 0 AND files = 0. + download_enabled = abap_false. + rename_enabled = xsdbool( folders = 1 ). + ELSE. + download_enabled = abap_false. + rename_enabled = abap_false. + ENDIF. + + ENDMETHOD. + + + METHOD download. + + " onDownloadFiles - one click per selected file with a URL + DATA(files) = 0. + LOOP AT t_selected INTO DATA(id). + DATA(doc) = t_docs[ documentid = id ]. + IF doc-isdirectory = abap_true. + CONTINUE. + ENDIF. + files = files + 1. + IF doc-url IS NOT INITIAL. + client->follow_up_action( val = client->cs_event-download_b64_file + t_arg = VALUE #( ( doc-url ) ( doc-filename ) ) ). + ENDIF. + ENDLOOP. + IF files = 0. + client->message_toast_display( `No files selected for download` ). + RETURN. + ENDIF. + client->message_toast_display( |Download initiated for { files } file(s)| ). + + ENDMETHOD. + + + METHOD folder_create. + + " createFolderWithName - into the one selected folder, else the open one + DATA(target) = current_id. + DATA(inside) = ``. + DATA(selected_folders) = 0. + LOOP AT t_selected INTO DATA(id). + IF t_docs[ documentid = id ]-isdirectory = abap_true. + selected_folders = selected_folders + 1. + target = id. + ENDIF. + ENDLOOP. + IF selected_folders = 1. + inside = t_docs[ documentid = target ]-filename. + ELSE. + target = current_id. + ENDIF. + IF line_exists( t_docs[ parentid = target filename = name ] ). + client->message_toast_display( `A folder with this name already exists` ). + RETURN. + ENDIF. + new_no = new_no + 1. + DATA(folder) = VALUE ty_s_doc( parentid = target + documentid = |folder-new-{ new_no }| + filename = name + isdirectory = abap_true + uploadeddate = |{ sy-datum DATE = ISO }| + uploadedby = `Current User` + status = `Active` + documenttype = `Folder` + color = `#ffffff` + bgcolor = `#30914c` + uploadstate = `Complete` ). + row_derive( CHANGING row = folder ). + doc_insert( doc = folder after_folders = abap_false ). + rows_build( ). + IF selected_folders = 1. + client->message_toast_display( |New folder created inside '{ inside }': { name }| ). + ELSE. + client->message_toast_display( |New folder created: { name }| ). + ENDIF. + + ENDMETHOD. + + + METHOD folder_open. + + " bindTableItems on the folder's items, the Breadcrumbs history up to its + " parent and the folder as the current location; initial is the root + current_id = id. + t_history = VALUE #( ). + IF id IS INITIAL. + currentlocationtext = `Attachments`. + ELSE. + currentlocationtext = t_docs[ documentid = id ]-filename. + DATA(parent) = t_docs[ documentid = id ]-parentid. + WHILE parent IS NOT INITIAL. + INSERT VALUE #( name = t_docs[ documentid = parent ]-filename path = parent ) INTO t_history INDEX 1. + parent = t_docs[ documentid = parent ]-parentid. + ENDWHILE. + INSERT VALUE #( name = `Attachments` ) INTO t_history INDEX 1. + ENDIF. + rows_build( ). + " the rebound rows start without a selection + t_selected = VALUE #( ). + download_enabled = abap_false. + rename_enabled = abap_false. + removeall_enabled = abap_false. + client->follow_up_action( val = client->cs_event-control_by_id + t_arg = VALUE #( ( `table-uploadSet` ) ( `clearSelection` ) ) ). + + ENDMETHOD. + + + METHOD remove_all_ask. + + " onRemoveAllHandler - only when every item of the open folder is selected + IF t_selected IS INITIAL. + client->message_toast_display( `Please select items to delete` ). + RETURN. + ENDIF. + IF lines( t_selected ) <> children_count( current_id ). + client->message_toast_display( `Please select all items to use Remove All` ). + RETURN. + ENDIF. + client->message_box_display( text = |Are you sure you want to delete ALL { lines( t_selected ) } item(s) in this folder?| + type = `confirm` + title = `Delete All Items` + onclose = `REMOVE_ALL_CLOSE` ). + + ENDMETHOD. + + + METHOD remove_selected. + + " deleteAllSelectedItems - files and folders of the open folder + DATA(deleted) = 0. + LOOP AT t_selected INTO DATA(id). + IF line_exists( t_docs[ documentid = id parentid = current_id ] ). + doc_delete( id ). + deleted = deleted + 1. + ENDIF. + ENDLOOP. + IF deleted = 0. + client->message_toast_display( `No items were found to delete` ). + RETURN. + ENDIF. + t_selected = VALUE #( ). + rows_build( ). + client->message_toast_display( |{ deleted } item(s) deleted successfully| ). + + ENDMETHOD. + + + METHOD rows_build. + + " the open folder's subtree as the TreeTable's rows + t_items = VALUE #( ). + LOOP AT t_docs INTO DATA(doc1) WHERE parentid = current_id. + DATA(level1) = CORRESPONDING ty_s_level1( doc1 ). + LOOP AT t_docs INTO DATA(doc2) WHERE parentid = doc1-documentid. + DATA(level2) = CORRESPONDING ty_s_level2( doc2 ). + LOOP AT t_docs INTO DATA(doc3) WHERE parentid = doc2-documentid. + DATA(level3) = CORRESPONDING ty_s_level3( doc3 ). + LOOP AT t_docs INTO DATA(doc4) WHERE parentid = doc3-documentid. + INSERT CORRESPONDING ty_s_level4( doc4 ) INTO TABLE level3-items. + ENDLOOP. + INSERT level3 INTO TABLE level2-items. + ENDLOOP. + INSERT level2 INTO TABLE level1-items. + ENDLOOP. + INSERT level1 INTO TABLE t_items. + ENDLOOP. + + ENDMETHOD. + + + METHOD children_count. + + LOOP AT t_docs TRANSPORTING NO FIELDS WHERE parentid = parent. + result = result + 1. + ENDLOOP. + + ENDMETHOD. + + + METHOD doc_at_path. + + " a row's binding path holds its position on every level below the open + " folder: /T_ITEMS/0/ITEMS/1 is the 2nd child of its 1st item + DATA(parent) = current_id. + DATA(levels) = path_indices( path ). + LOOP AT levels INTO DATA(index). + result = ``. + DATA(position) = 0. + LOOP AT t_docs INTO DATA(doc) WHERE parentid = parent. + position = position + 1. + IF position = index. + result = doc-documentid. + EXIT. + ENDIF. + ENDLOOP. + IF result IS INITIAL. + RETURN. + ENDIF. + parent = result. + ENDLOOP. + + ENDMETHOD. + + + METHOD doc_delete. + + " the node and, below a folder, everything in it + LOOP AT t_docs INTO DATA(child) WHERE parentid = id. + doc_delete( child-documentid ). + ENDLOOP. + DELETE t_docs WHERE documentid = id. + + ENDMETHOD. + + + METHOD doc_insert. + + " unshift into the parent's items - or, for an uploaded file, in front of + " its first file (behind the folders) + LOOP AT t_docs INTO DATA(sibling) WHERE parentid = doc-parentid. + IF after_folders = abap_false OR sibling-isdirectory = abap_false. + INSERT doc INTO t_docs INDEX sy-tabix. + RETURN. + ENDIF. + ENDLOOP. + INSERT doc INTO TABLE t_docs. + + ENDMETHOD. + + + METHOD path_indices. + + SPLIT path AT `/` INTO TABLE DATA(parts). + LOOP AT parts INTO DATA(part). + IF part IS NOT INITIAL AND part CO `0123456789`. + INSERT CONV i( part ) + 1 INTO TABLE result. + ENDIF. + ENDLOOP. + + ENDMETHOD. + + + METHOD row_derive. + + " getIconSrc - a folder icon for a directory - and formatFileSize + IF row-isdirectory = abap_true. + row-icon = `sap-icon://folder-full`. + ELSE. + row-icon = icon_for( mediatype = row-mimetype filename = row-filename ). + ENDIF. + row-size_units = size_with_units( row-size ). + + ENDMETHOD. + + + METHOD icon_for. + + " UploadSetwithTable.getIconForFileType: IconPool's media type table, or the + " file extension when there is no media type + IF mediatype IS NOT INITIAL. + DATA(type) = to_lower( mediatype ). + CASE type. + WHEN `application/msword` OR `application/vnd.google-apps.document` OR `application/rtf` + OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document`. + result = `sap-icon://doc-attachment`. + WHEN `application/pdf`. + result = `sap-icon://pdf-attachment`. + WHEN `application/msexcel` OR `application/vnd.ms-excel` OR `application/vnd.google-apps.spreadsheet` + OR `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` + OR `application/vnd.ms-excel.sheet.macroenabled.12` + OR `application/vnd.openxmlformats-officedocument.spreadsheetml.template` + OR `application/vnd.ms-excel.template.macroenabled.12` + OR `application/vnd.ms-excel.sheet.binary.macroenabled.12` + OR `application/vnd.ms-excel.addin.macroenabled.12`. + result = `sap-icon://excel-attachment`. + WHEN `application/vnd.ms-powerpoint` OR `application/vnd.google-apps.presentation` OR `application/mspowerpoint` + OR `application/vnd.openxmlformats-officedocument.presentationml.presentation` + OR `application/vnd.openxmlformats-officedocument.presentationml.slideshow`. + result = `sap-icon://ppt-attachment`. + WHEN `application/xml` OR `application/xhtml+xml` OR `application/x-httpd-php` OR `application/x-javascript` + OR `text/html`. + result = `sap-icon://attachment-html`. + WHEN `application/gzip` OR `application/x-rar-compressed` OR `application/x-tar` OR `application/zip`. + result = `sap-icon://attachment-zip-file`. + WHEN `audio/mpeg` OR `audio/voxware` OR `audio/x-aiff` OR `audio/x-midi` OR `audio/x-mpeg` OR `audio/x-m4a` + OR `audio/x-pn-realaudio` OR `audio/x-pn-realaudio-plugin` OR `audio/x-qt-stream` OR `audio/x-wav`. + result = `sap-icon://attachment-audio`. + WHEN `image/png` OR `image/tiff` OR `image/bmp` OR `image/jpeg` OR `image/gif`. + result = `sap-icon://attachment-photo`. + WHEN `text/plain` OR `text/comma-separated-values` OR `text/css` OR `text/javascript` OR `text/richtext` + OR `text/rtf` OR `text/tab-separated-values` OR `text/xml`. + result = `sap-icon://attachment-text-file`. + WHEN `video/mpeg` OR `video/mp4` OR `video/quicktime` OR `video/x-msvideo` OR `application/x-shockwave-flash`. + result = `sap-icon://attachment-video`. + WHEN OTHERS. + result = `sap-icon://document`. + ENDCASE. + RETURN. + ENDIF. + + DATA(dot) = find( val = filename sub = `.` occ = -1 ). + IF dot < 0. + result = `sap-icon://document`. + RETURN. + ENDIF. + DATA(extension) = to_lower( substring( val = filename off = dot + 1 ) ). + CASE extension. + WHEN `bmp` OR `jpg` OR `jpeg` OR `png`. + result = `sap-icon://card`. + WHEN `csv` OR `xls` OR `xlsx`. + result = `sap-icon://excel-attachment`. + WHEN `doc` OR `docx` OR `odt`. + result = `sap-icon://doc-attachment`. + WHEN `pdf`. + result = `sap-icon://pdf-attachment`. + WHEN `ppt` OR `pptx`. + result = `sap-icon://ppt-attachment`. + WHEN `txt`. + result = `sap-icon://document-text`. + WHEN OTHERS. + result = `sap-icon://document`. + ENDCASE. + + ENDMETHOD. + + + METHOD size_with_units. + + " UploadSetwithTable.getFileSizeWithUnits - KB below a megabyte, then MB, then GB + CONSTANTS kilobyte TYPE i VALUE 1024. + DATA(bytes) = CONV decfloat34( size ). + IF size < kilobyte * kilobyte. + result = |{ bytes / kilobyte DECIMALS = 2 } KB|. + ELSEIF size < kilobyte * kilobyte * kilobyte. + result = |{ bytes / kilobyte / kilobyte DECIMALS = 2 } MB|. + ELSE. + result = |{ bytes / kilobyte / kilobyte / kilobyte DECIMALS = 2 } GB|. + ENDIF. + + ENDMETHOD. + + METHOD model_init. - " TODO seed the default model (see the sample's controller / JSON mock) - RETURN. + " model/documents.json, the whole tree flattened - the document URLs point at + " the OpenUI5 host + t_docs = VALUE #( + ( documentid = `folder-1` filename = `My Documents` isdirectory = abap_true + size = 0 uploadeddate = `2023-01-15` uploadedby = `System` status = `Active` documenttype = `Folder` + color = `#ffffff` bgcolor = `#30914c` ) + ( parentid = `folder-1` documentid = `folder-images` filename = `Images` isdirectory = abap_true + size = 0 uploadeddate = `2023-02-10` uploadedby = `User` status = `Active` documenttype = `Folder` + color = `#ffffff` bgcolor = `#30914c` ) + ( parentid = `folder-images` documentid = `img-001` filename = `Animation.gif` mimetype = `image/gif` isdirectory = abap_false + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Animation.gif` + size = 1048576 uploadeddate = `2023-03-05` uploadedby = `John Doe` status = `Complete` documenttype = `Image` + previewable = abap_true ) + ( parentid = `folder-images` documentid = `folder-screenshots` filename = `Screenshots` isdirectory = abap_true + size = 0 uploadeddate = `2023-04-01` uploadedby = `User` status = `Active` documenttype = `Folder` + color = `#ffffff` bgcolor = `#30914c` ) + ( parentid = `folder-screenshots` documentid = `screenshot-001` filename = `Video.mp4` mimetype = `video/mp4` isdirectory = abap_false + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Video.mp4` + size = 42000000 uploadeddate = `2023-04-01` uploadedby = `Current User` status = `Complete` documenttype = `Video` + previewable = abap_true ) + ( parentid = `folder-1` documentid = `folder-reports` filename = `Reports` isdirectory = abap_true + size = 0 uploadeddate = `2023-02-15` uploadedby = `Admin` status = `Active` documenttype = `Folder` + color = `#ffffff` bgcolor = `#30914c` ) + ( parentid = `folder-reports` documentid = `report-001` filename = `Instructions.pdf` mimetype = `application/pdf` isdirectory = abap_false + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Instructions.pdf` + size = 30000 uploadeddate = `2023-04-01` uploadedby = `Finance Team` status = `Complete` documenttype = `Document` + previewable = abap_true ) + ( parentid = `folder-reports` documentid = `report-002` filename = `Business Plan Agenda.doc` mimetype = `application/msword` isdirectory = abap_false + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Business Plan Agenda.doc` + size = 200000 uploadeddate = `2023-04-02` uploadedby = `Planning Team` status = `Complete` documenttype = `Document` + previewable = abap_true ) + ( parentid = `folder-1` documentid = `doc-002` filename = `Third Quarter Results.ppt` mimetype = `application/vnd.ms-powerpoint` isdirectory = abap_false + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Third Quarter Results.ppt` + size = 3145728 uploadeddate = `2023-03-15` uploadedby = `Support Team` status = `Complete` documenttype = `Presentation` + previewable = abap_true ) + ( documentid = `doc-001` filename = `Document.txt` mimetype = `text/plain` isdirectory = abap_false + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Document.txt` + size = 420 uploadeddate = `2023-02-20` uploadedby = `User` status = `Complete` documenttype = `Document` + previewable = abap_true ) + ( documentid = `doc-003` filename = `Business Plan Topics.xls` mimetype = `application/vnd.ms-excel` isdirectory = abap_false + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Business Plan Topics.xls` + size = 1048576 uploadeddate = `2023-03-20` uploadedby = `Marketing` status = `In work` documenttype = `Spreadsheet` + previewable = abap_true ) + ( documentid = `doc-004` filename = `sample-zip-file.zip` mimetype = `application/zip` isdirectory = abap_false + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/sample-zip-file.zip` + size = 42000 uploadeddate = `2023-03-25` uploadedby = `Development Team` status = `Complete` documenttype = `Archive` ) + ( documentid = `folder-temp` filename = `Temporary Files` isdirectory = abap_true + size = 0 uploadeddate = `2023-04-01` uploadedby = `System` status = `Active` documenttype = `Folder` + color = `#ffffff` bgcolor = `#30914c` ) + ( parentid = `folder-temp` documentid = `temp-001` filename = `Notes.txt` mimetype = `text/plain` isdirectory = abap_false + url = `https://sdk.openui5.org/test-resources/sap/m/UploadSetwithTableSampleFiles/Notes.txt` + size = 2048 uploadeddate = `2023-04-01` uploadedby = `System` status = `Complete` documenttype = `Document` + previewable = abap_true ) ). + LOOP AT t_docs REFERENCE INTO DATA(doc). + row_derive( CHANGING row = doc->* ). + ENDLOOP. + folder_open( `` ). ENDMETHOD. diff --git a/src/02/04/z2ui5_cl_smpc_app_662.clas.abap b/src/02/04/z2ui5_cl_smpc_app_662.clas.abap index e0150f7bf..5c88998d0 100644 --- a/src/02/04/z2ui5_cl_smpc_app_662.clas.abap +++ b/src/02/04/z2ui5_cl_smpc_app_662.clas.abap @@ -1,3 +1,6 @@ +" @keywords avatargroup avatar group sap.f slider verticallayout label avatargroupitem popover card hbox vbox +" @summary This sample demonstrates the different group types and item sizes of the AvatarGroup control. +" @origin sap.f.sample.AvatarGroup - https://sdk.openui5.org/entity/sap.f.AvatarGroup/sample/sap.f.sample.AvatarGroup (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_662 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/04/z2ui5_cl_smpc_app_663.clas.abap b/src/02/04/z2ui5_cl_smpc_app_663.clas.abap index 4206ce315..b2aadc388 100644 --- a/src/02/04/z2ui5_cl_smpc_app_663.clas.abap +++ b/src/02/04/z2ui5_cl_smpc_app_663.clas.abap @@ -1,3 +1,6 @@ +" @keywords sidepanel side panel sap.f button vbox label switch select listitem text sidepanelitem +" @summary Demonstrates the basic usage of Side Panel. +" @origin sap.f.sample.SidePanel - https://sdk.openui5.org/entity/sap.f.SidePanel/sample/sap.f.sample.SidePanel (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_663 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/04/z2ui5_cl_smpc_app_664.clas.abap b/src/02/04/z2ui5_cl_smpc_app_664.clas.abap index 9ac4f0e6e..e7e683d71 100644 --- a/src/02/04/z2ui5_cl_smpc_app_664.clas.abap +++ b/src/02/04/z2ui5_cl_smpc_app_664.clas.abap @@ -1,3 +1,6 @@ +" @keywords sidepanel side panel sap.f sidepaneloverflow button vbox label switch text sidepanelitem +" @summary Demonstrates the usage of Side Panel with overflow menu on desktop and tablet devices. +" @origin sap.f.sample.SidePanelOverflow - https://sdk.openui5.org/entity/sap.f.SidePanel/sample/sap.f.sample.SidePanelOverflow (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_664 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/04/z2ui5_cl_smpc_app_665.clas.abap b/src/02/04/z2ui5_cl_smpc_app_665.clas.abap index 89f7cd171..4b7ec02a1 100644 --- a/src/02/04/z2ui5_cl_smpc_app_665.clas.abap +++ b/src/02/04/z2ui5_cl_smpc_app_665.clas.abap @@ -1,3 +1,6 @@ +" @keywords sidepanel side panel sap.f sidepanelresizable button vbox label switch text sidepanelitem input +" @summary Demonstrates the usage of resizable Side Panel. +" @origin sap.f.sample.SidePanelResizable - https://sdk.openui5.org/entity/sap.f.SidePanel/sample/sap.f.sample.SidePanelResizable (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_665 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/04/z2ui5_cl_smpc_app_666.clas.abap b/src/02/04/z2ui5_cl_smpc_app_666.clas.abap index a0da45e4b..a29a1c3b7 100644 --- a/src/02/04/z2ui5_cl_smpc_app_666.clas.abap +++ b/src/02/04/z2ui5_cl_smpc_app_666.clas.abap @@ -1,3 +1,6 @@ +" @keywords productswitch product switch sap.f productswitchitemwithimagesrc verticallayout button text responsivepopover productswitchitem +" @summary This sample demonstrates the usage of Product Switch Item with imageSrc, configurable by the app developer. +" @origin sap.f.sample.ProductSwitchItemWithImageSrc - https://sdk.openui5.org/entity/sap.f.ProductSwitch/sample/sap.f.sample.ProductSwitchItemWithImageSrc (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_666 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/04/z2ui5_cl_smpc_app_667.clas.abap b/src/02/04/z2ui5_cl_smpc_app_667.clas.abap index e51daf256..23141db42 100644 --- a/src/02/04/z2ui5_cl_smpc_app_667.clas.abap +++ b/src/02/04/z2ui5_cl_smpc_app_667.clas.abap @@ -1,3 +1,6 @@ +" @keywords herobanner hero banner sap.f herobannerbasic vbox +" @summary A basic Hero Banner with a header text and overline text. +" @origin sap.f.sample.HeroBannerBasic - https://sdk.openui5.org/entity/sap.f.HeroBanner/sample/sap.f.sample.HeroBannerBasic (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_667 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/04/z2ui5_cl_smpc_app_668.clas.abap b/src/02/04/z2ui5_cl_smpc_app_668.clas.abap index fa4a5c844..04ea67281 100644 --- a/src/02/04/z2ui5_cl_smpc_app_668.clas.abap +++ b/src/02/04/z2ui5_cl_smpc_app_668.clas.abap @@ -1,3 +1,6 @@ +" @keywords herobanner hero banner sap.f herobannercolumnsratio html title vbox button text card header +" @summary Demonstrates the three columnsRatio options: single column (no endContent), Equal, and FirstWider. +" @origin sap.f.sample.HeroBannerColumnsRatio - https://sdk.openui5.org/entity/sap.f.HeroBanner/sample/sap.f.sample.HeroBannerColumnsRatio (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_668 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/04/z2ui5_cl_smpc_app_669.clas.abap b/src/02/04/z2ui5_cl_smpc_app_669.clas.abap index 29e57fb41..23da86036 100644 --- a/src/02/04/z2ui5_cl_smpc_app_669.clas.abap +++ b/src/02/04/z2ui5_cl_smpc_app_669.clas.abap @@ -1,3 +1,6 @@ +" @keywords herobanner hero banner sap.f herobannerheaderblockandactionsplacement vbox button card header title +" @summary Demonstrates actionsPlacement and headerBlockPlacement properties for controlling the position of the header and actions. +" @origin sap.f.sample.HeroBannerHeaderBlockAndActionsPlacement - https://sdk.openui5.org/entity/sap.f.HeroBanner/sample/sap.f.sample.HeroBannerHeaderBlockAndActionsPlacement (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_669 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/04/z2ui5_cl_smpc_app_670.clas.abap b/src/02/04/z2ui5_cl_smpc_app_670.clas.abap index 234e2f9a9..1ebd7a60f 100644 --- a/src/02/04/z2ui5_cl_smpc_app_670.clas.abap +++ b/src/02/04/z2ui5_cl_smpc_app_670.clas.abap @@ -1,3 +1,6 @@ +" @keywords herobanner hero banner sap.f herobannerintegrationcard vbox button card +" @summary Demonstrates the use of sap.ui.integration.widgets.Card inside both the startContent (default slot) and endContent aggregations of the Hero Banner. +" @origin sap.f.sample.HeroBannerIntegrationCard - https://sdk.openui5.org/entity/sap.f.HeroBanner/sample/sap.f.sample.HeroBannerIntegrationCard (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_670 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/02/04/z2ui5_cl_smpc_app_671.clas.abap b/src/02/04/z2ui5_cl_smpc_app_671.clas.abap index 0ad9fb8a2..8f921d15c 100644 --- a/src/02/04/z2ui5_cl_smpc_app_671.clas.abap +++ b/src/02/04/z2ui5_cl_smpc_app_671.clas.abap @@ -1,3 +1,6 @@ +" @keywords herobanner hero banner sap.f herobannerusecases html title vbox button text card header +" @summary A collection of common Hero Banner use cases: header actions only, content with actions, actions below header, and header at bottom. +" @origin sap.f.sample.HeroBannerUseCases - https://sdk.openui5.org/entity/sap.f.HeroBanner/sample/sap.f.sample.HeroBannerUseCases (status: generated - machine-written, not yet reviewed) CLASS z2ui5_cl_smpc_app_671 DEFINITION PUBLIC. PUBLIC SECTION. diff --git a/src/z2ui5_cl_smpc_app_000.clas.abap b/src/z2ui5_cl_smpc_app_000.clas.abap index d77c5397a..bf065af4c 100644 --- a/src/z2ui5_cl_smpc_app_000.clas.abap +++ b/src/z2ui5_cl_smpc_app_000.clas.abap @@ -998,15 +998,41 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. DATA text1 TYPE string. DATA text2 TYPE string. + text1 = `NOTE: Three JSONModels are folded onto the one default model: the named items model (model/avatargroup.json, {items>/content} -> {/T_CONTENT}, totalCount kept as a non-bound attribute), the unnamed` && + ` settings model ({/viewPortPercentWidth} -> {/VIEWPORTPERCENTWIDTH}, {/popoverTitle} -> {/POPOVERTITLE}), the personData model (a structure S_PERSON, bound absolutely as {/S_PERSON/...} since there is` && + ` no element binding) and the groupedAvatars model (T_GROUPED, the Grid's bound content). Same data and leaf names, so a prefix-drop. The JSON's per-row tooltip key ('1'..'15') is bound nowhere and` && + ` stays out of the row type. // NOTE: onSliderMoved reads the slider value and calls setWidth( value + '%' ) on the VerticalLayout vl1. The port binds VerticalLayout.width to VL_WIDTH and computes the` && + ` string in on_event on a liveChange round-trip carrying check_queue_last and check_no_busy (the per-drag-step wire shape), so the backend ends on the slider's last value. VIEWPORTPERCENTWIDTH is` && + ` seeded 100 and VL_WIDTH '100%' as in onInit / the view. // NOTE: onIndividualPress / onGroupPress / _getContent / _getAvatarModel are rebuilt in ABAP. The press event transports`. + text1 = text1 && ` overflowButtonPressed, avatarsDisplayed, the eventSource id (the popover anchor) and the pressed item's row index (${$parameters>/eventSource}.getBindingContext().getPath().split('/').pop()); the` && + ` Group-type AvatarGroup anchors at $event.oSource.sId as onGroupPress anchors at oEvent.getSource(). The popover rows are the avatars from avatarsDisplayed on (all for Group), the title 'Team Members` && + ` ()' and the contentHeight formula ((n DIV 2 + n MOD 2) * 68 + 48 px) are computed in ABAP. The backgroundColor _getAvatarModel reads off AvatarGroupItem.getAvatarColor( ) is derived in ABAP from` && + ` the rule AvatarGroup.addItem applies (Accent1..Accent10 by item position, round robin) instead of being read from the control - same value, no control call. // IMPROVISED:` && + ` IndividualPopover.fragment.xml and GroupPopover.fragment.xml are built in on_event (popover_display) and Card.fragment.xml is inlined into both, as the original's two core:Fragment references load it` && + ` twice - so the port carries the Card subtree twice (control extra Card, VerticalLayout, HBox, Avatar, VBox, Title, Text, Label controls) and drops both core:Fragment references. Each popover is`. + text1 = text1 && ` rebuilt per press instead of being cached, which also makes oNavCon.to(oMainPage) on every open implicit (a fresh NavContainer starts on its first page). openBy(` && + ` ).addStyleClass('sapFAvatarGroupPopover') becomes a class attribute on each Popover. onAvatarPress's setContentWidth('450px') is a no-op (the Popover already declares 450px) and its` && + ` oGroupPopover.focus( ) is dropped; the NavContainer moves with control_by_id to( detail ) / back( ) in the popover slot, the contentHeight follows the bound POPOVER_HEIGHT (375px on the detail page,` && + ` the computed height after navButtonPress). // NOTE: GroupPopover.fragment.xml binds the grid Avatar's fallbackIcon to {personData>/fallbackIcon} - the individual personData model, not the row's` && + ` groupedAvatars model - so every grid avatar shows the fallback icon of whichever person was last opened. Ported verbatim as the absolute {/S_PERSON/FALLBACKICON} binding rather than repaired.` && + ` S_PERSON-BACKGROUNDCOLOR is seeded Accent6 (the sap.m.Avatar default): the empty personData model leaves the property undefined, while an empty string on the enum-typed backgroundColor would make UI5`. + text1 = text1 && ` reject the whole popover. // NOTE: The two avatar image src values are host-absolutized to https://sdk.openui5.org/test-resources/sap/f/images/Woman_avatar_01.png and Woman_avatar_02.png (the JSON's` && + ` ./test-resources/... resolves against the Demo Kit). Row fields the JSON omits (initials, src, fallbackIcon) are left initial - all three are plain string/URI properties whose empty value renders` && + ` like undefined. // POST-1.71: the sap.f.AvatarGroup and sap.f.AvatarGroupItem controls (since UI5 1.73) are newer than 1.71 and are the whole point of this sample - kept 1:1. The inlined card also` && + ` uses sap.m.Avatar (@since 1.73, its press @since 1.73) and the Popover and Page titleAlignment property (@since 1.72), so the app needs a UI5 release >= 1.73.`. result = VALUE #( ( module = `sap.f` control = `sap.f.AvatarGroup` name = `AvatarGroup` class = `z2ui5_cl_smpc_app_662` path = `src/02/04/z2ui5_cl_smpc_app_662.clas.abap` - score = 1 - score_tip = `Rating 1 of 5 - how much attention this port deserves (complexity + rework + review + test-priority). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` + score = 5 + score_tip = `Rating 5 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 reworked, live-test). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close` && + ` look.` since = `1.73` since_post171 = abap_true is_post171 = abap_true - notes = `POST-1.71: the sap.f.AvatarGroup control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73.` - post171 = `the sap.f.AvatarGroup control (since UI5 1.73) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.73.` ) + notes = text1 + post171 = `the sap.f.AvatarGroup and sap.f.AvatarGroupItem controls (since UI5 1.73) are newer than 1.71 and are the whole point of this sample - kept 1:1. The inlined card also uses sap.m.Avatar (@since 1.73,` && + ` its press @since 1.73) and the Popover and Page titleAlignment property (@since 1.72), so the app needs a UI5 release >= 1.73.` ) ). + + result = VALUE #( BASE result ( module = `sap.f` control = `sap.f.Card` name = `Card` class = `z2ui5_cl_smpc_app_117` path = `src/01/04/z2ui5_cl_smpc_app_117.clas.abap` score = 3 score_tip = `Rating 3 of 5 - how much attention this port deserves (complexity + rework + review + test-priority: complex, 1 noted). 1 = simple faithful 1:1, 5 = complex / reworked / worth a close look.` @@ -1753,50 +1779,106 @@ CLASS z2ui5_cl_smpc_app_000 IMPLEMENTATION. since = `1.152` since_post171 = abap_true is_post171 = abap_true - notes = `POST-1.71: the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152.` - post171 = `the sap.f.HeroBanner control (since UI5 1.152) is newer than 1.71 and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152.` ) + notes = `POST-1.71: the sap.f.HeroBanner control is newer than 1.71 (sap/f/HeroBanner.js: @ui5-experimental-since 1.152 - an EXPERIMENTAL wrapper around the UI5 Web Components fiori HeroBanner, extending` && + ` sap.ui.core.webc.WebComponent) and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152.` + post171 = `the sap.f.HeroBanner control is newer than 1.71 (sap/f/HeroBanner.js: @ui5-experimental-since 1.152 - an EXPERIMENTAL wrapper around the UI5 Web Components fiori HeroBanner, extending` && + ` sap.ui.core.webc.WebComponent) and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152.` ) ). + + text1 = `POST-1.71: the sap.f.HeroBanner control is newer than 1.71 (sap/f/HeroBanner.js: @ui5-experimental-since 1.152 - an EXPERIMENTAL wrapper around the UI5 Web Components fiori HeroBanner, extending` && + ` sap.ui.core.webc.WebComponent) and is the whole point of this sample - kept 1:1, the app needs a UI5 release >= 1.152. HeroBanner members used: the actions, startContent and endContent aggregations` && + ` and the columnsRatio property with its sap.f.HeroBannerColumnsRatio values Equal and FirstWider - all @ui5-experimental-since 1.152 with the control. // NOTE: The sample's main.css (one rule,` && + ` .heroBannerWhiteText { color: var(--sapTextInvertedColor) }, the class the startContent Text carries) is shipped with the port: it is injected through a core:HTML control carrying a