{ "listing": { "skills": [ { "path": "plugins/ui5/skills/ui5-best-practices/SKILL.md", "name": "ui5-best-practices", "description": "UI5 development best practices and coding standards derived exclusively from official SAP UI5 guidelines. Use when writing UI5 applications to ensure modern, maintainable code following SAP standards. Covers: async module loading (sap.ui.define, ES6 imports, core:require), ComponentSupport initialization, data binding with OData types, i18n management, CSP compliance (no inline scripts), TypeScript event types (UI5 >= 1.115.0), MCP tooling (get_api_reference, run_ui5_linter), CAP integration patterns, and form creation rules (never SimpleForm, always Form with ColumnLayout).\n\nKeywords: ui5 coding standards, async loading, sap.ui.define, data binding, odata types, i18n translation, CSP no inline scripts, TypeScript event handlers, Button$PressEvent, ui5 linter, API reference, ComponentSupport, form layout, ColumnLayout, CAP integration, cds watch\n", "files": { "plugins/ui5/skills/ui5-best-practices/SKILL.md": "f75097d5fa882f347831b7e3842dd21c4b4cab9f37fe9a8089512d429b575457" } }, { "path": "plugins/ui5/skills/ui5-best-practices-accessibility/SKILL.md", "name": "ui5-best-practices-accessibility", "description": "This skill should be used when the user asks to audit, fix, check, review, or\nimprove accessibility, a11y, ARIA, WCAG compliance, landmarks, labeling, heading\nlevels, focus handling, keyboard navigation, keyboard shortcuts, screen reader\nsupport, invisible messaging, reading order, or touch / target size in UI5\napplication files (views, fragments, controllers). Also use when the user\ncreates a new UI5 view, fragment, or controller and wants it to be accessible,\nor asks whether a specific control (Dialog, Table, Panel, etc.) meets\naccessibility requirements.\n\nKeywords: accessibility, a11y, ARIA, WCAG, screen reader, NVDA, JAWS, VoiceOver,\nlandmark, landmarkInfo, accessibleRole, ariaLabelledBy, ariaDescribedBy,\nlabelFor, tooltip, alt text, decorative, heading level, initialFocus, F6,\nfast nav, fastnavgroup, tabindex, CommandExecution, keyboard shortcut,\nInvisibleMessage, announce, reading order, reactiveAreaMode, target size.\n", "files": { "plugins/ui5/skills/ui5-best-practices-accessibility/SKILL.md": "86d8e0f6c9d4a3c9273483e1b2ddfe3537246b050bbd9b44a6b931099505f0f8", "plugins/ui5/skills/ui5-best-practices-accessibility/references/heading.md": "bb6baa7b4f13b3945ab7a6e58fd438fe9f0dff8bea3b75f1a85d7d294c8c7392", "plugins/ui5/skills/ui5-best-practices-accessibility/references/invisible-message.md": "b420d9f2f4e7d7bced507fb0d08ad7b74302e2a5481aec8c8429bab4a65a7bf1", "plugins/ui5/skills/ui5-best-practices-accessibility/references/keyboard.md": "aec47dba0aac7a0821e3e2c42056abe0c3ac81d0d19740d1e7649132c1da44f0", "plugins/ui5/skills/ui5-best-practices-accessibility/references/labeling.md": "86e2d2155903be568fe7d2f120ba73dd7171e39f3cbca4f06fb122514ad96d72", "plugins/ui5/skills/ui5-best-practices-accessibility/references/landmark.md": "c754c2897d4d5748a988eb4a8288e144639c23830444ff3d248a6f778b03f5e8", "plugins/ui5/skills/ui5-best-practices-accessibility/references/reading-order.md": "65cd69d039c3774c2754ba11f917f4f68a0d26836b3ab573f123d27fd6f610cc", "plugins/ui5/skills/ui5-best-practices-accessibility/references/shortcut.md": "e87197a423f6cbd37bb1cf5f531b2ac6c8b570ff743e9950974c5074ccaf9d7c", "plugins/ui5/skills/ui5-best-practices-accessibility/references/target-size.md": "0b204172616c5d95cef506c393ff9a24a97d7d007d8fbb54939019c80975e637", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/README.md": "c0541386a2444dff6d35660efe891721abf682fc7041237e7363e7ab80aaac9d", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/eval.json": "ad491d53b7fab278d1d6b91095607df092c15b9075a9b56925f9a49b1e581536", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/fixtures/gap-dialog.controller.js": "d73904b5adedf7bc51e738f67e2627d66b2a00bb8209ec18f84c35fa7da6c4cf", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/fixtures/gap-heading-levels.view.xml": "8ccc17d9cd193400b6a74a811dd0723eec09c613a28d679d47203de684897255", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/fixtures/gap-invisible-message.controller.js": "19299b52c8afa97b3f042cd72c9ed61155525a06777c7413207fd5030377b254", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/fixtures/gap-keyboard.view.xml": "3434d0e0070c96c2388206c525ca2dd08bcd0ed070fb21c472ae1fc44452fd0f", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/fixtures/gap-labeling.view.xml": "a74a2abde3e51a78684850305702f5ced563b19c4a130eb60f127ed151a26559", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/fixtures/gap-landmarks.view.xml": "315f18e837d3654398226e8e4185b75f2b4dd360ba31d962a07c0d0df49e6c46", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/fixtures/gap-reading-order.view.xml": "30963443aa3ebf230d02338adb977f75fd629136c65077725b3471506d25babd", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/fixtures/gap-shortcut.view.xml": "ce074615cff4526c11fdd49f8e5897300ca6b60b09afeb1b322d4fc9b0936567", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/fixtures/gap-target-size.view.xml": "11e3f9a7de78bcaf2ce3817ca9c65fe72f074a9f1b6e99b38c3d2de745d9f84f", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/fixtures/ok-all-correct.view.xml": "8ab34e03a9955be0a9b2f3de4c0ddcd39bfdd74eb47fa682ca4e5e34285e8c73", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/fixtures/ok-dialog.controller.js": "1e562059c2cdf58580053061138e7c872b7217e34e61c7094c2e0b2d48b21b67", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/fixtures/ok-invisible-message.controller.js": "c49ed21fb017637abf33cdc7e153334daa9018e129b42d0f7143aafd2dcef3ac", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/fixtures/ok-simpleform.view.xml": "f44496357f0e74116c99c2ecd1a7181aeb93bd14a38f841d860f64812f84512e", "plugins/ui5/skills/ui5-best-practices-accessibility/tests/fixtures/ok-target-size.view.xml": "526b282e33b9573c01f580e091bc06d7be9f36c098bb19ab527d84eecb17bd75" } }, { "path": "plugins/ui5/skills/ui5-best-practices-integration-cards/SKILL.md", "name": "ui5-best-practices-integration-cards", "description": "MUST be loaded before any UI Integration Cards (also called UI5 Integration Cards) task — creating, modifying, validating, previewing, or reviewing a card, its `manifest.json`, its Configuration Editor (`dt/Configuration.js`), or any analytical chart configuration. Provides the official guidelines, validation rules, supported chart types, and Configuration Editor patterns.", "files": { "plugins/ui5/skills/ui5-best-practices-integration-cards/SKILL.md": "50cc089300109c0efb62fc6e3c73162387492df479b2883491a9cbeff7710056", "plugins/ui5/skills/ui5-best-practices-integration-cards/references/analytical_chart_types.md": "eb9c0c554baf4233b64e1e4158a145a6b9485c2ce9eb944eb5e48d65e8512949", "plugins/ui5/skills/ui5-best-practices-integration-cards/references/configuration_editor_example.md": "a269bd2e5a78c1c1279301410246c8d5b085e612d88fbc03fd5d001d8e554bb8" } }, { "path": "plugins/ui5/skills/ui5-best-practices-mdc/SKILL.md", "name": "ui5-best-practices-mdc", "description": "UI5 MDC (sap.ui.mdc) best practices for OData V4 delegate-based controls. Use when creating/troubleshooting MDC FilterBar, Chart, Field, FilterField, ValueHelp, Link, MultiValueField, or Table. Covers delegate pattern, fetchProperties, PropertyInfo, p13nMode, updateBindingInfo, Condition.createCondition, and common errors (delegate not loaded, chart no data, fields not appearing). Also applies to JSON model (non-OData) MDC usage.\nTriggers: \"MDC\", \"sap.ui.mdc\", \"delegate pattern\", \"fetchProperties\", \"PropertyInfo\", \"MDC personalization\", \"p13nMode\", \"MDC field not rendering\", \"MDC chart not binding\", \"MDC conditions\", OData V4 freestyle with model-driven controls.\nKeywords: sap.ui.mdc, FilterBar, Chart, Field, FilterField, ValueHelp, Link, MultiValueField, delegate, fetchProperties, updateBindingInfo, PropertyInfo, OData V4, JSON model, TypeMap, p13nMode, conditions, FilterBarDelegate, ChartDelegate, ValueHelpDelegate, LinkDelegate, Condition.createCondition\n", "files": { "plugins/ui5/skills/ui5-best-practices-mdc/SKILL.md": "dc9fcf338a362c99be36b092c0321ec791012eb01857b4cbd9351b880302eb01", "plugins/ui5/skills/ui5-best-practices-mdc/references/mdc-chart.md": "0ec6eeae9c3f4c2cf507f950f3844f15b725f3d928803335cc628929b159b971", "plugins/ui5/skills/ui5-best-practices-mdc/references/mdc-field.md": "e4ade2529eb62fdc6b5bb3fdf0ff2c2e8ba21437d70b9aa91cb6f6937f68a1ae", "plugins/ui5/skills/ui5-best-practices-mdc/references/mdc-filter-bar.md": "dfc20b0dcb93043ddc9cf912513f5c27ac03be1c39e229d1e9020095dc730585", "plugins/ui5/skills/ui5-best-practices-mdc/references/mdc-filter-field.md": "0dd6fa9af9417a6eaa4c8379b5f9557771723d0333ba686c524e1710102c7594", "plugins/ui5/skills/ui5-best-practices-mdc/references/mdc-json-delegates.md": "8f6ed23fc3d888933f973d4d9360c1da46365b3bb24296f4adb773d9fd12072c", "plugins/ui5/skills/ui5-best-practices-mdc/references/mdc-link.md": "b3b84f41ab5130dad6c1b224da625648d4be4dc56873208bae212dfc47b0db52", "plugins/ui5/skills/ui5-best-practices-mdc/references/mdc-multi-value-field.md": "e11427fe887492adaf5eee31c70283670e654713a8d89dce257df1d49e9ab72e", "plugins/ui5/skills/ui5-best-practices-mdc/references/mdc-value-help.md": "4359fd205cba946ff774e162db306c56eaed6709d88368563759fae062ca2edd" } }, { "path": "plugins/ui5/skills/ui5-best-practices-opa5/SKILL.md", "name": "ui5-best-practices-opa5", "description": "This skill should be used in any OPA5 task - creating, modifying, extending, debugging, fixing or reviewing an integration test. Use when the user asks to \"write an OPA5 test\", \"add an OPA5 journey\", \"fix the OPA5 test failure\" or mentions OPA5 or its components - opaTest, page object, journey, waitFor.", "files": { "plugins/ui5/skills/ui5-best-practices-opa5/SKILL.md": "6e2d9ca7ffad056f7de3a09b32e25ba2383747f4c63db6c078dfe576af27c056", "plugins/ui5/skills/ui5-best-practices-opa5/references/configuration.md": "85ece55066a28bc4db93a86031bc9e371e6f81790b78ac6215e5e34b5dc27898", "plugins/ui5/skills/ui5-best-practices-opa5/references/enable-testrecorder-tooling.md": "c78e3a473f358d69f647a44371ae4ff14f8043d2c6e5b50c2f1f3c774a0508de", "plugins/ui5/skills/ui5-best-practices-opa5/references/handle-multiple-views.md": "8ac5920d39e1f4bd50720a83cf3d69eb0ed03c75a221d9f4ead84383e13f2387", "plugins/ui5/skills/ui5-best-practices-opa5/references/handle-teardown.md": "f2d5c821e8c5be36438b16ab609363d6d48750e1382bf2a7dff8a60f5f92f1ee", "plugins/ui5/skills/ui5-best-practices-opa5/references/setup-inspection-tools.md": "3e41b9e1cf71c9af81ff92f9e09a738b8484a6d7ecdf83869abfe11f33b2aace" } }, { "path": "plugins/ui5/skills/ui5-best-practices-qunit/SKILL.md", "name": "ui5-best-practices-qunit", "description": "Use when the user asks to \"write a QUnit test\", \"fix a failing QUnit test\", \"add a QUnit module\", \"modernize QUnit tests\", \"migrate from QUnit 1\", or mentions QUnit-specific constructs such as assert.async, nextUIUpdate, Core.applyChanges, sinon sandbox, asyncTest, or QUnit.module. Covers coding standards for OpenUI5/SAPUI5 unit test files: const/let over var, arrow functions over .bind(this), async/await over assert.async(), assert.expect() in every async test, sinon.createSandbox(), descriptive test names, beforeEach/afterEach module isolation, nextUIUpdate vs Core.applyChanges rules, try/finally teardown in helpers, QUnit 1 to QUnit 2 globals migration, and non-ASCII character avoidance.\n", "files": { "plugins/ui5/skills/ui5-best-practices-qunit/SKILL.md": "5c6d806b96825173fce1d54779b8a8bb5e072c3688656092fc3410480958b8a7", "plugins/ui5/skills/ui5-best-practices-qunit/references/async-patterns.md": "81cf31a87a6d641add881320a13a6019d3601a7172e8cc5de2a4bb6835e83369", "plugins/ui5/skills/ui5-best-practices-qunit/references/modernizing-tests.md": "f6172632533f4dee705fca995e92b3ab4cd8d858b4c319b6716d5ba2996f1e21", "plugins/ui5/skills/ui5-best-practices-qunit/references/writing-new-tests.md": "c2444e6ce9d62b4ac0ff6e31878f539903d16fd97cdbd14e86c0a3c8edadb93f" } }, { "path": "plugins/ui5/skills/ui5-best-practices-smart-controls/SKILL.md", "name": "ui5-best-practices-smart-controls", "description": "UI5 smart controls (sap.ui.comp) best practices for OData V2 annotation-driven controls. Use when creating/troubleshooting SmartField, SmartForm, SmartFilterBar, SmartChart, SmartLink, SmartMultiInput, or SmartTable. Covers control selection, annotations (ValueList, FieldControl, SemanticObject, UI.LineItem, UI.Chart), mandatory rules, common errors, and per-control API reference.\nTriggers: \"SmartField\", \"SmartForm\", \"SmartFilterBar\", \"SmartChart\", \"SmartLink\", \"SmartMultiInput\", \"sap.ui.comp\", \"smart control annotations\", \"OData V2 metadata-driven\", \"value help annotations\", \"ValueList annotation\", \"field control annotation\", \"semantic object navigation\".\nKeywords: sap.ui.comp, SmartField, SmartForm, SmartFilterBar, SmartChart, SmartLink, SmartMultiInput, SmartTable, ValueHelpDialog, OData V2, annotations, ValueList, FieldControl, SemanticObject, entitySet, ControlConfiguration, GroupConfiguration, textArrangement, FilterProvider, initialise, beforeRebindChart, navigationTargetsObtained\n", "files": { "plugins/ui5/skills/ui5-best-practices-smart-controls/SKILL.md": "595906fcee4427db5da0e86b5dff7fb34d652a6cdb920fa58dede8ea8839d9c3", "plugins/ui5/skills/ui5-best-practices-smart-controls/references/filter-bar.md": "bb55fc3b9d1ba6c37b15f4c9f9daf6b3084dc77985aad255fb4de2cfb845a3cb", "plugins/ui5/skills/ui5-best-practices-smart-controls/references/smart-chart.md": "85e8d2cdfbb40a39492dc6c843a15c04d78900add56cc8f14aa77e8d0328643d", "plugins/ui5/skills/ui5-best-practices-smart-controls/references/smart-field.md": "adbcb0406e335b98ace4a7e0d79f34d3d948a625a477e2dd42dc4dda781c39e0", "plugins/ui5/skills/ui5-best-practices-smart-controls/references/smart-filter-bar.md": "c98f346f0b8b4af3555a65a6c28d339d57b368b7b0630de402ca3da7bba05288", "plugins/ui5/skills/ui5-best-practices-smart-controls/references/smart-form.md": "f9ec776a5293ece985f6a783eb4509ab719106554cd3afe28c1b295187cc5283", "plugins/ui5/skills/ui5-best-practices-smart-controls/references/smart-link.md": "37671e039bbbf41755e7c0c3c65f3b9499cb682f06fc20ab10b8f4cfc39bedbc", "plugins/ui5/skills/ui5-best-practices-smart-controls/references/smart-multi-input.md": "11473da66dea5cf85f654eef9c1f24faee9a8c7f1b06a2dda3bfeb4b6646dd55", "plugins/ui5/skills/ui5-best-practices-smart-controls/references/value-help-dialog.md": "1b730325a06738548a136c3d504afbb62334b1914f3f26cc1942e5fa9ec4cf7f" } }, { "path": "plugins/ui5/skills/ui5-best-practices-tables/SKILL.md", "name": "ui5-best-practices-tables", "description": "UI5 table best practices for freestyle applications. Use when creating/troubleshooting any table: sap.m.Table (ResponsiveTable), sap.ui.table.Table (GridTable), TreeTable, SmartTable, or sap.ui.mdc.Table. Covers control selection matrix, mandatory rules, common errors, and per-control API guidance.\nTriggers: \"create a table\", \"which table should I use\", \"GridTable\", \"ResponsiveTable\", \"TreeTable\", \"SmartTable\", \"MDC table\", \"sap.ui.mdc.Table\", \"table not showing data\", \"table binding\", \"table selection\", \"drag and drop table\", \"table personalization\", \"table growing\", \"table pop-in\", \"table performance\", \"table export\", \"table sticky header\".\nKeywords: sap.m.Table, sap.ui.table, GridTable, ResponsiveTable, TreeTable, SmartTable, sap.ui.mdc.Table, rows, items, rowMode, growing, sticky, personalization, p13n.Engine, DragDropInfo, OData V4, OData V2, ariaLabelledBy, cell templates\n", "files": { "plugins/ui5/skills/ui5-best-practices-tables/SKILL.md": "77062976d21163201fce0dd70a928ca9dc6b78a13840c53364a0f21a44d6f89f", "plugins/ui5/skills/ui5-best-practices-tables/references/cell-templates.md": "e61a3a9cbfdee305f2bd5a84d2be74ac65b13229870f6d99c2d1a14b99bbc53d", "plugins/ui5/skills/ui5-best-practices-tables/references/drag-and-drop.md": "68f1c473b4e1ad9c37d1d07eb77a7714f81cc44a388e22cd621974c9a119b2b2", "plugins/ui5/skills/ui5-best-practices-tables/references/grid-table.md": "42f8fab6cee1ea4287ffeed182f3297c671d5f23317c240744ebc487631be60e", "plugins/ui5/skills/ui5-best-practices-tables/references/mdc-table.md": "d33b3dee9a86908429371f29815167a2a5827fb1eebca4ef4026b1020f18f5f0", "plugins/ui5/skills/ui5-best-practices-tables/references/personalization.md": "cd1b9873a372a780dee38046817ded7089ef2ca1e32d56ccd6e920a722e329f0", "plugins/ui5/skills/ui5-best-practices-tables/references/sap-m-table.md": "8b9abfc8a5cc4d1129468d33ff7b35cb8e9c7b764f8e418fe0c36df5b6e742e6", "plugins/ui5/skills/ui5-best-practices-tables/references/smart-table.md": "9600c339111c86c66e15746668be640a24cb9f722aa6cb1dc7028813efa95805", "plugins/ui5/skills/ui5-best-practices-tables/references/tree-table.md": "1cd5bb5dc5c015cb3c22027a8932fc840fd6d075361cd4620c150ea09e792855" } } ], "hooks": [], "executions": [] } }