@api-client/ui 0.6.9 → 0.6.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"group.styles.d.ts","sourceRoot":"","sources":["../../../../../src/md/button/internals/group.styles.ts"],"names":[],"mappings":";AAGA,wBAkGC"}
1
+ {"version":3,"file":"group.styles.d.ts","sourceRoot":"","sources":["../../../../../src/md/button/internals/group.styles.ts"],"names":[],"mappings":";AAGA,wBAmGC"}
@@ -3,6 +3,7 @@ import { css } from 'lit';
3
3
  export default css `
4
4
  :host {
5
5
  display: flex;
6
+ flex-wrap: wrap;
6
7
 
7
8
  --_gap: 8px;
8
9
  --_xs-radius: 16px;
@@ -1 +1 @@
1
- {"version":3,"file":"group.styles.js","sourceRoot":"","sources":["../../../../../src/md/button/internals/group.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,qEAAqE;AACrE,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkGjB,CAAA","sourcesContent":["import { css } from 'lit'\n\n/* Material Design 3 Expressive Button - CSS-Native Implementation */\nexport default css`\n :host {\n display: flex;\n\n --_gap: 8px;\n --_xs-radius: 16px;\n --_s-radius: 20px;\n --_m-radius: 28px;\n --_l-radius: 48px;\n --_xl-radius: 68px;\n\n gap: var(--_gap);\n }\n\n :host([size='xs'][type='standard']) {\n --_gap: 18px;\n }\n :host([size='xs'][type='connected']) {\n --_gap: 2px;\n }\n\n :host([size='s'][type='standard']) {\n --_gap: 12px;\n }\n :host([size='s'][type='connected']) {\n --_gap: 2px;\n }\n\n :host([size='m'][type='standard']) {\n --_gap: 8px;\n }\n :host([size='m'][type='connected']) {\n --_gap: 2px;\n }\n\n :host([size='l'][type='standard']) {\n --_gap: 8px;\n }\n :host([size='l'][type='connected']) {\n --_gap: 2px;\n }\n\n :host([size='xl'][type='standard']) {\n --_gap: 8px;\n }\n :host([size='xl'][type='connected']) {\n --_gap: 2px;\n }\n\n :host([type='connected']) ::slotted(ui-button[size='xs']:first-child) {\n --ui-button-shape-start-start: var(--_xs-radius);\n --ui-button-shape-end-start: var(--_xs-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='s']:first-child) {\n --ui-button-shape-start-start: var(--_s-radius);\n --ui-button-shape-end-start: var(--_s-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='m']:first-child) {\n --ui-button-shape-start-start: var(--_m-radius);\n --ui-button-shape-end-start: var(--_m-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='l']:first-child) {\n --ui-button-shape-start-start: var(--_l-radius);\n --ui-button-shape-end-start: var(--_l-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='xl']:first-child) {\n --ui-button-shape-start-start: var(--_xl-radius);\n --ui-button-shape-end-start: var(--_xl-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='xs']:last-child) {\n --ui-button-shape-start-end: var(--_xs-radius);\n --ui-button-shape-end-end: var(--_xs-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='s']:last-child) {\n --ui-button-shape-start-end: var(--_s-radius);\n --ui-button-shape-end-end: var(--_s-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='m']:last-child) {\n --ui-button-shape-start-end: var(--_m-radius);\n --ui-button-shape-end-end: var(--_m-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='l']:last-child) {\n --ui-button-shape-start-end: var(--_l-radius);\n --ui-button-shape-end-end: var(--_l-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='xl']:last-child) {\n --ui-button-shape-start-end: var(--_xl-radius);\n --ui-button-shape-end-end: var(--_xl-radius);\n }\n`\n"]}
1
+ {"version":3,"file":"group.styles.js","sourceRoot":"","sources":["../../../../../src/md/button/internals/group.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,qEAAqE;AACrE,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmGjB,CAAA","sourcesContent":["import { css } from 'lit'\n\n/* Material Design 3 Expressive Button - CSS-Native Implementation */\nexport default css`\n :host {\n display: flex;\n flex-wrap: wrap;\n\n --_gap: 8px;\n --_xs-radius: 16px;\n --_s-radius: 20px;\n --_m-radius: 28px;\n --_l-radius: 48px;\n --_xl-radius: 68px;\n\n gap: var(--_gap);\n }\n\n :host([size='xs'][type='standard']) {\n --_gap: 18px;\n }\n :host([size='xs'][type='connected']) {\n --_gap: 2px;\n }\n\n :host([size='s'][type='standard']) {\n --_gap: 12px;\n }\n :host([size='s'][type='connected']) {\n --_gap: 2px;\n }\n\n :host([size='m'][type='standard']) {\n --_gap: 8px;\n }\n :host([size='m'][type='connected']) {\n --_gap: 2px;\n }\n\n :host([size='l'][type='standard']) {\n --_gap: 8px;\n }\n :host([size='l'][type='connected']) {\n --_gap: 2px;\n }\n\n :host([size='xl'][type='standard']) {\n --_gap: 8px;\n }\n :host([size='xl'][type='connected']) {\n --_gap: 2px;\n }\n\n :host([type='connected']) ::slotted(ui-button[size='xs']:first-child) {\n --ui-button-shape-start-start: var(--_xs-radius);\n --ui-button-shape-end-start: var(--_xs-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='s']:first-child) {\n --ui-button-shape-start-start: var(--_s-radius);\n --ui-button-shape-end-start: var(--_s-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='m']:first-child) {\n --ui-button-shape-start-start: var(--_m-radius);\n --ui-button-shape-end-start: var(--_m-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='l']:first-child) {\n --ui-button-shape-start-start: var(--_l-radius);\n --ui-button-shape-end-start: var(--_l-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='xl']:first-child) {\n --ui-button-shape-start-start: var(--_xl-radius);\n --ui-button-shape-end-start: var(--_xl-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='xs']:last-child) {\n --ui-button-shape-start-end: var(--_xs-radius);\n --ui-button-shape-end-end: var(--_xs-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='s']:last-child) {\n --ui-button-shape-start-end: var(--_s-radius);\n --ui-button-shape-end-end: var(--_s-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='m']:last-child) {\n --ui-button-shape-start-end: var(--_m-radius);\n --ui-button-shape-end-end: var(--_m-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='l']:last-child) {\n --ui-button-shape-start-end: var(--_l-radius);\n --ui-button-shape-end-end: var(--_l-radius);\n }\n\n :host([type='connected']) ::slotted(ui-button[size='xl']:last-child) {\n --ui-button-shape-start-end: var(--_xl-radius);\n --ui-button-shape-end-end: var(--_xl-radius);\n }\n`\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"domain-template-browser.d.ts","sourceRoot":"","sources":["../../../src/modeling/domain-template-browser.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,sCAAsC,CAAA;AAG1D,OAAO,2BAA2B,CAAA;AAClC,OAAO,iCAAiC,CAAA;AACxC,OAAO,wBAAwB,CAAA;AAC/B,OAAO,4CAA4C,CAAA;AAEnD,qBACa,4BAA6B,SAAQ,OAAO;IACvD,OAAgB,MAAM,4BAAW;CAClC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,yBAAyB,EAAE,4BAA4B,CAAA;KACxD;CACF"}
1
+ {"version":3,"file":"domain-template-browser.d.ts","sourceRoot":"","sources":["../../../src/modeling/domain-template-browser.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,sCAAsC,CAAA;AAI1D,OAAO,2BAA2B,CAAA;AAClC,OAAO,iCAAiC,CAAA;AACxC,OAAO,wBAAwB,CAAA;AAC/B,OAAO,4CAA4C,CAAA;AAEnD,qBACa,4BAA6B,SAAQ,OAAO;IACvD,OAAgB,MAAM,4BAAuB;CAC9C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,yBAAyB,EAAE,4BAA4B,CAAA;KACxD;CACF"}
@@ -2,6 +2,7 @@ import { __esDecorate, __runInitializers } from "tslib";
2
2
  import { customElement } from 'lit/decorators.js';
3
3
  import Element from './internals/DomainTemplateBrowser.js';
4
4
  import styles from './internals/styles/DomainTemplateBrowser.styles.js';
5
+ import typography from '../styles/m3/typography.module.js';
5
6
  import '../md/button/ui-button.js';
6
7
  import '../md/button/ui-button-group.js';
7
8
  import '../md/icons/ui-icon.js';
@@ -20,7 +21,7 @@ let DomainTemplateBrowserElement = (() => {
20
21
  DomainTemplateBrowserElement = _classThis = _classDescriptor.value;
21
22
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
22
23
  }
23
- static styles = [styles];
24
+ static styles = [styles, typography];
24
25
  static {
25
26
  __runInitializers(_classThis, _classExtraInitializers);
26
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"domain-template-browser.js","sourceRoot":"","sources":["../../../src/modeling/domain-template-browser.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,OAAO,MAAM,sCAAsC,CAAA;AAC1D,OAAO,MAAM,MAAM,oDAAoD,CAAA;AAEvE,OAAO,2BAA2B,CAAA;AAClC,OAAO,iCAAiC,CAAA;AACxC,OAAO,wBAAwB,CAAA;AAC/B,OAAO,4CAA4C,CAAA;IAGtC,4BAA4B;4BADxC,aAAa,CAAC,yBAAyB,CAAC;;;;sBACS,OAAO;4CAAf,SAAQ,WAAO;;;;YAAzD,6KAEC;;;;QADC,MAAM,CAAU,MAAM,GAAG,CAAC,MAAM,CAAC,CAAA;;YADtB,uDAA4B;;;;;SAA5B,4BAA4B","sourcesContent":["import { customElement } from 'lit/decorators.js'\nimport Element from './internals/DomainTemplateBrowser.js'\nimport styles from './internals/styles/DomainTemplateBrowser.styles.js'\n\nimport '../md/button/ui-button.js'\nimport '../md/button/ui-button-group.js'\nimport '../md/icons/ui-icon.js'\nimport '../md/text-field/ui-outlined-text-field.js'\n\n@customElement('domain-template-browser')\nexport class DomainTemplateBrowserElement extends Element {\n static override styles = [styles]\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'domain-template-browser': DomainTemplateBrowserElement\n }\n}\n"]}
1
+ {"version":3,"file":"domain-template-browser.js","sourceRoot":"","sources":["../../../src/modeling/domain-template-browser.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,OAAO,MAAM,sCAAsC,CAAA;AAC1D,OAAO,MAAM,MAAM,oDAAoD,CAAA;AACvE,OAAO,UAAU,MAAM,mCAAmC,CAAA;AAE1D,OAAO,2BAA2B,CAAA;AAClC,OAAO,iCAAiC,CAAA;AACxC,OAAO,wBAAwB,CAAA;AAC/B,OAAO,4CAA4C,CAAA;IAGtC,4BAA4B;4BADxC,aAAa,CAAC,yBAAyB,CAAC;;;;sBACS,OAAO;4CAAf,SAAQ,WAAO;;;;YAAzD,6KAEC;;;;QADC,MAAM,CAAU,MAAM,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;;YADlC,uDAA4B;;;;;SAA5B,4BAA4B","sourcesContent":["import { customElement } from 'lit/decorators.js'\nimport Element from './internals/DomainTemplateBrowser.js'\nimport styles from './internals/styles/DomainTemplateBrowser.styles.js'\nimport typography from '../styles/m3/typography.module.js'\n\nimport '../md/button/ui-button.js'\nimport '../md/button/ui-button-group.js'\nimport '../md/icons/ui-icon.js'\nimport '../md/text-field/ui-outlined-text-field.js'\n\n@customElement('domain-template-browser')\nexport class DomainTemplateBrowserElement extends Element {\n static override styles = [styles, typography]\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'domain-template-browser': DomainTemplateBrowserElement\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DomainTemplateBrowser.d.ts","sourceRoot":"","sources":["../../../../src/modeling/internals/DomainTemplateBrowser.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,cAAc,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAE3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAcvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,UAAU,EACV,SAAS,EACT,aAAa,EACb,YAAY,EACb,MAAM,uCAAuC,CAAA;AAE9C;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAa5D,CAAA;AAEV,eAAO,MAAM,mBAAmB,EAAuC,CAAC,MAAM,OAAO,mBAAmB,CAAC,EAAE,CAAA;AAE3G;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,GAAG,QAAQ,CAqBzD;AAcD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,UAAU;IAC3D;;;;OAIG;IACyB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAE9D;;;;OAIG;IACyB,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,mBAAmB,GAAG,SAAS,CAAA;IAE3F;;;OAGG;IACM,QAAQ,CAAC,SAAS,EAAE,sBAAsB,EAAE,CAAiD;IAEtG;;OAEG;IACM,QAAQ,CAAC,eAAe,EAAE,cAAc,GAAG,SAAS,CAAA;IAE7D;;;OAGG;IACH,SAAS,CAAC,mBAAmB,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;IAarD;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAS5B,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAgB3C,SAAS,CAAC,oBAAoB,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAc9C,SAAS,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAa/C,SAAS,CAAC,kBAAkB,IAAI,IAAI;cAIjB,MAAM,IAAI,cAAc;IAW3C,SAAS,CAAC,iBAAiB,IAAI,cAAc;IAQ7C,SAAS,CAAC,iBAAiB,IAAI,cAAc;IAe7C,SAAS,CAAC,qBAAqB,IAAI,cAAc;IAgCjD,SAAS,CAAC,mBAAmB,IAAI,cAAc;IAM/C,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,cAAc;IAsB9E,SAAS,CAAC,gBAAgB,IAAI,cAAc;IAmB5C,iBAAiB,IAAI,cAAc;IAYnC,SAAS,CAAC,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc;IA6CzE,SAAS,CAAC,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc;IAOzE,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,cAAc;IAsBvE,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc;IAmB3D,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc;IAyChE,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,cAAc;IA4ChE,SAAS,CAAC,iBAAiB,CAAC,WAAW,EAAE,eAAe,GAAG,cAAc;CA8B1E"}
1
+ {"version":3,"file":"DomainTemplateBrowser.d.ts","sourceRoot":"","sources":["../../../../src/modeling/internals/DomainTemplateBrowser.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,cAAc,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAE3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAcvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,UAAU,EACV,SAAS,EACT,aAAa,EACb,YAAY,EACb,MAAM,uCAAuC,CAAA;AAE9C;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAa5D,CAAA;AAEV,eAAO,MAAM,mBAAmB,EAAuC,CAAC,MAAM,OAAO,mBAAmB,CAAC,EAAE,CAAA;AAE3G;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,GAAG,QAAQ,CAqBzD;AAmCD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,UAAU;IAC3D;;;;OAIG;IACyB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAE9D;;;;OAIG;IACyB,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,mBAAmB,GAAG,SAAS,CAAA;IAE3F;;;OAGG;IACM,QAAQ,CAAC,SAAS,EAAE,sBAAsB,EAAE,CAAiD;IAEtG;;OAEG;IACM,QAAQ,CAAC,eAAe,EAAE,cAAc,GAAG,SAAS,CAAA;IAE7D;;;OAGG;IACH,SAAS,CAAC,mBAAmB,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;IAarD;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAS5B,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAgB3C,SAAS,CAAC,oBAAoB,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAc9C,SAAS,CAAC,qBAAqB,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAa/C,SAAS,CAAC,kBAAkB,IAAI,IAAI;cAIjB,MAAM,IAAI,cAAc;IAW3C,SAAS,CAAC,iBAAiB,IAAI,cAAc;IAQ7C,SAAS,CAAC,iBAAiB,IAAI,cAAc;IAe7C,SAAS,CAAC,qBAAqB,IAAI,cAAc;IAgCjD,SAAS,CAAC,mBAAmB,IAAI,cAAc;IAM/C,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,cAAc;IA0B9E,SAAS,CAAC,gBAAgB,IAAI,cAAc;IAmB5C,iBAAiB,IAAI,cAAc;IAYnC,SAAS,CAAC,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc;IA6CzE,SAAS,CAAC,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc;IAOzE,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,cAAc;IAsBvE,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc;IAmB3D,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc;IAyChE,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,cAAc;IA4ChE,SAAS,CAAC,iBAAiB,CAAC,WAAW,EAAE,eAAe,GAAG,cAAc;CA8B1E"}
@@ -67,6 +67,26 @@ function searchTemplates(query) {
67
67
  template.description.toLowerCase().includes(searchTerm) ||
68
68
  template.tags.some((tag) => tag.toLowerCase().includes(searchTerm)));
69
69
  }
70
+ function getVerticalName(id) {
71
+ switch (id) {
72
+ case 'businessServices':
73
+ return 'Business Services';
74
+ case 'educationTraining':
75
+ return 'Education & Training';
76
+ case 'healthcareLifeSciences':
77
+ return 'Healthcare & Life Sciences';
78
+ case 'manufacturingLogistics':
79
+ return 'Manufacturing & Logistics';
80
+ case 'publicSector':
81
+ return 'Public Sector';
82
+ case 'realEstateConstruction':
83
+ return 'Real Estate & Construction';
84
+ case 'technologyMedia':
85
+ return 'Technology & Media';
86
+ default:
87
+ return id;
88
+ }
89
+ }
70
90
  let DomainTemplateBrowser = (() => {
71
91
  let _classSuper = LitElement;
72
92
  let _query_decorators;
@@ -255,7 +275,7 @@ let DomainTemplateBrowser = (() => {
255
275
  ?selected="${isSelected}"
256
276
  @click="${this.handleFilterClick}"
257
277
  >
258
- ${category}
278
+ ${getVerticalName(category)}
259
279
  </ui-button>`;
260
280
  })}
261
281
  </ui-button-group>
@@ -273,6 +293,10 @@ let DomainTemplateBrowser = (() => {
273
293
  const templateDescription = template.description || 'No description available';
274
294
  return html `
275
295
  <div class="template-card">
296
+ <div class="meta">
297
+ <span class="value body-small" title="Updated at">${new Date(template.updatedAt).toLocaleDateString()}</span>
298
+ <span class="value body-small" title="Version">v${template.version}</span>
299
+ </div>
276
300
  <h3 class="template-title display-small">${templateName}</h3>
277
301
  <p class="template-description body-medium">${templateDescription}</p>
278
302
 
@@ -1 +1 @@
1
- {"version":3,"file":"DomainTemplateBrowser.js","sourceRoot":"","sources":["../../../../src/modeling/internals/DomainTemplateBrowser.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-len */\nimport { html, type TemplateResult, LitElement } from 'lit'\nimport { state, property } from 'lit/decorators.js'\nimport type { IconType } from '../../md/icons/Icons.js'\n// Template metadata imports\nimport ecommercePlatformMetadata from '@api-client/domain-templates/meta/ecommerce-platform.json' with { type: 'json' }\nimport blogPublishingPlatformMetadata from '@api-client/domain-templates/meta/blog-publishing-platform.json' with { type: 'json' }\nimport healthcareManagementPlatformMetadata from '@api-client/domain-templates/meta/healthcare-management-platform.json' with { type: 'json' }\nimport financialServicesPlatformMetadata from '@api-client/domain-templates/meta/financial-services-platform.json' with { type: 'json' }\nimport educationManagementPlatformMetadata from '@api-client/domain-templates/meta/education-management-platform.json' with { type: 'json' }\nimport realEstateManagementPlatformMetadata from '@api-client/domain-templates/meta/real-estate-management-platform.json' with { type: 'json' }\nimport manufacturingPlatformMetadata from '@api-client/domain-templates/meta/manufacturing-platform.json' with { type: 'json' }\nimport hospitalityPlatformMetadata from '@api-client/domain-templates/meta/hospitality-platform.json' with { type: 'json' }\nimport legalServicesPlatformMetadata from '@api-client/domain-templates/meta/legal-services-platform.json' with { type: 'json' }\nimport nonProfitPlatformMetadata from '@api-client/domain-templates/meta/non-profit-platform.json' with { type: 'json' }\nimport iotSmartHomePlatformMetadata from '@api-client/domain-templates/meta/iot-smart-home-platform.json' with { type: 'json' }\nimport gamingPlatformMetadata from '@api-client/domain-templates/meta/gaming-platform.json' with { type: 'json' }\nimport { templatesByVertical } from '@api-client/domain-templates'\nimport type {\n AssociationInfo,\n DomainTemplate,\n DomainTemplateMetadata,\n EntityInfo,\n ModelInfo,\n NamespaceInfo,\n PropertyInfo,\n} from '@api-client/domain-templates/types.js'\n\n/**\n * Registry of all available template metadata\n */\nexport const TEMPLATE_METADATA_REGISTRY: Record<string, DomainTemplate> = {\n 'ecommerce-platform': ecommercePlatformMetadata as DomainTemplate,\n 'blog-publishing-platform': blogPublishingPlatformMetadata as DomainTemplate,\n 'healthcare-management-platform': healthcareManagementPlatformMetadata as DomainTemplate,\n 'financial-services-platform': financialServicesPlatformMetadata as DomainTemplate,\n 'education-management-platform': educationManagementPlatformMetadata as DomainTemplate,\n 'real-estate-management-platform': realEstateManagementPlatformMetadata as DomainTemplate,\n 'manufacturing-platform': manufacturingPlatformMetadata as DomainTemplate,\n 'hospitality-platform': hospitalityPlatformMetadata as DomainTemplate,\n 'legal-services-platform': legalServicesPlatformMetadata as DomainTemplate,\n 'non-profit-platform': nonProfitPlatformMetadata as DomainTemplate,\n 'iot-smart-home-platform': iotSmartHomePlatformMetadata as DomainTemplate,\n 'gaming-platform': gamingPlatformMetadata as DomainTemplate,\n} as const\n\nexport const availableCategories = Object.keys(templatesByVertical) as (keyof typeof templatesByVertical)[]\n\n/**\n * The selection detail object dispatched by the `selectionchange` event.\n */\nexport interface BrowseTemplatesSelection {\n /**\n * The key of the selected template\n */\n selected: string\n}\n\n/**\n * Generates an icon name for the DomainProperty that illustrate its primary purpose.\n */\nexport function getPropertyIcon(p: PropertyInfo): IconType {\n if (p.primary) {\n return 'key'\n }\n switch (p.type) {\n // case 'integer':\n case 'number':\n return 'number'\n case 'date':\n return 'calendarToday'\n case 'time':\n return 'schedule'\n case 'datetime':\n return 'event'\n case 'boolean':\n return 'checkCircle'\n case 'binary':\n return 'draft'\n default:\n return 'textFields'\n }\n}\n\nfunction searchTemplates(query: string): DomainTemplateMetadata[] {\n const searchTerm = query.toLowerCase()\n return Object.values(templatesByVertical)\n .flat()\n .filter(\n (template) =>\n template.name.toLowerCase().includes(searchTerm) ||\n template.description.toLowerCase().includes(searchTerm) ||\n template.tags.some((tag) => tag.toLowerCase().includes(searchTerm))\n )\n}\n\n/**\n * A browser component for exploring and selecting domain templates.\n * It provides the UI for searching, filtering, previewing, and selecting data domain templates.\n *\n * It manages the filtering state internally but allows property binding for query and category.\n *\n * @fires selectionchange - Dispatched when the user selects a template item. The detail object contains the `selected`\n * status which is the template ID (e.g. `CustomEvent<{ selected: string }>`).\n */\nexport default class DomainTemplateBrowser extends LitElement {\n /**\n * The user entered search query to filter the templates.\n * If not set, all templates are shown (unless filtered by category).\n * @attribute\n */\n @property({ type: String }) accessor query: string | undefined\n\n /**\n * The selected template category to filter the list.\n * If not set, all categories are included.\n * @attribute\n */\n @property({ type: String }) accessor category: keyof typeof templatesByVertical | undefined\n\n /**\n * The internal list of filtered templates to render in the UI.\n * This is computed based on `query` and `category`.\n */\n @state() accessor templates: DomainTemplateMetadata[] = [...Object.values(templatesByVertical)].flat()\n\n /**\n * The currently previewed template. When set, the component renders the preview view instead of the list.\n */\n @state() accessor previewTemplate: DomainTemplate | undefined\n\n /**\n * Handles keydown events on the search input.\n * Triggers a search on Enter or resets on Escape.\n */\n protected handleSearchKeydown(e: KeyboardEvent): void {\n const input = e.currentTarget as HTMLInputElement\n const value = input.value.trim()\n if (e.key === 'Enter' && value) {\n this.search(value)\n } else if (e.key === 'Escape') {\n e.preventDefault()\n e.stopPropagation()\n input.value = ''\n this.search()\n }\n }\n\n /**\n * Performs an in-memory search for templates matching the provided query.\n * Updates the `templates` state with the search results.\n *\n * @param value The search query. If empty, resets the search.\n */\n search(value?: string): void {\n this.query = value\n if (!value) {\n this.templates = [...Object.values(templatesByVertical)].flat()\n } else {\n this.templates = searchTemplates(value)\n }\n }\n\n protected handleFilterClick(e: Event): void {\n const target = e.target as HTMLElement\n const value = target.dataset.value\n // Toggle category selection\n if (this.category === value) {\n return\n }\n if (value === '') {\n this.category = undefined\n this.templates = [...Object.values(templatesByVertical)].flat()\n } else {\n this.category = value as keyof typeof templatesByVertical\n this.templates = templatesByVertical[this.category].flat()\n }\n }\n\n protected handleTemplateSelect(e: Event): void {\n const templateId = (e.currentTarget as HTMLElement).dataset.id\n if (!templateId) {\n return\n }\n // Dispatch selection event\n this.dispatchEvent(\n new CustomEvent<BrowseTemplatesSelection>('selectionchange', {\n detail: { selected: templateId },\n bubbles: false,\n })\n )\n }\n\n protected handleTemplatePreview(e: Event): void {\n e.stopPropagation()\n const templateId = (e.currentTarget as HTMLElement).dataset.id\n if (!templateId) {\n return\n }\n const value = TEMPLATE_METADATA_REGISTRY[templateId]\n if (!value) {\n return\n }\n this.previewTemplate = value\n }\n\n protected handleClosePreview(): void {\n this.previewTemplate = undefined\n }\n\n protected override render(): TemplateResult {\n if (this.previewTemplate) {\n return this.renderPreviewMode()\n }\n\n return html`\n <div class=\"controls\">${this.renderTopControls()} ${this.renderCategoryFilters()}</div>\n ${this.templates.length > 0 ? this.renderTemplatesGrid() : this.renderEmptyState()}\n `\n }\n\n protected renderTopControls(): TemplateResult {\n return html`\n <div class=\"top-row\">\n <div class=\"search-group\">${this.renderSearchInput()}</div>\n </div>\n `\n }\n\n protected renderSearchInput(): TemplateResult {\n return html`\n <ui-outlined-text-field\n id=\"template-search\"\n label=\"Search templates...\"\n type=\"search\"\n class=\"search\"\n .value=\"${this.query ?? ''}\"\n @keydown=\"${this.handleSearchKeydown}\"\n >\n <ui-icon slot=\"prefix\">search</ui-icon>\n </ui-outlined-text-field>\n `\n }\n\n protected renderCategoryFilters(): TemplateResult {\n return html`\n <div class=\"category-tabs\">\n <ui-button-group type=\"connected\">\n <ui-button\n color=\"tonal\"\n size=\"s\"\n toggle\n data-value=\"\"\n ?selected=\"${!this.category}\"\n @click=\"${this.handleFilterClick}\"\n >\n All\n </ui-button>\n ${availableCategories.map((category) => {\n const isSelected = this.category === category\n return html`<ui-button\n color=\"tonal\"\n size=\"s\"\n toggle\n data-value=\"${category}\"\n ?selected=\"${isSelected}\"\n @click=\"${this.handleFilterClick}\"\n >\n ${category}\n </ui-button>`\n })}\n </ui-button-group>\n </div>\n `\n }\n\n protected renderTemplatesGrid(): TemplateResult {\n return html`\n <div class=\"templates-grid\">${this.templates.map((template) => this.renderTemplateCard(template))}</div>\n `\n }\n\n protected renderTemplateCard(template: DomainTemplateMetadata): TemplateResult {\n // Use available properties from DomainTemplate interface\n const templateName = template.name || 'Unnamed Template'\n const templateDescription = template.description || 'No description available'\n\n return html`\n <div class=\"template-card\">\n <h3 class=\"template-title display-small\">${templateName}</h3>\n <p class=\"template-description body-medium\">${templateDescription}</p>\n\n <div class=\"template-actions\">\n <ui-button data-id=\"${template.id}\" color=\"outlined\" size=\"s\" @click=\"${this.handleTemplatePreview}\">\n Details\n </ui-button>\n <ui-button color=\"filled\" size=\"s\" data-id=\"${template.id}\" @click=\"${this.handleTemplateSelect}\">\n Use template\n </ui-button>\n </div>\n </div>\n `\n }\n\n protected renderEmptyState(): TemplateResult {\n const message = this.query\n ? `No templates found for \"${this.query}\"`\n : this.category\n ? `No templates found in \"${this.category}\" category`\n : 'No templates available'\n\n const description =\n this.query || this.category ? 'Try adjusting your search or filters' : 'Templates will appear here when available'\n\n return html`\n <div class=\"empty-state\">\n <ui-icon class=\"empty-icon\">search_off</ui-icon>\n <h3 class=\"empty-title title-large\">${message}</h3>\n <p class=\"empty-description body-large\">${description}</p>\n </div>\n `\n }\n\n renderPreviewMode(): TemplateResult {\n return html`\n <div class=\"preview-header\">\n <ui-button color=\"text\" @click=\"${this.handleClosePreview}\">\n <ui-icon slot=\"icon\">arrow_back</ui-icon>\n Back to Templates\n </ui-button>\n </div>\n <div class=\"preview-main\">${this.renderTemplateDetails(this.previewTemplate as DomainTemplate)}</div>\n `\n }\n\n protected renderTemplateDetails(template: DomainTemplate): TemplateResult {\n return html`\n <div class=\"template-details\">\n <h1 class=\"template-details-title display-small\">${template.name}</h1>\n <div class=\"template-details-header\">\n <div class=\"template-details-info\">\n <p class=\"template-details-description\">${template.description}</p>\n <div class=\"template-metadata\">\n <div class=\"metadata-item\">\n <span class=\"metadata-label\">Author:</span>\n <span class=\"metadata-value\">${template.author}</span>\n </div>\n <div class=\"metadata-item\">\n <span class=\"metadata-label\">Version:</span>\n <span class=\"metadata-value\">${template.version}</span>\n </div>\n <div class=\"metadata-item\">\n <span class=\"metadata-label\">Created:</span>\n <span class=\"metadata-value\">${new Date(template.createdAt).toLocaleDateString()}</span>\n </div>\n <div class=\"metadata-item\">\n <span class=\"metadata-label\">Updated:</span>\n <span class=\"metadata-value\">${new Date(template.updatedAt).toLocaleDateString()}</span>\n </div>\n </div>\n <div class=\"template-tags\">\n ${template.tags.map((tag) => html`<span class=\"template-tag\">${tag}</span>`)}\n </div>\n </div>\n <div class=\"template-details-actions\">\n <ui-button color=\"filled\" size=\"s\" data-id=\"${template.id}\" @click=\"${this.handleTemplateSelect}\">\n <ui-icon slot=\"icon\">download</ui-icon>\n Use This Template\n </ui-button>\n </div>\n </div>\n\n <div class=\"template-structure\">\n <h2 class=\"structure-title title-large\">Data Domain Structure</h2>\n ${this.renderDomainStructure(template)}\n </div>\n </div>\n `\n }\n\n protected renderDomainStructure(template: DomainTemplate): TemplateResult {\n const { structure } = template\n const { namespaces } = structure\n\n return html`<div class=\"domain-structure\">${this.renderNamespaces(namespaces)}</div>`\n }\n\n protected renderNamespaces(namespaces: NamespaceInfo[]): TemplateResult {\n return html`\n <div class=\"namespaces-section\">\n <h3 class=\"title-medium\">Namespaces</h3>\n ${namespaces.map(\n (namespace) => html`\n <div class=\"namespace-item\">\n <div class=\"namespace-header\">\n <ui-icon class=\"namespace-icon\" icon=\"schemaNamespace\"></ui-icon>\n <h4 class=\"title-small\">${namespace.displayName || namespace.name}</h4>\n </div>\n ${namespace.description\n ? html`<p class=\"namespace-description body-medium\">${namespace.description}</p>`\n : ''}\n ${this.renderModels(namespace.models)}\n </div>\n `\n )}\n </div>\n `\n }\n\n protected renderModels(models: ModelInfo[]): TemplateResult {\n return html`\n <div class=\"models-section\">\n ${models.map(\n (model) => html`\n <div class=\"domain-model\">\n <div class=\"domain-model-header\">\n <ui-icon class=\"model-icon\" icon=\"schemaModel\"></ui-icon>\n <h5 class=\"title-small\">${model.displayName || model.name}</h5>\n </div>\n ${model.description ? html`<p class=\"model-description body-medium\">${model.description}</p>` : ''}\n <div class=\"model-entities\">${model.entities.map((entity) => this.renderDomainEntity(entity))}</div>\n </div>\n `\n )}\n </div>\n `\n }\n\n protected renderDomainEntity(entity: EntityInfo): TemplateResult {\n return html`\n <div class=\"domain-entity\">\n <div class=\"entity-header\">\n <div class=\"entity-title\">\n <ui-icon class=\"entity-icon\" icon=\"schemaEntity\"></ui-icon>\n <h6 class=\"entity-name label-large\">${entity.displayName || entity.name}</h6>\n ${entity.deprecated ? html`<span class=\"deprecated-badge\">Deprecated</span>` : ''}\n </div>\n ${entity.description ? html`<p class=\"entity-description body-medium\">${entity.description}</p>` : ''}\n </div>\n ${entity.semantics?.length > 0\n ? html`\n <div class=\"entity-semantics\">\n <span class=\"semantics-label\">Semantics:</span>\n ${entity.semantics.map((semantic: string) => html`<span class=\"semantic-tag\">${semantic}</span>`)}\n </div>\n `\n : ''}\n ${entity.properties?.length > 0\n ? html`\n <div class=\"entity-section\">\n <h5 class=\"section-title title-small\">Properties (${entity.propertyCount})</h5>\n <div class=\"properties-list\">${entity.properties.map((prop) => this.renderProperty(prop))}</div>\n </div>\n `\n : ''}\n ${entity.associations?.length > 0\n ? html`\n <div class=\"entity-section\">\n <h5 class=\"section-title title-small\">Associations (${entity.associationCount})</h5>\n <div class=\"associations-list\">\n ${entity.associations.map((assoc) => this.renderAssociation(assoc))}\n </div>\n </div>\n `\n : ''}\n </div>\n `\n }\n\n protected renderProperty(property: PropertyInfo): TemplateResult {\n const badges: string[] = []\n\n if (property.required) badges.push('Required')\n if (property.primary) badges.push('Primary')\n if (property.unique) badges.push('Unique')\n if (property.readOnly) badges.push('Read-only')\n if (property.writeOnly) badges.push('Write-only')\n if (property.multiple) badges.push('Multiple')\n if (property.deprecated) badges.push('Deprecated')\n\n const icon = getPropertyIcon(property)\n return html`\n <div class=\"property-item ${property.deprecated ? 'deprecated' : ''}\">\n <div class=\"property-header\">\n <ui-icon class=\"property-icon\" .icon=${icon}></ui-icon>\n <span class=\"label-large\">${property.displayName || property.name}</span>\n <span class=\"property-type body-small\">${property.type}</span>\n </div>\n ${property.description ? html`<p class=\"property-description body-medium\">${property.description}</p>` : ''}\n ${badges.length > 0\n ? html`<div class=\"property-badges\">\n ${badges.map((badge) => html`<span class=\"property-badge body-small\">${badge}</span>`)}\n </div>`\n : ''}\n ${property.defaultValue\n ? html`<div class=\"property-default\">Default: <code>${property.defaultValue}</code></div>`\n : ''}\n ${property.enumValues && property.enumValues.length > 0\n ? html`<div class=\"property-enum\">\n Values: ${property.enumValues.map((val) => html`<code>${val}</code>`)}\n </div>`\n : ''}\n ${property.semantics?.length > 0\n ? html`\n <div class=\"property-semantics\">\n ${property.semantics.map((semantic) => html`<span class=\"semantic-tag\">${semantic}</span>`)}\n </div>\n `\n : ''}\n </div>\n `\n }\n\n protected renderAssociation(association: AssociationInfo): TemplateResult {\n const badges = []\n\n if (association.required) badges.push('Required')\n if (association.multiple) badges.push('Multiple')\n if (association.readOnly) badges.push('Read-only')\n\n return html`\n <div class=\"association-item\">\n <div class=\"association-header\">\n <ui-icon class=\"association-icon\">link</ui-icon>\n <span class=\"label-large\">${association.displayName || association.name}</span>\n <span class=\"association-targets\">${association.targetEntities.join(', ')}</span>\n </div>\n ${association.description ? html`<p class=\"association-description\">${association.description}</p>` : ''}\n ${badges.length > 0\n ? html`<div class=\"association-badges\">\n ${badges.map((badge: string) => html`<span class=\"association-badge\">${badge}</span>`)}\n </div>`\n : ''}\n ${association.semantics?.length > 0\n ? html`\n <div class=\"association-semantics\">\n ${association.semantics.map((semantic: string) => html`<span class=\"semantic-tag\">${semantic}</span>`)}\n </div>\n `\n : ''}\n </div>\n `\n }\n}\n"]}
1
+ {"version":3,"file":"DomainTemplateBrowser.js","sourceRoot":"","sources":["../../../../src/modeling/internals/DomainTemplateBrowser.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-len */\nimport { html, type TemplateResult, LitElement } from 'lit'\nimport { state, property } from 'lit/decorators.js'\nimport type { IconType } from '../../md/icons/Icons.js'\n// Template metadata imports\nimport ecommercePlatformMetadata from '@api-client/domain-templates/meta/ecommerce-platform.json' with { type: 'json' }\nimport blogPublishingPlatformMetadata from '@api-client/domain-templates/meta/blog-publishing-platform.json' with { type: 'json' }\nimport healthcareManagementPlatformMetadata from '@api-client/domain-templates/meta/healthcare-management-platform.json' with { type: 'json' }\nimport financialServicesPlatformMetadata from '@api-client/domain-templates/meta/financial-services-platform.json' with { type: 'json' }\nimport educationManagementPlatformMetadata from '@api-client/domain-templates/meta/education-management-platform.json' with { type: 'json' }\nimport realEstateManagementPlatformMetadata from '@api-client/domain-templates/meta/real-estate-management-platform.json' with { type: 'json' }\nimport manufacturingPlatformMetadata from '@api-client/domain-templates/meta/manufacturing-platform.json' with { type: 'json' }\nimport hospitalityPlatformMetadata from '@api-client/domain-templates/meta/hospitality-platform.json' with { type: 'json' }\nimport legalServicesPlatformMetadata from '@api-client/domain-templates/meta/legal-services-platform.json' with { type: 'json' }\nimport nonProfitPlatformMetadata from '@api-client/domain-templates/meta/non-profit-platform.json' with { type: 'json' }\nimport iotSmartHomePlatformMetadata from '@api-client/domain-templates/meta/iot-smart-home-platform.json' with { type: 'json' }\nimport gamingPlatformMetadata from '@api-client/domain-templates/meta/gaming-platform.json' with { type: 'json' }\nimport { templatesByVertical } from '@api-client/domain-templates'\nimport type {\n AssociationInfo,\n DomainTemplate,\n DomainTemplateMetadata,\n EntityInfo,\n ModelInfo,\n NamespaceInfo,\n PropertyInfo,\n} from '@api-client/domain-templates/types.js'\n\n/**\n * Registry of all available template metadata\n */\nexport const TEMPLATE_METADATA_REGISTRY: Record<string, DomainTemplate> = {\n 'ecommerce-platform': ecommercePlatformMetadata as DomainTemplate,\n 'blog-publishing-platform': blogPublishingPlatformMetadata as DomainTemplate,\n 'healthcare-management-platform': healthcareManagementPlatformMetadata as DomainTemplate,\n 'financial-services-platform': financialServicesPlatformMetadata as DomainTemplate,\n 'education-management-platform': educationManagementPlatformMetadata as DomainTemplate,\n 'real-estate-management-platform': realEstateManagementPlatformMetadata as DomainTemplate,\n 'manufacturing-platform': manufacturingPlatformMetadata as DomainTemplate,\n 'hospitality-platform': hospitalityPlatformMetadata as DomainTemplate,\n 'legal-services-platform': legalServicesPlatformMetadata as DomainTemplate,\n 'non-profit-platform': nonProfitPlatformMetadata as DomainTemplate,\n 'iot-smart-home-platform': iotSmartHomePlatformMetadata as DomainTemplate,\n 'gaming-platform': gamingPlatformMetadata as DomainTemplate,\n} as const\n\nexport const availableCategories = Object.keys(templatesByVertical) as (keyof typeof templatesByVertical)[]\n\n/**\n * The selection detail object dispatched by the `selectionchange` event.\n */\nexport interface BrowseTemplatesSelection {\n /**\n * The key of the selected template\n */\n selected: string\n}\n\n/**\n * Generates an icon name for the DomainProperty that illustrate its primary purpose.\n */\nexport function getPropertyIcon(p: PropertyInfo): IconType {\n if (p.primary) {\n return 'key'\n }\n switch (p.type) {\n // case 'integer':\n case 'number':\n return 'number'\n case 'date':\n return 'calendarToday'\n case 'time':\n return 'schedule'\n case 'datetime':\n return 'event'\n case 'boolean':\n return 'checkCircle'\n case 'binary':\n return 'draft'\n default:\n return 'textFields'\n }\n}\n\nfunction searchTemplates(query: string): DomainTemplateMetadata[] {\n const searchTerm = query.toLowerCase()\n return Object.values(templatesByVertical)\n .flat()\n .filter(\n (template) =>\n template.name.toLowerCase().includes(searchTerm) ||\n template.description.toLowerCase().includes(searchTerm) ||\n template.tags.some((tag) => tag.toLowerCase().includes(searchTerm))\n )\n}\n\nfunction getVerticalName(id: string): string {\n switch (id) {\n case 'businessServices':\n return 'Business Services'\n case 'educationTraining':\n return 'Education & Training'\n case 'healthcareLifeSciences':\n return 'Healthcare & Life Sciences'\n case 'manufacturingLogistics':\n return 'Manufacturing & Logistics'\n case 'publicSector':\n return 'Public Sector'\n case 'realEstateConstruction':\n return 'Real Estate & Construction'\n case 'technologyMedia':\n return 'Technology & Media'\n default:\n return id\n }\n}\n\n/**\n * A browser component for exploring and selecting domain templates.\n * It provides the UI for searching, filtering, previewing, and selecting data domain templates.\n *\n * It manages the filtering state internally but allows property binding for query and category.\n *\n * @fires selectionchange - Dispatched when the user selects a template item. The detail object contains the `selected`\n * status which is the template ID (e.g. `CustomEvent<{ selected: string }>`).\n */\nexport default class DomainTemplateBrowser extends LitElement {\n /**\n * The user entered search query to filter the templates.\n * If not set, all templates are shown (unless filtered by category).\n * @attribute\n */\n @property({ type: String }) accessor query: string | undefined\n\n /**\n * The selected template category to filter the list.\n * If not set, all categories are included.\n * @attribute\n */\n @property({ type: String }) accessor category: keyof typeof templatesByVertical | undefined\n\n /**\n * The internal list of filtered templates to render in the UI.\n * This is computed based on `query` and `category`.\n */\n @state() accessor templates: DomainTemplateMetadata[] = [...Object.values(templatesByVertical)].flat()\n\n /**\n * The currently previewed template. When set, the component renders the preview view instead of the list.\n */\n @state() accessor previewTemplate: DomainTemplate | undefined\n\n /**\n * Handles keydown events on the search input.\n * Triggers a search on Enter or resets on Escape.\n */\n protected handleSearchKeydown(e: KeyboardEvent): void {\n const input = e.currentTarget as HTMLInputElement\n const value = input.value.trim()\n if (e.key === 'Enter' && value) {\n this.search(value)\n } else if (e.key === 'Escape') {\n e.preventDefault()\n e.stopPropagation()\n input.value = ''\n this.search()\n }\n }\n\n /**\n * Performs an in-memory search for templates matching the provided query.\n * Updates the `templates` state with the search results.\n *\n * @param value The search query. If empty, resets the search.\n */\n search(value?: string): void {\n this.query = value\n if (!value) {\n this.templates = [...Object.values(templatesByVertical)].flat()\n } else {\n this.templates = searchTemplates(value)\n }\n }\n\n protected handleFilterClick(e: Event): void {\n const target = e.target as HTMLElement\n const value = target.dataset.value\n // Toggle category selection\n if (this.category === value) {\n return\n }\n if (value === '') {\n this.category = undefined\n this.templates = [...Object.values(templatesByVertical)].flat()\n } else {\n this.category = value as keyof typeof templatesByVertical\n this.templates = templatesByVertical[this.category].flat()\n }\n }\n\n protected handleTemplateSelect(e: Event): void {\n const templateId = (e.currentTarget as HTMLElement).dataset.id\n if (!templateId) {\n return\n }\n // Dispatch selection event\n this.dispatchEvent(\n new CustomEvent<BrowseTemplatesSelection>('selectionchange', {\n detail: { selected: templateId },\n bubbles: false,\n })\n )\n }\n\n protected handleTemplatePreview(e: Event): void {\n e.stopPropagation()\n const templateId = (e.currentTarget as HTMLElement).dataset.id\n if (!templateId) {\n return\n }\n const value = TEMPLATE_METADATA_REGISTRY[templateId]\n if (!value) {\n return\n }\n this.previewTemplate = value\n }\n\n protected handleClosePreview(): void {\n this.previewTemplate = undefined\n }\n\n protected override render(): TemplateResult {\n if (this.previewTemplate) {\n return this.renderPreviewMode()\n }\n\n return html`\n <div class=\"controls\">${this.renderTopControls()} ${this.renderCategoryFilters()}</div>\n ${this.templates.length > 0 ? this.renderTemplatesGrid() : this.renderEmptyState()}\n `\n }\n\n protected renderTopControls(): TemplateResult {\n return html`\n <div class=\"top-row\">\n <div class=\"search-group\">${this.renderSearchInput()}</div>\n </div>\n `\n }\n\n protected renderSearchInput(): TemplateResult {\n return html`\n <ui-outlined-text-field\n id=\"template-search\"\n label=\"Search templates...\"\n type=\"search\"\n class=\"search\"\n .value=\"${this.query ?? ''}\"\n @keydown=\"${this.handleSearchKeydown}\"\n >\n <ui-icon slot=\"prefix\">search</ui-icon>\n </ui-outlined-text-field>\n `\n }\n\n protected renderCategoryFilters(): TemplateResult {\n return html`\n <div class=\"category-tabs\">\n <ui-button-group type=\"connected\">\n <ui-button\n color=\"tonal\"\n size=\"s\"\n toggle\n data-value=\"\"\n ?selected=\"${!this.category}\"\n @click=\"${this.handleFilterClick}\"\n >\n All\n </ui-button>\n ${availableCategories.map((category) => {\n const isSelected = this.category === category\n return html`<ui-button\n color=\"tonal\"\n size=\"s\"\n toggle\n data-value=\"${category}\"\n ?selected=\"${isSelected}\"\n @click=\"${this.handleFilterClick}\"\n >\n ${getVerticalName(category)}\n </ui-button>`\n })}\n </ui-button-group>\n </div>\n `\n }\n\n protected renderTemplatesGrid(): TemplateResult {\n return html`\n <div class=\"templates-grid\">${this.templates.map((template) => this.renderTemplateCard(template))}</div>\n `\n }\n\n protected renderTemplateCard(template: DomainTemplateMetadata): TemplateResult {\n // Use available properties from DomainTemplate interface\n const templateName = template.name || 'Unnamed Template'\n const templateDescription = template.description || 'No description available'\n\n return html`\n <div class=\"template-card\">\n <div class=\"meta\">\n <span class=\"value body-small\" title=\"Updated at\">${new Date(template.updatedAt).toLocaleDateString()}</span>\n <span class=\"value body-small\" title=\"Version\">v${template.version}</span>\n </div>\n <h3 class=\"template-title display-small\">${templateName}</h3>\n <p class=\"template-description body-medium\">${templateDescription}</p>\n\n <div class=\"template-actions\">\n <ui-button data-id=\"${template.id}\" color=\"outlined\" size=\"s\" @click=\"${this.handleTemplatePreview}\">\n Details\n </ui-button>\n <ui-button color=\"filled\" size=\"s\" data-id=\"${template.id}\" @click=\"${this.handleTemplateSelect}\">\n Use template\n </ui-button>\n </div>\n </div>\n `\n }\n\n protected renderEmptyState(): TemplateResult {\n const message = this.query\n ? `No templates found for \"${this.query}\"`\n : this.category\n ? `No templates found in \"${this.category}\" category`\n : 'No templates available'\n\n const description =\n this.query || this.category ? 'Try adjusting your search or filters' : 'Templates will appear here when available'\n\n return html`\n <div class=\"empty-state\">\n <ui-icon class=\"empty-icon\">search_off</ui-icon>\n <h3 class=\"empty-title title-large\">${message}</h3>\n <p class=\"empty-description body-large\">${description}</p>\n </div>\n `\n }\n\n renderPreviewMode(): TemplateResult {\n return html`\n <div class=\"preview-header\">\n <ui-button color=\"text\" @click=\"${this.handleClosePreview}\">\n <ui-icon slot=\"icon\">arrow_back</ui-icon>\n Back to Templates\n </ui-button>\n </div>\n <div class=\"preview-main\">${this.renderTemplateDetails(this.previewTemplate as DomainTemplate)}</div>\n `\n }\n\n protected renderTemplateDetails(template: DomainTemplate): TemplateResult {\n return html`\n <div class=\"template-details\">\n <h1 class=\"template-details-title display-small\">${template.name}</h1>\n <div class=\"template-details-header\">\n <div class=\"template-details-info\">\n <p class=\"template-details-description\">${template.description}</p>\n <div class=\"template-metadata\">\n <div class=\"metadata-item\">\n <span class=\"metadata-label\">Author:</span>\n <span class=\"metadata-value\">${template.author}</span>\n </div>\n <div class=\"metadata-item\">\n <span class=\"metadata-label\">Version:</span>\n <span class=\"metadata-value\">${template.version}</span>\n </div>\n <div class=\"metadata-item\">\n <span class=\"metadata-label\">Created:</span>\n <span class=\"metadata-value\">${new Date(template.createdAt).toLocaleDateString()}</span>\n </div>\n <div class=\"metadata-item\">\n <span class=\"metadata-label\">Updated:</span>\n <span class=\"metadata-value\">${new Date(template.updatedAt).toLocaleDateString()}</span>\n </div>\n </div>\n <div class=\"template-tags\">\n ${template.tags.map((tag) => html`<span class=\"template-tag\">${tag}</span>`)}\n </div>\n </div>\n <div class=\"template-details-actions\">\n <ui-button color=\"filled\" size=\"s\" data-id=\"${template.id}\" @click=\"${this.handleTemplateSelect}\">\n <ui-icon slot=\"icon\">download</ui-icon>\n Use This Template\n </ui-button>\n </div>\n </div>\n\n <div class=\"template-structure\">\n <h2 class=\"structure-title title-large\">Data Domain Structure</h2>\n ${this.renderDomainStructure(template)}\n </div>\n </div>\n `\n }\n\n protected renderDomainStructure(template: DomainTemplate): TemplateResult {\n const { structure } = template\n const { namespaces } = structure\n\n return html`<div class=\"domain-structure\">${this.renderNamespaces(namespaces)}</div>`\n }\n\n protected renderNamespaces(namespaces: NamespaceInfo[]): TemplateResult {\n return html`\n <div class=\"namespaces-section\">\n <h3 class=\"title-medium\">Namespaces</h3>\n ${namespaces.map(\n (namespace) => html`\n <div class=\"namespace-item\">\n <div class=\"namespace-header\">\n <ui-icon class=\"namespace-icon\" icon=\"schemaNamespace\"></ui-icon>\n <h4 class=\"title-small\">${namespace.displayName || namespace.name}</h4>\n </div>\n ${namespace.description\n ? html`<p class=\"namespace-description body-medium\">${namespace.description}</p>`\n : ''}\n ${this.renderModels(namespace.models)}\n </div>\n `\n )}\n </div>\n `\n }\n\n protected renderModels(models: ModelInfo[]): TemplateResult {\n return html`\n <div class=\"models-section\">\n ${models.map(\n (model) => html`\n <div class=\"domain-model\">\n <div class=\"domain-model-header\">\n <ui-icon class=\"model-icon\" icon=\"schemaModel\"></ui-icon>\n <h5 class=\"title-small\">${model.displayName || model.name}</h5>\n </div>\n ${model.description ? html`<p class=\"model-description body-medium\">${model.description}</p>` : ''}\n <div class=\"model-entities\">${model.entities.map((entity) => this.renderDomainEntity(entity))}</div>\n </div>\n `\n )}\n </div>\n `\n }\n\n protected renderDomainEntity(entity: EntityInfo): TemplateResult {\n return html`\n <div class=\"domain-entity\">\n <div class=\"entity-header\">\n <div class=\"entity-title\">\n <ui-icon class=\"entity-icon\" icon=\"schemaEntity\"></ui-icon>\n <h6 class=\"entity-name label-large\">${entity.displayName || entity.name}</h6>\n ${entity.deprecated ? html`<span class=\"deprecated-badge\">Deprecated</span>` : ''}\n </div>\n ${entity.description ? html`<p class=\"entity-description body-medium\">${entity.description}</p>` : ''}\n </div>\n ${entity.semantics?.length > 0\n ? html`\n <div class=\"entity-semantics\">\n <span class=\"semantics-label\">Semantics:</span>\n ${entity.semantics.map((semantic: string) => html`<span class=\"semantic-tag\">${semantic}</span>`)}\n </div>\n `\n : ''}\n ${entity.properties?.length > 0\n ? html`\n <div class=\"entity-section\">\n <h5 class=\"section-title title-small\">Properties (${entity.propertyCount})</h5>\n <div class=\"properties-list\">${entity.properties.map((prop) => this.renderProperty(prop))}</div>\n </div>\n `\n : ''}\n ${entity.associations?.length > 0\n ? html`\n <div class=\"entity-section\">\n <h5 class=\"section-title title-small\">Associations (${entity.associationCount})</h5>\n <div class=\"associations-list\">\n ${entity.associations.map((assoc) => this.renderAssociation(assoc))}\n </div>\n </div>\n `\n : ''}\n </div>\n `\n }\n\n protected renderProperty(property: PropertyInfo): TemplateResult {\n const badges: string[] = []\n\n if (property.required) badges.push('Required')\n if (property.primary) badges.push('Primary')\n if (property.unique) badges.push('Unique')\n if (property.readOnly) badges.push('Read-only')\n if (property.writeOnly) badges.push('Write-only')\n if (property.multiple) badges.push('Multiple')\n if (property.deprecated) badges.push('Deprecated')\n\n const icon = getPropertyIcon(property)\n return html`\n <div class=\"property-item ${property.deprecated ? 'deprecated' : ''}\">\n <div class=\"property-header\">\n <ui-icon class=\"property-icon\" .icon=${icon}></ui-icon>\n <span class=\"label-large\">${property.displayName || property.name}</span>\n <span class=\"property-type body-small\">${property.type}</span>\n </div>\n ${property.description ? html`<p class=\"property-description body-medium\">${property.description}</p>` : ''}\n ${badges.length > 0\n ? html`<div class=\"property-badges\">\n ${badges.map((badge) => html`<span class=\"property-badge body-small\">${badge}</span>`)}\n </div>`\n : ''}\n ${property.defaultValue\n ? html`<div class=\"property-default\">Default: <code>${property.defaultValue}</code></div>`\n : ''}\n ${property.enumValues && property.enumValues.length > 0\n ? html`<div class=\"property-enum\">\n Values: ${property.enumValues.map((val) => html`<code>${val}</code>`)}\n </div>`\n : ''}\n ${property.semantics?.length > 0\n ? html`\n <div class=\"property-semantics\">\n ${property.semantics.map((semantic) => html`<span class=\"semantic-tag\">${semantic}</span>`)}\n </div>\n `\n : ''}\n </div>\n `\n }\n\n protected renderAssociation(association: AssociationInfo): TemplateResult {\n const badges = []\n\n if (association.required) badges.push('Required')\n if (association.multiple) badges.push('Multiple')\n if (association.readOnly) badges.push('Read-only')\n\n return html`\n <div class=\"association-item\">\n <div class=\"association-header\">\n <ui-icon class=\"association-icon\">link</ui-icon>\n <span class=\"label-large\">${association.displayName || association.name}</span>\n <span class=\"association-targets\">${association.targetEntities.join(', ')}</span>\n </div>\n ${association.description ? html`<p class=\"association-description\">${association.description}</p>` : ''}\n ${badges.length > 0\n ? html`<div class=\"association-badges\">\n ${badges.map((badge: string) => html`<span class=\"association-badge\">${badge}</span>`)}\n </div>`\n : ''}\n ${association.semantics?.length > 0\n ? html`\n <div class=\"association-semantics\">\n ${association.semantics.map((semantic: string) => html`<span class=\"semantic-tag\">${semantic}</span>`)}\n </div>\n `\n : ''}\n </div>\n `\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DomainTemplateBrowser.styles.d.ts","sourceRoot":"","sources":["../../../../../src/modeling/internals/styles/DomainTemplateBrowser.styles.ts"],"names":[],"mappings":";AAEA,wBAsiBC"}
1
+ {"version":3,"file":"DomainTemplateBrowser.styles.d.ts","sourceRoot":"","sources":["../../../../../src/modeling/internals/styles/DomainTemplateBrowser.styles.ts"],"names":[],"mappings":";AAEA,wBAkjBC"}
@@ -70,6 +70,18 @@ export default css `
70
70
  color: var(--md-sys-color-on-surface);
71
71
  border: 1px solid var(--md-sys-color-outline-variant);
72
72
  border-radius: var(--md-sys-shape-corner-medium);
73
+
74
+ .meta {
75
+ display: flex;
76
+ gap: 8px;
77
+
78
+ .value {
79
+ color: var(--md-sys-color-on-surface-variant);
80
+ border: 1px var(--md-sys-color-outline-variant) solid;
81
+ border-radius: 8px;
82
+ padding: 0 4px;
83
+ }
84
+ }
73
85
  }
74
86
 
75
87
  .template-description {
@@ -1 +1 @@
1
- {"version":3,"file":"DomainTemplateBrowser.styles.js","sourceRoot":"","sources":["../../../../../src/modeling/internals/styles/DomainTemplateBrowser.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsiBjB,CAAA","sourcesContent":["import { css } from 'lit'\n\nexport default css`\n :host {\n align-self: stretch;\n display: flex;\n flex-direction: column;\n gap: 20px;\n overflow-y: auto;\n max-height: 75vh;\n }\n\n .search {\n width: 100%;\n }\n\n .empty-list {\n padding: 12px 0;\n }\n\n .controls {\n display: flex;\n gap: 12px;\n padding-top: 12px;\n flex-direction: column;\n\n .filters {\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n }\n\n .top-row {\n display: flex;\n gap: 12px;\n align-items: center;\n flex-wrap: wrap;\n }\n\n .search-group {\n flex: 1;\n min-width: 300px;\n }\n\n .sort-group {\n display: flex;\n gap: 8px;\n align-items: center;\n }\n }\n\n .category-tabs {\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n padding-bottom: 8px;\n }\n\n .templates-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 20px;\n padding: 20px 0;\n }\n\n .template-card {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 20px;\n background: var(--md-sys-color-surface);\n color: var(--md-sys-color-on-surface);\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: var(--md-sys-shape-corner-medium);\n }\n\n .template-description {\n color: var(--md-sys-color-on-surface-variant);\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n margin: 0;\n }\n\n .template-stats {\n display: flex;\n gap: 16px;\n color: var(--md-sys-color-on-surface-variant);\n font-size: 14px;\n }\n\n .stat {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .template-actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n flex: 1;\n align-items: flex-end;\n }\n\n .empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n padding: 60px 20px;\n text-align: center;\n }\n\n .empty-icon {\n font-size: 64px;\n color: var(--md-sys-color-outline);\n opacity: 0.6;\n width: 64px;\n height: 64px;\n }\n\n .empty-title {\n color: var(--md-sys-color-on-surface);\n margin: 0;\n }\n\n .empty-description {\n color: var(--md-sys-color-on-surface-variant);\n margin: 0;\n max-width: 400px;\n }\n\n /* Preview Mode Styles */\n .preview-layout {\n display: grid;\n grid-template-columns: 300px 1fr;\n gap: 24px;\n height: 100%;\n }\n\n .preview-sidebar {\n display: flex;\n flex-direction: column;\n gap: 16px;\n background: var(--md-sys-color-surface-variant);\n border-radius: var(--md-sys-shape-corner-large);\n padding: 20px;\n }\n\n .preview-header {\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n padding-bottom: 16px;\n }\n\n .compact-template-card {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border-radius: var(--md-sys-shape-corner-medium);\n cursor: pointer;\n transition: background-color 0.2s ease-in-out;\n\n &:hover {\n background: var(--md-sys-color-surface);\n }\n\n &.selected {\n background: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n }\n }\n\n .compact-icon {\n font-size: 20px;\n }\n\n .compact-info {\n flex: 1;\n min-width: 0;\n }\n\n .compact-title {\n font-weight: 500;\n font-size: 14px;\n line-height: 1.2;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .compact-category {\n font-size: 12px;\n opacity: 0.7;\n }\n\n .preview-main {\n background: var(--md-sys-color-surface);\n border-radius: var(--md-sys-shape-corner-large);\n overflow-y: auto;\n }\n\n .template-details {\n padding: 24px;\n color: var(--md-sys-color-on-surface);\n }\n\n .template-details-header {\n display: flex;\n gap: 20px;\n margin-bottom: 32px;\n }\n\n .template-details-info {\n flex: 1;\n min-width: 0;\n }\n\n .template-details-title {\n margin: 0 0 8px 0;\n color: var(--md-sys-color-on-surface);\n }\n\n .template-details-description {\n margin: 0 0 16px 0;\n color: var(--md-sys-color-on-surface-variant);\n line-height: 1.5;\n }\n\n .template-metadata {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n margin-bottom: 16px;\n }\n\n .metadata-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .metadata-label {\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n text-transform: uppercase;\n font-weight: 500;\n }\n\n .metadata-value {\n color: var(--md-sys-color-on-surface);\n }\n\n .template-tags {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n .template-tag {\n padding: 4px 8px;\n background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n border-radius: var(--md-sys-shape-corner-small);\n font-size: 12px;\n }\n\n .template-details-actions {\n display: flex;\n align-items: flex-start;\n }\n\n .namespace-item {\n margin-top: 12px;\n }\n\n .namespace-description {\n margin: 0;\n }\n\n .structure-title {\n margin: 0 0 24px 0;\n color: var(--md-sys-color-on-surface);\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n padding-bottom: 8px;\n }\n\n .domain-overview {\n margin-bottom: 32px;\n padding: 20px;\n background: var(--md-sys-color-surface-variant);\n border-radius: var(--md-sys-shape-corner-medium);\n }\n\n .domain-name {\n margin: 0 0 8px 0;\n color: var(--md-sys-color-on-surface);\n }\n\n .domain-description {\n margin: 0 0 16px 0;\n color: var(--md-sys-color-on-surface-variant);\n }\n\n .domain-stats {\n display: flex;\n gap: 24px;\n }\n\n .stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n }\n\n .stat-value {\n font-size: 24px;\n font-weight: 700;\n color: var(--md-sys-color-primary);\n }\n\n .models-section {\n margin-top: 24px;\n padding-left: 20px;\n border-left: 1px solid var(--md-sys-color-outline-variant);\n display: flex;\n flex-direction: column;\n gap: 40px;\n }\n\n .domain-model-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 0;\n }\n\n .model-description {\n margin: 0;\n }\n\n .model-entities {\n margin-top: 20px;\n padding-left: 20px;\n border-left: 1px solid var(--md-sys-color-outline-variant);\n display: flex;\n flex-direction: column;\n gap: 40px;\n }\n\n .domain-entity {\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n .domain-entity:not(:last-child) {\n border-bottom: 1px solid var(--md-sys-color-outline);\n padding-bottom: 20px;\n }\n\n .entity-header {\n padding: 8px 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .entity-title {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .entity-name {\n margin: 0;\n flex: 1;\n }\n\n .deprecated-badge {\n padding: 2px 6px;\n background: var(--md-sys-color-error-container);\n color: var(--md-sys-color-on-error-container);\n border-radius: var(--md-sys-shape-corner-small);\n font-size: 10px;\n text-transform: uppercase;\n }\n\n .entity-description {\n margin: 0;\n }\n\n .entity-semantics {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .semantics-label {\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n font-weight: 500;\n }\n\n .semantic-tag {\n padding: 2px 6px;\n background: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n border-radius: var(--md-sys-shape-corner-small);\n font-size: 10px;\n }\n\n .section-title {\n margin: 0;\n padding: 12px 0;\n }\n\n .properties-list,\n .associations-list {\n display: flex;\n flex-direction: column;\n }\n\n .property-item,\n .association-item {\n padding: 20px 0;\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n display: flex;\n flex-direction: column;\n gap: 8px;\n\n &:last-child {\n border-bottom: none;\n }\n\n &.deprecated {\n opacity: 0.6;\n background: var(--md-sys-color-error-container);\n }\n }\n\n .property-header,\n .association-header {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .property-type {\n padding: 4px 8px;\n background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n border-radius: var(--md-sys-shape-corner-small);\n }\n\n .association-targets,\n .association-cardinality {\n padding: 2px 6px;\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n border-radius: var(--md-sys-shape-corner-small);\n font-size: 12px;\n }\n\n .property-description,\n .association-description {\n margin: 0;\n color: var(--md-sys-color-on-surface-variant);\n }\n\n .property-badges,\n .association-badges {\n display: flex;\n gap: 4px;\n margin-top: 8px;\n flex-wrap: wrap;\n }\n\n .property-badge,\n .association-badge {\n padding: 2px 6px;\n background: var(--md-sys-color-surface-variant);\n color: var(--md-sys-color-on-surface-variant);\n border-radius: var(--md-sys-shape-corner-small);\n }\n\n .property-default,\n .property-enum {\n margin-top: 4px;\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n }\n\n .property-default code,\n .property-enum code {\n background: var(--md-sys-color-surface-variant);\n padding: 2px 4px;\n border-radius: var(--md-sys-shape-corner-small);\n margin-right: 8px;\n }\n\n .property-semantics,\n .association-semantics {\n display: flex;\n gap: 4px;\n margin-top: 8px;\n flex-wrap: wrap;\n }\n\n .namespace-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 4px 0px;\n }\n\n @media (max-width: 768px) {\n .templates-grid {\n grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n gap: 16px;\n }\n\n .controls .top-row {\n flex-direction: column;\n align-items: stretch;\n }\n\n .controls .search-group {\n min-width: unset;\n }\n\n .preview-layout {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .preview-sidebar {\n order: 2;\n }\n\n .template-details-header {\n flex-direction: column;\n gap: 16px;\n }\n\n .domain-stats {\n flex-direction: column;\n gap: 12px;\n }\n }\n`\n"]}
1
+ {"version":3,"file":"DomainTemplateBrowser.styles.js","sourceRoot":"","sources":["../../../../../src/modeling/internals/styles/DomainTemplateBrowser.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkjBjB,CAAA","sourcesContent":["import { css } from 'lit'\n\nexport default css`\n :host {\n align-self: stretch;\n display: flex;\n flex-direction: column;\n gap: 20px;\n overflow-y: auto;\n max-height: 75vh;\n }\n\n .search {\n width: 100%;\n }\n\n .empty-list {\n padding: 12px 0;\n }\n\n .controls {\n display: flex;\n gap: 12px;\n padding-top: 12px;\n flex-direction: column;\n\n .filters {\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n }\n\n .top-row {\n display: flex;\n gap: 12px;\n align-items: center;\n flex-wrap: wrap;\n }\n\n .search-group {\n flex: 1;\n min-width: 300px;\n }\n\n .sort-group {\n display: flex;\n gap: 8px;\n align-items: center;\n }\n }\n\n .category-tabs {\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n padding-bottom: 8px;\n }\n\n .templates-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 20px;\n padding: 20px 0;\n }\n\n .template-card {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 20px;\n background: var(--md-sys-color-surface);\n color: var(--md-sys-color-on-surface);\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: var(--md-sys-shape-corner-medium);\n\n .meta {\n display: flex;\n gap: 8px;\n\n .value {\n color: var(--md-sys-color-on-surface-variant);\n border: 1px var(--md-sys-color-outline-variant) solid;\n border-radius: 8px;\n padding: 0 4px;\n }\n }\n }\n\n .template-description {\n color: var(--md-sys-color-on-surface-variant);\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n margin: 0;\n }\n\n .template-stats {\n display: flex;\n gap: 16px;\n color: var(--md-sys-color-on-surface-variant);\n font-size: 14px;\n }\n\n .stat {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .template-actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n flex: 1;\n align-items: flex-end;\n }\n\n .empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n padding: 60px 20px;\n text-align: center;\n }\n\n .empty-icon {\n font-size: 64px;\n color: var(--md-sys-color-outline);\n opacity: 0.6;\n width: 64px;\n height: 64px;\n }\n\n .empty-title {\n color: var(--md-sys-color-on-surface);\n margin: 0;\n }\n\n .empty-description {\n color: var(--md-sys-color-on-surface-variant);\n margin: 0;\n max-width: 400px;\n }\n\n /* Preview Mode Styles */\n .preview-layout {\n display: grid;\n grid-template-columns: 300px 1fr;\n gap: 24px;\n height: 100%;\n }\n\n .preview-sidebar {\n display: flex;\n flex-direction: column;\n gap: 16px;\n background: var(--md-sys-color-surface-variant);\n border-radius: var(--md-sys-shape-corner-large);\n padding: 20px;\n }\n\n .preview-header {\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n padding-bottom: 16px;\n }\n\n .compact-template-card {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border-radius: var(--md-sys-shape-corner-medium);\n cursor: pointer;\n transition: background-color 0.2s ease-in-out;\n\n &:hover {\n background: var(--md-sys-color-surface);\n }\n\n &.selected {\n background: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n }\n }\n\n .compact-icon {\n font-size: 20px;\n }\n\n .compact-info {\n flex: 1;\n min-width: 0;\n }\n\n .compact-title {\n font-weight: 500;\n font-size: 14px;\n line-height: 1.2;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .compact-category {\n font-size: 12px;\n opacity: 0.7;\n }\n\n .preview-main {\n background: var(--md-sys-color-surface);\n border-radius: var(--md-sys-shape-corner-large);\n overflow-y: auto;\n }\n\n .template-details {\n padding: 24px;\n color: var(--md-sys-color-on-surface);\n }\n\n .template-details-header {\n display: flex;\n gap: 20px;\n margin-bottom: 32px;\n }\n\n .template-details-info {\n flex: 1;\n min-width: 0;\n }\n\n .template-details-title {\n margin: 0 0 8px 0;\n color: var(--md-sys-color-on-surface);\n }\n\n .template-details-description {\n margin: 0 0 16px 0;\n color: var(--md-sys-color-on-surface-variant);\n line-height: 1.5;\n }\n\n .template-metadata {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n margin-bottom: 16px;\n }\n\n .metadata-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .metadata-label {\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n text-transform: uppercase;\n font-weight: 500;\n }\n\n .metadata-value {\n color: var(--md-sys-color-on-surface);\n }\n\n .template-tags {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n .template-tag {\n padding: 4px 8px;\n background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n border-radius: var(--md-sys-shape-corner-small);\n font-size: 12px;\n }\n\n .template-details-actions {\n display: flex;\n align-items: flex-start;\n }\n\n .namespace-item {\n margin-top: 12px;\n }\n\n .namespace-description {\n margin: 0;\n }\n\n .structure-title {\n margin: 0 0 24px 0;\n color: var(--md-sys-color-on-surface);\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n padding-bottom: 8px;\n }\n\n .domain-overview {\n margin-bottom: 32px;\n padding: 20px;\n background: var(--md-sys-color-surface-variant);\n border-radius: var(--md-sys-shape-corner-medium);\n }\n\n .domain-name {\n margin: 0 0 8px 0;\n color: var(--md-sys-color-on-surface);\n }\n\n .domain-description {\n margin: 0 0 16px 0;\n color: var(--md-sys-color-on-surface-variant);\n }\n\n .domain-stats {\n display: flex;\n gap: 24px;\n }\n\n .stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n }\n\n .stat-value {\n font-size: 24px;\n font-weight: 700;\n color: var(--md-sys-color-primary);\n }\n\n .models-section {\n margin-top: 24px;\n padding-left: 20px;\n border-left: 1px solid var(--md-sys-color-outline-variant);\n display: flex;\n flex-direction: column;\n gap: 40px;\n }\n\n .domain-model-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 0;\n }\n\n .model-description {\n margin: 0;\n }\n\n .model-entities {\n margin-top: 20px;\n padding-left: 20px;\n border-left: 1px solid var(--md-sys-color-outline-variant);\n display: flex;\n flex-direction: column;\n gap: 40px;\n }\n\n .domain-entity {\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n\n .domain-entity:not(:last-child) {\n border-bottom: 1px solid var(--md-sys-color-outline);\n padding-bottom: 20px;\n }\n\n .entity-header {\n padding: 8px 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .entity-title {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .entity-name {\n margin: 0;\n flex: 1;\n }\n\n .deprecated-badge {\n padding: 2px 6px;\n background: var(--md-sys-color-error-container);\n color: var(--md-sys-color-on-error-container);\n border-radius: var(--md-sys-shape-corner-small);\n font-size: 10px;\n text-transform: uppercase;\n }\n\n .entity-description {\n margin: 0;\n }\n\n .entity-semantics {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .semantics-label {\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n font-weight: 500;\n }\n\n .semantic-tag {\n padding: 2px 6px;\n background: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n border-radius: var(--md-sys-shape-corner-small);\n font-size: 10px;\n }\n\n .section-title {\n margin: 0;\n padding: 12px 0;\n }\n\n .properties-list,\n .associations-list {\n display: flex;\n flex-direction: column;\n }\n\n .property-item,\n .association-item {\n padding: 20px 0;\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n display: flex;\n flex-direction: column;\n gap: 8px;\n\n &:last-child {\n border-bottom: none;\n }\n\n &.deprecated {\n opacity: 0.6;\n background: var(--md-sys-color-error-container);\n }\n }\n\n .property-header,\n .association-header {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .property-type {\n padding: 4px 8px;\n background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n border-radius: var(--md-sys-shape-corner-small);\n }\n\n .association-targets,\n .association-cardinality {\n padding: 2px 6px;\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n border-radius: var(--md-sys-shape-corner-small);\n font-size: 12px;\n }\n\n .property-description,\n .association-description {\n margin: 0;\n color: var(--md-sys-color-on-surface-variant);\n }\n\n .property-badges,\n .association-badges {\n display: flex;\n gap: 4px;\n margin-top: 8px;\n flex-wrap: wrap;\n }\n\n .property-badge,\n .association-badge {\n padding: 2px 6px;\n background: var(--md-sys-color-surface-variant);\n color: var(--md-sys-color-on-surface-variant);\n border-radius: var(--md-sys-shape-corner-small);\n }\n\n .property-default,\n .property-enum {\n margin-top: 4px;\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n }\n\n .property-default code,\n .property-enum code {\n background: var(--md-sys-color-surface-variant);\n padding: 2px 4px;\n border-radius: var(--md-sys-shape-corner-small);\n margin-right: 8px;\n }\n\n .property-semantics,\n .association-semantics {\n display: flex;\n gap: 4px;\n margin-top: 8px;\n flex-wrap: wrap;\n }\n\n .namespace-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 4px 0px;\n }\n\n @media (max-width: 768px) {\n .templates-grid {\n grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n gap: 16px;\n }\n\n .controls .top-row {\n flex-direction: column;\n align-items: stretch;\n }\n\n .controls .search-group {\n min-width: unset;\n }\n\n .preview-layout {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .preview-sidebar {\n order: 2;\n }\n\n .template-details-header {\n flex-direction: column;\n gap: 16px;\n }\n\n .domain-stats {\n flex-direction: column;\n gap: 12px;\n }\n }\n`\n"]}