@crowdstrike/glide-core 0.16.0 → 0.17.1

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 (77) hide show
  1. package/dist/accordion.d.ts +1 -1
  2. package/dist/accordion.js +1 -1
  3. package/dist/accordion.styles.js +17 -15
  4. package/dist/button-group.d.ts +1 -1
  5. package/dist/checkbox-group.d.ts +3 -3
  6. package/dist/checkbox-group.js +1 -1
  7. package/dist/checkbox.d.ts +3 -3
  8. package/dist/checkbox.js +17 -37
  9. package/dist/checkbox.styles.js +1 -12
  10. package/dist/drawer.d.ts +2 -5
  11. package/dist/drawer.js +1 -1
  12. package/dist/dropdown.d.ts +4 -3
  13. package/dist/dropdown.js +29 -43
  14. package/dist/dropdown.option.js +1 -1
  15. package/dist/icons/checked.js +1 -1
  16. package/dist/icons/chevron.d.ts +2 -0
  17. package/dist/icons/chevron.js +1 -0
  18. package/dist/icons/magnifying-glass.d.ts +1 -1
  19. package/dist/icons/magnifying-glass.js +1 -1
  20. package/dist/icons/pencil.js +1 -1
  21. package/dist/icons/x.d.ts +2 -0
  22. package/dist/icons/x.js +1 -0
  23. package/dist/inline-alert.d.ts +5 -5
  24. package/dist/inline-alert.js +1 -1
  25. package/dist/input.d.ts +3 -3
  26. package/dist/input.js +38 -61
  27. package/dist/label.js +1 -1
  28. package/dist/label.styles.js +5 -1
  29. package/dist/library/localize.d.ts +0 -2
  30. package/dist/library/mouse.d.ts +2 -0
  31. package/dist/library/mouse.js +1 -0
  32. package/dist/menu.d.ts +3 -1
  33. package/dist/menu.js +1 -1
  34. package/dist/menu.options.d.ts +1 -1
  35. package/dist/modal.d.ts +5 -8
  36. package/dist/modal.icon-button.d.ts +2 -7
  37. package/dist/modal.icon-button.styles.js +3 -3
  38. package/dist/modal.js +1 -1
  39. package/dist/modal.styles.js +50 -45
  40. package/dist/popover.d.ts +2 -0
  41. package/dist/popover.js +1 -1
  42. package/dist/radio-group.d.ts +3 -4
  43. package/dist/radio-group.js +5 -5
  44. package/dist/radio-group.radio.js +1 -1
  45. package/dist/radio-group.radio.styles.js +25 -37
  46. package/dist/radio-group.styles.js +1 -5
  47. package/dist/split-button.d.ts +2 -1
  48. package/dist/split-button.secondary-button.js +1 -1
  49. package/dist/split-button.secondary-button.styles.js +6 -9
  50. package/dist/tab.d.ts +1 -2
  51. package/dist/tab.group.js +1 -1
  52. package/dist/tab.group.styles.js +61 -55
  53. package/dist/tab.panel.d.ts +4 -4
  54. package/dist/tab.panel.js +1 -1
  55. package/dist/tab.styles.js +8 -8
  56. package/dist/tag.d.ts +1 -1
  57. package/dist/tag.js +1 -1
  58. package/dist/textarea.d.ts +3 -3
  59. package/dist/textarea.js +1 -1
  60. package/dist/toasts.toast.js +1 -1
  61. package/dist/toggle.d.ts +2 -2
  62. package/dist/toggle.js +1 -1
  63. package/dist/toggle.styles.js +0 -10
  64. package/dist/tooltip.d.ts +2 -0
  65. package/dist/tooltip.js +1 -1
  66. package/dist/translations/en.js +1 -1
  67. package/dist/translations/fr.js +1 -1
  68. package/dist/translations/ja.js +1 -1
  69. package/dist/tree.d.ts +1 -1
  70. package/dist/tree.item.js +1 -1
  71. package/dist/tree.item.menu.d.ts +2 -2
  72. package/dist/tree.item.menu.js +1 -1
  73. package/dist/tree.item.styles.js +38 -51
  74. package/dist/tree.js +1 -1
  75. package/package.json +7 -6
  76. package/dist/icons/informational.d.ts +0 -2
  77. package/dist/icons/informational.js +0 -1
@@ -1,5 +1,5 @@
1
1
  import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export default[css`
2
- ${focusOutline(".label-container:focus-visible")}
2
+ ${focusOutline(".label-container:not(.selected):focus-visible")}
3
3
  `,css`
4
4
  :host {
5
5
  cursor: pointer;
@@ -19,27 +19,35 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export
19
19
 
20
20
  &.selected {
21
21
  --color: var(--glide-core-text-selected);
22
+
23
+ ::slotted([slot='prefix']),
24
+ ::slotted([slot='menu']),
25
+ ::slotted([slot='suffix']) {
26
+ --hovered-icon-button-color: var(--glide-core-icon-hover);
27
+ }
22
28
  }
23
29
  }
24
30
 
25
31
  .expand-icon-container {
26
32
  flex-shrink: 0;
27
33
  min-inline-size: 1.5625rem;
28
- }
29
34
 
30
- .expand-icon {
31
- align-items: center;
32
- cursor: pointer;
33
- display: flex;
34
- justify-content: center;
35
- rotate: 0deg;
36
-
37
- @media (prefers-reduced-motion: no-preference) {
38
- transition: 250ms rotate ease;
35
+ &.expanded {
36
+ svg {
37
+ rotate: 0deg;
38
+ }
39
39
  }
40
40
 
41
- &.expand-icon-expanded {
42
- rotate: 90deg;
41
+ svg {
42
+ align-items: center;
43
+ cursor: pointer;
44
+ display: flex;
45
+ justify-content: center;
46
+ rotate: -90deg;
47
+
48
+ @media (prefers-reduced-motion: no-preference) {
49
+ transition: 250ms rotate ease;
50
+ }
43
51
  }
44
52
  }
45
53
 
@@ -61,46 +69,29 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export
61
69
  transition: background-color 150ms ease-in-out;
62
70
  }
63
71
 
64
- &:hover {
65
- background-color: var(--glide-core-surface-hover);
66
- }
67
-
68
72
  &.selected {
69
73
  background-color: var(--glide-core-surface-selected);
74
+ }
75
+
76
+ &:hover {
77
+ background-color: var(--glide-core-surface-hover);
70
78
 
71
- &:hover {
79
+ &.selected {
72
80
  background-color: var(--glide-core-surface-selected-hover);
73
81
  }
74
82
  }
75
83
 
76
84
  &:focus-visible {
77
- /* The outline is inside the component since children have overflow hidden */
78
- outline-offset: -2px;
79
-
80
- .component.selected & {
81
- /*
82
- We need !important here as we must override the focusVisible mixin
83
- that also includes !important.
84
- This component is a bit of a unique case as we want to override the
85
- default outline styles when a tree item is also focus-visible, but
86
- also selected.
87
- */
88
- outline: 1px solid var(--glide-core-icon-selected) !important;
89
- outline-offset: -3px;
85
+ &:not(&.selected) {
86
+ /* The outline is inside the component since children have overflow hidden */
87
+ outline-offset: -2px;
90
88
  }
91
- }
92
89
 
93
- .component.selected & {
94
- background-color: var(--glide-core-surface-selected);
95
-
96
- &:hover {
97
- background-color: var(--glide-core-surface-selected-hover);
90
+ &.selected {
91
+ outline: 1px solid var(--glide-core-icon-selected);
92
+ outline-offset: -3px;
98
93
  }
99
94
  }
100
-
101
- &.prefix-icon .label {
102
- padding-inline-start: var(--glide-core-spacing-xs);
103
- }
104
95
  }
105
96
 
106
97
  ::slotted([slot='menu']) {
@@ -113,12 +104,6 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export
113
104
  --icon-button-color: var(--color);
114
105
  }
115
106
 
116
- .component.selected ::slotted([slot='prefix']),
117
- .component.selected ::slotted([slot='menu']),
118
- .component.selected ::slotted([slot='suffix']) {
119
- --hovered-icon-button-color: var(--glide-core-icon-hover);
120
- }
121
-
122
107
  .label-container:hover,
123
108
  .label-container:focus,
124
109
  .label-container:focus-within,
@@ -134,18 +119,20 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export
134
119
  overflow: hidden;
135
120
  text-overflow: ellipsis;
136
121
  white-space: nowrap;
122
+
123
+ &.prefix-icon {
124
+ padding-inline-start: var(--glide-core-spacing-xs);
125
+ }
137
126
  }
138
127
 
139
- .child-items {
128
+ .default-slot-container {
140
129
  block-size: 0;
141
130
  display: flex;
142
131
  flex-direction: column;
143
132
  overflow: hidden;
144
133
  visibility: hidden;
145
- }
146
134
 
147
- .expanded {
148
- .child-items {
135
+ &.expanded {
149
136
  block-size: auto;
150
137
  visibility: visible;
151
138
  }
package/dist/tree.js CHANGED
@@ -1 +1 @@
1
- var __decorate=this&&this.__decorate||function(e,t,o,s){var r,i=arguments.length,l=i<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,o):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,o,s);else for(var n=e.length-1;n>=0;n--)(r=e[n])&&(l=(i<3?r(l):i>3?r(t,o,l):r(t,o))||l);return i>3&&l&&Object.defineProperty(t,o,l),l};import{LitElement,html}from"lit";import{createRef,ref}from"lit/directives/ref.js";import{customElement,state}from"lit/decorators.js";import{owSlot,owSlotType}from"./library/ow.js";import GlideCoreTreeItem from"./tree.item.js";import styles from"./tree.styles.js";let GlideCoreTree=class GlideCoreTree extends LitElement{static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:"closed"}}static{this.styles=styles}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("focusin",this.#e),this.removeEventListener("focusout",this.#t)}firstUpdated(){owSlot(this.#o.value),owSlotType(this.#o.value,[GlideCoreTreeItem])}render(){return html`<div class="component" role="tree" tabindex="${this.privateTabIndex}" @click="${this.#s}" @keydown="${this.#r}"><slot @slotchange="${this.#i}" ${ref(this.#o)}></slot></div>`}selectItem(e){if(this.#l){for(const t of this.#l){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.privateTabIndex=0,this.#o=createRef(),this.addEventListener("focusin",this.#e),this.addEventListener("focusout",this.#t)}#o;get#l(){return this.#o.value?.assignedElements().filter((e=>e instanceof GlideCoreTreeItem))}#n(e){e?.focus(),this.focusedItem=e}#c(){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)}))}#s(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))}#i(){owSlot(this.#o.value),owSlotType(this.#o.value,[GlideCoreTreeItem])}#e(e){let t;e.target===this?t=this.selectedItem?.checkVisibility({visibilityProperty:!0})?this.selectedItem:this.#l?.[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)}#r(e){if(!["ArrowRight","ArrowLeft","ArrowDown","ArrowUp","Home","End","Enter"].includes(e.key))return;if(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.#c(),{focusedItem:o}=this,s=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!==s&&s<t.length-1&&this.#n(t[s+1]),"ArrowUp"===e.key&&s>0&&this.#n(t[s-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))}};__decorate([state()],GlideCoreTree.prototype,"selectedItem",void 0),__decorate([state()],GlideCoreTree.prototype,"focusedItem",void 0),__decorate([state()],GlideCoreTree.prototype,"privateTabIndex",void 0),GlideCoreTree=__decorate([customElement("glide-core-tree")],GlideCoreTree);export default GlideCoreTree;
1
+ var __decorate=this&&this.__decorate||function(e,t,o,s){var r,i=arguments.length,l=i<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,o):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)l=Reflect.decorate(e,t,o,s);else for(var n=e.length-1;n>=0;n--)(r=e[n])&&(l=(i<3?r(l):i>3?r(t,o,l):r(t,o))||l);return i>3&&l&&Object.defineProperty(t,o,l),l};import{LitElement,html}from"lit";import{createRef,ref}from"lit/directives/ref.js";import{customElement,state}from"lit/decorators.js";import{owSlot,owSlotType}from"./library/ow.js";import GlideCoreTreeItem from"./tree.item.js";import styles from"./tree.styles.js";let GlideCoreTree=class GlideCoreTree extends LitElement{static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:"closed"}}static{this.styles=styles}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("focusin",this.#e),this.removeEventListener("focusout",this.#t)}firstUpdated(){owSlot(this.#o.value),owSlotType(this.#o.value,[GlideCoreTreeItem])}render(){return html`<div class="component" role="tree" tabindex="${this.privateTabIndex}" @click="${this.#s}" @keydown="${this.#r}"><slot @slotchange="${this.#i}" ${ref(this.#o)}></slot></div>`}selectItem(e){if(this.#l){for(const t of this.#l){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.privateTabIndex=0,this.#o=createRef(),this.addEventListener("focusin",this.#e),this.addEventListener("focusout",this.#t)}#o;get#l(){return this.#o.value?.assignedElements().filter((e=>e instanceof GlideCoreTreeItem))}#n(e){e?.focus(),this.focusedItem=e}#c(){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)}))}#s(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.#c(),{focusedItem:o}=this,s=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!==s&&s<t.length-1&&this.#n(t[s+1]),"ArrowUp"===e.key&&s>0&&this.#n(t[s-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))}#i(){owSlot(this.#o.value),owSlotType(this.#o.value,[GlideCoreTreeItem])}#e(e){let t;e.target===this?t=this.selectedItem?.checkVisibility({visibilityProperty:!0})?this.selectedItem:this.#l?.[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([state()],GlideCoreTree.prototype,"selectedItem",void 0),__decorate([state()],GlideCoreTree.prototype,"focusedItem",void 0),__decorate([state()],GlideCoreTree.prototype,"privateTabIndex",void 0),GlideCoreTree=__decorate([customElement("glide-core-tree")],GlideCoreTree);export default GlideCoreTree;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crowdstrike/glide-core",
3
- "version": "0.16.0",
3
+ "version": "0.17.1",
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",
@@ -51,6 +51,7 @@
51
51
  "@eslint/js": "^9.17.0",
52
52
  "@open-wc/testing": "^4.0.0",
53
53
  "@rollup/plugin-commonjs": "^25.0.8",
54
+ "@storybook/addon-actions": "^8.4.7",
54
55
  "@storybook/addon-essentials": "^8.4.7",
55
56
  "@storybook/addon-links": "^8.4.7",
56
57
  "@storybook/blocks": "^8.4.7",
@@ -64,16 +65,16 @@
64
65
  "@types/eslint": "^8.56.12",
65
66
  "@types/mocha": "^10.0.10",
66
67
  "@types/sinon": "^17.0.3",
67
- "@typescript-eslint/rule-tester": "^8.18.0",
68
- "@typescript-eslint/types": "^8.18.0",
69
- "@typescript-eslint/utils": "^8.18.0",
68
+ "@typescript-eslint/rule-tester": "^8.19.0",
69
+ "@typescript-eslint/types": "^8.19.0",
70
+ "@typescript-eslint/utils": "^8.19.0",
70
71
  "@web/dev-server-esbuild": "^1.0.3",
71
72
  "@web/dev-server-rollup": "^0.6.4",
72
73
  "@web/test-runner": "^0.19.0",
73
74
  "@web/test-runner-commands": "^0.9.0",
74
75
  "@web/test-runner-playwright": "^0.11.0",
75
76
  "chalk": "^5.3.0",
76
- "esbuild": "^0.24.0",
77
+ "esbuild": "^0.24.2",
77
78
  "eslint": "^9.17.0",
78
79
  "eslint-config-prettier": "^9.1.0",
79
80
  "eslint-plugin-lit": "^1.15.0",
@@ -85,7 +86,7 @@
85
86
  "globby": "^14.0.2",
86
87
  "http-server": "^14.1.1",
87
88
  "husky": "^8.0.3",
88
- "is-ci": "^3.0.1",
89
+ "is-ci": "^4.1.0",
89
90
  "lint-staged": "^15.2.11",
90
91
  "lit": "^3.2.1",
91
92
  "lit-analyzer": "^2.0.3",
@@ -1,2 +0,0 @@
1
- declare const _default: import("lit").TemplateResult;
2
- export default _default;
@@ -1 +0,0 @@
1
- import{svg}from"lit/static-html.js";export default svg`<svg aria-hidden="true" viewBox="0 0 16 16" fill="none" style="height: var(--size, 1rem); width: var(--size, 1rem);"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.99996 0.666672C3.94987 0.666672 0.666626 3.94992 0.666626 8C0.666626 12.0501 3.94987 15.3333 7.99996 15.3333C12.05 15.3333 15.3333 12.0501 15.3333 8C15.3333 3.94992 12.05 0.666672 7.99996 0.666672ZM8.66663 5.33334C8.66663 4.96515 8.36815 4.66667 7.99996 4.66667C7.63177 4.66667 7.33329 4.96515 7.33329 5.33334V8C7.33329 8.36819 7.63177 8.66667 7.99996 8.66667C8.36815 8.66667 8.66663 8.36819 8.66663 8V5.33334ZM7.99996 10C7.63177 10 7.33329 10.2985 7.33329 10.6667C7.33329 11.0349 7.63177 11.3333 7.99996 11.3333H8.00663C8.37482 11.3333 8.67329 11.0349 8.67329 10.6667C8.67329 10.2985 8.37482 10 8.00663 10H7.99996Z" fill="currentColor"/></svg>`;