@crowdstrike/glide-core 0.5.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 (272) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +41 -0
  3. package/dist/accordion.d.ts +23 -0
  4. package/dist/accordion.js +1 -0
  5. package/dist/accordion.stories.d.ts +9 -0
  6. package/dist/accordion.styles.d.ts +2 -0
  7. package/dist/accordion.styles.js +98 -0
  8. package/dist/accordion.test.basics.d.ts +1 -0
  9. package/dist/accordion.test.events.d.ts +1 -0
  10. package/dist/button-group.button.d.ts +33 -0
  11. package/dist/button-group.button.js +1 -0
  12. package/dist/button-group.button.styles.d.ts +2 -0
  13. package/dist/button-group.button.styles.js +99 -0
  14. package/dist/button-group.button.test.basics.d.ts +1 -0
  15. package/dist/button-group.button.test.events.d.ts +1 -0
  16. package/dist/button-group.d.ts +26 -0
  17. package/dist/button-group.js +1 -0
  18. package/dist/button-group.stories.d.ts +16 -0
  19. package/dist/button-group.styles.d.ts +2 -0
  20. package/dist/button-group.styles.js +18 -0
  21. package/dist/button-group.test.basics.d.ts +1 -0
  22. package/dist/button-group.test.events.d.ts +1 -0
  23. package/dist/button.d.ts +29 -0
  24. package/dist/button.js +1 -0
  25. package/dist/button.stories.d.ts +17 -0
  26. package/dist/button.styles.d.ts +2 -0
  27. package/dist/button.styles.js +133 -0
  28. package/dist/button.test.basics.d.ts +1 -0
  29. package/dist/button.test.events.d.ts +1 -0
  30. package/dist/button.test.form.d.ts +1 -0
  31. package/dist/checkbox-group.d.ts +43 -0
  32. package/dist/checkbox-group.js +1 -0
  33. package/dist/checkbox-group.stories.d.ts +7 -0
  34. package/dist/checkbox-group.styles.d.ts +2 -0
  35. package/dist/checkbox-group.styles.js +20 -0
  36. package/dist/checkbox-group.test.basics.d.ts +1 -0
  37. package/dist/checkbox-group.test.events.d.ts +1 -0
  38. package/dist/checkbox-group.test.focus.d.ts +1 -0
  39. package/dist/checkbox-group.test.form.d.ts +1 -0
  40. package/dist/checkbox-group.test.validity.d.ts +1 -0
  41. package/dist/checkbox.d.ts +50 -0
  42. package/dist/checkbox.js +1 -0
  43. package/dist/checkbox.stories.d.ts +9 -0
  44. package/dist/checkbox.styles.d.ts +2 -0
  45. package/dist/checkbox.styles.js +116 -0
  46. package/dist/checkbox.test.basics.d.ts +1 -0
  47. package/dist/checkbox.test.events.d.ts +1 -0
  48. package/dist/checkbox.test.focus.d.ts +1 -0
  49. package/dist/checkbox.test.form.d.ts +1 -0
  50. package/dist/checkbox.test.states.d.ts +1 -0
  51. package/dist/checkbox.test.validity.d.ts +1 -0
  52. package/dist/drawer.d.ts +30 -0
  53. package/dist/drawer.js +15 -0
  54. package/dist/drawer.stories.d.ts +7 -0
  55. package/dist/drawer.styles.d.ts +2 -0
  56. package/dist/drawer.styles.js +34 -0
  57. package/dist/drawer.test.accessibility.d.ts +1 -0
  58. package/dist/drawer.test.basics.d.ts +1 -0
  59. package/dist/drawer.test.closing.d.ts +1 -0
  60. package/dist/drawer.test.events.d.ts +1 -0
  61. package/dist/drawer.test.methods.d.ts +1 -0
  62. package/dist/dropdown.d.ts +66 -0
  63. package/dist/dropdown.js +1 -0
  64. package/dist/dropdown.option.d.ts +33 -0
  65. package/dist/dropdown.option.js +1 -0
  66. package/dist/dropdown.option.styles.d.ts +2 -0
  67. package/dist/dropdown.option.styles.js +64 -0
  68. package/dist/dropdown.option.test.basics.d.ts +1 -0
  69. package/dist/dropdown.option.test.basics.multiple.d.ts +1 -0
  70. package/dist/dropdown.option.test.basics.single.d.ts +1 -0
  71. package/dist/dropdown.option.test.events.d.ts +1 -0
  72. package/dist/dropdown.option.test.focus.multiple.d.ts +1 -0
  73. package/dist/dropdown.option.test.focus.single.d.ts +1 -0
  74. package/dist/dropdown.option.test.interactions.multiple.d.ts +1 -0
  75. package/dist/dropdown.option.test.interactions.single.d.ts +1 -0
  76. package/dist/dropdown.stories.d.ts +15 -0
  77. package/dist/dropdown.styles.d.ts +2 -0
  78. package/dist/dropdown.styles.js +162 -0
  79. package/dist/dropdown.test.basics.d.ts +1 -0
  80. package/dist/dropdown.test.basics.filterable.d.ts +1 -0
  81. package/dist/dropdown.test.basics.multiple.d.ts +1 -0
  82. package/dist/dropdown.test.basics.single.d.ts +1 -0
  83. package/dist/dropdown.test.events.d.ts +1 -0
  84. package/dist/dropdown.test.focus.filterable.d.ts +1 -0
  85. package/dist/dropdown.test.focus.multiple.d.ts +1 -0
  86. package/dist/dropdown.test.focus.single.d.ts +1 -0
  87. package/dist/dropdown.test.form.d.ts +1 -0
  88. package/dist/dropdown.test.form.multiple.d.ts +1 -0
  89. package/dist/dropdown.test.form.single.d.ts +1 -0
  90. package/dist/dropdown.test.interactions.d.ts +1 -0
  91. package/dist/dropdown.test.interactions.filterable.d.ts +1 -0
  92. package/dist/dropdown.test.interactions.multiple.d.ts +1 -0
  93. package/dist/dropdown.test.interactions.single.d.ts +1 -0
  94. package/dist/dropdown.test.validity.d.ts +1 -0
  95. package/dist/icon-button.d.ts +22 -0
  96. package/dist/icon-button.js +1 -0
  97. package/dist/icon-button.stories.d.ts +8 -0
  98. package/dist/icon-button.styles.d.ts +2 -0
  99. package/dist/icon-button.styles.js +112 -0
  100. package/dist/icon-button.test.basics.d.ts +1 -0
  101. package/dist/icons/checked.d.ts +2 -0
  102. package/dist/icons/checked.js +1 -0
  103. package/dist/icons/magnifying-glass.d.ts +2 -0
  104. package/dist/icons/magnifying-glass.js +1 -0
  105. package/dist/input.d.ts +67 -0
  106. package/dist/input.js +1 -0
  107. package/dist/input.stories.d.ts +19 -0
  108. package/dist/input.styles.d.ts +2 -0
  109. package/dist/input.styles.js +109 -0
  110. package/dist/input.test.basics.d.ts +1 -0
  111. package/dist/input.test.events.d.ts +1 -0
  112. package/dist/input.test.focus.d.ts +1 -0
  113. package/dist/input.test.form.d.ts +1 -0
  114. package/dist/input.test.validity.d.ts +1 -0
  115. package/dist/label.d.ts +33 -0
  116. package/dist/label.js +1 -0
  117. package/dist/label.styles.d.ts +2 -0
  118. package/dist/label.styles.js +154 -0
  119. package/dist/label.test.basics.d.ts +1 -0
  120. package/dist/library/expect-argument-error.d.ts +1 -0
  121. package/dist/library/expect-argument-error.js +1 -0
  122. package/dist/library/ow.d.ts +16 -0
  123. package/dist/library/ow.js +1 -0
  124. package/dist/library/ow.test.d.ts +4 -0
  125. package/dist/menu.button.d.ts +21 -0
  126. package/dist/menu.button.js +1 -0
  127. package/dist/menu.button.styles.d.ts +2 -0
  128. package/dist/menu.button.styles.js +20 -0
  129. package/dist/menu.button.test.basics.d.ts +1 -0
  130. package/dist/menu.d.ts +27 -0
  131. package/dist/menu.js +1 -0
  132. package/dist/menu.link.d.ts +22 -0
  133. package/dist/menu.link.js +1 -0
  134. package/dist/menu.link.styles.d.ts +2 -0
  135. package/dist/menu.link.styles.js +22 -0
  136. package/dist/menu.link.test.basics.d.ts +1 -0
  137. package/dist/menu.stories.d.ts +9 -0
  138. package/dist/menu.styles.d.ts +2 -0
  139. package/dist/menu.styles.js +61 -0
  140. package/dist/menu.test.basics.d.ts +1 -0
  141. package/dist/menu.test.focus.d.ts +2 -0
  142. package/dist/menu.test.interactions.d.ts +2 -0
  143. package/dist/modal.d.ts +51 -0
  144. package/dist/modal.icon-button.d.ts +26 -0
  145. package/dist/modal.icon-button.js +1 -0
  146. package/dist/modal.icon-button.styles.d.ts +2 -0
  147. package/dist/modal.icon-button.styles.js +8 -0
  148. package/dist/modal.icon-button.test.basics.d.ts +1 -0
  149. package/dist/modal.js +15 -0
  150. package/dist/modal.stories.d.ts +14 -0
  151. package/dist/modal.styles.d.ts +2 -0
  152. package/dist/modal.styles.js +169 -0
  153. package/dist/modal.tertiary-icon.d.ts +21 -0
  154. package/dist/modal.tertiary-icon.js +1 -0
  155. package/dist/modal.tertiary-icon.test.basics.d.ts +1 -0
  156. package/dist/modal.test.accessibility.d.ts +1 -0
  157. package/dist/modal.test.basics.d.ts +3 -0
  158. package/dist/modal.test.close.d.ts +1 -0
  159. package/dist/modal.test.events.d.ts +1 -0
  160. package/dist/modal.test.lock-scroll.d.ts +1 -0
  161. package/dist/modal.test.methods.d.ts +1 -0
  162. package/dist/modal.test.scrollbars.d.ts +1 -0
  163. package/dist/radio-group.d.ts +48 -0
  164. package/dist/radio-group.js +1 -0
  165. package/dist/radio-group.stories.d.ts +8 -0
  166. package/dist/radio-group.styles.d.ts +2 -0
  167. package/dist/radio-group.styles.js +40 -0
  168. package/dist/radio-group.test.basics.d.ts +2 -0
  169. package/dist/radio-group.test.events.d.ts +2 -0
  170. package/dist/radio-group.test.focus.d.ts +2 -0
  171. package/dist/radio-group.test.form.d.ts +1 -0
  172. package/dist/radio-group.test.validity.d.ts +1 -0
  173. package/dist/radio.d.ts +23 -0
  174. package/dist/radio.js +1 -0
  175. package/dist/radio.styles.d.ts +2 -0
  176. package/dist/radio.styles.js +92 -0
  177. package/dist/status-indicator.d.ts +30 -0
  178. package/dist/status-indicator.js +1 -0
  179. package/dist/status-indicator.stories.d.ts +17 -0
  180. package/dist/status-indicator.styles.d.ts +2 -0
  181. package/dist/status-indicator.styles.js +58 -0
  182. package/dist/status-indicator.test.basics.d.ts +1 -0
  183. package/dist/styles/focus-outline.d.ts +2 -0
  184. package/dist/styles/focus-outline.js +4 -0
  185. package/dist/styles/fonts.css +1 -0
  186. package/dist/styles/variables.css +1 -0
  187. package/dist/styles/visually-hidden.d.ts +2 -0
  188. package/dist/styles/visually-hidden.js +11 -0
  189. package/dist/tab.d.ts +32 -0
  190. package/dist/tab.group.d.ts +35 -0
  191. package/dist/tab.group.js +1 -0
  192. package/dist/tab.group.styles.d.ts +2 -0
  193. package/dist/tab.group.styles.js +27 -0
  194. package/dist/tab.group.test.basics.d.ts +3 -0
  195. package/dist/tab.js +1 -0
  196. package/dist/tab.panel.d.ts +26 -0
  197. package/dist/tab.panel.js +1 -0
  198. package/dist/tab.panel.styles.d.ts +2 -0
  199. package/dist/tab.panel.styles.js +9 -0
  200. package/dist/tab.styles.d.ts +2 -0
  201. package/dist/tab.styles.js +83 -0
  202. package/dist/tab.test.basics.d.ts +1 -0
  203. package/dist/tabs.stories.d.ts +9 -0
  204. package/dist/tag.d.ts +25 -0
  205. package/dist/tag.js +1 -0
  206. package/dist/tag.stories.d.ts +9 -0
  207. package/dist/tag.styles.d.ts +2 -0
  208. package/dist/tag.styles.js +133 -0
  209. package/dist/tag.test.basics.d.ts +1 -0
  210. package/dist/tag.test.events.d.ts +1 -0
  211. package/dist/tag.test.focus.d.ts +1 -0
  212. package/dist/textarea.d.ts +49 -0
  213. package/dist/textarea.js +2 -0
  214. package/dist/textarea.stories.d.ts +13 -0
  215. package/dist/textarea.styles.d.ts +2 -0
  216. package/dist/textarea.styles.js +69 -0
  217. package/dist/textarea.test.basics.d.ts +1 -0
  218. package/dist/textarea.test.events.d.ts +1 -0
  219. package/dist/textarea.test.form.d.ts +1 -0
  220. package/dist/textarea.test.validity.d.ts +1 -0
  221. package/dist/toasts.d.ts +29 -0
  222. package/dist/toasts.js +1 -0
  223. package/dist/toasts.stories.d.ts +7 -0
  224. package/dist/toasts.styles.d.ts +2 -0
  225. package/dist/toasts.styles.js +15 -0
  226. package/dist/toasts.test.basics.d.ts +1 -0
  227. package/dist/toasts.toast.d.ts +28 -0
  228. package/dist/toasts.toast.js +1 -0
  229. package/dist/toasts.toast.styles.d.ts +2 -0
  230. package/dist/toasts.toast.styles.js +60 -0
  231. package/dist/toasts.toast.test.basics.d.ts +1 -0
  232. package/dist/toggle.d.ts +31 -0
  233. package/dist/toggle.js +1 -0
  234. package/dist/toggle.stories.d.ts +7 -0
  235. package/dist/toggle.styles.d.ts +2 -0
  236. package/dist/toggle.styles.js +81 -0
  237. package/dist/toggle.test.basics.d.ts +1 -0
  238. package/dist/toggle.test.events.d.ts +1 -0
  239. package/dist/toggle.test.focus.d.ts +1 -0
  240. package/dist/toggle.test.states.d.ts +1 -0
  241. package/dist/tooltip.d.ts +21 -0
  242. package/dist/tooltip.js +1 -0
  243. package/dist/tooltip.stories.d.ts +7 -0
  244. package/dist/tooltip.styles.d.ts +2 -0
  245. package/dist/tooltip.styles.js +66 -0
  246. package/dist/tooltip.test.basics.d.ts +1 -0
  247. package/dist/tooltip.test.interactions.d.ts +1 -0
  248. package/dist/tree.d.ts +26 -0
  249. package/dist/tree.item.d.ts +43 -0
  250. package/dist/tree.item.icon-button.d.ts +20 -0
  251. package/dist/tree.item.icon-button.js +1 -0
  252. package/dist/tree.item.icon-button.styles.d.ts +2 -0
  253. package/dist/tree.item.icon-button.styles.js +9 -0
  254. package/dist/tree.item.icon-button.test.basics.d.ts +1 -0
  255. package/dist/tree.item.js +1 -0
  256. package/dist/tree.item.menu.d.ts +21 -0
  257. package/dist/tree.item.menu.js +1 -0
  258. package/dist/tree.item.menu.styles.d.ts +2 -0
  259. package/dist/tree.item.menu.styles.js +17 -0
  260. package/dist/tree.item.menu.test.basics.d.ts +1 -0
  261. package/dist/tree.item.styles.d.ts +2 -0
  262. package/dist/tree.item.styles.js +130 -0
  263. package/dist/tree.item.test.basics.d.ts +1 -0
  264. package/dist/tree.js +1 -0
  265. package/dist/tree.stories.d.ts +17 -0
  266. package/dist/tree.styles.d.ts +2 -0
  267. package/dist/tree.styles.js +7 -0
  268. package/dist/tree.test.aria.d.ts +1 -0
  269. package/dist/tree.test.basics.d.ts +3 -0
  270. package/dist/tree.test.events.d.ts +2 -0
  271. package/dist/tree.test.focus.d.ts +1 -0
  272. package/package.json +129 -0
@@ -0,0 +1,29 @@
1
+ import { LitElement } from 'lit';
2
+ declare global {
3
+ interface HTMLElementTagNameMap {
4
+ 'glide-core-button': GlideCoreButton;
5
+ }
6
+ }
7
+ /**
8
+ * @slot - A label for the contents of the button.
9
+ * @slot prefix - An optional icon slot to display before the label.
10
+ * @slot suffix - An optional icon slot to display after the label.
11
+ */
12
+ export default class GlideCoreButton extends LitElement {
13
+ #private;
14
+ static formAssociated: boolean;
15
+ static shadowRootOptions: ShadowRootInit;
16
+ static styles: import("lit").CSSResult[];
17
+ ariaExpanded: string | null;
18
+ ariaHasPopup: string | null;
19
+ disabled: boolean;
20
+ type: 'button' | 'submit' | 'reset';
21
+ variant: 'primary' | 'secondary' | 'tertiary';
22
+ size: 'large' | 'small';
23
+ get form(): HTMLFormElement | null;
24
+ firstUpdated(): void;
25
+ render(): import("lit").TemplateResult<1>;
26
+ constructor();
27
+ private hasPrefixSlot;
28
+ private hasSuffixSlot;
29
+ }
package/dist/button.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";var I=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var a=(s,e,t,o)=>{for(var n=o>1?void 0:o?D(e,t):e,x=s.length-1,b;x>=0;x--)(b=s[x])&&(n=(o?b(e,t,n):b(n))||n);return o&&n&&I(e,t,n),n};var E=(s,e,t)=>{if(!e.has(s))throw TypeError("Cannot "+t)};var l=(s,e,t)=>(E(s,e,"read from private field"),t?t.call(s):e.get(s)),i=(s,e,t)=>{if(e.has(s))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(s):e.set(s,t)},M=(s,e,t,o)=>(E(s,e,"write to private field"),o?o.call(s,t):e.set(s,t),t);var f=(s,e,t)=>(E(s,e,"access private method"),t);var m,u,c,p,d,w,g,P,y,T,S,k,v,z;import{LitElement as H,html as K}from"lit";import{classMap as O}from"lit/directives/class-map.js";import{createRef as $,ref as R}from"lit/directives/ref.js";import{customElement as q,property as h,state as L}from"lit/decorators.js";import{owSlot as N}from"./library/ow.js";import A from"./button.styles.js";let r=class extends H{constructor(){super();i(this,d);i(this,g);i(this,y);i(this,S);i(this,v);this.ariaExpanded=null;this.ariaHasPopup=null;this.disabled=!1;this.type="button";this.variant="primary";this.size="large";this.hasPrefixSlot=!1;this.hasSuffixSlot=!1;i(this,m,$());i(this,u,void 0);i(this,c,$());i(this,p,$());M(this,u,this.attachInternals())}get form(){return l(this,u).form}firstUpdated(){N(l(this,m).value)}render(){return K`<button class="${O({component:!0,primary:this.variant==="primary",secondary:this.variant==="secondary",tertiary:this.variant==="tertiary",large:this.size==="large",small:this.size==="small","has-prefix":this.hasPrefixSlot,"has-suffix":this.hasSuffixSlot})}" type="${this.type}" ?disabled="${this.disabled}" @click="${f(this,d,w)}" @keydown="${f(this,y,T)}"><slot name="prefix" @slotchange="${f(this,S,k)}" ${R(l(this,c))}></slot><slot @slotchange="${f(this,g,P)}" ${R(l(this,m))}></slot><slot name="suffix" @slotchange="${f(this,v,z)}" ${R(l(this,p))}></slot></button>`}};m=new WeakMap,u=new WeakMap,c=new WeakMap,p=new WeakMap,d=new WeakSet,w=function(){if(this.type!=="button"){if(this.type==="submit"){this.form?.requestSubmit();return}this.form?.reset()}},g=new WeakSet,P=function(){N(l(this,m).value)},y=new WeakSet,T=function(t){["Enter"].includes(t.key)&&(t.preventDefault(),f(this,d,w).call(this))},S=new WeakSet,k=function(){const t=l(this,c).value?.assignedNodes();this.hasPrefixSlot=!!(t&&t.length>0)},v=new WeakSet,z=function(){const t=l(this,p).value?.assignedNodes();this.hasSuffixSlot=!!(t&&t.length>0)},r.formAssociated=!0,r.shadowRootOptions={...H.shadowRootOptions,delegatesFocus:!0,mode:"closed"},r.styles=A,a([h({reflect:!0})],r.prototype,"ariaExpanded",2),a([h({reflect:!0})],r.prototype,"ariaHasPopup",2),a([h({type:Boolean,reflect:!0})],r.prototype,"disabled",2),a([h()],r.prototype,"type",2),a([h({reflect:!0})],r.prototype,"variant",2),a([h({reflect:!0})],r.prototype,"size",2),a([L()],r.prototype,"hasPrefixSlot",2),a([L()],r.prototype,"hasSuffixSlot",2),r=a([q("glide-core-button")],r);export{r as default};
@@ -0,0 +1,17 @@
1
+ import './button.js';
2
+ import './icons/storybook.js';
3
+ import type { Meta, StoryObj } from '@storybook/web-components';
4
+ declare const meta: Meta;
5
+ export default meta;
6
+ export declare const Primary: StoryObj;
7
+ export declare const PrimaryWithPrefixIcon: StoryObj;
8
+ export declare const PrimaryWithSuffixIcon: StoryObj;
9
+ export declare const PrimaryWithPrefixAndSuffixIcons: StoryObj;
10
+ export declare const Secondary: StoryObj;
11
+ export declare const SecondaryWithPrefixIcon: StoryObj;
12
+ export declare const SecondaryWithSuffixIcon: StoryObj;
13
+ export declare const SecondaryWithPrefixAndSuffixIcons: StoryObj;
14
+ export declare const Tertiary: StoryObj;
15
+ export declare const TertiaryWithPrefixIcon: StoryObj;
16
+ export declare const TertiaryWithSuffixIcon: StoryObj;
17
+ export declare const TertiaryWithPrefixAndSuffixIcons: StoryObj;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("lit").CSSResult[];
2
+ export default _default;
@@ -0,0 +1,133 @@
1
+ "use strict";import{css as e}from"lit";import r from"./styles/focus-outline.js";export default[e`
2
+ :host {
3
+ /* Contains elements with "padding" and "width". Inline by default. */
4
+ display: inline-block;
5
+ }
6
+
7
+ .component {
8
+ align-items: center;
9
+ border-color: transparent;
10
+ border-radius: var(--glide-core-spacing-sm);
11
+ border-style: solid;
12
+ border-width: 1px;
13
+ cursor: pointer;
14
+ display: inline-flex;
15
+ font-family: var(--glide-core-heading-xxs-font-family);
16
+ font-style: var(--glide-core-heading-xxs-font-style);
17
+ font-weight: var(--glide-core-heading-xxs-font-weight);
18
+ gap: 0.625rem;
19
+ justify-content: center;
20
+ padding-block: var(--glide-core-spacing-xs);
21
+ padding-inline: var(--glide-core-spacing-md);
22
+ transition-duration: 150ms;
23
+ transition-property: color, background-color, border-color, fill, stroke;
24
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
25
+ user-select: none;
26
+
27
+ &:focus {
28
+ outline: none;
29
+ }
30
+
31
+ &:focus-visible {
32
+ ${r};
33
+ }
34
+
35
+ &:disabled {
36
+ cursor: default;
37
+ opacity: 1;
38
+ }
39
+
40
+ /* We remove spacing using negative margin when an icon is present to help with empty space balancing */
41
+ &.has-prefx,
42
+ ::slotted([slot='prefix']) {
43
+ margin-inline-start: -0.125rem;
44
+ }
45
+
46
+ &.has-suffix,
47
+ ::slotted([slot='suffix']) {
48
+ margin-inline-end: -0.125rem;
49
+ }
50
+
51
+ &.primary {
52
+ background-color: var(--glide-core-surface-primary);
53
+ border-color: transparent;
54
+ color: var(--glide-core-text-selected);
55
+
56
+ &:disabled {
57
+ background-color: var(--glide-core-surface-disabled);
58
+ border-color: transparent;
59
+ color: var(--glide-core-text-tertiary-disabled);
60
+ }
61
+
62
+ &:not(:disabled):active {
63
+ background-color: var(--glide-core-surface-selected-hover);
64
+ border-color: transparent;
65
+ color: var(--glide-core-text-selected);
66
+ }
67
+
68
+ &:not(:active):hover:not(:disabled) {
69
+ background-color: var(--glide-core-surface-hover);
70
+ border-color: transparent;
71
+ box-shadow: var(--glide-core-glow-sm);
72
+ color: var(--glide-core-text-primary);
73
+ }
74
+ }
75
+
76
+ &.secondary {
77
+ background-color: transparent;
78
+ border-color: var(--glide-core-border-primary);
79
+ color: var(--glide-core-text-primary);
80
+
81
+ &:disabled {
82
+ background-color: var(--glide-core-surface-disabled);
83
+ border-color: transparent;
84
+ color: var(--glide-core-text-tertiary-disabled);
85
+ }
86
+
87
+ &:not(:disabled):active {
88
+ background-color: var(--glide-core-surface-selected-hover);
89
+ border-color: transparent;
90
+ color: var(--glide-core-text-selected);
91
+ }
92
+
93
+ &:not(:active):hover:not(:disabled) {
94
+ background-color: var(--glide-core-surface-hover);
95
+ border-color: transparent;
96
+ box-shadow: var(--glide-core-glow-sm);
97
+ color: var(--glide-core-text-primary);
98
+ }
99
+ }
100
+
101
+ &.tertiary {
102
+ background-color: transparent;
103
+ border-color: transparent;
104
+ color: var(--glide-core-text-primary);
105
+
106
+ &:disabled {
107
+ color: var(--glide-core-text-tertiary-disabled);
108
+ }
109
+
110
+ &:not(:disabled):active {
111
+ color: var(--glide-core-text-secondary);
112
+ }
113
+
114
+ &:not(:active):hover:not(:disabled) {
115
+ color: var(--glide-core-text-primary-hover);
116
+ }
117
+ }
118
+
119
+ &.large {
120
+ block-size: 2.125rem;
121
+ font-size: var(--glide-core-heading-xxs-font-size);
122
+ line-height: 1.5rem;
123
+ min-inline-size: 5.1875rem;
124
+ }
125
+
126
+ &.small {
127
+ block-size: 1.75rem;
128
+ font-size: var(--glide-core-body-xs-font-size);
129
+ line-height: 1rem;
130
+ min-inline-size: 4.375rem;
131
+ }
132
+ }
133
+ `];
@@ -0,0 +1 @@
1
+ import './button.js';
@@ -0,0 +1 @@
1
+ import './button.js';
@@ -0,0 +1 @@
1
+ import './button.js';
@@ -0,0 +1,43 @@
1
+ import './label.js';
2
+ import { LitElement } from 'lit';
3
+ declare global {
4
+ interface HTMLElementTagNameMap {
5
+ 'glide-core-checkbox-group': GlideCoreCheckboxGroup;
6
+ }
7
+ }
8
+ /**
9
+ * @description A group of checkboxes with a label and optional tooltip and description. Participates in forms and validation via `FormData` and various methods.
10
+ *
11
+ * @slot - One or more of `<glide-core-checkbox>`.
12
+ * @slot description - Additional information or context.
13
+ * @slot tooltip - Content for the tooltip.
14
+ */
15
+ export default class GlideCoreCheckboxGroup extends LitElement {
16
+ #private;
17
+ static formAssociated: boolean;
18
+ static shadowRootOptions: ShadowRootInit;
19
+ static styles: import("lit").CSSResult[];
20
+ get disabled(): boolean;
21
+ set disabled(isDisabled: boolean);
22
+ hideLabel: boolean;
23
+ label?: string;
24
+ name?: string;
25
+ get required(): boolean;
26
+ set required(isRequired: boolean);
27
+ summary?: string;
28
+ value: string[];
29
+ checkValidity(): boolean;
30
+ disconnectedCallback(): void;
31
+ firstUpdated(): void;
32
+ get form(): HTMLFormElement | null;
33
+ get validity(): ValidityState;
34
+ get willValidate(): boolean;
35
+ focus(options?: FocusOptions): void;
36
+ formAssociatedCallback(): void;
37
+ formResetCallback(): void;
38
+ render(): import("lit").TemplateResult<1>;
39
+ reportValidity(): boolean;
40
+ constructor();
41
+ private isCheckingValidity;
42
+ private isReportValidityOrSubmit;
43
+ }
@@ -0,0 +1 @@
1
+ "use strict";var H=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var n=(a,s,t,i)=>{for(var f=i>1?void 0:i?I(s,t):s,k=a.length-1,R;k>=0;k--)(R=a[k])&&(f=(i?R(s,t,f):R(f))||f);return i&&f&&H(s,t,f),f};var S=(a,s,t)=>{if(!s.has(a))throw TypeError("Cannot "+t)};var e=(a,s,t)=>(S(a,s,"read from private field"),t?t.call(a):s.get(a)),d=(a,s,t)=>{if(s.has(a))throw TypeError("Cannot add the same private member more than once");s instanceof WeakSet?s.add(a):s.set(a,t)},g=(a,s,t,i)=>(S(a,s,"write to private field"),i?i.call(a,t):s.set(a,t),t);var L=(a,s,t)=>(S(a,s,"access private method"),t);var u,c,r,v,p,o,h,b,y,D,V,F,E,A;import"./label.js";import{LitElement as q,html as U}from"lit";import{createRef as w,ref as O}from"lit/directives/ref.js";import{customElement as N,property as m,state as B}from"lit/decorators.js";import{owSlot as M,owSlotType as T}from"./library/ow.js";import $ from"./checkbox.js";import x from"./checkbox-group.styles.js";let l=class extends q{constructor(){super();d(this,o);d(this,y);d(this,V);d(this,E);this.hideLabel=!1;this.value=[];this.isCheckingValidity=!1;this.isReportValidityOrSubmit=!1;d(this,u,w());d(this,c,w());d(this,r,void 0);d(this,v,!1);d(this,p,!1);d(this,b,({formData:t})=>{this.name&&this.value.length>0&&!this.disabled&&t.append(this.name,JSON.stringify(this.value))});g(this,r,this.attachInternals()),this.addEventListener("invalid",t=>{t?.preventDefault(),this.isCheckingValidity||(this.isReportValidityOrSubmit=!0,this.focus())})}get disabled(){return e(this,v)}set disabled(t){g(this,v,t);for(const i of e(this,o,h))i.disabled=t}get required(){return e(this,p)}set required(t){g(this,p,t);for(const i of e(this,o,h))t?i.setValidity(e(this,r).validity," "):i.setValidity({}),i.requestUpdate()}checkValidity(){return this.isCheckingValidity=!0,e(this,r).checkValidity()}disconnectedCallback(){super.disconnectedCallback(),this.form?.removeEventListener("formdata",e(this,b))}firstUpdated(){if(M(e(this,c).value),T(e(this,c).value,[$]),this.disabled)for(const t of e(this,o,h))t.disabled=!0;this.value=e(this,o,h).filter(({checked:t,disabled:i})=>t&&!i).map(({value:t})=>t).filter(t=>!!t);for(const t of e(this,o,h))t.privateVariant="minimal"}get form(){return e(this,r).form}get validity(){const t=e(this,o,h).some(({checked:i})=>i);this.required&&!t?e(this,r).setValidity({valueMissing:!0}," ",e(this,u).value):e(this,r).setValidity({});for(const i of e(this,o,h))i.setValidity(e(this,r).validity," "),i.requestUpdate();return e(this,r).validity}get willValidate(){return e(this,r).willValidate}focus(t){e(this,o,h).at(0)?.focus(t)}formAssociatedCallback(){this.form?.addEventListener("formdata",e(this,b))}formResetCallback(){for(const t of e(this,o,h))t.formResetCallback()}render(){return U`<div class="component" data-test="component" ${O(e(this,u))}><glide-core-label ?hide="${this.hideLabel}" ?disabled="${this.disabled}" ?error="${e(this,y,D)}" ?required="${this.required}"><slot name="tooltip" slot="tooltip"></slot><label id="label">${this.label}</label><div aria-labelledby="label description" role="group" slot="control"><slot class="checkboxes" @change="${L(this,V,F)}" @slotchange="${L(this,E,A)}" ${O(e(this,c))}></slot></div><slot id="description" name="description" slot="description"></slot></glide-core-label></div>`}reportValidity(){return e(this,r).reportValidity()}};u=new WeakMap,c=new WeakMap,r=new WeakMap,v=new WeakMap,p=new WeakMap,o=new WeakSet,h=function(){return e(this,c).value?e(this,c).value.assignedElements().filter(t=>t instanceof $):[]},b=new WeakMap,y=new WeakSet,D=function(){return this.required&&!this.disabled&&!this.validity.valid&&this.isReportValidityOrSubmit},V=new WeakSet,F=function(){this.value=e(this,o,h).filter(({checked:t,disabled:i})=>t&&!i).map(({value:t})=>t).filter(t=>!!t)},E=new WeakSet,A=function(){M(e(this,c).value),T(e(this,c).value,[$])},l.formAssociated=!0,l.shadowRootOptions={...q.shadowRootOptions,mode:"closed"},l.styles=x,n([m({reflect:!0,type:Boolean})],l.prototype,"disabled",1),n([m({attribute:"hide-label",type:Boolean})],l.prototype,"hideLabel",2),n([m({reflect:!0})],l.prototype,"label",2),n([m({reflect:!0})],l.prototype,"name",2),n([m({reflect:!0,type:Boolean})],l.prototype,"required",1),n([m({reflect:!0})],l.prototype,"summary",2),n([m({type:Array})],l.prototype,"value",2),n([B()],l.prototype,"isCheckingValidity",2),n([B()],l.prototype,"isReportValidityOrSubmit",2),l=n([N("glide-core-checkbox-group")],l);export{l as default};
@@ -0,0 +1,7 @@
1
+ import './checkbox.js';
2
+ import type { Meta, StoryObj } from '@storybook/web-components';
3
+ declare const meta: Meta;
4
+ export default meta;
5
+ export declare const Vertical: StoryObj;
6
+ export declare const VerticalWithToolip: StoryObj;
7
+ export declare const VerticalWithError: StoryObj;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("lit").CSSResult[];
2
+ export default _default;
@@ -0,0 +1,20 @@
1
+ "use strict";import{css as e}from"lit";export default[e`
2
+ :host(:not(:disabled)) .component {
3
+ &.error {
4
+ .checkbox {
5
+ border-color: var(--glide-core-status-error);
6
+ }
7
+ }
8
+ }
9
+
10
+ glide-core-label::part(tooltip-and-label-container) {
11
+ align-items: flex-start;
12
+ }
13
+
14
+ .checkboxes {
15
+ display: flex;
16
+ flex-direction: column;
17
+ grid-column: 2;
18
+ row-gap: var(--glide-core-spacing-xxs);
19
+ }
20
+ `];
@@ -0,0 +1 @@
1
+ import './checkbox.js';
@@ -0,0 +1 @@
1
+ import './checkbox.js';
@@ -0,0 +1 @@
1
+ import './checkbox.js';
@@ -0,0 +1 @@
1
+ import './checkbox.js';
@@ -0,0 +1 @@
1
+ import './checkbox.js';
@@ -0,0 +1,50 @@
1
+ import './label.js';
2
+ import { LitElement } from 'lit';
3
+ declare global {
4
+ interface HTMLElementTagNameMap {
5
+ 'glide-core-checkbox': GlideCoreCheckbox;
6
+ }
7
+ }
8
+ /**
9
+ * @description A checkbox with a label and optional tooltip, summary, and description. Participates in forms and validation via `FormData` and various methods.
10
+ *
11
+ * @event change - Dispatched when checked or unchecked.
12
+ * @event input - Dispatched when checked or unchecked.
13
+
14
+ * @slot description - Additional information or context.
15
+ * @slot tooltip - Content for the tooltip.
16
+ */
17
+ export default class GlideCoreCheckbox extends LitElement {
18
+ #private;
19
+ static formAssociated: boolean;
20
+ static shadowRootOptions: ShadowRootInit;
21
+ static styles: import("lit").CSSResult[];
22
+ checked: boolean;
23
+ internallyInert: boolean;
24
+ disabled: boolean;
25
+ hideLabel: boolean;
26
+ indeterminate: boolean;
27
+ label?: string;
28
+ orientation: 'horizontal' | 'vertical';
29
+ name?: string;
30
+ privateVariant?: 'minimal';
31
+ required: boolean;
32
+ summary?: string;
33
+ value?: string;
34
+ get form(): HTMLFormElement | null;
35
+ checkValidity(): boolean;
36
+ click(): void;
37
+ disconnectedCallback(): void;
38
+ get validity(): ValidityState;
39
+ focus(options?: FocusOptions): void;
40
+ formAssociatedCallback(): void;
41
+ formResetCallback(): void;
42
+ render(): import("lit").TemplateResult<1>;
43
+ reportValidity(): boolean;
44
+ setValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void;
45
+ get willValidate(): boolean;
46
+ updated(): void;
47
+ constructor();
48
+ private isCheckingValidity;
49
+ private isReportValidityOrSubmit;
50
+ }
@@ -0,0 +1 @@
1
+ "use strict";var M=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var r=(s,a,t,c)=>{for(var o=c>1?void 0:c?B(a,t):a,f=s.length-1,y;f>=0;f--)(y=s[f])&&(o=(c?y(a,t,o):y(o))||o);return c&&o&&M(a,t,o),o};var b=(s,a,t)=>{if(!a.has(s))throw TypeError("Cannot "+t)};var i=(s,a,t)=>(b(s,a,"read from private field"),t?t.call(s):a.get(s)),u=(s,a,t)=>{if(a.has(s))throw TypeError("Cannot add the same private member more than once");a instanceof WeakSet?a.add(s):a.set(s,t)},k=(s,a,t,c)=>(b(s,a,"write to private field"),c?c.call(s,t):a.set(s,t),t);var g=(s,a,t)=>(b(s,a,"access private method"),t);var d,l,p,h,m,v,V;import"./label.js";import{LitElement as E,html as $}from"lit";import{classMap as L}from"lit/directives/class-map.js";import{createRef as O,ref as w}from"lit/directives/ref.js";import{customElement as S,property as n,state as q}from"lit/decorators.js";import{svg as F}from"lit/static-html.js";import{when as H}from"lit/directives/when.js";import I from"./icons/checked.js";import T from"./checkbox.styles.js";const R=F`<svg class="indeterminate-icon" fill="none" height="14" viewBox="0 0 24 24" width="14"><path d="M8 10C8 8.89543 8.89543 8 10 8H14.7929C15.2383 8 15.4614 8.53857 15.1464 8.85355L8.85355 15.1464C8.53857 15.4614 8 15.2383 8 14.7929V10Z" fill="currentColor"/></svg>`;let e=class extends E{constructor(){super();u(this,h);u(this,v);this.checked=!1;this.internallyInert=!1;this.disabled=!1;this.hideLabel=!1;this.indeterminate=!1;this.orientation="horizontal";this.required=!1;this.value="";this.isCheckingValidity=!1;this.isReportValidityOrSubmit=!1;u(this,d,O());u(this,l,void 0);u(this,p,({formData:t})=>{this.checked&&this.name&&this.value&&!this.disabled&&t.append(this.name,this.value)});k(this,l,this.attachInternals()),this.addEventListener("invalid",t=>{t?.preventDefault(),this.isCheckingValidity||(this.isReportValidityOrSubmit=!0,this.focus())})}get form(){return i(this,l).form}checkValidity(){return this.isCheckingValidity=!0,i(this,l).checkValidity()}click(){i(this,d).value?.click()}disconnectedCallback(){super.disconnectedCallback(),this.form?.removeEventListener("formdata",i(this,p))}get validity(){return this.privateVariant==="minimal"?i(this,l).validity:(this.required&&!this.checked?i(this,l).setValidity({valueMissing:!0}," ",i(this,d).value):i(this,l).setValidity({}),i(this,l).validity)}focus(t){i(this,d).value?.focus(t)}formAssociatedCallback(){this.form?.addEventListener("formdata",i(this,p))}formResetCallback(){this.checked=this.getAttribute("checked")==="",this.indeterminate=this.getAttribute("indeterminate")===""}render(){return $`<div class="component" data-test="component">${H(this.privateVariant==="minimal",()=>$`<label class="label-and-input-and-checkbox" part="private-label-and-input-and-checkbox"><div class="input-and-checkbox"><input aria-invalid="${i(this,h,m)}" data-test="input" type="checkbox" .checked="${this.checked}" ?disabled="${this.disabled}" ?required="${this.required}" @change="${g(this,v,V)}" ?inert="${this.internallyInert}" ${w(i(this,d))}><div class="${L({checkbox:!0,disabled:this.disabled,error:i(this,h,m)})}"><div class="checked-icon">${I}</div>${R}</div></div>${this.label}</label>`,()=>$`<glide-core-label orientation="${this.orientation}" ?disabled="${this.disabled}" ?error="${i(this,h,m)}" ?hide="${this.hideLabel}" ?required="${this.required}"><slot name="tooltip" slot="tooltip"></slot><label for="input">${this.label}</label><div class="input-and-checkbox" slot="control"><input aria-describedby="summary description" aria-invalid="${i(this,h,m)}" data-test="input" id="input" type="checkbox" .checked="${this.checked}" ?disabled="${this.disabled}" ?required="${this.required}" @change="${g(this,v,V)}" ${w(i(this,d))}><div class="${L({checkbox:!0,disabled:this.disabled,error:i(this,h,m)})}"><div class="checked-icon">${I}</div>${R}</div></div><div id="summary" slot="summary">${this.summary}</div><slot id="description" name="description" slot="description"></slot></glide-core-label>`)}</div>`}reportValidity(){return i(this,l).reportValidity()}setValidity(t,c,o){return i(this,l).setValidity(t,c,o)}get willValidate(){return i(this,l).willValidate}updated(){i(this,d).value&&(i(this,d).value.indeterminate=this.indeterminate)}};d=new WeakMap,l=new WeakMap,p=new WeakMap,h=new WeakSet,m=function(){return this.privateVariant==="minimal"?!this.validity.valid:this.required&&!this.disabled&&!this.validity.valid&&this.isReportValidityOrSubmit},v=new WeakSet,V=function(t){t.target instanceof HTMLInputElement&&(this.checked=t.target.checked),this.indeterminate=!1,this.dispatchEvent(new Event(t.type,t))},e.formAssociated=!0,e.shadowRootOptions={...E.shadowRootOptions,mode:"closed"},e.styles=T,r([n({type:Boolean})],e.prototype,"checked",2),r([n({attribute:"internally-inert",type:Boolean})],e.prototype,"internallyInert",2),r([n({reflect:!0,type:Boolean})],e.prototype,"disabled",2),r([n({attribute:"hide-label",type:Boolean})],e.prototype,"hideLabel",2),r([n({type:Boolean})],e.prototype,"indeterminate",2),r([n({reflect:!0})],e.prototype,"label",2),r([n({reflect:!0})],e.prototype,"orientation",2),r([n({reflect:!0})],e.prototype,"name",2),r([n({attribute:"private-variant"})],e.prototype,"privateVariant",2),r([n({reflect:!0,type:Boolean})],e.prototype,"required",2),r([n({reflect:!0})],e.prototype,"summary",2),r([n({reflect:!0})],e.prototype,"value",2),r([q()],e.prototype,"isCheckingValidity",2),r([q()],e.prototype,"isReportValidityOrSubmit",2),e=r([S("glide-core-checkbox")],e);export{e as default};
@@ -0,0 +1,9 @@
1
+ import type { Meta, StoryObj } from '@storybook/web-components';
2
+ declare const meta: Meta;
3
+ export default meta;
4
+ export declare const Horizontal: StoryObj;
5
+ export declare const HorizontalWithTooltip: StoryObj;
6
+ export declare const HorizontalWithError: StoryObj;
7
+ export declare const Vertical: StoryObj;
8
+ export declare const VerticalWithToolip: StoryObj;
9
+ export declare const VerticalWithError: StoryObj;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("lit").CSSResult[];
2
+ export default _default;
@@ -0,0 +1,116 @@
1
+ "use strict";import{css as e}from"lit";import i from"./styles/focus-outline.js";export default[e`
2
+ /*
3
+ Most states are handled on the host. But ":checked" and ":indeterminate" are
4
+ handled on the input because browsers don't support those classes on the host.
5
+ And using attribute selectors won't work because those attributes, same as
6
+ native, don't change when their properties do.
7
+
8
+ TODO
9
+ Use the ":checked" and ":indeterminate" pseudo classes on the host and throughout
10
+ when browsers support them.
11
+ */
12
+
13
+ .label-and-input-and-checkbox {
14
+ align-items: center;
15
+ display: flex;
16
+ font-family: var(--glide-core-heading-xxxs-font-family);
17
+ font-size: var(--glide-core-heading-xxxs-font-size);
18
+ font-style: var(--glide-core-heading-xxxs-font-style);
19
+ font-variant: var(--glide-core-heading-xxxs-font-variant);
20
+ font-weight: var(--glide-core-body-xs-font-weight);
21
+ gap: var(--glide-core-spacing-sm);
22
+ line-height: 100%;
23
+ }
24
+
25
+ .input-and-checkbox-and-summary {
26
+ display: flex;
27
+ gap: var(--glide-core-spacing-sm);
28
+ }
29
+
30
+ .input-and-checkbox {
31
+ block-size: 0.875rem;
32
+ inline-size: 0.875rem;
33
+ position: relative;
34
+ }
35
+
36
+ .checkbox {
37
+ align-items: center;
38
+ block-size: 100%;
39
+ border: 1px solid var(--glide-core-border-base-dark);
40
+ border-radius: 0.25rem;
41
+ box-sizing: border-box;
42
+ color: var(--glide-core-icon-selected);
43
+ display: flex;
44
+ flex-shrink: 0; /* Don't shrink when the summary wraps. */
45
+ inline-size: 100%;
46
+ justify-content: center;
47
+
48
+ &.error:not(.disabled) {
49
+ border-color: var(--glide-core-status-error);
50
+ }
51
+
52
+ &:not(.disabled):hover {
53
+ box-shadow: var(--glide-core-glow-sm);
54
+ }
55
+ }
56
+
57
+ input {
58
+ block-size: 100%;
59
+ cursor: inherit;
60
+ inline-size: 100%;
61
+ inset-block-start: 0;
62
+ inset-inline-start: 0;
63
+ margin: 0;
64
+ opacity: 0;
65
+ position: absolute;
66
+
67
+ &:not(:disabled):hover ~ .checkbox {
68
+ box-shadow: var(--glide-core-glow-sm);
69
+ }
70
+
71
+ &:checked:not(:indeterminate) ~ .checkbox .checked-icon {
72
+ display: flex;
73
+ }
74
+
75
+ &:indeterminate ~ .checkbox .indeterminate-icon {
76
+ display: inline-block;
77
+ }
78
+
79
+ &:disabled:not(:is(:checked, :indeterminate)) ~ .checkbox {
80
+ border-color: var(--glide-core-surface-primary-disabled);
81
+ }
82
+
83
+ &:focus-visible ~ .checkbox {
84
+ ${i};
85
+ outline-offset: 4px;
86
+ }
87
+
88
+ &:is(:checked, :indeterminate):not(:disabled) ~ .checkbox {
89
+ background-color: var(--glide-core-surface-primary);
90
+ border-color: transparent;
91
+ }
92
+
93
+ &:is(:checked, :indeterminate):disabled ~ .checkbox {
94
+ background-color: var(--glide-core-surface-primary-disabled);
95
+ border-color: transparent;
96
+ }
97
+ }
98
+
99
+ .checked-icon {
100
+ --size: 0.75rem;
101
+
102
+ align-items: center;
103
+ block-size: 100%;
104
+ display: none;
105
+ inline-size: 100%;
106
+ inset-block-start: 0;
107
+ inset-inline-start: 0;
108
+ justify-content: center;
109
+ pointer-events: none;
110
+ position: absolute;
111
+ }
112
+
113
+ .indeterminate-icon {
114
+ display: none;
115
+ }
116
+ `];
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ import { LitElement } from 'lit';
2
+ declare global {
3
+ interface HTMLElementTagNameMap {
4
+ 'glide-core-drawer': GlideCoreDrawer;
5
+ }
6
+ }
7
+ /**
8
+ * @cssprop [--width] - Sets the width of the Drawer when open.
9
+ *
10
+ * @event close - Emitted when the Drawer closes.
11
+ * @event open - Emitted when the Drawer opens.
12
+ *
13
+ * @method close - A method on the `glide-core-drawer` component to close the Drawer programmatically.
14
+ * @method open - A method on the `glide-core-drawer` component to open the Drawer programmatically.
15
+ *
16
+ * @slot - The content of the Drawer.
17
+ */
18
+ export default class GlideCoreDrawer extends LitElement {
19
+ #private;
20
+ static shadowRootOptions: ShadowRootInit;
21
+ static styles: import("lit").CSSResult[];
22
+ close(): void;
23
+ connectedCallback(): void;
24
+ disconnectedCallback(): void;
25
+ firstUpdated(): void;
26
+ open(): void;
27
+ render(): import("lit").TemplateResult<1>;
28
+ private currentState;
29
+ private isOpen;
30
+ }
package/dist/drawer.js ADDED
@@ -0,0 +1,15 @@
1
+ "use strict";var R=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var p=(o,e,t,d)=>{for(var n=d>1?void 0:d?O(e,t):e,h=o.length-1,v;h>=0;h--)(v=o[h])&&(n=(d?v(e,t,n):v(n))||n);return d&&n&&R(e,t,n),n};var f=(o,e,t)=>{if(!e.has(o))throw TypeError("Cannot "+t)};var s=(o,e,t)=>(f(o,e,"read from private field"),t?t.call(o):e.get(o)),a=(o,e,t)=>{if(e.has(o))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(o):e.set(o,t)};var g=(o,e,t)=>(f(o,e,"access private method"),t);var i,l,u,k,m,y;import{LitElement as S,html as $}from"lit";import{createRef as E,ref as L}from"lit/directives/ref.js";import{customElement as M,state as w}from"lit/decorators.js";import{owSlot as b}from"./library/ow.js";import T from"./drawer.styles.js";const c=new CSSStyleSheet;c.insertRule(`
2
+ @supports (scrollbar-gutter: stable) {
3
+ .private-glide-core-drawer-lock-scroll {
4
+ scrollbar-gutter: stable !important;
5
+ overflow: hidden !important;
6
+ }
7
+ }
8
+ `),c.insertRule(`
9
+ @supports not (scrollbar-gutter: stable) {
10
+ .private-glide-core-drawer-lock-scroll {
11
+ padding-right: var(--glide-scroll-size, 0.9375rem) !important;
12
+ overflow: hidden !important;
13
+ }
14
+ }
15
+ `);let r=class extends S{constructor(){super(...arguments);a(this,u);a(this,m);this.currentState="closed";this.isOpen=!1;a(this,i,E());a(this,l,E())}close(){this.currentState==="open"&&(s(this,l)?.value?.addEventListener("transitionend",()=>{this.isOpen=!1,s(this,l)?.value?.classList?.remove("open"),s(this,l)?.value?.classList?.remove("closing"),this.currentState="closed",this.dispatchEvent(new Event("close")),document.documentElement.classList.remove("private-glide-core-drawer-lock-scroll")},{once:!0}),s(this,l)?.value?.classList?.add("closing"),document.documentElement.classList.add("private-glide-core-drawer-lock-scroll"),this.currentState="closing")}connectedCallback(){super.connectedCallback(),document.adoptedStyleSheets.includes(c)||document.adoptedStyleSheets.push(c)}disconnectedCallback(){super.disconnectedCallback(),document.documentElement.classList.contains("private-glide-core-drawer-lock-scroll")&&document.documentElement.classList.remove("private-glide-core-drawer-lock-scroll"),document.adoptedStyleSheets=document.adoptedStyleSheets.filter(t=>t!==c)}firstUpdated(){b(s(this,i).value)}open(){this.currentState==="closed"&&(s(this,l)?.value?.addEventListener("transitionend",()=>{this.currentState="open",s(this,l)?.value?.focus(),this.dispatchEvent(new Event("open")),document.documentElement.classList.remove("private-glide-core-drawer-lock-scroll")},{once:!0}),s(this,l)?.value?.classList?.add("open"),document.documentElement.classList.add("private-glide-core-drawer-lock-scroll"),this.currentState="opening",this.isOpen=!0)}render(){return $`<dialog class="component" tabindex="-1" ?open="${this.isOpen}" @keydown="${g(this,u,k)}" ${L(s(this,l))}><slot @slotchange="${g(this,m,y)}" ${L(s(this,i))}></slot></dialog>`}};i=new WeakMap,l=new WeakMap,u=new WeakSet,k=function(t){t.key==="Escape"&&this.close()},m=new WeakSet,y=function(){b(s(this,i).value)},r.shadowRootOptions={...S.shadowRootOptions,mode:"closed"},r.styles=T,p([w()],r.prototype,"currentState",2),p([w()],r.prototype,"isOpen",2),r=p([M("glide-core-drawer")],r);export{r as default};
@@ -0,0 +1,7 @@
1
+ import './button.js';
2
+ import './drawer.js';
3
+ import type { Meta, StoryObj } from '@storybook/web-components';
4
+ declare const meta: Meta;
5
+ export default meta;
6
+ export declare const Default: StoryObj;
7
+ export declare const WithCSSVariable: StoryObj;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("lit").CSSResult[];
2
+ export default _default;
@@ -0,0 +1,34 @@
1
+ "use strict";import{css as i}from"lit";export default[i`
2
+ .component {
3
+ all: unset;
4
+ background-color: var(--glide-core-surface-base-lighter);
5
+ block-size: 0;
6
+ border-end-start-radius: 0.625rem;
7
+ border-start-start-radius: 0.625rem;
8
+ box-shadow: var(--glide-core-shadow-xl);
9
+ font-family: var(--glide-core-body-xs-font-family);
10
+ inline-size: 0;
11
+ inset: 0;
12
+ max-inline-size: 100%;
13
+ opacity: 0;
14
+ position: absolute;
15
+ transform: translateX(100%);
16
+ transition:
17
+ transform 0.2s ease-out,
18
+ opacity 0.3s ease-out;
19
+ visibility: hidden;
20
+ }
21
+
22
+ .open {
23
+ block-size: auto;
24
+ inline-size: var(--width, 27.375rem);
25
+ inset: 0 0 0 auto;
26
+ opacity: 1;
27
+ transform: none;
28
+ visibility: visible;
29
+ }
30
+
31
+ .closing {
32
+ transform: translateX(100%);
33
+ }
34
+ `];
@@ -0,0 +1 @@
1
+ import './drawer.js';
@@ -0,0 +1 @@
1
+ import './drawer.js';
@@ -0,0 +1 @@
1
+ import './drawer.js';
@@ -0,0 +1 @@
1
+ import './drawer.js';
@@ -0,0 +1 @@
1
+ import './drawer.js';