@crowdstrike/glide-core 0.29.2 → 0.30.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 (122) hide show
  1. package/dist/accordion.js +240 -1
  2. package/dist/accordion.styles.js +13 -7
  3. package/dist/button-group.button.js +143 -1
  4. package/dist/button-group.button.styles.js +43 -15
  5. package/dist/button-group.js +249 -1
  6. package/dist/button-group.styles.js +10 -5
  7. package/dist/button.js +206 -1
  8. package/dist/button.styles.js +12 -7
  9. package/dist/checkbox-group.js +479 -14
  10. package/dist/checkbox-group.styles.js +5 -2
  11. package/dist/checkbox.js +519 -32
  12. package/dist/checkbox.styles.js +10 -5
  13. package/dist/drawer.js +168 -1
  14. package/dist/drawer.styles.js +5 -2
  15. package/dist/dropdown.js +2423 -123
  16. package/dist/dropdown.option.js +536 -1
  17. package/dist/dropdown.option.styles.js +5 -2
  18. package/dist/dropdown.styles.js +14 -7
  19. package/dist/form-controls-layout.js +102 -1
  20. package/dist/form-controls-layout.styles.js +5 -2
  21. package/dist/icon-button.js +139 -1
  22. package/dist/icon-button.styles.js +19 -7
  23. package/dist/icons/checked.js +28 -1
  24. package/dist/icons/chevron.js +21 -1
  25. package/dist/icons/magnifying-glass.js +23 -1
  26. package/dist/icons/pencil.js +21 -1
  27. package/dist/icons/severity-critical.js +20 -1
  28. package/dist/icons/severity-informational.js +20 -1
  29. package/dist/icons/severity-medium.js +20 -1
  30. package/dist/icons/x.js +21 -1
  31. package/dist/inline-alert.js +118 -1
  32. package/dist/inline-alert.styles.js +5 -2
  33. package/dist/input.d.ts +8 -2
  34. package/dist/input.js +505 -41
  35. package/dist/input.styles.js +25 -4
  36. package/dist/label.js +303 -1
  37. package/dist/label.styles.js +11 -5
  38. package/dist/library/assert-slot.js +136 -1
  39. package/dist/library/expect-unhandled-rejection.js +14 -1
  40. package/dist/library/expect-window-error.js +26 -1
  41. package/dist/library/final.js +18 -1
  42. package/dist/library/form-control.js +1 -1
  43. package/dist/library/localize.js +10 -1
  44. package/dist/library/mouse.js +35 -1
  45. package/dist/library/on-resize.js +24 -1
  46. package/dist/library/required.js +35 -1
  47. package/dist/library/shadow-root-mode.js +4 -1
  48. package/dist/library/unique-id.js +3 -1
  49. package/dist/link.js +92 -1
  50. package/dist/link.styles.js +10 -5
  51. package/dist/menu.d.ts +3 -2
  52. package/dist/menu.js +1259 -1
  53. package/dist/menu.styles.js +34 -17
  54. package/dist/modal.d.ts +4 -0
  55. package/dist/modal.icon-button.js +60 -1
  56. package/dist/modal.icon-button.styles.js +5 -2
  57. package/dist/modal.js +473 -1
  58. package/dist/modal.styles.js +71 -22
  59. package/dist/option.d.ts +74 -0
  60. package/dist/option.js +498 -0
  61. package/dist/option.styles.js +140 -0
  62. package/dist/{menu.options.d.ts → options.d.ts} +5 -6
  63. package/dist/options.js +130 -0
  64. package/dist/options.styles.js +21 -0
  65. package/dist/popover.js +620 -1
  66. package/dist/popover.styles.js +11 -5
  67. package/dist/radio-group.js +624 -17
  68. package/dist/radio-group.radio.js +211 -1
  69. package/dist/radio-group.radio.styles.js +9 -4
  70. package/dist/radio-group.styles.js +5 -2
  71. package/dist/slider.js +1040 -61
  72. package/dist/slider.styles.js +9 -4
  73. package/dist/spinner.js +60 -1
  74. package/dist/spinner.styles.js +5 -2
  75. package/dist/split-button.js +116 -1
  76. package/dist/split-button.primary-button.js +100 -1
  77. package/dist/split-button.primary-button.styles.js +13 -6
  78. package/dist/split-button.primary-link.js +102 -1
  79. package/dist/split-button.secondary-button.d.ts +2 -3
  80. package/dist/split-button.secondary-button.js +121 -1
  81. package/dist/split-button.secondary-button.styles.js +12 -7
  82. package/dist/split-button.styles.js +9 -4
  83. package/dist/styles/focus-outline.js +9 -3
  84. package/dist/styles/fonts.css +6 -1
  85. package/dist/styles/opacity-and-scale-animation.js +6 -3
  86. package/dist/styles/skeleton.js +6 -3
  87. package/dist/styles/variables.css +410 -1
  88. package/dist/styles/visually-hidden.js +6 -3
  89. package/dist/tab.group.js +386 -1
  90. package/dist/tab.group.styles.js +5 -2
  91. package/dist/tab.js +133 -1
  92. package/dist/tab.panel.js +93 -1
  93. package/dist/tab.panel.styles.js +11 -5
  94. package/dist/tab.styles.js +9 -4
  95. package/dist/tag.js +207 -1
  96. package/dist/tag.styles.js +10 -5
  97. package/dist/textarea.js +353 -19
  98. package/dist/textarea.styles.js +23 -4
  99. package/dist/toast.js +130 -1
  100. package/dist/toast.toasts.js +248 -25
  101. package/dist/toast.toasts.styles.js +9 -4
  102. package/dist/toggle.js +178 -1
  103. package/dist/toggle.styles.js +25 -5
  104. package/dist/tooltip.container.js +130 -1
  105. package/dist/tooltip.container.styles.js +5 -2
  106. package/dist/tooltip.js +484 -1
  107. package/dist/tooltip.styles.js +21 -5
  108. package/dist/translations/en.js +36 -1
  109. package/dist/translations/fr.js +37 -1
  110. package/dist/translations/ja.js +37 -1
  111. package/package.json +8 -12
  112. package/dist/menu.button.d.ts +0 -42
  113. package/dist/menu.button.js +0 -1
  114. package/dist/menu.button.styles.js +0 -32
  115. package/dist/menu.link.d.ts +0 -44
  116. package/dist/menu.link.js +0 -1
  117. package/dist/menu.link.styles.js +0 -35
  118. package/dist/menu.options.js +0 -1
  119. package/dist/menu.options.styles.d.ts +0 -2
  120. package/dist/menu.options.styles.js +0 -20
  121. /package/dist/{menu.button.styles.d.ts → option.styles.d.ts} +0 -0
  122. /package/dist/{menu.link.styles.d.ts → options.styles.d.ts} +0 -0
@@ -1,10 +1,25 @@
1
- import{css}from"lit";import focusOutline from"./styles/focus-outline.js";import opacityAndScaleAnimation from"./styles/opacity-and-scale-animation.js";export default[css`
2
- ${opacityAndScaleAnimation(".tooltip:popover-open")}
3
- ${focusOutline(".target-slot:focus-visible")}
4
- `,css`
1
+ import { css } from 'lit';
2
+ import focusOutline from './styles/focus-outline.js';
3
+ import opacityAndScaleAnimation from './styles/opacity-and-scale-animation.js';
4
+ export default [
5
+ css `
6
+ ${opacityAndScaleAnimation('.tooltip:popover-open')}
7
+ ${focusOutline('.target-slot:focus-visible')}
8
+ `,
9
+ css `
5
10
  :host {
6
11
  /* https://github.com/CrowdStrike/glide-core/pull/307/files#r1718545771 */
7
12
  display: inline-block;
13
+
14
+ /*
15
+ We've found that many consumers put Tooltip in a container that has
16
+ "white-space: nowrap", preventing Tooltip's "label" and "description"
17
+ from wrapping.
18
+
19
+ It's easy enough for them to add "white-space: normal" to Tooltip's
20
+ host. But it reduces our support load to add it for them.
21
+ */
22
+ white-space: normal;
8
23
  }
9
24
 
10
25
  .component {
@@ -94,4 +109,5 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";import
94
109
  order: 2;
95
110
  }
96
111
  }
97
- `];
112
+ `,
113
+ ];
@@ -1 +1,36 @@
1
- const translation={$code:"en",$name:"English",$dir:"ltr",close:"Close",dismiss:"Dismiss",selectAll:"Select all",notifications:"Notifications",nextTab:"Next tab",previousTab:"Previous tab",noAvailableOptions:"No options available",noMatchingOptions:"No matching options",tooltip:"Tooltip:",severityInformational:"Severity: Informational",severityCritical:"Severity: Critical",severityMedium:"Severity: Medium",success:"Success:",error:"Error:",informational:"Informational:",loading:"Loading",add:"Add",announcedCharacterCount:(i,t)=>`Character count ${i} of ${t}`,displayedCharacterCount:(i,t)=>`${i}/${t}`,clearEntry:i=>`Clear ${i} entry`,editOption:i=>`Edit option: ${i}`,editTag:i=>`Edit tag: ${i}`,removeTag:i=>`Remove tag: ${i}`,itemCount:i=>`${i} items`,maximum:i=>`Maximum ${i}`,setMaximum:i=>`Set maximum ${i}`,minimum:i=>`Minimum ${i}`,setMinimum:i=>`Set minimum ${i}`};export default translation;
1
+ const translation = {
2
+ $code: 'en',
3
+ $name: 'English',
4
+ $dir: 'ltr',
5
+ // All of these should have corresponding entries in ./en.json,
6
+ // using ICU message syntax in place of any of dynamic functions
7
+ close: 'Close',
8
+ dismiss: 'Dismiss',
9
+ selectAll: 'Select all',
10
+ notifications: 'Notifications',
11
+ nextTab: 'Next tab',
12
+ previousTab: 'Previous tab',
13
+ noAvailableOptions: 'No options available',
14
+ noMatchingOptions: 'No matching options',
15
+ tooltip: 'Tooltip:',
16
+ severityInformational: 'Severity: Informational',
17
+ severityCritical: 'Severity: Critical',
18
+ severityMedium: 'Severity: Medium',
19
+ success: 'Success:',
20
+ error: 'Error:',
21
+ informational: 'Informational:',
22
+ loading: 'Loading',
23
+ add: 'Add',
24
+ announcedCharacterCount: (current, maximum) => `Character count ${current} of ${maximum}`,
25
+ displayedCharacterCount: (current, maximum) => `${current}/${maximum}`,
26
+ clearEntry: (label) => `Clear ${label} entry`,
27
+ editOption: (label) => `Edit option: ${label}`,
28
+ editTag: (label) => `Edit tag: ${label}`,
29
+ removeTag: (label) => `Remove tag: ${label}`,
30
+ itemCount: (count) => `${count} items`,
31
+ maximum: (label) => `Maximum ${label}`,
32
+ setMaximum: (label) => `Set maximum ${label}`,
33
+ minimum: (label) => `Minimum ${label}`,
34
+ setMinimum: (label) => `Set minimum ${label}`,
35
+ };
36
+ export default translation;
@@ -1 +1,37 @@
1
- export const PENDING_STRINGS=["severityInformational","severityCritical","severityMedium","success","error","informational","loading","noAvailableOptions","noMatchingOptions","maximum","setMaximum","minimum","setMinimum","add"];const translation={$code:"fr",$name:"French",$dir:"ltr",close:"FERMER",dismiss:"Ignorer",selectAll:"Tout sélectionner",notifications:"Notifications",nextTab:"Onglet suivant",previousTab:"Onglet précédent",tooltip:"Info-bulle :",announcedCharacterCount:(e,t)=>`Nombre de caractères ${e} sur ${t}`,displayedCharacterCount:(e,t)=>`${e}/${t}`,clearEntry:e=>`Effacer l'entrée ${e}`,editOption:e=>`Modifier l'option : ${e}`,editTag:e=>`Modifier la balise : ${e}`,removeTag:e=>`Enlever la balise : ${e}`,itemCount:e=>`${e} éléments`};export default translation;
1
+ export const PENDING_STRINGS = [
2
+ 'severityInformational',
3
+ 'severityCritical',
4
+ 'severityMedium',
5
+ 'success',
6
+ 'error',
7
+ 'informational',
8
+ 'loading',
9
+ 'noAvailableOptions',
10
+ 'noMatchingOptions',
11
+ 'maximum',
12
+ 'setMaximum',
13
+ 'minimum',
14
+ 'setMinimum',
15
+ 'add',
16
+ ];
17
+ const translation = {
18
+ $code: 'fr',
19
+ $name: 'French',
20
+ $dir: 'ltr',
21
+ // These come from ./fr.json
22
+ close: 'FERMER',
23
+ dismiss: 'Ignorer',
24
+ selectAll: 'Tout sélectionner',
25
+ notifications: 'Notifications',
26
+ nextTab: 'Onglet suivant',
27
+ previousTab: 'Onglet précédent',
28
+ tooltip: 'Info-bulle :',
29
+ announcedCharacterCount: (current, maximum) => `Nombre de caractères ${current} sur ${maximum}`,
30
+ displayedCharacterCount: (current, maximum) => `${current}/${maximum}`,
31
+ clearEntry: (label) => `Effacer l'entrée ${label}`,
32
+ editOption: (label) => `Modifier l'option : ${label}`,
33
+ editTag: (label) => `Modifier la balise : ${label}`,
34
+ removeTag: (label) => `Enlever la balise : ${label}`,
35
+ itemCount: (count) => `${count} éléments`,
36
+ };
37
+ export default translation;
@@ -1 +1,37 @@
1
- export const PENDING_STRINGS=["severityInformational","severityCritical","severityMedium","success","error","informational","loading","noAvailableOptions","noMatchingOptions","maximum","setMaximum","minimum","setMinimum","add"];const translation={$code:"ja",$name:"Japanese",$dir:"ltr",close:"閉じる",dismiss:"閉じる",selectAll:"すべて選択",notifications:"通知",nextTab:"Onglet suivant",previousTab:"Onglet précédent",tooltip:"ツールチップ:",announcedCharacterCount:(t,e)=>`文字数 ${t}/${e}`,displayedCharacterCount:(t,e)=>`${t}/${e}`,clearEntry:t=>`${t}入力をクリア`,editOption:t=>`編集オプション:${t}`,editTag:t=>`タグの編集:${t}`,removeTag:t=>`タグの削除:${t}`,itemCount:t=>`${t}件`};export default translation;
1
+ export const PENDING_STRINGS = [
2
+ 'severityInformational',
3
+ 'severityCritical',
4
+ 'severityMedium',
5
+ 'success',
6
+ 'error',
7
+ 'informational',
8
+ 'loading',
9
+ 'noAvailableOptions',
10
+ 'noMatchingOptions',
11
+ 'maximum',
12
+ 'setMaximum',
13
+ 'minimum',
14
+ 'setMinimum',
15
+ 'add',
16
+ ];
17
+ const translation = {
18
+ $code: 'ja',
19
+ $name: 'Japanese',
20
+ $dir: 'ltr',
21
+ // These come from ./ja.json
22
+ close: '閉じる',
23
+ dismiss: '閉じる',
24
+ selectAll: 'すべて選択',
25
+ notifications: '通知',
26
+ nextTab: 'Onglet suivant',
27
+ previousTab: 'Onglet précédent',
28
+ tooltip: 'ツールチップ:',
29
+ announcedCharacterCount: (current, maximum) => `文字数 ${current}/${maximum}`,
30
+ displayedCharacterCount: (current, maximum) => `${current}/${maximum}`,
31
+ clearEntry: (label) => `${label}入力をクリア`,
32
+ editOption: (label) => `編集オプション:${label}`,
33
+ editTag: (label) => `タグの編集:${label}`,
34
+ removeTag: (label) => `タグの削除:${label}`,
35
+ itemCount: (count) => `${count}件`,
36
+ };
37
+ export default translation;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crowdstrike/glide-core",
3
- "version": "0.29.2",
3
+ "version": "0.30.0",
4
4
  "description": "A Web Component design system",
5
5
  "author": "CrowdStrike UX Team",
6
6
  "license": "Apache-2.0",
@@ -63,7 +63,7 @@
63
63
  "@custom-elements-manifest/analyzer": "^0.10.4",
64
64
  "@eslint/eslintrc": "^3.3.1",
65
65
  "@eslint/js": "^9.28.0",
66
- "@figma/rest-api-spec": "^0.27.0",
66
+ "@figma/rest-api-spec": "^0.32.0",
67
67
  "@html-eslint/eslint-plugin": "^0.41.0",
68
68
  "@open-wc/testing": "^4.0.0",
69
69
  "@playwright/test": "^1.52.0",
@@ -90,7 +90,6 @@
90
90
  "@web/test-runner": "^0.20.2",
91
91
  "@web/test-runner-commands": "^0.9.0",
92
92
  "@web/test-runner-playwright": "^0.11.0",
93
- "chalk": "^5.3.0",
94
93
  "chokidar-cli": "^3.0.0",
95
94
  "comment-parser": "^1.4.1",
96
95
  "custom-elements-manifest": "^2.1.0",
@@ -104,7 +103,6 @@
104
103
  "eslint-plugin-unicorn": "^58.0.0",
105
104
  "globals": "^15.13.0",
106
105
  "globby": "^14.0.2",
107
- "http-server": "^14.1.1",
108
106
  "husky": "^8.0.3",
109
107
  "is-ci": "^4.1.0",
110
108
  "lint-staged": "^15.2.11",
@@ -115,21 +113,20 @@
115
113
  "npm-run-all2": "^7.0.2",
116
114
  "per-env": "^1.0.2",
117
115
  "playwright": "^1.52.0",
118
- "postcss": "^8.4.49",
119
- "postcss-lit": "^1.1.1",
116
+ "postcss": "^8.5.6",
117
+ "postcss-lit": "^1.2.0",
120
118
  "prettier": "^3.5.3",
121
119
  "react": "^19.1.0",
122
120
  "react-dom": "^19.1.0",
123
121
  "rimraf": "^6.0.1",
124
122
  "sinon": "^19.0.2",
125
123
  "storybook": "^8.6.3",
126
- "stylelint": "^16.12.0",
124
+ "stylelint": "^16.21.1",
127
125
  "stylelint-config-standard": "^36.0.1",
128
126
  "stylelint-order": "^6.0.4",
129
127
  "stylelint-prettier": "^5.0.2",
130
128
  "stylelint-use-logical": "^2.1.2",
131
129
  "stylelint-use-nesting": "^6.0.0",
132
- "terser": "^5.37.0",
133
130
  "ts-lit-plugin": "^2.0.2",
134
131
  "ts-morph": "^25.0.1",
135
132
  "tsx": "^4.19.2",
@@ -151,14 +148,14 @@
151
148
  "start:development:storybook": "storybook dev --config-dir .storybook --no-open --no-version-updates --port 6006",
152
149
  "start:development:ts-morph": "chokidar ./custom-elements.json './src/ts-morph/**' --initial --silent --command 'tsx ./src/ts-morph/run.ts'",
153
150
  "start:development:ts-morph:comment:tsx": "Remove `tsx` once Node.js type stripping is available.",
154
- "start:production": "rimraf ./dist && npm-run-all --aggregate-output --print-label --parallel start:production:typescript start:production:storybook start:production:esbuild",
151
+ "start:production": "rimraf ./dist && pnpm start:production:cem-analyze && pnpm start:production:ts-morph && npm-run-all --aggregate-output --print-label --parallel start:production:typescript start:production:storybook start:production:esbuild",
155
152
  "start:production:esbuild": "node ./esbuild.js",
156
153
  "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; }",
157
154
  "start:production:figma:dev-resources": "tsx ./src/figma/dev-resources/run.ts",
158
155
  "start:production:figma:variables": "tsx ./src/figma/variables/run.ts",
159
156
  "start:production:storybook": "storybook build --config-dir .storybook --disable-telemetry --output-dir ./dist/storybook",
160
157
  "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; }",
161
- "start:production:typescript": "tsc --noCheck --outDir ./dist && node ./terser.js",
158
+ "start:production:typescript": "tsc --noCheck --outDir ./dist",
162
159
  "format": "per-env",
163
160
  "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}'",
164
161
  "format:production": "prettier . --debug-check",
@@ -172,13 +169,12 @@
172
169
  "lint:production:lit-analyzer": "lit-analyzer **/*.ts",
173
170
  "lint:production:stylelint": "tsc --noCheck --outDir ./dist && stylelint '**/*.styles.ts' --custom-syntax postcss-lit --no-color",
174
171
  "test": "per-env",
175
- "test:development": "npm-run-all --parallel test:development:web-test-runner test:development:web-test-runner:serve-coverage",
172
+ "test:development": "pnpm test:development:web-test-runner",
176
173
  "test:development:playwright": "playwright test --quiet --ui-port 6007 --update-snapshots --update-source-method=overwrite",
177
174
  "test:development:playwright:update": "rimraf ./src/aria-snapshots && playwright test --quiet --project aria --update-snapshots --update-source-method=overwrite --workers 100%",
178
175
  "test:development:vitest": "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'",
179
176
  "test:development:vitest:comment": "Excluded from `test:development` because Vitest muddies the console when running alongside Web Test Runner.",
180
177
  "test:development:web-test-runner": "web-test-runner --watch",
181
- "test:development:web-test-runner:serve-coverage": "pnpm exec http-server dist/coverage/lcov-report --silent",
182
178
  "test:production": "pnpm start:production:esbuild && npm-run-all --aggregate-output --print-label --parallel test:production:*",
183
179
  "test:production:playwright:aria": "playwright test --quiet --only-changed origin/main",
184
180
  "test:production:playwright:visuals": "playwright test --ignore-snapshots --quiet --only-changed origin/main",
@@ -1,42 +0,0 @@
1
- import { LitElement } from 'lit';
2
- declare global {
3
- interface HTMLElementTagNameMap {
4
- 'glide-core-menu-button': MenuButton;
5
- }
6
- }
7
- /**
8
- * @attr {string} label
9
- * @attr {boolean} [disabled=false]
10
- *
11
- * @readonly
12
- * @attr {string} [id]
13
- *
14
- * @readonly
15
- * @attr {string} [role='menuitem']
16
- *
17
- * @readonly
18
- * @attr {number} [tabindex=-1]
19
- *
20
- * @readonly
21
- * @attr {string} [version]
22
- *
23
- * @slot {Element} [icon]
24
- */
25
- export default class MenuButton extends LitElement {
26
- #private;
27
- static shadowRootOptions: ShadowRootInit;
28
- static styles: import("lit").CSSResult[];
29
- label?: string;
30
- /**
31
- * @default false
32
- */
33
- get disabled(): boolean;
34
- set disabled(isDisabled: boolean);
35
- readonly id: string;
36
- privateActive: boolean;
37
- readonly role = "menuitem";
38
- readonly tabIndex = -1;
39
- readonly version: string;
40
- click(): void;
41
- render(): import("lit").TemplateResult<1>;
42
- }
@@ -1 +0,0 @@
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 a=e.length-1;a>=0;a--)(i=e[a])&&(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{html,LitElement}from"lit";import{classMap}from"lit/directives/class-map.js";import{createRef,ref}from"lit/directives/ref.js";import{customElement,property}from"lit/decorators.js";import packageJson from"../package.json"with{type:"json"};import styles from"./menu.button.styles.js";import shadowRootMode from"./library/shadow-root-mode.js";import final from"./library/final.js";import required from"./library/required.js";import uniqueId from"./library/unique-id.js";let MenuButton=class MenuButton extends LitElement{constructor(){super(...arguments),this.id=uniqueId(),this.privateActive=!1,this.role="menuitem",this.tabIndex=-1,this.version=packageJson.version,this.#e=createRef(),this.#t=!1}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:shadowRootMode}}static{this.styles=styles}get disabled(){return this.#t}set disabled(e){this.#t=e,e&&this.privateActive&&this.dispatchEvent(new Event("private-disabled",{bubbles:!0}))}click(){this.#e.value?.click()}render(){return html`<button class="${classMap({component:!0,active:this.privateActive,disabled:this.disabled})}" ?disabled="${this.disabled}" data-test="component" type="button" ${ref(this.#e)}><slot name="icon"></slot>${this.label}</button>`}#e;#t};__decorate([property({reflect:!0}),required],MenuButton.prototype,"label",void 0),__decorate([property({reflect:!0,type:Boolean})],MenuButton.prototype,"disabled",null),__decorate([property({reflect:!0})],MenuButton.prototype,"id",void 0),__decorate([property({type:Boolean})],MenuButton.prototype,"privateActive",void 0),__decorate([property({reflect:!0})],MenuButton.prototype,"role",void 0),__decorate([property({attribute:"tabindex",reflect:!0,type:Number})],MenuButton.prototype,"tabIndex",void 0),__decorate([property({reflect:!0})],MenuButton.prototype,"version",void 0),MenuButton=__decorate([customElement("glide-core-menu-button"),final],MenuButton);export default MenuButton;
@@ -1,32 +0,0 @@
1
- import{css}from"lit";export default[css`
2
- .component {
3
- align-items: center;
4
- background-color: transparent;
5
- block-size: 1.75rem;
6
- border: none;
7
- border-radius: var(--glide-core-spacing-base-sm);
8
- display: flex;
9
- font: inherit;
10
- gap: var(--glide-core-spacing-base-xs);
11
- inline-size: 100%;
12
- padding-block: var(--glide-core-spacing-base-xxs);
13
- padding-inline: var(--glide-core-spacing-base-sm);
14
- transition: background-color 100ms ease-in-out;
15
- user-select: none;
16
-
17
- &.active {
18
- background-color: var(
19
- --glide-core-color-interactive-surface-container--hover
20
- );
21
- }
22
-
23
- &.disabled {
24
- color: var(--glide-core-color-interactive-icon-default--disabled);
25
- }
26
-
27
- &:not(.disabled) {
28
- color: var(--glide-core-color-static-text-default);
29
- cursor: pointer;
30
- }
31
- }
32
- `];
@@ -1,44 +0,0 @@
1
- import { LitElement } from 'lit';
2
- declare global {
3
- interface HTMLElementTagNameMap {
4
- 'glide-core-menu-link': MenuLink;
5
- }
6
- }
7
- /**
8
- * @attr {string} label
9
- * @attr {boolean} [disabled=false]
10
- * @attr {string} [href]
11
- *
12
- * @readonly
13
- * @attr {string} [id]
14
- *
15
- * @readonly
16
- * @attr {string} [role='menuitem']
17
- *
18
- * @readonly
19
- * @attr {number} [tabindex=-1]
20
- *
21
- * @readonly
22
- * @attr {string} [version]
23
- *
24
- * @slot {Element} [icon]
25
- */
26
- export default class MenuLink extends LitElement {
27
- #private;
28
- static shadowRootOptions: ShadowRootInit;
29
- static styles: import("lit").CSSResult[];
30
- label?: string;
31
- /**
32
- * @default false
33
- */
34
- get disabled(): boolean;
35
- set disabled(isDisabled: boolean);
36
- href?: string;
37
- readonly id: string;
38
- privateActive: boolean;
39
- readonly role = "menuitem";
40
- readonly tabIndex = -1;
41
- readonly version: string;
42
- click(): void;
43
- render(): import("lit").TemplateResult<1>;
44
- }
package/dist/menu.link.js DELETED
@@ -1 +0,0 @@
1
- var __decorate=this&&this.__decorate||function(e,t,i,o){var r,s=arguments.length,n=s<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,i):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,i,o);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(s<3?r(n):s>3?r(t,i,n):r(t,i))||n);return s>3&&n&&Object.defineProperty(t,i,n),n};import{html,LitElement}from"lit";import{classMap}from"lit/directives/class-map.js";import{createRef,ref}from"lit/directives/ref.js";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"./menu.link.styles.js";import shadowRootMode from"./library/shadow-root-mode.js";import final from"./library/final.js";import required from"./library/required.js";import uniqueId from"./library/unique-id.js";let MenuLink=class MenuLink extends LitElement{constructor(){super(...arguments),this.id=uniqueId(),this.privateActive=!1,this.role="menuitem",this.tabIndex=-1,this.version=packageJson.version,this.#e=createRef(),this.#t=!1}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:shadowRootMode}}static{this.styles=styles}get disabled(){return this.#t}set disabled(e){this.#t=e,e&&this.privateActive&&this.dispatchEvent(new Event("private-disabled",{bubbles:!0}))}click(){this.disabled||this.#e.value?.click()}render(){return html`<a aria-disabled="${this.disabled}" class="${classMap({component:!0,active:this.privateActive,disabled:this.disabled})}" data-test="component" href="${ifDefined(this.href)}" @click="${this.#i}" ${ref(this.#e)}><slot name="icon"></slot>${this.label}</a>`}#e;#t;#i(e){this.disabled&&(e.preventDefault(),e.stopPropagation())}};__decorate([property({reflect:!0}),required],MenuLink.prototype,"label",void 0),__decorate([property({reflect:!0,type:Boolean})],MenuLink.prototype,"disabled",null),__decorate([property({reflect:!0})],MenuLink.prototype,"href",void 0),__decorate([property({reflect:!0})],MenuLink.prototype,"id",void 0),__decorate([property({type:Boolean})],MenuLink.prototype,"privateActive",void 0),__decorate([property({reflect:!0})],MenuLink.prototype,"role",void 0),__decorate([property({attribute:"tabindex",reflect:!0,type:Number})],MenuLink.prototype,"tabIndex",void 0),__decorate([property({reflect:!0})],MenuLink.prototype,"version",void 0),MenuLink=__decorate([customElement("glide-core-menu-link"),final],MenuLink);export default MenuLink;
@@ -1,35 +0,0 @@
1
- import{css}from"lit";export default[css`
2
- .component {
3
- align-items: center;
4
- background-color: transparent;
5
- block-size: 1.75rem;
6
- border: none;
7
- border-radius: var(--glide-core-spacing-base-sm);
8
- box-sizing: border-box;
9
- display: flex;
10
- font: inherit;
11
- gap: var(--glide-core-spacing-base-xs);
12
- inline-size: 100%;
13
- padding-block: var(--glide-core-spacing-base-xxs);
14
- padding-inline: var(--glide-core-spacing-base-sm);
15
- text-decoration: none;
16
- transition: background-color 100ms ease-in-out;
17
- user-select: none;
18
-
19
- &.active {
20
- background-color: var(
21
- --glide-core-color-interactive-surface-container--hover
22
- );
23
- }
24
-
25
- &.disabled {
26
- color: var(--glide-core-color-interactive-icon-default--disabled);
27
- cursor: default;
28
- }
29
-
30
- &:not(.disabled) {
31
- color: var(--glide-core-color-static-text-default);
32
- cursor: pointer;
33
- }
34
- }
35
- `];
@@ -1 +0,0 @@
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 a=e.length-1;a>=0;a--)(i=e[a])&&(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{html,LitElement}from"lit";import{classMap}from"lit/directives/class-map.js";import{customElement,property}from"lit/decorators.js";import{map}from"lit/directives/map.js";import{when}from"lit/directives/when.js";import{range}from"lit/directives/range.js";import packageJson from"../package.json"with{type:"json"};import MenuButton from"./menu.button.js";import MenuLink from"./menu.link.js";import styles from"./menu.options.styles.js";import assertSlot from"./library/assert-slot.js";import shadowRootMode from"./library/shadow-root-mode.js";import final from"./library/final.js";import uniqueId from"./library/unique-id.js";let MenuOptions=class MenuOptions extends LitElement{constructor(){super(...arguments),this.ariaActivedescendant="",this.ariaLabelledby="",this.id=uniqueId(),this.privateLoading=!1,this.role="menu",this.tabIndex=-1,this.version=packageJson.version}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:shadowRootMode}}static{this.styles=styles}render(){return html`<div class="component" role="none"><slot class="${classMap({"default-slot":!0,loading:this.privateLoading})}" ${assertSlot([MenuButton,MenuLink,Text])} @slotchange="${this.#e}"></slot>${when(this.privateLoading,(()=>html`<div class="loading-feedback" data-test="loading-feedback">${map(range(7),(()=>html`<div></div>`))}</div>`))}</div>`}#e(){this.dispatchEvent(new Event("private-slot-change",{bubbles:!0}))}};__decorate([property({attribute:"aria-activedescendant",reflect:!0,useDefault:!0})],MenuOptions.prototype,"ariaActivedescendant",void 0),__decorate([property({attribute:"aria-labelledby",reflect:!0,useDefault:!0})],MenuOptions.prototype,"ariaLabelledby",void 0),__decorate([property({reflect:!0})],MenuOptions.prototype,"id",void 0),__decorate([property({type:Boolean})],MenuOptions.prototype,"privateLoading",void 0),__decorate([property({reflect:!0})],MenuOptions.prototype,"role",void 0),__decorate([property({attribute:"tabindex",reflect:!0,type:Number})],MenuOptions.prototype,"tabIndex",void 0),__decorate([property({reflect:!0})],MenuOptions.prototype,"version",void 0),MenuOptions=__decorate([customElement("glide-core-menu-options"),final],MenuOptions);export default MenuOptions;
@@ -1,2 +0,0 @@
1
- declare const _default: import("lit").CSSResult[];
2
- export default _default;
@@ -1,20 +0,0 @@
1
- import{css}from"lit";import skeleton from"./styles/skeleton.js";export default[css`
2
- ${skeleton(".loading-feedback")}
3
- `,css`
4
- :host {
5
- display: inline-block;
6
- inline-size: 100%;
7
- }
8
-
9
- .component {
10
- font-family: var(--glide-core-typography-family-primary);
11
- font-size: var(--glide-core-typography-size-body-default);
12
- font-weight: var(--glide-core-typography-weight-regular);
13
- }
14
-
15
- .default-slot {
16
- &.loading {
17
- display: none;
18
- }
19
- }
20
- `];