{"ref":"artifact:abap2ui5-addons-custom-controls","page":"/artifacts/abap2ui5-addons-custom-controls","json":"/artifacts/abap2ui5-addons-custom-controls.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"abap2ui5-addons-custom-controls","name":"custom-controls","artifact_type":"package","ecosystem":"abap","serves_ecosystems":["ui5"],"flavors":[{"key":"standard-abap","source":{"url":"https://github.com/abap2ui5-addons/custom-controls","title":"abap2UI5-addons/custom-controls — README","checked":"2026-10-17","quote":"- Standard ABAP 7.50 or higher"}}],"domain":"ui-and-frontend-bridge","origin_ring":"community-org","use_as":"dependency","source_available":true,"description":{"one_line":"Thirteen custom controls for [abap2UI5](artifact:abap2ui5-abap2ui5), a signature pad and a scanner that reads several barcodes at once among them, each one an ABAP builder class with a single `render( )` method and all of them shipped in a BSP of their own.","short":"Thirteen custom UI5 controls for abap2UI5 apps","what_it_solves":"UI5 brings no signature pad, no chart and no Markdown control, so an abap2UI5 developer who needs one writes the JavaScript and finds a way to get it into the frontend. This repository holds thirteen of them: each is a UI5 control under `z2ui5_cci.cc` with an ABAP builder class next to it, so properties bind through `client->_bind( )` and events arrive in `on_event` as for a built-in control. The controls ship in their own BSP `Z2UI5_CCI`, so installing the repository with [abapGit](artifact:abapgit-abapgit) is the whole change: nothing in abap2UI5 or in the frontend BSP has to change, and no pull request against the framework is needed to add one. Eight controls wrap a JavaScript library that is not part of UI5 (Chart.js, bwip-js, driver.js, Font Awesome, animate.css, marked, SunEditor and zxing-wasm), fetched from [jsDelivr](external:jsdelivr) on the `main` branch and vendored into the BSP on `local`, for systems whose browsers have no internet access. Font Awesome is where that stops: its CSS classes render offline, its UI5 IconPool collections need the fonts and the metadata JSON as real files, and a BSP page is a text object.","when_not_to_use":"Needs Standard ABAP 7.50 or higher, and an abap2UI5 whose frontend reserves the resourceRoot `z2ui5_cci`: a frontend predating that rename reserves `z2ui5ccc` and cannot resolve the controls. Frontend artefacts only one company needs, such as an in-house reuse library, a corporate icon font or company CSS, are what [abap2UI5-addons/custom-controls-customer](https://github.com/abap2UI5-addons/custom-controls-customer) is for, the same mechanism under the second reserved root `z2ui5_ccc`. ExportSpreadsheet needs SAPUI5: under OpenUI5 `sap.ui.export` is missing and the button renders disabled.","to_build_on_it":"A control of your own is five steps the README names: a JavaScript file under `app/webapp/cc/` extending `sap.ui.core.Control`, an exact version in `package.json` and an entry in `tools/libs.json` where it wraps a library, `npm run app2bsp` to regenerate the BSP under `src/01`, a builder class `z2ui5_cl_cci_<name>`, and a sample with a row in `z2ui5_cl_cci_sample_00`. No URL is written by hand: `tools/vendor.mjs` generates `LibUrls.js` from the library version in `package.json`, so one control source works on `main` and on `local`. CI runs abaplint against the framework in both syntax versions and fails if a generated artefact has drifted from its source."},"links":{"repo":"https://github.com/abap2UI5-addons/custom-controls"},"type_properties":{"placement":{"value":"in-host","sources":[{"url":"https://github.com/abap2UI5-addons/custom-controls","title":"custom-controls — README","checked":"2026-10-18","quote":"The controls ship in their **own BSP** (`Z2UI5_CCI`), not inside the framework."}]},"distribution":{"value":["abapgit"],"sources":[{"url":"https://github.com/abap2ui5-addons/custom-controls","title":"abap2UI5-addons/custom-controls — README","checked":"2026-10-17","quote":"**Steps** - with [abapGit](https://abapgit.org), in this order:"}]}},"maintainers":["actor:abap2ui5-addons"],"provides":[{"capability":"capability:ui5-custom-controls","what_it_does":"Thirteen reusable UI5 controls — signature pad, spreadsheet export, form validator, Chart.js charts, barcodes, product tours, Font Awesome, animate.css, an image map, Markdown, a code editor, a multi-code barcode scanner and a rich text editor — packaged as a BSP of their own with one ABAP builder class per control, so a control arrives with an abapGit pull instead of a change to the framework.","sources":[{"url":"https://raw.githubusercontent.com/abap2UI5-addons/custom-controls/main/AGENTS.md","title":"abap2UI5-addons/custom-controls — AGENTS.md","checked":"2026-10-17","quote":"Ready-to-use custom controls for abap2UI5 - signature pad, charts and more."},{"url":"https://github.com/abap2ui5-addons/custom-controls","title":"abap2UI5-addons/custom-controls — README","checked":"2026-10-17","quote":"The controls ship in their **own BSP** (`Z2UI5_CCI`), not inside the framework."}]},{"capability":"capability:abap-ui-from-abap","what_it_does":"Makes each control reachable from ABAP alone: one builder class with a `render( )` method adds it to a view, its properties bind to ABAP variables and its events are handled in `on_event` like those of a built-in control.","sources":[{"url":"https://github.com/abap2ui5-addons/custom-controls","title":"abap2UI5-addons/custom-controls — README","checked":"2026-10-17","quote":"Every control has a builder class with one `render( )` method."},{"url":"https://github.com/abap2ui5-addons/custom-controls","title":"abap2UI5-addons/custom-controls — README","checked":"2026-10-17","quote":"That is all — properties bind, values are written back into your ABAP variables and events arrive in `on_event` like for any built-in control."}]}],"requires":[{"ref":"artifact:abap2ui5-abap2ui5","for":"The framework the controls run in: it is listed as the dependency and depended on at runtime, and the installed release has to reserve the resourceRoot `z2ui5_cci` in the frontend manifest, otherwise a control stays blank.","requirement":"required","basis":"binding","role":"framework","sources":[{"url":"https://raw.githubusercontent.com/abap2UI5-addons/custom-controls/main/AGENTS.md","title":"abap2UI5-addons/custom-controls — AGENTS.md","checked":"2026-10-17","quote":"It is installed with abapGit and depends on the [abap2UI5](https://github.com/abap2UI5/abap2UI5) core at runtime."},{"url":"https://github.com/abap2ui5-addons/custom-controls","title":"abap2UI5-addons/custom-controls — README","checked":"2026-10-17","quote":"It needs an abap2UI5 that reserves that root; frontends predating the rename reserve `z2ui5ccc` (and older ones `z2ui5cc`) and cannot resolve the controls."}]},{"ref":"artifact:abapgit-abapgit","for":"Installing the repository into the system, after abap2UI5 and in that order; it brings the ABAP classes, the BSP application `Z2UI5_CCI` and the two ICF nodes it is served from.","requirement":"required","basis":"binding","role":"installation","sources":[{"url":"https://github.com/abap2ui5-addons/custom-controls","title":"abap2UI5-addons/custom-controls — README","checked":"2026-10-17","quote":"**Steps** - with [abapGit](https://abapgit.org), in this order:"},{"url":"https://github.com/abap2ui5-addons/custom-controls","title":"abap2UI5-addons/custom-controls — README","checked":"2026-10-17","quote":"this repository - it brings the ABAP classes, the BSP application `Z2UI5_CCI` and the two ICF nodes it is served from."}]}],"connects":[{"ref":"external:jsdelivr","kind":"data","direction":"outbound","condition":"the `main` branch is installed; on the `local` branch every library is vendored into the BSP and nothing is fetched","for":"Each control fetches the third-party library it wraps on first use, cached per URL, so ten charts on a page fetch Chart.js once. The host therefore has to be allowed in the `script-src` of the Content-Security-Policy, and `connect-src` as well for the barcode reader's WebAssembly module.","sources":[{"url":"https://github.com/abap2ui5-addons/custom-controls","title":"abap2UI5-addons/custom-controls — README","checked":"2026-10-17","quote":"| `main` | the sources, ABAP ≥ 7.50, libraries from jsDelivr | the default |"},{"url":"https://github.com/abap2ui5-addons/custom-controls","title":"abap2UI5-addons/custom-controls — README","checked":"2026-10-17","quote":"Each control loads its library on first use, cached per URL, so ten charts on a page fetch Chart.js once."}]}],"provenance":{"discovered_via":[{"source":"source:github"}],"first_seen":"2026-10-17"},"drafted_with_ai":true,"contributors":["actor:oblomov-dev"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"poor","evidence":"81 months since release"},{"label":"Continuity","tier":"fair","evidence":"2 contributors, 1 publisher, org-owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-10, not archived"}],"compatibility":[{"label":"Declared for","tier":"good","evidence":"SAP_BASIS 750 and up, in its abaplint config: includes every maintained line to 816"},{"label":"Survived majors","tier":"unknown","evidence":"not read on ABAP: its lines run side by side"},{"label":"Maintainer's CI","tier":"good","evidence":"check green, 2026-10-12"}],"practice":[{"label":"Tests","tier":"good","evidence":"4 test files"},{"label":"Docs","tier":"good","evidence":"README 30 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":1,"unit":"installs/week"},{"value":3,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-24","latest_version":"0.0.1","majors":{"0.0":{"version":"0.0.1","date":"2020-01-20"}},"license":null,"first_release":"2020-01-20","last_release":"2020-01-20","releases":1,"cadence_days":null,"maintainers":1,"repository":null,"repository_directory":null,"peer_cds":null,"dependencies":1,"node_engine":null,"test_script":false,"types":true,"downloads_weekly":1,"downloads_monthly":5,"stars":3,"forks":0,"open_issues":0,"archived":false,"pushed_at":"2026-10-12","license_spdx":"MIT","org_owned":true,"default_branch":"main","created_at":"2026-08-03T10:56:37Z","open_prs":0,"tree_truncated":false,"test_files":4,"workflows":2,"other_ci":false,"readme_bytes":31113,"docs_files":0,"changelog":false,"license_file":true,"dts_files":0,"first_commit":"2026-08-03","last_commit":"2026-10-12","commits":94,"contributors":2,"ci_status":"success","ci_run_at":"2026-10-12","ci_workflow":"check","ci_event":"push","readme_path":"README.md","readme_sha":"a368e86abdd8ebf6c37a91854157d322f2342c11","months_since_release":81,"dormant":true,"repo_read":"2026-10-24","abap_syntax":{"repo":"abap2UI5-addons/custom-controls","file":"abaplint.jsonc","url":"https://github.com/abap2UI5-addons/custom-controls/blob/HEAD/abaplint.jsonc","version":"v750","floor":"750","checked":"2026-10-26"}},"release_notes":{"license":"MIT","quotable":true,"versions":[{"version":"0.0.1","date":"2020-01-20"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:abap2ui5-addons","name":"abap2UI5-addons","json":"/actors/abap2ui5-addons.json"}],"contributors":[{"ref":"actor:oblomov-dev","name":"oblomov-dev","json":"/actors/oblomov-dev.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_on_to":{"ref":"artifact:abap2ui5-abap2ui5","name":"abap2UI5","json":"/artifacts/abap2ui5-abap2ui5.json"},"add_ons":[],"answered_through_parts":[]}}