@crowdstrike/glide-core 0.19.5 → 0.20.0

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.
Files changed (139) hide show
  1. package/README.md +7 -26
  2. package/dist/accordion.d.ts +13 -4
  3. package/dist/accordion.js +1 -1
  4. package/dist/button-group.button.d.ts +16 -3
  5. package/dist/button-group.button.js +1 -1
  6. package/dist/button-group.d.ts +16 -5
  7. package/dist/button-group.js +1 -1
  8. package/dist/button.d.ts +16 -3
  9. package/dist/button.js +1 -1
  10. package/dist/checkbox-group.d.ts +49 -6
  11. package/dist/checkbox-group.js +16 -5
  12. package/dist/checkbox-group.styles.js +1 -1
  13. package/dist/checkbox.d.ts +50 -8
  14. package/dist/checkbox.js +22 -9
  15. package/dist/checkbox.styles.js +1 -1
  16. package/dist/drawer.d.ts +13 -3
  17. package/dist/drawer.js +1 -1
  18. package/dist/drawer.styles.js +6 -1
  19. package/dist/dropdown.d.ts +78 -11
  20. package/dist/dropdown.js +83 -55
  21. package/dist/dropdown.option.d.ts +31 -4
  22. package/dist/dropdown.option.js +1 -1
  23. package/dist/dropdown.option.styles.js +1 -1
  24. package/dist/dropdown.styles.js +14 -12
  25. package/dist/form-controls-layout.d.ts +10 -2
  26. package/dist/form-controls-layout.js +1 -1
  27. package/dist/icon-button.d.ts +12 -2
  28. package/dist/icon-button.js +1 -1
  29. package/dist/icon-button.styles.js +8 -8
  30. package/dist/icons/checked.js +1 -1
  31. package/dist/icons/chevron.js +1 -1
  32. package/dist/icons/magnifying-glass.js +1 -1
  33. package/dist/icons/pencil.js +1 -1
  34. package/dist/icons/severity-critical.d.ts +2 -0
  35. package/dist/icons/severity-critical.js +1 -0
  36. package/dist/icons/severity-informational.d.ts +2 -0
  37. package/dist/icons/severity-informational.js +1 -0
  38. package/dist/icons/severity-medium.d.ts +2 -0
  39. package/dist/icons/severity-medium.js +1 -0
  40. package/dist/icons/x.js +1 -1
  41. package/dist/inline-alert.d.ts +9 -10
  42. package/dist/inline-alert.js +1 -1
  43. package/dist/inline-alert.styles.js +3 -3
  44. package/dist/input.d.ts +53 -12
  45. package/dist/input.js +32 -13
  46. package/dist/input.styles.js +6 -3
  47. package/dist/label.d.ts +13 -7
  48. package/dist/label.js +1 -1
  49. package/dist/label.styles.js +10 -14
  50. package/dist/library/assert-slot.d.ts +2 -3
  51. package/dist/library/assert-slot.js +1 -1
  52. package/dist/library/assert-slot.test.js +10 -21
  53. package/dist/library/expect-unhandled-rejection.d.ts +1 -1
  54. package/dist/library/final.d.ts +3 -0
  55. package/dist/library/final.js +1 -0
  56. package/dist/library/final.test.d.ts +1 -0
  57. package/dist/library/final.test.js +44 -0
  58. package/dist/library/form-control.d.ts +7 -8
  59. package/dist/library/get-parent-class-name.d.ts +3 -0
  60. package/dist/library/get-parent-class-name.js +1 -0
  61. package/dist/library/localize.test.js +9 -12
  62. package/dist/library/on-resize.d.ts +12 -0
  63. package/dist/library/on-resize.js +1 -0
  64. package/dist/library/required.d.ts +2 -0
  65. package/dist/library/required.js +1 -0
  66. package/dist/library/required.test.d.ts +1 -0
  67. package/dist/library/required.test.js +47 -0
  68. package/dist/menu.button.d.ts +10 -1
  69. package/dist/menu.button.js +1 -1
  70. package/dist/menu.button.styles.js +3 -3
  71. package/dist/menu.d.ts +23 -7
  72. package/dist/menu.js +1 -1
  73. package/dist/menu.link.d.ts +11 -1
  74. package/dist/menu.link.js +1 -1
  75. package/dist/menu.link.styles.js +3 -3
  76. package/dist/menu.options.d.ts +8 -2
  77. package/dist/menu.options.js +1 -1
  78. package/dist/menu.options.styles.js +7 -7
  79. package/dist/modal.d.ts +19 -6
  80. package/dist/modal.icon-button.d.ts +7 -3
  81. package/dist/modal.icon-button.js +1 -1
  82. package/dist/modal.icon-button.styles.js +1 -1
  83. package/dist/modal.js +1 -1
  84. package/dist/modal.styles.js +26 -8
  85. package/dist/popover.d.ts +20 -3
  86. package/dist/popover.js +1 -1
  87. package/dist/popover.styles.js +6 -6
  88. package/dist/radio-group.d.ts +48 -6
  89. package/dist/radio-group.js +15 -6
  90. package/dist/radio-group.radio.d.ts +26 -2
  91. package/dist/radio-group.radio.js +1 -1
  92. package/dist/split-button.d.ts +15 -5
  93. package/dist/split-button.js +1 -1
  94. package/dist/split-button.primary-button.d.ts +10 -1
  95. package/dist/split-button.primary-button.js +1 -1
  96. package/dist/split-button.primary-link.d.ts +8 -1
  97. package/dist/split-button.primary-link.js +1 -1
  98. package/dist/split-button.secondary-button.d.ts +9 -1
  99. package/dist/split-button.secondary-button.js +1 -1
  100. package/dist/split-button.secondary-button.styles.js +2 -2
  101. package/dist/styles/variables.css +1 -1
  102. package/dist/tab.d.ts +16 -5
  103. package/dist/tab.group.d.ts +14 -15
  104. package/dist/tab.group.js +1 -1
  105. package/dist/tab.group.styles.js +8 -3
  106. package/dist/tab.js +1 -1
  107. package/dist/tab.panel.d.ts +11 -5
  108. package/dist/tab.panel.js +1 -1
  109. package/dist/tab.panel.styles.js +9 -2
  110. package/dist/tag.d.ts +11 -2
  111. package/dist/tag.js +1 -1
  112. package/dist/tag.styles.js +4 -4
  113. package/dist/textarea.d.ts +46 -6
  114. package/dist/textarea.js +12 -4
  115. package/dist/toasts.d.ts +18 -16
  116. package/dist/toasts.js +1 -1
  117. package/dist/toasts.toast.d.ts +11 -5
  118. package/dist/toasts.toast.js +1 -1
  119. package/dist/toasts.toast.styles.js +1 -1
  120. package/dist/toggle.d.ts +13 -4
  121. package/dist/toggle.js +1 -1
  122. package/dist/toggle.styles.js +3 -3
  123. package/dist/tooltip.container.d.ts +11 -2
  124. package/dist/tooltip.container.js +1 -1
  125. package/dist/tooltip.d.ts +40 -3
  126. package/dist/tooltip.js +1 -1
  127. package/dist/tooltip.styles.js +7 -7
  128. package/dist/tree.d.ts +7 -1
  129. package/dist/tree.item.d.ts +30 -12
  130. package/dist/tree.item.icon-button.d.ts +7 -2
  131. package/dist/tree.item.icon-button.js +1 -1
  132. package/dist/tree.item.icon-button.styles.js +3 -3
  133. package/dist/tree.item.js +1 -1
  134. package/dist/tree.item.menu.d.ts +9 -3
  135. package/dist/tree.item.menu.js +1 -1
  136. package/dist/tree.item.menu.styles.js +3 -3
  137. package/dist/tree.item.styles.js +10 -5
  138. package/dist/tree.js +1 -1
  139. package/package.json +81 -54
@@ -5,33 +5,51 @@ declare global {
5
5
  }
6
6
  }
7
7
  /**
8
- * @slot - Zero or more of `<glide-core-tree-item>`.
9
- * @slot prefix - An optional icon before the label.
10
- * @slot suffix - An optional icon after the label.
11
- * @slot menu - A `<glide-core-menu>` made visible on hover or focus.
8
+ * @attr {string} label
9
+ * @attr {boolean} [expanded=false]
10
+ * @attr {number} [level=1]
11
+ * @attr {boolean} [non-collapsible=false]
12
+ * @attr {boolean} [remove-indentation=false]
13
+ * @attr {boolean} [selected=false]
14
+ *
15
+ * @readonly
16
+ * @attr {0.19.5} [version]
17
+ *
18
+ * @slot {GlideCoreTreeItem}
19
+ * @slot {GlideCoreTreeItemMenu} [menu] - Visible on hover and focus
20
+ * @slot {Element} [prefix] - An icon before the label
21
+ * @slot {Element} [suffix] - An icon after the label
22
+ *
23
+ * @fires {Event} selected
24
+ *
25
+ * @method selectItem - Traverses down the tree, selects the item, then deselects all other items.
26
+ * @param {GlideCoreTreeItem} item
27
+ * @returns GlideCoreTreeItem | undefined
12
28
  */
13
29
  export default class GlideCoreTreeItem extends LitElement {
14
30
  #private;
15
31
  static shadowRootOptions: ShadowRootInit;
16
32
  static styles: import("lit").CSSResult[];
17
33
  expanded: boolean;
18
- label: string;
34
+ label?: string;
19
35
  level: number;
20
- selected: boolean;
36
+ /**
37
+ * @default false
38
+ */
39
+ get selected(): boolean;
40
+ set selected(isSelected: boolean);
21
41
  removeIndentation: boolean;
22
42
  nonCollapsible: boolean;
23
43
  readonly version: string;
24
44
  focus(options?: FocusOptions): void;
25
- get hasChildTreeItems(): boolean;
26
- get hasExpandIcon(): boolean;
45
+ get privateHasChildTreeItems(): boolean;
46
+ private get hasExpandIcon();
47
+ privateToggleExpand(): void;
27
48
  render(): import("lit").TemplateResult<1>;
28
49
  /**
29
- * Traverses down the tree, selecting the passed-in item,
30
- * and deselecting all other items.
31
- * Returns the selected item
50
+ * Traverses down the tree, selects the item, then deselects all other items.
32
51
  */
33
52
  selectItem(item: GlideCoreTreeItem): GlideCoreTreeItem | undefined;
34
- toggleExpand(): void;
35
53
  private childTreeItems;
36
54
  private hasPrefixIcon;
37
55
  }
@@ -6,12 +6,17 @@ declare global {
6
6
  }
7
7
  }
8
8
  /**
9
- * @slot - An icon.
9
+ * @attr {string} label
10
+ *
11
+ * @readonly
12
+ * @attr {0.19.5} [version]
13
+ *
14
+ * @slot {Element} - An icon
10
15
  */
11
16
  export default class GlideCoreTreeItemIconButton extends LitElement {
12
17
  static shadowRootOptions: ShadowRootInit;
13
18
  static styles: import("lit").CSSResult[];
14
- label: string;
19
+ label?: string;
15
20
  readonly version: string;
16
21
  render(): import("lit").TemplateResult<1>;
17
22
  }
@@ -1 +1 @@
1
- var __decorate=this&&this.__decorate||function(e,t,o,r){var s,i=arguments.length,n=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,o):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,o,r);else for(var l=e.length-1;l>=0;l--)(s=e[l])&&(n=(i<3?s(n):i>3?s(t,o,n):s(t,o))||n);return i>3&&n&&Object.defineProperty(t,o,n),n};import"./icon-button.js";import{html,LitElement}from"lit";import{customElement,property}from"lit/decorators.js";import packageJson from"../package.json"with{type:"json"};import styles from"./tree.item.icon-button.styles.js";import assertSlot from"./library/assert-slot.js";import shadowRootMode from"./library/shadow-root-mode.js";let GlideCoreTreeItemIconButton=class GlideCoreTreeItemIconButton extends LitElement{constructor(){super(...arguments),this.label="",this.version=packageJson.version}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:shadowRootMode}}static{this.styles=styles}render(){return html`<glide-core-icon-button class="component" variant="tertiary" tabindex="-1" label="${this.label}"><slot ${assertSlot()}></slot></glide-core-icon-button>`}};__decorate([property()],GlideCoreTreeItemIconButton.prototype,"label",void 0),__decorate([property({reflect:!0})],GlideCoreTreeItemIconButton.prototype,"version",void 0),GlideCoreTreeItemIconButton=__decorate([customElement("glide-core-tree-item-icon-button")],GlideCoreTreeItemIconButton);export default GlideCoreTreeItemIconButton;
1
+ var __decorate=this&&this.__decorate||function(e,t,o,r){var i,n=arguments.length,s=n<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,o):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,r);else for(var l=e.length-1;l>=0;l--)(i=e[l])&&(s=(n<3?i(s):n>3?i(t,o,s):i(t,o))||s);return n>3&&s&&Object.defineProperty(t,o,s),s};import"./icon-button.js";import{html,LitElement}from"lit";import{customElement,property}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import packageJson from"../package.json"with{type:"json"};import styles from"./tree.item.icon-button.styles.js";import assertSlot from"./library/assert-slot.js";import shadowRootMode from"./library/shadow-root-mode.js";import final from"./library/final.js";import required from"./library/required.js";let GlideCoreTreeItemIconButton=class GlideCoreTreeItemIconButton extends LitElement{constructor(){super(...arguments),this.version=packageJson.version}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:shadowRootMode}}static{this.styles=styles}render(){return html`<glide-core-icon-button class="component" variant="tertiary" tabindex="-1" label="${ifDefined(this.label)}"><slot ${assertSlot()}></slot></glide-core-icon-button>`}};__decorate([property(),required],GlideCoreTreeItemIconButton.prototype,"label",void 0),__decorate([property({reflect:!0})],GlideCoreTreeItemIconButton.prototype,"version",void 0),GlideCoreTreeItemIconButton=__decorate([customElement("glide-core-tree-item-icon-button"),final],GlideCoreTreeItemIconButton);export default GlideCoreTreeItemIconButton;
@@ -2,8 +2,8 @@ import{css}from"lit";export default[css`
2
2
  .component {
3
3
  display: flex;
4
4
 
5
- --icon-color: var(--icon-button-color);
6
- --hovered-icon-color: var(--hovered-icon-button-color);
7
- --size: 1rem;
5
+ --private-icon-color: var(--private-icon-button-color);
6
+ --private-hovered-icon-color: var(--private-hovered-icon-button-color);
7
+ --private-size: 1rem;
8
8
  }
9
9
  `];
package/dist/tree.item.js CHANGED
@@ -1 +1 @@
1
- var _a,GlideCoreTreeItem_1,__decorate=this&&this.__decorate||function(e,t,o,i){var r,s=arguments.length,l=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,o,i);else for(var n=e.length-1;n>=0;n--)(r=e[n])&&(l=(s<3?r(l):s>3?r(t,o,l):r(t,o))||l);return s>3&&l&&Object.defineProperty(t,o,l),l};import{html,LitElement}from"lit";import{classMap}from"lit/directives/class-map.js";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import{styleMap}from"lit/directives/style-map.js";import{when}from"lit/directives/when.js";import packageJson from"../package.json"with{type:"json"};import{LocalizeController}from"./library/localize.js";import GlideCoreTreeItemMenu from"./tree.item.menu.js";import GlideCoreIconButton from"./icon-button.js";import chevronIcon from"./icons/chevron.js";import styles from"./tree.item.styles.js";import assertSlot from"./library/assert-slot.js";import shadowRootMode from"./library/shadow-root-mode.js";let GlideCoreTreeItem=class GlideCoreTreeItem extends LitElement{constructor(){super(...arguments),this.expanded=!1,this.label="",this.level=1,this.selected=!1,this.removeIndentation=!1,this.nonCollapsible=!1,this.version=packageJson.version,this.childTreeItems=[],this.hasPrefixIcon=!1,this.#e=createRef(),this.#t=createRef(),this.#o=new LocalizeController(this),this.#i=createRef(),this.#r=createRef()}static{GlideCoreTreeItem_1=this}static{this.shadowRootOptions={...LitElement.shadowRootOptions,delegatesFocus:!0,mode:shadowRootMode}}static{this.styles=styles}focus(e){this.#t.value?.focus(e),this.#s(0)}get hasChildTreeItems(){return this.childTreeItems.length>0}get hasExpandIcon(){return this.hasChildTreeItems&&!this.nonCollapsible}render(){return html`<div class="${classMap({component:!0,expanded:this.expanded,selected:this.selected})}" role="treeitem" aria-label="${this.label}" aria-selected="${ifDefined(this.#l)}" aria-expanded="${ifDefined(this.#n)}"><div class="${classMap({"label-container":!0,"prefix-icon":this.hasPrefixIcon,selected:this.selected})}" tabindex="-1" @focusout="${this.#a}" @focusin="${this.#d}" ${ref(this.#t)}><div style="${styleMap({flexShrink:0,width:this.#c})}"></div>${when(!this.removeIndentation||this.hasExpandIcon,(()=>html`<div class="${classMap({"expand-icon-container":!0,expanded:this.expanded})}">${when(this.hasExpandIcon,(()=>chevronIcon))}</div>`))}<slot name="prefix" ${ref(this.#r)} @slotchange="${this.#h}"></slot><div class="${classMap({label:!0,"prefix-icon":this.hasPrefixIcon})}">${this.label}</div><div class="icon-container"><slot name="menu" ${ref(this.#i)} @slotchange="${this.#m}" ${assertSlot([GlideCoreTreeItemMenu],!0)}></slot><slot name="suffix"></slot></div></div><div class="${classMap({"default-slot-container":!0,expanded:this.expanded})}" role="group"><slot @slotchange="${this.#f}" ${ref(this.#e)}></slot></div></div>`}selectItem(e){let t;if(this.#p)for(const o of this.#p)if(e===o)o.setAttribute("selected","true"),t=o;else{o.removeAttribute("selected");const i=o.selectItem(e);i&&(t=i)}return t}toggleExpand(){this.expanded=!this.expanded}#e;#t;#o;#i;#r;get#p(){return this.#e.value?.assignedElements().filter((e=>e instanceof GlideCoreTreeItem_1))}get#n(){return this.hasChildTreeItems?this.expanded?"true":"false":void 0}get#l(){return this.hasChildTreeItems?void 0:this.selected?"true":"false"}get#c(){return 20*(this.level-1)+"px"}#u(e){return e&&e instanceof HTMLElement&&!(e instanceof GlideCoreTreeItem_1)&&this.contains(e)}#f(){this.#I()}#d(e){this.#u(e.target)&&e.stopPropagation()}#a(e){this.#u(e.relatedTarget)?e.stopPropagation():this.#s(-1)}#m(){if(this.#i.value)for(const e of this.#i.value.assignedElements())e instanceof GlideCoreTreeItemMenu&&(e.label=this.#o.term("actionsFor",this.label))}#h(){const e=this.#r.value?.assignedNodes();this.hasPrefixIcon=Boolean(e&&e.length>0)}#s(e){this.#t.value&&(this.#t.value.tabIndex=e);for(const t of this.querySelectorAll("& > glide-core-tree-item-icon-button"))t.tabIndex=e}#I(){const e=[];if(this.#p){for(const t of this.#p)t.level=this.level+1,e.push(t);this.childTreeItems=e}}};__decorate([property({reflect:!0,type:Boolean})],GlideCoreTreeItem.prototype,"expanded",void 0),__decorate([property({reflect:!0})],GlideCoreTreeItem.prototype,"label",void 0),__decorate([property({reflect:!0,type:Number})],GlideCoreTreeItem.prototype,"level",void 0),__decorate([property({reflect:!0,type:Boolean})],GlideCoreTreeItem.prototype,"selected",void 0),__decorate([property({reflect:!0,type:Boolean,attribute:"remove-indentation"})],GlideCoreTreeItem.prototype,"removeIndentation",void 0),__decorate([property({reflect:!0,type:Boolean,attribute:"non-collapsible"})],GlideCoreTreeItem.prototype,"nonCollapsible",void 0),__decorate([property({reflect:!0})],GlideCoreTreeItem.prototype,"version",void 0),__decorate([state()],GlideCoreTreeItem.prototype,"childTreeItems",void 0),__decorate([state()],GlideCoreTreeItem.prototype,"hasPrefixIcon",void 0),GlideCoreTreeItem=GlideCoreTreeItem_1=__decorate([customElement("glide-core-tree-item")],GlideCoreTreeItem);export default GlideCoreTreeItem;
1
+ var _a,GlideCoreTreeItem_1,__decorate=this&&this.__decorate||function(e,t,o,i){var r,s=arguments.length,l=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,o,i);else for(var n=e.length-1;n>=0;n--)(r=e[n])&&(l=(s<3?r(l):s>3?r(t,o,l):r(t,o))||l);return s>3&&l&&Object.defineProperty(t,o,l),l};import{html,LitElement}from"lit";import{classMap}from"lit/directives/class-map.js";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import{styleMap}from"lit/directives/style-map.js";import{when}from"lit/directives/when.js";import packageJson from"../package.json"with{type:"json"};import{LocalizeController}from"./library/localize.js";import GlideCoreTreeItemMenu from"./tree.item.menu.js";import GlideCoreIconButton from"./icon-button.js";import chevronIcon from"./icons/chevron.js";import styles from"./tree.item.styles.js";import assertSlot from"./library/assert-slot.js";import shadowRootMode from"./library/shadow-root-mode.js";import final from"./library/final.js";import required from"./library/required.js";let GlideCoreTreeItem=class GlideCoreTreeItem extends LitElement{constructor(){super(...arguments),this.expanded=!1,this.level=1,this.removeIndentation=!1,this.nonCollapsible=!1,this.version=packageJson.version,this.childTreeItems=[],this.hasPrefixIcon=!1,this.#e=createRef(),this.#t=!1,this.#o=createRef(),this.#i=new LocalizeController(this),this.#r=createRef(),this.#s=createRef()}static{GlideCoreTreeItem_1=this}static{this.shadowRootOptions={...LitElement.shadowRootOptions,delegatesFocus:!0,mode:shadowRootMode}}static{this.styles=styles}get selected(){return this.#t}set selected(e){const t=e!==this.#t;this.#t=e,e&&t&&this.dispatchEvent(new Event("selected",{bubbles:!0,composed:!0}))}focus(e){this.#o.value?.focus(e),this.#l(0)}get privateHasChildTreeItems(){return this.childTreeItems.length>0}get hasExpandIcon(){return this.privateHasChildTreeItems&&!this.nonCollapsible}privateToggleExpand(){this.expanded=!this.expanded}render(){return html`<div aria-label="${ifDefined(this.label)}" aria-selected="${ifDefined(this.#n)}" aria-expanded="${ifDefined(this.#a)}" class="${classMap({component:!0,expanded:this.expanded,selected:this.selected})}" data-test="component" role="treeitem"><div class="${classMap({"label-container":!0,"prefix-icon":this.hasPrefixIcon,selected:this.selected})}" tabindex="-1" @focusout="${this.#d}" @focusin="${this.#c}" ${ref(this.#o)}><div style="${styleMap({flexShrink:0,width:this.#m})}"></div>${when(!this.removeIndentation||this.hasExpandIcon,(()=>html`<div class="${classMap({"expand-icon-container":!0,expanded:this.expanded})}" data-test="expand-icon-container">${when(this.hasExpandIcon,(()=>chevronIcon))}</div>`))}<slot name="prefix" class="prefix-slot" ${ref(this.#s)} @slotchange="${this.#h}"></slot><div class="${classMap({label:!0,"prefix-icon":this.hasPrefixIcon})}">${this.label}</div><div class="icon-container"><slot name="menu" ${ref(this.#r)} @slotchange="${this.#p}" ${assertSlot([GlideCoreTreeItemMenu],!0)}></slot><slot name="suffix"></slot></div></div><div class="${classMap({"default-slot-container":!0,expanded:this.expanded})}" role="group"><slot @slotchange="${this.#f}" ${ref(this.#e)}></slot></div></div>`}selectItem(e){let t;if(this.#u)for(const o of this.#u)if(e===o)o.setAttribute("selected","true"),t=o;else{o.removeAttribute("selected");const i=o.selectItem(e);i&&(t=i)}return t}#e;#t;#o;#i;#r;#s;get#u(){return this.#e.value?.assignedElements().filter((e=>e instanceof GlideCoreTreeItem_1))}get#a(){return this.privateHasChildTreeItems?this.expanded?"true":"false":void 0}get#n(){return this.privateHasChildTreeItems?void 0:this.selected?"true":"false"}get#m(){return 20*(this.level-1)+"px"}#v(e){return e&&e instanceof HTMLElement&&!(e instanceof GlideCoreTreeItem_1)&&this.contains(e)}#f(){this.#I()}#c(e){this.#v(e.target)&&e.stopPropagation()}#d(e){this.#v(e.relatedTarget)?e.stopPropagation():this.#l(-1)}#p(){if(this.#r.value)for(const e of this.#r.value.assignedElements())e instanceof GlideCoreTreeItemMenu&&this.label&&(e.label=this.#i.term("actionsFor",this.label))}#h(){const e=this.#s.value?.assignedNodes();this.hasPrefixIcon=Boolean(e&&e.length>0)}#l(e){this.#o.value&&(this.#o.value.tabIndex=e);for(const t of this.querySelectorAll("& > glide-core-tree-item-icon-button"))t.tabIndex=e}#I(){const e=[];if(this.#u){for(const t of this.#u)t.level=this.level+1,e.push(t);this.childTreeItems=e}}};__decorate([property({reflect:!0,type:Boolean})],GlideCoreTreeItem.prototype,"expanded",void 0),__decorate([property({reflect:!0}),required],GlideCoreTreeItem.prototype,"label",void 0),__decorate([property({reflect:!0,type:Number})],GlideCoreTreeItem.prototype,"level",void 0),__decorate([property({reflect:!0,type:Boolean})],GlideCoreTreeItem.prototype,"selected",null),__decorate([property({reflect:!0,type:Boolean,attribute:"remove-indentation"})],GlideCoreTreeItem.prototype,"removeIndentation",void 0),__decorate([property({reflect:!0,type:Boolean,attribute:"non-collapsible"})],GlideCoreTreeItem.prototype,"nonCollapsible",void 0),__decorate([property({reflect:!0})],GlideCoreTreeItem.prototype,"version",void 0),__decorate([state()],GlideCoreTreeItem.prototype,"childTreeItems",void 0),__decorate([state()],GlideCoreTreeItem.prototype,"hasPrefixIcon",void 0),GlideCoreTreeItem=GlideCoreTreeItem_1=__decorate([customElement("glide-core-tree-item"),final],GlideCoreTreeItem);export default GlideCoreTreeItem;
@@ -7,15 +7,21 @@ declare global {
7
7
  }
8
8
  }
9
9
  /**
10
- * @slot - One or more of `<glide-core-menu-button>` or `<glide-core-menu-link>`.
11
- * @slot icon - An optional icon.
10
+ * @attr {string} [label]
11
+ * @attr {'bottom-start'|'top-start'} [placement='bottom-start']
12
+ *
13
+ * @readonly
14
+ * @attr {0.19.5} [version]
15
+ *
16
+ * @slot {GlideCoreMenuButton | GlideCoreMenuLink}
17
+ * @slot {Element} [icon]
12
18
  */
13
19
  export default class GlideCoreTreeItemMenu extends LitElement {
14
20
  #private;
15
21
  static shadowRootOptions: ShadowRootInit;
16
22
  static styles: import("lit").CSSResult[];
17
23
  placement: 'bottom-start' | 'top-start';
18
- label: string;
24
+ label?: string;
19
25
  readonly version: string;
20
26
  click(): void;
21
27
  render(): import("lit").TemplateResult<1>;
@@ -1 +1 @@
1
- var __decorate=this&&this.__decorate||function(e,t,o,r){var n,i=arguments.length,s=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,o):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,r);else for(var l=e.length-1;l>=0;l--)(n=e[l])&&(s=(i<3?n(s):i>3?n(t,o,s):n(t,o))||s);return i>3&&s&&Object.defineProperty(t,o,s),s};import"./menu.js";import"./menu.options.js";import{html,LitElement}from"lit";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{when}from"lit/directives/when.js";import packageJson from"../package.json"with{type:"json"};import styles from"./tree.item.menu.styles.js";import GlideCoreIconButton from"./icon-button.js";import GlideCoreMenuLink from"./menu.link.js";import GlideCoreMenuButton from"./menu.button.js";import assertSlot from"./library/assert-slot.js";import shadowRootMode from"./library/shadow-root-mode.js";let GlideCoreTreeItemMenu=class GlideCoreTreeItemMenu extends LitElement{constructor(){super(...arguments),this.placement="bottom-start",this.label="",this.version=packageJson.version,this.hasCustomIcon=!1,this.#e=createRef(),this.#t=createRef(),this.#o=createRef()}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:shadowRootMode}}static{this.styles=styles}click(){this.#e.value?.click()}render(){return html`<glide-core-menu class="component" placement="${this.placement}" ${ref(this.#o)}><glide-core-menu-options><slot ${assertSlot([GlideCoreMenuButton,GlideCoreMenuLink])}></slot></glide-core-menu-options><glide-core-icon-button data-test="icon-button" slot="target" variant="tertiary" label="${this.label}" ${ref(this.#e)}><slot name="icon" @slotchange="${this.#r}" ${ref(this.#t)}></slot>${when(!this.hasCustomIcon,(()=>icons.dots))}</glide-core-icon-button></glide-core-menu>`}#e;#t;#o;#r(){const e=this.#t.value?.assignedNodes();this.hasCustomIcon=Boolean(e&&e.length>0)}};__decorate([property({reflect:!0})],GlideCoreTreeItemMenu.prototype,"placement",void 0),__decorate([property()],GlideCoreTreeItemMenu.prototype,"label",void 0),__decorate([property({reflect:!0})],GlideCoreTreeItemMenu.prototype,"version",void 0),__decorate([state()],GlideCoreTreeItemMenu.prototype,"hasCustomIcon",void 0),GlideCoreTreeItemMenu=__decorate([customElement("glide-core-tree-item-menu")],GlideCoreTreeItemMenu);export default GlideCoreTreeItemMenu;const icons={dots:html`<svg aria-hidden="true" style="${styleMap({height:"0.875rem",width:"0.25rem"})}" viewBox="0 0 4 18" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 15C2.55228 15 3 15.4477 3 16C3 16.5523 2.55228 17 2 17C1.44772 17 1 16.5523 1 16C1 15.4477 1.44772 15 2 15Z"/><path d="M2 8C2.55228 8 3 8.44772 3 9C3 9.55228 2.55228 10 2 10C1.44772 10 1 9.55228 1 9C1 8.44772 1.44772 8 2 8Z"/><path d="M2 1C2.55228 1 3 1.44772 3 2C3 2.55228 2.55228 3 2 3C1.44772 3 1 2.55228 1 2C1 1.44772 1.44772 1 2 1Z"/></svg>`};
1
+ var __decorate=this&&this.__decorate||function(e,t,o,r){var i,n=arguments.length,s=n<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,o):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,r);else for(var l=e.length-1;l>=0;l--)(i=e[l])&&(s=(n<3?i(s):n>3?i(t,o,s):i(t,o))||s);return n>3&&s&&Object.defineProperty(t,o,s),s};import"./menu.js";import"./menu.options.js";import{html,LitElement}from"lit";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{when}from"lit/directives/when.js";import{ifDefined}from"lit/directives/if-defined.js";import packageJson from"../package.json"with{type:"json"};import styles from"./tree.item.menu.styles.js";import GlideCoreIconButton from"./icon-button.js";import GlideCoreMenuLink from"./menu.link.js";import GlideCoreMenuButton from"./menu.button.js";import assertSlot from"./library/assert-slot.js";import shadowRootMode from"./library/shadow-root-mode.js";import final from"./library/final.js";let GlideCoreTreeItemMenu=class GlideCoreTreeItemMenu extends LitElement{constructor(){super(...arguments),this.placement="bottom-start",this.version=packageJson.version,this.hasCustomIcon=!1,this.#e=createRef(),this.#t=createRef(),this.#o=createRef()}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:shadowRootMode}}static{this.styles=styles}click(){this.#e.value?.click()}render(){return html`<glide-core-menu class="component" placement="${this.placement}" ${ref(this.#o)}><glide-core-menu-options><slot ${assertSlot([GlideCoreMenuButton,GlideCoreMenuLink])}></slot></glide-core-menu-options><glide-core-icon-button data-test="icon-button" slot="target" variant="tertiary" label="${ifDefined(this.label)}" ${ref(this.#e)}><slot name="icon" @slotchange="${this.#r}" ${ref(this.#t)}></slot>${when(!this.hasCustomIcon,(()=>icons.dots))}</glide-core-icon-button></glide-core-menu>`}#e;#t;#o;#r(){const e=this.#t.value?.assignedNodes();this.hasCustomIcon=Boolean(e&&e.length>0)}};__decorate([property({reflect:!0})],GlideCoreTreeItemMenu.prototype,"placement",void 0),__decorate([property()],GlideCoreTreeItemMenu.prototype,"label",void 0),__decorate([property({reflect:!0})],GlideCoreTreeItemMenu.prototype,"version",void 0),__decorate([state()],GlideCoreTreeItemMenu.prototype,"hasCustomIcon",void 0),GlideCoreTreeItemMenu=__decorate([customElement("glide-core-tree-item-menu"),final],GlideCoreTreeItemMenu);export default GlideCoreTreeItemMenu;const icons={dots:html`<svg aria-hidden="true" style="${styleMap({height:"0.875rem",width:"0.25rem"})}" viewBox="0 0 4 18" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 15C2.55228 15 3 15.4477 3 16C3 16.5523 2.55228 17 2 17C1.44772 17 1 16.5523 1 16C1 15.4477 1.44772 15 2 15Z"/><path d="M2 8C2.55228 8 3 8.44772 3 9C3 9.55228 2.55228 10 2 10C1.44772 10 1 9.55228 1 9C1 8.44772 1.44772 8 2 8Z"/><path d="M2 1C2.55228 1 3 1.44772 3 2C3 2.55228 2.55228 3 2 3C1.44772 3 1 2.55228 1 2C1 1.44772 1.44772 1 2 1Z"/></svg>`};
@@ -10,8 +10,8 @@ import{css}from"lit";export default[css`
10
10
  glide-core-icon-button {
11
11
  display: flex;
12
12
 
13
- --icon-color: var(--icon-button-color);
14
- --hovered-icon-color: var(--hovered-icon-button-color);
15
- --size: 1rem;
13
+ --private-icon-color: var(--private-icon-button-color);
14
+ --private-hovered-icon-color: var(--private-hovered-icon-button-color);
15
+ --private-size: 1rem;
16
16
  }
17
17
  `];
@@ -15,15 +15,15 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export
15
15
  grid-template-columns: repeat(auto-fill, 2.5rem);
16
16
  line-height: 1.25rem;
17
17
 
18
- --color: var(--glide-core-text-body-1);
18
+ --private-color: var(--glide-core-text-body-1);
19
19
 
20
20
  &.selected {
21
- --color: var(--glide-core-text-selected);
21
+ --private-color: var(--glide-core-text-selected);
22
22
 
23
23
  ::slotted([slot='prefix']),
24
24
  ::slotted([slot='menu']),
25
25
  ::slotted([slot='suffix']) {
26
- --hovered-icon-button-color: var(--glide-core-icon-hover);
26
+ --private-hovered-icon-button-color: var(--glide-core-icon-hover);
27
27
  }
28
28
  }
29
29
  }
@@ -51,6 +51,11 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export
51
51
  }
52
52
  }
53
53
 
54
+ .prefix-slot {
55
+ align-items: center;
56
+ display: flex;
57
+ }
58
+
54
59
  .label-and-children {
55
60
  display: flex;
56
61
  flex-direction: column;
@@ -59,7 +64,7 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export
59
64
  .label-container {
60
65
  align-items: center;
61
66
  border-radius: 0.5rem;
62
- color: var(--color);
67
+ color: var(--private-color);
63
68
  display: flex;
64
69
  font-size: var(--glide-core-body-sm-font-size);
65
70
  padding-block: var(--glide-core-spacing-xxs);
@@ -101,7 +106,7 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export
101
106
  ::slotted([slot='prefix']),
102
107
  ::slotted([slot='menu']),
103
108
  ::slotted([slot='suffix']) {
104
- --icon-button-color: var(--color);
109
+ --private-icon-button-color: var(--private-color);
105
110
  }
106
111
 
107
112
  .label-container:hover,
package/dist/tree.js CHANGED
@@ -1 +1 @@
1
- var __decorate=this&&this.__decorate||function(e,t,o,r){var s,i=arguments.length,n=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,o):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,o,r);else for(var l=e.length-1;l>=0;l--)(s=e[l])&&(n=(i<3?s(n):i>3?s(t,o,n):s(t,o))||n);return i>3&&n&&Object.defineProperty(t,o,n),n};import{html,LitElement}from"lit";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property,state}from"lit/decorators.js";import packageJson from"../package.json"with{type:"json"};import GlideCoreTreeItem from"./tree.item.js";import styles from"./tree.styles.js";import assertSlot from"./library/assert-slot.js";import shadowRootMode from"./library/shadow-root-mode.js";let GlideCoreTree=class GlideCoreTree extends LitElement{static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:shadowRootMode}}static{this.styles=styles}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("focusin",this.#e),this.removeEventListener("focusout",this.#t)}render(){return html`<div class="component" role="tree" tabindex="${this.privateTabIndex}" @click="${this.#o}" @keydown="${this.#r}"><slot ${ref(this.#s)} ${assertSlot([GlideCoreTreeItem])}></slot></div>`}selectItem(e){if(this.#i){for(const t of this.#i){e===t?(t.setAttribute("selected","true"),this.selectedItem=t):t.removeAttribute("selected");const o=t.selectItem(e);o&&(this.selectedItem=o)}e.dispatchEvent(new Event("selected",{bubbles:!0,composed:!0}))}}constructor(){super(),this.version=packageJson.version,this.privateTabIndex=0,this.#s=createRef(),this.addEventListener("focusin",this.#e),this.addEventListener("focusout",this.#t)}#s;get#i(){return this.#s.value?.assignedElements().filter((e=>e instanceof GlideCoreTreeItem))}#n(e){e?.focus(),this.focusedItem=e}#l(){const e=new Set;return[...this.querySelectorAll("glide-core-tree-item")].filter((t=>{const o=t.parentElement?.closest("glide-core-tree-item");return!o||o.expanded&&!e.has(o)||e.add(t),!e.has(t)}))}#o(e){const t=e.target;if(t.closest("glide-core-tree-item-icon-button")??t.closest("glide-core-tree-item-menu"))return;const o=t.closest("glide-core-tree-item");o&&(o.hasChildTreeItems&&!o.nonCollapsible?o.toggleExpand():this.selectItem(o))}#r(e){if(!["ArrowRight","ArrowLeft","ArrowDown","ArrowUp","Home","End","Enter"].includes(e.key))return;if(["ArrowRight","ArrowLeft","ArrowDown","ArrowUp","Home","End"].includes(e.key)&&e.preventDefault(),e.target&&e.target instanceof HTMLElement&&(e.target.closest("glide-core-tree-item-icon-button")??e.target.closest("glide-core-tree-item-menu")))return;const t=this.#l(),{focusedItem:o}=this,r=t.findIndex((e=>e.matches(":focus")));if("ArrowRight"===e.key&&o?.hasChildTreeItems&&(o.expanded?this.#n(o.querySelector("glide-core-tree-item")):o.toggleExpand()),"ArrowLeft"===e.key)if(o?.expanded&&!o.nonCollapsible)o.toggleExpand();else{const e=o?.parentElement?.closest("glide-core-tree-item");this.#n(e)}"ArrowDown"===e.key&&-1!==r&&r<t.length-1&&this.#n(t[r+1]),"ArrowUp"===e.key&&r>0&&this.#n(t[r-1]),"Home"===e.key&&this.#n(t[0]),"End"===e.key&&this.#n(t.at(-1)),"Enter"===e.key&&o&&(o.hasChildTreeItems&&!o.nonCollapsible?o.toggleExpand():this.selectItem(o))}#e(e){let t;e.target===this?t=this.selectedItem?.checkVisibility({visibilityProperty:!0})?this.selectedItem:this.#i?.[0]:e.target instanceof GlideCoreTreeItem&&(t=e.target,this.privateTabIndex=-1),this.#n(t)}#t(e){e.relatedTarget&&e.relatedTarget instanceof HTMLElement&&this.contains(e.relatedTarget)||(this.privateTabIndex=0,this.focusedItem=void 0)}};__decorate([property({reflect:!0})],GlideCoreTree.prototype,"version",void 0),__decorate([state()],GlideCoreTree.prototype,"focusedItem",void 0),__decorate([state()],GlideCoreTree.prototype,"privateTabIndex",void 0),__decorate([state()],GlideCoreTree.prototype,"selectedItem",void 0),GlideCoreTree=__decorate([customElement("glide-core-tree")],GlideCoreTree);export default GlideCoreTree;
1
+ var __decorate=this&&this.__decorate||function(e,t,o,r){var s,i=arguments.length,n=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,o):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,o,r);else for(var l=e.length-1;l>=0;l--)(s=e[l])&&(n=(i<3?s(n):i>3?s(t,o,n):s(t,o))||n);return i>3&&n&&Object.defineProperty(t,o,n),n};import{html,LitElement}from"lit";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property,state}from"lit/decorators.js";import packageJson from"../package.json"with{type:"json"};import GlideCoreTreeItem from"./tree.item.js";import styles from"./tree.styles.js";import assertSlot from"./library/assert-slot.js";import shadowRootMode from"./library/shadow-root-mode.js";import final from"./library/final.js";let GlideCoreTree=class GlideCoreTree extends LitElement{static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:shadowRootMode}}static{this.styles=styles}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("focusin",this.#e),this.removeEventListener("focusout",this.#t)}render(){return html`<div class="component" role="tree" tabindex="${this.privateTabIndex}" @click="${this.#o}" @keydown="${this.#r}"><slot ${ref(this.#s)} ${assertSlot([GlideCoreTreeItem])}></slot></div>`}selectItem(e){if(this.#i)for(const t of this.#i){e===t?(t.setAttribute("selected","true"),this.selectedItem=t):t.removeAttribute("selected");const o=t.selectItem(e);o&&(this.selectedItem=o)}}constructor(){super(),this.version=packageJson.version,this.privateTabIndex=0,this.#s=createRef(),this.addEventListener("focusin",this.#e),this.addEventListener("focusout",this.#t)}#s;get#i(){return this.#s.value?.assignedElements().filter((e=>e instanceof GlideCoreTreeItem))}#n(e){e?.focus(),this.focusedItem=e}#l(){const e=new Set;return[...this.querySelectorAll("glide-core-tree-item")].filter((t=>{const o=t.parentElement?.closest("glide-core-tree-item");return!o||o.expanded&&!e.has(o)||e.add(t),!e.has(t)}))}#o(e){const t=e.target;if(t.closest("glide-core-tree-item-icon-button")??t.closest("glide-core-tree-item-menu"))return;const o=t.closest("glide-core-tree-item");o&&(o.privateHasChildTreeItems&&!o.nonCollapsible?o.privateToggleExpand():this.selectItem(o))}#r(e){if(!["ArrowRight","ArrowLeft","ArrowDown","ArrowUp","Home","End","Enter"].includes(e.key))return;if(["ArrowRight","ArrowLeft","ArrowDown","ArrowUp","Home","End"].includes(e.key)&&e.preventDefault(),e.target&&e.target instanceof HTMLElement&&(e.target.closest("glide-core-tree-item-icon-button")??e.target.closest("glide-core-tree-item-menu")))return;const t=this.#l(),{focusedItem:o}=this,r=t.findIndex((e=>e.matches(":focus")));if("ArrowRight"===e.key&&o?.privateHasChildTreeItems&&(o.expanded?this.#n(o.querySelector("glide-core-tree-item")):o.privateToggleExpand()),"ArrowLeft"===e.key)if(o?.expanded&&!o.nonCollapsible)o.privateToggleExpand();else{const e=o?.parentElement?.closest("glide-core-tree-item");this.#n(e)}"ArrowDown"===e.key&&-1!==r&&r<t.length-1&&this.#n(t[r+1]),"ArrowUp"===e.key&&r>0&&this.#n(t[r-1]),"Home"===e.key&&this.#n(t[0]),"End"===e.key&&this.#n(t.at(-1)),"Enter"===e.key&&o&&(o.privateHasChildTreeItems&&!o.nonCollapsible?o.privateToggleExpand():this.selectItem(o))}#e(e){let t;e.target===this?t=this.selectedItem?.checkVisibility({visibilityProperty:!0})?this.selectedItem:this.#i?.[0]:e.target instanceof GlideCoreTreeItem&&(t=e.target,this.privateTabIndex=-1),this.#n(t)}#t(e){e.relatedTarget&&e.relatedTarget instanceof HTMLElement&&this.contains(e.relatedTarget)||(this.privateTabIndex=0,this.focusedItem=void 0)}};__decorate([property({reflect:!0})],GlideCoreTree.prototype,"version",void 0),__decorate([state()],GlideCoreTree.prototype,"focusedItem",void 0),__decorate([state()],GlideCoreTree.prototype,"privateTabIndex",void 0),__decorate([state()],GlideCoreTree.prototype,"selectedItem",void 0),GlideCoreTree=__decorate([customElement("glide-core-tree"),final],GlideCoreTree);export default GlideCoreTree;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crowdstrike/glide-core",
3
- "version": "0.19.5",
3
+ "version": "0.20.0",
4
4
  "description": "CrowdStrike's Glide Design System components package for providing web components",
5
5
  "author": "CrowdStrike UX Team",
6
6
  "license": "Apache-2.0",
@@ -9,31 +9,39 @@
9
9
  "type": "git",
10
10
  "url": "https://github.com/CrowdStrike/glide-core.git"
11
11
  },
12
+ "publishConfig": {
13
+ "provenance": true
14
+ },
12
15
  "files": [
13
16
  "dist",
17
+ "!dist/*.*.test.*.d.ts",
18
+ "!dist/*.*.test.*.js",
19
+ "!dist/*.stories.d.ts",
20
+ "!dist/*.stories.js",
21
+ "!dist/*.test.*.d.ts",
22
+ "!dist/*.test.*.js",
23
+ "!dist/cem-analyzer-plugins",
14
24
  "!dist/eslint",
15
25
  "!dist/icons/storybook.*",
16
26
  "!dist/storybook",
17
- "!dist/*.test.js",
18
- "!dist/*.test.*.d.ts",
19
- "!dist/*.test.*.js",
20
- "!dist/*.stories.js",
21
- "!dist/*.stories.d.ts"
27
+ "!dist/stylelint",
28
+ "!dist/ts-morph"
22
29
  ],
23
30
  "exports": {
24
31
  "./*.js": {
25
32
  "types": "./dist/*.d.ts",
26
33
  "import": "./dist/*.js"
27
34
  },
28
- "./*.styles.js": null,
29
- "./library/*": null,
30
- "./icons/*": null,
31
- "./styles/*": null,
32
- "./label.js": null,
33
- "./toasts.toast.js": null,
35
+ "./translations/*": null,
34
36
  "./tooltip.container.js": null,
37
+ "./toasts.toast.js": null,
38
+ "./styles/variables.css": "./dist/styles/variables.css",
35
39
  "./styles/fonts.css": "./dist/styles/fonts.css",
36
- "./styles/variables.css": "./dist/styles/variables.css"
40
+ "./styles/*": null,
41
+ "./library/*": null,
42
+ "./label.js": null,
43
+ "./icons/*": null,
44
+ "./*.styles.js": null
37
45
  },
38
46
  "dependencies": {
39
47
  "@floating-ui/dom": "^1.6.12",
@@ -47,36 +55,40 @@
47
55
  "@changesets/changelog-github": "^0.5.0",
48
56
  "@changesets/cli": "^2.27.10",
49
57
  "@crowdstrike/design-tokens": "^2.0.1",
58
+ "@custom-elements-manifest/analyzer": "^0.10.4",
50
59
  "@eslint/eslintrc": "^3.2.0",
51
60
  "@eslint/js": "^9.17.0",
52
61
  "@open-wc/testing": "^4.0.0",
53
- "@rollup/plugin-commonjs": "^25.0.8",
54
- "@storybook/addon-actions": "^8.5.1",
55
- "@storybook/addon-controls": "^8.5.1",
56
- "@storybook/addon-docs": "^8.5.1",
57
- "@storybook/addon-toolbars": "^8.5.1",
58
- "@storybook/core-events": "^8.5.1",
59
- "@storybook/manager-api": "^8.5.1",
60
- "@storybook/preview-api": "^8.5.1",
61
- "@storybook/theming": "^8.5.1",
62
- "@storybook/web-components": "^8.5.1",
63
- "@storybook/web-components-vite": "^8.5.1",
62
+ "@rollup/plugin-commonjs": "^28.0.2",
63
+ "@storybook/addon-actions": "^8.5.8",
64
+ "@storybook/addon-controls": "^8.5.8",
65
+ "@storybook/addon-docs": "^8.5.8",
66
+ "@storybook/addon-toolbars": "^8.5.8",
67
+ "@storybook/core-events": "^8.5.8",
68
+ "@storybook/manager-api": "^8.5.8",
69
+ "@storybook/preview-api": "^8.5.8",
70
+ "@storybook/theming": "^8.5.8",
71
+ "@storybook/web-components": "^8.5.8",
72
+ "@storybook/web-components-vite": "^8.5.8",
64
73
  "@stylistic/eslint-plugin": "^2.12.1",
65
74
  "@types/eslint": "^8.56.12",
66
75
  "@types/mocha": "^10.0.10",
67
76
  "@types/sinon": "^17.0.3",
68
- "@typescript-eslint/rule-tester": "^8.19.0",
69
- "@typescript-eslint/types": "^8.19.0",
70
- "@typescript-eslint/utils": "^8.19.0",
77
+ "@typescript-eslint/rule-tester": "^8.24.1",
78
+ "@typescript-eslint/types": "^8.24.1",
79
+ "@typescript-eslint/utils": "^8.24.1",
71
80
  "@web/dev-server-esbuild": "^1.0.3",
72
81
  "@web/dev-server-rollup": "^0.6.4",
73
82
  "@web/test-runner": "^0.19.0",
74
83
  "@web/test-runner-commands": "^0.9.0",
75
84
  "@web/test-runner-playwright": "^0.11.0",
76
85
  "chalk": "^5.3.0",
77
- "esbuild": "^0.24.2",
86
+ "chokidar-cli": "^3.0.0",
87
+ "comment-parser": "^1.4.1",
88
+ "custom-elements-manifest": "^2.1.0",
89
+ "esbuild": "^0.25.0",
78
90
  "eslint": "^9.17.0",
79
- "eslint-config-prettier": "^9.1.0",
91
+ "eslint-config-prettier": "^10.0.1",
80
92
  "eslint-plugin-import": "^2.31.0",
81
93
  "eslint-plugin-lit": "^1.15.0",
82
94
  "eslint-plugin-lit-a11y": "^4.1.4",
@@ -91,14 +103,15 @@
91
103
  "lit": "^3.2.1",
92
104
  "lit-analyzer": "^2.0.3",
93
105
  "minify-literals": "^1.0.10",
106
+ "node-html-parser": "^7.0.1",
94
107
  "npm-run-all2": "^7.0.2",
95
108
  "per-env": "^1.0.2",
96
109
  "postcss": "^8.4.49",
97
110
  "postcss-lit": "^1.1.1",
98
- "prettier": "3.4.2",
99
- "rimraf": "^5.0.10",
111
+ "prettier": "3.5.1",
112
+ "rimraf": "^6.0.1",
100
113
  "sinon": "^19.0.2",
101
- "storybook": "^8.5.1",
114
+ "storybook": "^8.5.8",
102
115
  "stylelint": "^16.12.0",
103
116
  "stylelint-config-standard": "^36.0.1",
104
117
  "stylelint-order": "^6.0.4",
@@ -107,10 +120,12 @@
107
120
  "stylelint-use-nesting": "^6.0.0",
108
121
  "terser": "^5.37.0",
109
122
  "ts-lit-plugin": "^2.0.2",
123
+ "ts-morph": "^25.0.1",
124
+ "tsx": "^4.19.2",
110
125
  "typescript": "^5.7.2",
111
- "typescript-eslint": "^8.18.0",
112
- "vite": "^6.0.7",
113
- "vitest": "^2.1.8"
126
+ "typescript-eslint": "^8.24.1",
127
+ "vite": "^6.1.1",
128
+ "vitest": "^3.0.6"
114
129
  },
115
130
  "engines": {
116
131
  "node": ">= 20",
@@ -118,33 +133,45 @@
118
133
  },
119
134
  "scripts": {
120
135
  "start": "per-env",
121
- "start:development": "storybook dev --config-dir .storybook --no-open --port 6006",
122
- "start:production": "rimraf ./dist && npm-run-all --parallel start:production:components start:production:storybook start:production:stylesheets --aggregate-output --print-label",
123
- "start:production:components": "tsc --outDir ./dist && node ./terser.js",
136
+ "start:development": "npm-run-all --parallel --print-name start:development:*",
137
+ "start:development:cem-analyze": "chokidar ./custom-elements.config.js './src/*.ts' './src/*.*.ts' './src/cem-analyzer-plugins/**' --ignore '**/*stories*' --ignore '**/*test*' --initial --silent --command 'tsc --noCheck --outDir ./dist && NODE_OPTIONS=--no-warnings=ExperimentalWarning cem analyze --config ./custom-elements.config.js --quiet'",
138
+ "start:development:cem-analyze:comment": "JSON module imports produce a warning. Remove NODE_OPTIONS when JSON module imports are no longer experimental.",
139
+ "start:development:storybook": "storybook dev --config-dir .storybook --no-open --no-version-updates --port 6006",
140
+ "start:development:ts-morph": "chokidar ./custom-elements.json './src/ts-morph/**' --initial --silent --command 'tsx ./src/ts-morph/run.ts'",
141
+ "start:development:ts-morph:comment:tsx": "Remove `tsx` once Node.js type stripping is available.",
142
+ "start:development:ts-morph:comment:watching": "It would be helpful to also watch './custom-elements.json`. But doing so would create a loop between this script and `start:development:cem-analyze`.",
143
+ "start:production": "rimraf ./dist && npm-run-all --aggregate-output --print-label --parallel start:production:components start:production:storybook start:production:stylesheets",
144
+ "start:production:components": "tsc --noCheck --outDir ./dist && node ./terser.js",
124
145
  "start:production:figma": "pnpm dt export-variables && pnpm dt build-tokens && pnpm dt build-styles",
146
+ "start:production:cem-analyze": "tsc --noCheck --outDir ./dist && NODE_OPTIONS=--no-warnings=ExperimentalWarning cem analyze --config ./custom-elements.config.js --quiet && git diff --quiet -- || { echo ERROR: Uncommitted elements manifest changes. Run this command locally and commit the changes.; exit 1; }",
125
147
  "start:production:storybook": "storybook build --config-dir .storybook --disable-telemetry --output-dir ./dist/storybook",
126
148
  "start:production:stylesheets": "node ./esbuild.js",
149
+ "start:production:ts-morph": "tsx ./src/ts-morph/run.ts && git diff --quiet -- || { echo ERROR: Uncommitted code modifications. Run this command locally and commit the changes.; exit 1; }",
127
150
  "format": "per-env",
128
- "format:development": "prettier . --write && stylelint '**/*.styles.ts' --custom-syntax postcss-lit --fix",
129
- "format:production": "prettier . --check && stylelint '**/*.styles.ts' --custom-syntax postcss-lit --no-color",
151
+ "format:development": "chokidar '**/*' --ignore 'dist/**' --ignore '.changeset/**' --ignore '.git/**' --ignore 'node_modules/**' --ignore 'pnpm-lock.yaml' --initial --silent --comand 'prettier --write --ignore-unknown {path} && stylelint {path}'",
152
+ "format:production": "prettier . --debug-check",
130
153
  "lint": "per-env",
131
- "lint:development": "npm-run-all --print-name lint:development:*",
132
- "lint:development:eslint": "tsc --outDir ./dist && eslint . --fix",
154
+ "lint:development": "npm-run-all --parallel --print-name lint:development:*",
155
+ "lint:development:eslint": "chokidar ./eslint-config.js ./src/eslint/** ./src/*.ts ./src/*.*.ts --initial --silent --command 'tsc --noCheck --outDir ./dist && eslint {path} --fix'",
133
156
  "lint:development:lit-analyzer": "lit-analyzer **/*.ts",
134
- "lint:production": "npm-run-all --parallel --aggregate-output --print-label lint:production:*",
135
- "lint:production:eslint": "tsc --outDir ./dist && eslint .",
157
+ "lint:development:stylelint": "chokidar ./.stylelintrc.js ./src/stylelint/** ./src/*.styles.ts ./src/*.*.styles.ts --initial --silent --command 'tsc --noCheck --outDir ./dist && stylelint {path} --custom-syntax postcss-lit --fix'",
158
+ "lint:production": "npm-run-all --aggregate-output --print-label --parallel lint:production:*",
159
+ "lint:production:eslint": "tsc --noCheck --outDir ./dist && eslint .",
136
160
  "lint:production:lit-analyzer": "lit-analyzer **/*.ts",
137
- "typecheck": "tsc --noEmit",
161
+ "lint:production:stylelint": "tsc --noCheck --outDir ./dist && stylelint '**/*.styles.ts' --custom-syntax postcss-lit --no-color",
138
162
  "test": "per-env",
139
- "test:development": "npm-run-all --parallel test:development:serve test:development:web-test-runner start:production:stylesheets",
140
- "test:development:serve": "npx http-server dist/coverage/lcov-report --silent",
141
- "test:development:web-test-runner": "web-test-runner --watch",
142
- "test:development:vitest": "vitest --config ./vitest.config.js",
143
- "test:development:vitest:comment": "Vitest is excluded from `test:development` because it muddies the console when running alongside Web Test Runner.",
144
- "test:production": "npm-run-all --parallel test:production:* start:production:stylesheets --aggregate-output --print-label",
145
- "test:production:vitest": "vitest run --config ./vitest.config.js",
146
- "test:production:web-test-runner": "web-test-runner",
147
- "postinstall": "pnpm dlx playwright@1.49.1 install --with-deps",
163
+ "test:development": "npm-run-all --parallel test:development:components test:development:serve-component-coverage",
164
+ "test:development:components": "web-test-runner --watch",
165
+ "test:development:lint-rules": "vitest --config ./vitest.config.js & chokidar './src/eslint/**' './src/stylelint/**' --ignore './src/eslint/rules/*.test.ts' './src/stylelint/*.test.ts' --initial --silent --command 'tsc --noCheck --outDir ./dist'",
166
+ "test:development:lint-rules:comment": "Excluded from `test:development` because Vitest muddies the console when running alongside Web Test Runner.",
167
+ "test:development:serve-component-coverage": "npx http-server dist/coverage/lcov-report --silent",
168
+ "test:production": "pnpm start:production:stylesheets && npm-run-all --aggregate-output --print-label --parallel test:production:*",
169
+ "test:production:lint-rules": "tsc --noCheck --outDir ./dist && vitest run --config ./vitest.config.js",
170
+ "test:production:components": "web-test-runner",
171
+ "typecheck": "per-env",
172
+ "typecheck:development": "tsc --outDir ./dist -w",
173
+ "typecheck:production": "tsc --outDir ./dist",
174
+ "postinstall": "pnpm dlx playwright@1.50.1 install --with-deps",
148
175
  "release": "changeset publish"
149
176
  }
150
177
  }