@digital2analogue2/parsimony-components 0.1.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 (179) hide show
  1. package/custom-elements.json +3751 -0
  2. package/dist/alert/alert.d.ts +36 -0
  3. package/dist/alert/alert.d.ts.map +1 -0
  4. package/dist/alert/alert.js +179 -0
  5. package/dist/alert/alert.js.map +1 -0
  6. package/dist/alert/alert.stories.d.ts +12 -0
  7. package/dist/alert/alert.stories.d.ts.map +1 -0
  8. package/dist/alert/alert.stories.js +59 -0
  9. package/dist/alert/alert.stories.js.map +1 -0
  10. package/dist/avatar/avatar.d.ts +37 -0
  11. package/dist/avatar/avatar.d.ts.map +1 -0
  12. package/dist/avatar/avatar.js +150 -0
  13. package/dist/avatar/avatar.js.map +1 -0
  14. package/dist/avatar/avatar.stories.d.ts +10 -0
  15. package/dist/avatar/avatar.stories.d.ts.map +1 -0
  16. package/dist/avatar/avatar.stories.js +56 -0
  17. package/dist/avatar/avatar.stories.js.map +1 -0
  18. package/dist/badge/badge.d.ts +31 -0
  19. package/dist/badge/badge.d.ts.map +1 -0
  20. package/dist/badge/badge.js +104 -0
  21. package/dist/badge/badge.js.map +1 -0
  22. package/dist/badge/badge.stories.d.ts +9 -0
  23. package/dist/badge/badge.stories.d.ts.map +1 -0
  24. package/dist/badge/badge.stories.js +35 -0
  25. package/dist/badge/badge.stories.js.map +1 -0
  26. package/dist/button/button.d.ts +50 -0
  27. package/dist/button/button.d.ts.map +1 -0
  28. package/dist/button/button.js +237 -0
  29. package/dist/button/button.js.map +1 -0
  30. package/dist/button/button.stories.d.ts +12 -0
  31. package/dist/button/button.stories.d.ts.map +1 -0
  32. package/dist/button/button.stories.js +44 -0
  33. package/dist/button/button.stories.js.map +1 -0
  34. package/dist/card/card.d.ts +32 -0
  35. package/dist/card/card.d.ts.map +1 -0
  36. package/dist/card/card.js +107 -0
  37. package/dist/card/card.js.map +1 -0
  38. package/dist/card/card.stories.d.ts +9 -0
  39. package/dist/card/card.stories.d.ts.map +1 -0
  40. package/dist/card/card.stories.js +39 -0
  41. package/dist/card/card.stories.js.map +1 -0
  42. package/dist/checkbox/checkbox.d.ts +44 -0
  43. package/dist/checkbox/checkbox.d.ts.map +1 -0
  44. package/dist/checkbox/checkbox.js +201 -0
  45. package/dist/checkbox/checkbox.js.map +1 -0
  46. package/dist/checkbox/checkbox.stories.d.ts +10 -0
  47. package/dist/checkbox/checkbox.stories.d.ts.map +1 -0
  48. package/dist/checkbox/checkbox.stories.js +38 -0
  49. package/dist/checkbox/checkbox.stories.js.map +1 -0
  50. package/dist/dialog/dialog.d.ts +51 -0
  51. package/dist/dialog/dialog.d.ts.map +1 -0
  52. package/dist/dialog/dialog.js +234 -0
  53. package/dist/dialog/dialog.js.map +1 -0
  54. package/dist/dialog/dialog.stories.d.ts +7 -0
  55. package/dist/dialog/dialog.stories.d.ts.map +1 -0
  56. package/dist/dialog/dialog.stories.js +30 -0
  57. package/dist/dialog/dialog.stories.js.map +1 -0
  58. package/dist/icon/icon.d.ts +40 -0
  59. package/dist/icon/icon.d.ts.map +1 -0
  60. package/dist/icon/icon.js +99 -0
  61. package/dist/icon/icon.js.map +1 -0
  62. package/dist/icon/icon.stories.d.ts +9 -0
  63. package/dist/icon/icon.stories.d.ts.map +1 -0
  64. package/dist/icon/icon.stories.js +41 -0
  65. package/dist/icon/icon.stories.js.map +1 -0
  66. package/dist/index.d.ts +22 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +22 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/input/input.d.ts +61 -0
  71. package/dist/input/input.d.ts.map +1 -0
  72. package/dist/input/input.js +233 -0
  73. package/dist/input/input.js.map +1 -0
  74. package/dist/input/input.stories.d.ts +10 -0
  75. package/dist/input/input.stories.d.ts.map +1 -0
  76. package/dist/input/input.stories.js +48 -0
  77. package/dist/input/input.stories.js.map +1 -0
  78. package/dist/link/link.d.ts +39 -0
  79. package/dist/link/link.d.ts.map +1 -0
  80. package/dist/link/link.js +112 -0
  81. package/dist/link/link.js.map +1 -0
  82. package/dist/link/link.stories.d.ts +9 -0
  83. package/dist/link/link.stories.d.ts.map +1 -0
  84. package/dist/link/link.stories.js +44 -0
  85. package/dist/link/link.stories.js.map +1 -0
  86. package/dist/progress/progress.d.ts +35 -0
  87. package/dist/progress/progress.d.ts.map +1 -0
  88. package/dist/progress/progress.js +116 -0
  89. package/dist/progress/progress.js.map +1 -0
  90. package/dist/progress/progress.stories.d.ts +10 -0
  91. package/dist/progress/progress.stories.d.ts.map +1 -0
  92. package/dist/progress/progress.stories.js +32 -0
  93. package/dist/progress/progress.stories.js.map +1 -0
  94. package/dist/radio/radio-group.d.ts +53 -0
  95. package/dist/radio/radio-group.d.ts.map +1 -0
  96. package/dist/radio/radio-group.js +183 -0
  97. package/dist/radio/radio-group.js.map +1 -0
  98. package/dist/radio/radio-group.stories.d.ts +9 -0
  99. package/dist/radio/radio-group.stories.d.ts.map +1 -0
  100. package/dist/radio/radio-group.stories.js +44 -0
  101. package/dist/radio/radio-group.stories.js.map +1 -0
  102. package/dist/radio/radio.d.ts +29 -0
  103. package/dist/radio/radio.d.ts.map +1 -0
  104. package/dist/radio/radio.js +166 -0
  105. package/dist/radio/radio.js.map +1 -0
  106. package/dist/radio/radio.stories.d.ts +13 -0
  107. package/dist/radio/radio.stories.d.ts.map +1 -0
  108. package/dist/radio/radio.stories.js +28 -0
  109. package/dist/radio/radio.stories.js.map +1 -0
  110. package/dist/select/select.d.ts +63 -0
  111. package/dist/select/select.d.ts.map +1 -0
  112. package/dist/select/select.js +258 -0
  113. package/dist/select/select.js.map +1 -0
  114. package/dist/select/select.stories.d.ts +9 -0
  115. package/dist/select/select.stories.d.ts.map +1 -0
  116. package/dist/select/select.stories.js +46 -0
  117. package/dist/select/select.stories.js.map +1 -0
  118. package/dist/skeleton/skeleton.d.ts +39 -0
  119. package/dist/skeleton/skeleton.d.ts.map +1 -0
  120. package/dist/skeleton/skeleton.js +111 -0
  121. package/dist/skeleton/skeleton.js.map +1 -0
  122. package/dist/skeleton/skeleton.stories.d.ts +9 -0
  123. package/dist/skeleton/skeleton.stories.d.ts.map +1 -0
  124. package/dist/skeleton/skeleton.stories.js +36 -0
  125. package/dist/skeleton/skeleton.stories.js.map +1 -0
  126. package/dist/spinner/spinner.d.ts +29 -0
  127. package/dist/spinner/spinner.d.ts.map +1 -0
  128. package/dist/spinner/spinner.js +131 -0
  129. package/dist/spinner/spinner.js.map +1 -0
  130. package/dist/spinner/spinner.stories.d.ts +8 -0
  131. package/dist/spinner/spinner.stories.d.ts.map +1 -0
  132. package/dist/spinner/spinner.stories.js +29 -0
  133. package/dist/spinner/spinner.stories.js.map +1 -0
  134. package/dist/tabs/tab-list.d.ts +45 -0
  135. package/dist/tabs/tab-list.d.ts.map +1 -0
  136. package/dist/tabs/tab-list.js +150 -0
  137. package/dist/tabs/tab-list.js.map +1 -0
  138. package/dist/tabs/tab-list.stories.d.ts +7 -0
  139. package/dist/tabs/tab-list.stories.d.ts.map +1 -0
  140. package/dist/tabs/tab-list.stories.js +27 -0
  141. package/dist/tabs/tab-list.stories.js.map +1 -0
  142. package/dist/tabs/tab.d.ts +40 -0
  143. package/dist/tabs/tab.d.ts.map +1 -0
  144. package/dist/tabs/tab.js +114 -0
  145. package/dist/tabs/tab.js.map +1 -0
  146. package/dist/tabs/tab.stories.d.ts +13 -0
  147. package/dist/tabs/tab.stories.d.ts.map +1 -0
  148. package/dist/tabs/tab.stories.js +28 -0
  149. package/dist/tabs/tab.stories.js.map +1 -0
  150. package/dist/tag/tag.d.ts +38 -0
  151. package/dist/tag/tag.d.ts.map +1 -0
  152. package/dist/tag/tag.js +71 -0
  153. package/dist/tag/tag.js.map +1 -0
  154. package/dist/tag/tag.stories.d.ts +10 -0
  155. package/dist/tag/tag.stories.d.ts.map +1 -0
  156. package/dist/tag/tag.stories.js +43 -0
  157. package/dist/tag/tag.stories.js.map +1 -0
  158. package/dist/test-setup.d.ts +2 -0
  159. package/dist/test-setup.d.ts.map +1 -0
  160. package/dist/test-setup.js +2 -0
  161. package/dist/test-setup.js.map +1 -0
  162. package/dist/textarea/textarea.d.ts +60 -0
  163. package/dist/textarea/textarea.d.ts.map +1 -0
  164. package/dist/textarea/textarea.js +232 -0
  165. package/dist/textarea/textarea.js.map +1 -0
  166. package/dist/textarea/textarea.stories.d.ts +10 -0
  167. package/dist/textarea/textarea.stories.d.ts.map +1 -0
  168. package/dist/textarea/textarea.stories.js +47 -0
  169. package/dist/textarea/textarea.stories.js.map +1 -0
  170. package/dist/toggle/toggle.d.ts +43 -0
  171. package/dist/toggle/toggle.d.ts.map +1 -0
  172. package/dist/toggle/toggle.js +189 -0
  173. package/dist/toggle/toggle.js.map +1 -0
  174. package/dist/toggle/toggle.stories.d.ts +9 -0
  175. package/dist/toggle/toggle.stories.d.ts.map +1 -0
  176. package/dist/toggle/toggle.stories.js +34 -0
  177. package/dist/toggle/toggle.stories.js.map +1 -0
  178. package/package.json +65 -0
  179. package/src/react.d.ts +199 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../../src/card/card.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI5D;;;;;;;;;;;;;;GAcG;AAEI,IAAM,MAAM,GAAZ,MAAM,MAAO,SAAQ,UAAU;IAA/B;;QA6DL;;;WAGG;QAEH,YAAO,GAAgB,IAAI,CAAC;IAS9B,CAAC;IAPC,MAAM;QACJ,OAAO,IAAI,CAAA;;;;KAIV,CAAC;IACJ,CAAC;;AAzEM,aAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DlB,AA1DY,CA0DX;AAOF;IADC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;uCACA;AAlEjB,MAAM;IADlB,aAAa,CAAC,SAAS,CAAC;GACZ,MAAM,CA2ElB"}
@@ -0,0 +1,9 @@
1
+ import type { Meta, StoryObj } from '@storybook/web-components-vite';
2
+ import '@digital2analogue2/parsimony-components';
3
+ declare const meta: Meta;
4
+ export default meta;
5
+ type Story = StoryObj;
6
+ export declare const Default: Story;
7
+ export declare const WithHeaderAndFooter: Story;
8
+ export declare const Padding: Story;
9
+ //# sourceMappingURL=card.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.stories.d.ts","sourceRoot":"","sources":["../../src/card/card.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,yCAAyC,CAAC;AAEjD,QAAA,MAAM,IAAI,EAAE,IAcX,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,eAAO,MAAM,mBAAmB,EAAE,KAQjC,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KASrB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { html } from 'lit';
2
+ import '@digital2analogue2/parsimony-components';
3
+ const meta = {
4
+ title: 'Components/Card',
5
+ component: 'rr-card',
6
+ argTypes: {
7
+ padding: { control: 'select', options: ['none', 'sm', 'md', 'lg'] },
8
+ },
9
+ args: {
10
+ padding: 'md',
11
+ },
12
+ render: ({ padding }) => html `
13
+ <rr-card padding=${padding}>
14
+ A simple card with body content only.
15
+ </rr-card>
16
+ `,
17
+ };
18
+ export default meta;
19
+ export const Default = {};
20
+ export const WithHeaderAndFooter = {
21
+ render: () => html `
22
+ <rr-card>
23
+ <span slot="header">Project status</span>
24
+ The build passed and tokens are in sync.
25
+ <span slot="footer">Updated just now</span>
26
+ </rr-card>
27
+ `,
28
+ };
29
+ export const Padding = {
30
+ render: () => html `
31
+ <div style="display: flex; align-items: flex-start; gap: var(--spacing-inline);">
32
+ <rr-card padding="none">No padding</rr-card>
33
+ <rr-card padding="sm">Small padding</rr-card>
34
+ <rr-card padding="md">Medium padding</rr-card>
35
+ <rr-card padding="lg">Large padding</rr-card>
36
+ </div>
37
+ `,
38
+ };
39
+ //# sourceMappingURL=card.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.stories.js","sourceRoot":"","sources":["../../src/card/card.stories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,yCAAyC,CAAC;AAEjD,MAAM,IAAI,GAAS;IACjB,KAAK,EAAE,iBAAiB;IACxB,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE;QACR,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;KACpE;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,IAAI;KACd;IACD,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,CAAA;uBACR,OAAO;;;GAG3B;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,OAAO,GAAU,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,mBAAmB,GAAU;IACxC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAA;;;;;;GAMjB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAU;IAC5B,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAA;;;;;;;GAOjB;CACF,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * A form-associated checkbox with checked, indeterminate, and disabled states.
4
+ *
5
+ * The visual control is rendered in shadow DOM; the hidden native
6
+ * `<input type="checkbox">` provides focus, keyboard, and label-click semantics.
7
+ * `ElementInternals` handles form participation.
8
+ *
9
+ * Usage:
10
+ * <rr-checkbox name="agree" label="I agree to the terms" checked></rr-checkbox>
11
+ * <rr-checkbox name="notify">Send me notifications</rr-checkbox>
12
+ *
13
+ * @slot - Label text (alternative to the `label` property)
14
+ * @fires change - When the checked state changes
15
+ * @csspart box - The visual checkbox square
16
+ * @csspart label - The label text element
17
+ */
18
+ export declare class RrCheckbox extends LitElement {
19
+ static formAssociated: boolean;
20
+ static styles: import("lit").CSSResult;
21
+ /** Whether the checkbox is checked. */
22
+ checked: boolean;
23
+ /** Mixed state; cleared when the user toggles the checkbox. */
24
+ indeterminate: boolean;
25
+ /** Disables interaction and form participation. */
26
+ disabled: boolean;
27
+ /** Form value submitted when checked. */
28
+ value: string;
29
+ /** Form field name. */
30
+ name: string;
31
+ /** Label text; falls back to slotted content when empty. */
32
+ label: string;
33
+ private _internals;
34
+ constructor();
35
+ updated(): void;
36
+ private _onChange;
37
+ render(): import("lit-html").TemplateResult<1>;
38
+ }
39
+ declare global {
40
+ interface HTMLElementTagNameMap {
41
+ 'rr-checkbox': RrCheckbox;
42
+ }
43
+ }
44
+ //# sourceMappingURL=checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../src/checkbox/checkbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAGrD;;;;;;;;;;;;;;;GAeG;AACH,qBACa,UAAW,SAAQ,UAAU;IACxC,MAAM,CAAC,cAAc,UAAQ;IAE7B,MAAM,CAAC,MAAM,0BA8FX;IAEF,uCAAuC;IACK,OAAO,UAAS;IAC5D,+DAA+D;IACnB,aAAa,UAAS;IAClE,mDAAmD;IACP,QAAQ,UAAS;IAC7D,yCAAyC;IAC7B,KAAK,SAAQ;IACzB,uBAAuB;IACX,IAAI,SAAM;IACtB,4DAA4D;IAChD,KAAK,SAAM;IAEvB,OAAO,CAAC,UAAU,CAAmB;;IAO5B,OAAO;IAIhB,OAAO,CAAC,SAAS;IAQjB,MAAM;CA6BP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;KAC3B;CACF"}
@@ -0,0 +1,201 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, html, css } from 'lit';
8
+ import { customElement, property } from 'lit/decorators.js';
9
+ /**
10
+ * A form-associated checkbox with checked, indeterminate, and disabled states.
11
+ *
12
+ * The visual control is rendered in shadow DOM; the hidden native
13
+ * `<input type="checkbox">` provides focus, keyboard, and label-click semantics.
14
+ * `ElementInternals` handles form participation.
15
+ *
16
+ * Usage:
17
+ * <rr-checkbox name="agree" label="I agree to the terms" checked></rr-checkbox>
18
+ * <rr-checkbox name="notify">Send me notifications</rr-checkbox>
19
+ *
20
+ * @slot - Label text (alternative to the `label` property)
21
+ * @fires change - When the checked state changes
22
+ * @csspart box - The visual checkbox square
23
+ * @csspart label - The label text element
24
+ */
25
+ let RrCheckbox = class RrCheckbox extends LitElement {
26
+ constructor() {
27
+ super();
28
+ /** Whether the checkbox is checked. */
29
+ this.checked = false;
30
+ /** Mixed state; cleared when the user toggles the checkbox. */
31
+ this.indeterminate = false;
32
+ /** Disables interaction and form participation. */
33
+ this.disabled = false;
34
+ /** Form value submitted when checked. */
35
+ this.value = 'on';
36
+ /** Form field name. */
37
+ this.name = '';
38
+ /** Label text; falls back to slotted content when empty. */
39
+ this.label = '';
40
+ this._internals = this.attachInternals();
41
+ }
42
+ updated() {
43
+ this._internals.setFormValue?.(this.checked ? this.value : null);
44
+ }
45
+ _onChange() {
46
+ if (this.disabled)
47
+ return;
48
+ this.checked = !this.checked;
49
+ this.indeterminate = false;
50
+ this._internals.setFormValue?.(this.checked ? this.value : null);
51
+ this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));
52
+ }
53
+ render() {
54
+ return html `
55
+ <div class="box-wrap">
56
+ <input
57
+ type="checkbox"
58
+ id="cb"
59
+ .name=${this.name}
60
+ .value=${this.value}
61
+ .checked=${this.checked}
62
+ .indeterminate=${this.indeterminate}
63
+ .disabled=${this.disabled}
64
+ aria-checked=${this.indeterminate ? 'mixed' : this.checked ? 'true' : 'false'}
65
+ @change=${this._onChange}
66
+ />
67
+ <div class="box" part="box">
68
+ <svg class="check" width="10" height="10" viewBox="0 0 10 10" fill="none" aria-hidden="true">
69
+ <path d="M2 5L4.2 7.5L8.5 3" stroke="currentColor" stroke-width="1.5"
70
+ stroke-linecap="round" stroke-linejoin="round"/>
71
+ </svg>
72
+ <svg class="dash" width="10" height="10" viewBox="0 0 10 10" fill="none" aria-hidden="true">
73
+ <path d="M2.5 5H7.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
74
+ </svg>
75
+ </div>
76
+ </div>
77
+ <label part="label" for="cb">
78
+ ${this.label ? this.label : html `<slot></slot>`}
79
+ </label>
80
+ `;
81
+ }
82
+ };
83
+ RrCheckbox.formAssociated = true;
84
+ RrCheckbox.styles = css `
85
+ :host {
86
+ display: inline-flex;
87
+ align-items: flex-start;
88
+ gap: var(--spacing-tight);
89
+ cursor: pointer;
90
+ user-select: none;
91
+ }
92
+
93
+ :host([disabled]) {
94
+ cursor: not-allowed;
95
+ }
96
+
97
+ /* Wrap that positions the hidden input over the visual box */
98
+ .box-wrap {
99
+ position: relative;
100
+ flex-shrink: 0;
101
+ width: 16px;
102
+ height: 16px;
103
+ margin-top: 2px; /* align with cap-height of label text */
104
+ }
105
+
106
+ /* Visually hidden native input — physically covers the box-wrap area
107
+ so clicks on the visual box hit the real input for focus + activation */
108
+ input {
109
+ position: absolute;
110
+ inset: 0;
111
+ width: 100%;
112
+ height: 100%;
113
+ opacity: 0;
114
+ margin: 0;
115
+ cursor: inherit;
116
+ z-index: 1;
117
+ }
118
+
119
+ .box {
120
+ position: absolute;
121
+ inset: 0;
122
+ border: 1px solid var(--component-checkbox-border-default);
123
+ border-radius: var(--component-checkbox-radius);
124
+ background: var(--component-checkbox-background-unchecked);
125
+ display: flex;
126
+ align-items: center;
127
+ justify-content: center;
128
+ transition:
129
+ border-color var(--motion-duration-instant) var(--motion-easing-default),
130
+ background-color var(--motion-duration-instant) var(--motion-easing-default);
131
+ }
132
+
133
+ :host(:not([disabled]):not([checked]):not([indeterminate])) .box-wrap:hover .box {
134
+ border-color: var(--component-checkbox-border-hover);
135
+ }
136
+
137
+ :host([checked]) .box,
138
+ :host([indeterminate]) .box {
139
+ background: var(--component-checkbox-background-checked);
140
+ border-color: var(--component-checkbox-border-checked);
141
+ }
142
+
143
+ :host([disabled]) .box {
144
+ background: var(--component-checkbox-background-disabled);
145
+ border-color: var(--component-checkbox-border-disabled);
146
+ }
147
+
148
+ /* Focus ring on the visual box driven by the hidden input's focus state */
149
+ input:focus-visible ~ .box {
150
+ outline: 2px solid var(--component-checkbox-border-focus);
151
+ outline-offset: 2px;
152
+ }
153
+
154
+ .check,
155
+ .dash {
156
+ display: none;
157
+ color: var(--component-checkbox-foreground-checkmark);
158
+ }
159
+
160
+ :host([checked]) .check {
161
+ display: block;
162
+ }
163
+
164
+ :host([indeterminate]) .dash {
165
+ display: block;
166
+ }
167
+
168
+ label {
169
+ font: var(--font-label-medium);
170
+ color: var(--component-checkbox-foreground-label);
171
+ cursor: inherit;
172
+ line-height: 1.4;
173
+ }
174
+
175
+ :host([disabled]) label {
176
+ color: var(--component-checkbox-foreground-disabled);
177
+ }
178
+ `;
179
+ __decorate([
180
+ property({ type: Boolean, reflect: true })
181
+ ], RrCheckbox.prototype, "checked", void 0);
182
+ __decorate([
183
+ property({ type: Boolean, reflect: true })
184
+ ], RrCheckbox.prototype, "indeterminate", void 0);
185
+ __decorate([
186
+ property({ type: Boolean, reflect: true })
187
+ ], RrCheckbox.prototype, "disabled", void 0);
188
+ __decorate([
189
+ property()
190
+ ], RrCheckbox.prototype, "value", void 0);
191
+ __decorate([
192
+ property()
193
+ ], RrCheckbox.prototype, "name", void 0);
194
+ __decorate([
195
+ property()
196
+ ], RrCheckbox.prototype, "label", void 0);
197
+ RrCheckbox = __decorate([
198
+ customElement('rr-checkbox')
199
+ ], RrCheckbox);
200
+ export { RrCheckbox };
201
+ //# sourceMappingURL=checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../src/checkbox/checkbox.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAW,MAAM,KAAK,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;;;;;;;;;;;;;GAeG;AAEI,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,UAAU;IAkHxC;QACE,KAAK,EAAE,CAAC;QAhBV,uCAAuC;QACK,YAAO,GAAG,KAAK,CAAC;QAC5D,+DAA+D;QACnB,kBAAa,GAAG,KAAK,CAAC;QAClE,mDAAmD;QACP,aAAQ,GAAG,KAAK,CAAC;QAC7D,yCAAyC;QAC7B,UAAK,GAAG,IAAI,CAAC;QACzB,uBAAuB;QACX,SAAI,GAAG,EAAE,CAAC;QACtB,4DAA4D;QAChD,UAAK,GAAG,EAAE,CAAC;QAMrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3C,CAAC;IAEQ,OAAO;QACd,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IAEO,SAAS;QACf,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;kBAKG,IAAI,CAAC,IAAI;mBACR,IAAI,CAAC,KAAK;qBACR,IAAI,CAAC,OAAO;2BACN,IAAI,CAAC,aAAa;sBACvB,IAAI,CAAC,QAAQ;yBACV,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;oBACnE,IAAI,CAAC,SAAS;;;;;;;;;;;;;UAaxB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA,eAAe;;KAElD,CAAC;IACJ,CAAC;;AA9JM,yBAAc,GAAG,IAAI,AAAP,CAAQ;AAEtB,iBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8FlB,AA9FY,CA8FX;AAG0C;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;2CAAiB;AAEhB;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iDAAuB;AAEtB;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;4CAAkB;AAEjD;IAAX,QAAQ,EAAE;yCAAc;AAEb;IAAX,QAAQ,EAAE;wCAAW;AAEV;IAAX,QAAQ,EAAE;yCAAY;AA9GZ,UAAU;IADtB,aAAa,CAAC,aAAa,CAAC;GAChB,UAAU,CAgKtB"}
@@ -0,0 +1,10 @@
1
+ import type { Meta, StoryObj } from '@storybook/web-components-vite';
2
+ import '@digital2analogue2/parsimony-components';
3
+ declare const meta: Meta;
4
+ export default meta;
5
+ type Story = StoryObj;
6
+ export declare const Default: Story;
7
+ export declare const Checked: Story;
8
+ export declare const Indeterminate: Story;
9
+ export declare const Disabled: Story;
10
+ //# sourceMappingURL=checkbox.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.stories.d.ts","sourceRoot":"","sources":["../../src/checkbox/checkbox.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,yCAAyC,CAAC;AAEjD,QAAA,MAAM,IAAI,EAAE,IA6BX,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,eAAO,MAAM,OAAO,EAAE,KAAmC,CAAC;AAE1D,eAAO,MAAM,aAAa,EAAE,KAA8D,CAAC;AAE3F,eAAO,MAAM,QAAQ,EAAE,KAAoC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { html } from 'lit';
2
+ import '@digital2analogue2/parsimony-components';
3
+ const meta = {
4
+ title: 'Components/Checkbox',
5
+ component: 'rr-checkbox',
6
+ argTypes: {
7
+ checked: { control: 'boolean' },
8
+ indeterminate: { control: 'boolean' },
9
+ disabled: { control: 'boolean' },
10
+ value: { control: 'text' },
11
+ name: { control: 'text' },
12
+ label: { control: 'text' },
13
+ },
14
+ args: {
15
+ checked: false,
16
+ indeterminate: false,
17
+ disabled: false,
18
+ value: 'on',
19
+ name: '',
20
+ label: 'Accept terms',
21
+ },
22
+ render: ({ checked, indeterminate, disabled, value, name, label }) => html `
23
+ <rr-checkbox
24
+ ?checked=${checked}
25
+ ?indeterminate=${indeterminate}
26
+ ?disabled=${disabled}
27
+ value=${value}
28
+ name=${name}
29
+ label=${label}
30
+ ></rr-checkbox>
31
+ `,
32
+ };
33
+ export default meta;
34
+ export const Default = {};
35
+ export const Checked = { args: { checked: true } };
36
+ export const Indeterminate = { args: { indeterminate: true, label: 'Select all' } };
37
+ export const Disabled = { args: { disabled: true } };
38
+ //# sourceMappingURL=checkbox.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.stories.js","sourceRoot":"","sources":["../../src/checkbox/checkbox.stories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,yCAAyC,CAAC;AAEjD,MAAM,IAAI,GAAS;IACjB,KAAK,EAAE,qBAAqB;IAC5B,SAAS,EAAE,aAAa;IACxB,QAAQ,EAAE;QACR,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;QAC/B,aAAa,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;QACrC,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;QAChC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QAC1B,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QACzB,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;KAC3B;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,cAAc;KACtB;IACD,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAA;;iBAE3D,OAAO;uBACD,aAAa;kBAClB,QAAQ;cACZ,KAAK;aACN,IAAI;cACH,KAAK;;GAEhB;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,OAAO,GAAU,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,OAAO,GAAU,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;AAE1D,MAAM,CAAC,MAAM,aAAa,GAAU,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC;AAE3F,MAAM,CAAC,MAAM,QAAQ,GAAU,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * `<rr-dialog>` — modal dialog using the native `<dialog>` element.
4
+ *
5
+ * Leverages native focus trap, Escape-to-close, and `::backdrop`.
6
+ * Programmatic control via `show()` / `close()` methods, or bind the
7
+ * `open` property/attribute.
8
+ *
9
+ * @slot — Dialog body content
10
+ * @slot footer — Action buttons (displayed in a right-aligned footer row)
11
+ *
12
+ * @attr heading - Dialog title text
13
+ * @attr {Boolean} open - Whether the dialog is open
14
+ * @attr {Boolean} close-on-backdrop - Close when backdrop is clicked (default: true)
15
+ *
16
+ * @fires rr-dialog-close - Fired whenever the dialog closes (Escape, close button, or programmatic)
17
+ *
18
+ * @example
19
+ * <rr-dialog heading="Confirm action">
20
+ * Are you sure you want to delete this item?
21
+ * <rr-button slot="footer" variant="danger" @click=${() => dialog.close()}>Delete</rr-button>
22
+ * <rr-button slot="footer" variant="secondary" @click=${() => dialog.close()}>Cancel</rr-button>
23
+ * </rr-dialog>
24
+ */
25
+ export declare class RrDialog extends LitElement {
26
+ static styles: import("lit").CSSResult;
27
+ /** Dialog title text rendered in the header. */
28
+ heading: string;
29
+ /** Whether the dialog is open. Reflected to an attribute. */
30
+ open: boolean;
31
+ /** Close the dialog when the backdrop is clicked. */
32
+ closeOnBackdrop: boolean;
33
+ private _dialog;
34
+ /** Open the dialog as a modal. */
35
+ show(): void;
36
+ /**
37
+ * Close the dialog. Single source of truth — always dispatches `rr-dialog-close`.
38
+ * Also called internally when Escape is pressed (via native `close` event).
39
+ */
40
+ close(): void;
41
+ updated(changed: Map<PropertyKey, unknown>): void;
42
+ private _onBackdropClick;
43
+ private _onNativeClose;
44
+ render(): import("lit-html").TemplateResult<1>;
45
+ }
46
+ declare global {
47
+ interface HTMLElementTagNameMap {
48
+ 'rr-dialog': RrDialog;
49
+ }
50
+ }
51
+ //# sourceMappingURL=dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/dialog/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAGrD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBACa,QAAS,SAAQ,UAAU;IACtC,MAAM,CAAC,MAAM,0BA6FX;IAEF,gDAAgD;IACpC,OAAO,SAAM;IAEzB,6DAA6D;IACjB,IAAI,UAAS;IAEzD,qDAAqD;IACQ,eAAe,UAAQ;IAEnE,OAAO,CAAC,OAAO,CAAqB;IAErD,kCAAkC;IAClC,IAAI;IAQJ;;;OAGG;IACH,KAAK;IAML,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;IAa1C,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,cAAc;IAKtB,MAAM;CAoCP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,QAAQ,CAAC;KACvB;CACF"}
@@ -0,0 +1,234 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, html, css } from 'lit';
8
+ import { customElement, property, query } from 'lit/decorators.js';
9
+ /**
10
+ * `<rr-dialog>` — modal dialog using the native `<dialog>` element.
11
+ *
12
+ * Leverages native focus trap, Escape-to-close, and `::backdrop`.
13
+ * Programmatic control via `show()` / `close()` methods, or bind the
14
+ * `open` property/attribute.
15
+ *
16
+ * @slot — Dialog body content
17
+ * @slot footer — Action buttons (displayed in a right-aligned footer row)
18
+ *
19
+ * @attr heading - Dialog title text
20
+ * @attr {Boolean} open - Whether the dialog is open
21
+ * @attr {Boolean} close-on-backdrop - Close when backdrop is clicked (default: true)
22
+ *
23
+ * @fires rr-dialog-close - Fired whenever the dialog closes (Escape, close button, or programmatic)
24
+ *
25
+ * @example
26
+ * <rr-dialog heading="Confirm action">
27
+ * Are you sure you want to delete this item?
28
+ * <rr-button slot="footer" variant="danger" @click=${() => dialog.close()}>Delete</rr-button>
29
+ * <rr-button slot="footer" variant="secondary" @click=${() => dialog.close()}>Cancel</rr-button>
30
+ * </rr-dialog>
31
+ */
32
+ let RrDialog = class RrDialog extends LitElement {
33
+ constructor() {
34
+ super(...arguments);
35
+ /** Dialog title text rendered in the header. */
36
+ this.heading = '';
37
+ /** Whether the dialog is open. Reflected to an attribute. */
38
+ this.open = false;
39
+ /** Close the dialog when the backdrop is clicked. */
40
+ this.closeOnBackdrop = true;
41
+ }
42
+ /** Open the dialog as a modal. */
43
+ show() {
44
+ this.open = true;
45
+ // showModal() is unavailable in test environments (happy-dom); guard gracefully.
46
+ if (this._dialog && typeof this._dialog.showModal === 'function' && !this._dialog.open) {
47
+ this._dialog.showModal();
48
+ }
49
+ }
50
+ /**
51
+ * Close the dialog. Single source of truth — always dispatches `rr-dialog-close`.
52
+ * Also called internally when Escape is pressed (via native `close` event).
53
+ */
54
+ close() {
55
+ if (!this.open)
56
+ return;
57
+ this.open = false;
58
+ this.dispatchEvent(new CustomEvent('rr-dialog-close', { bubbles: true, composed: true }));
59
+ }
60
+ updated(changed) {
61
+ if (!changed.has('open'))
62
+ return;
63
+ if (this.open) {
64
+ if (this._dialog && typeof this._dialog.showModal === 'function' && !this._dialog.open) {
65
+ this._dialog.showModal();
66
+ }
67
+ }
68
+ else {
69
+ if (this._dialog && typeof this._dialog.close === 'function' && this._dialog.open) {
70
+ this._dialog.close();
71
+ }
72
+ }
73
+ }
74
+ _onBackdropClick(e) {
75
+ if (!this.closeOnBackdrop)
76
+ return;
77
+ const rect = this._dialog.getBoundingClientRect();
78
+ if (e.clientX < rect.left || e.clientX > rect.right ||
79
+ e.clientY < rect.top || e.clientY > rect.bottom) {
80
+ this.close();
81
+ }
82
+ }
83
+ _onNativeClose() {
84
+ // Fires when Escape is pressed — delegate to close() for consistent behavior.
85
+ this.close();
86
+ }
87
+ render() {
88
+ return html `
89
+ <dialog
90
+ @click="${this._onBackdropClick}"
91
+ @close="${this._onNativeClose}"
92
+ >
93
+ <div class="dialog-inner">
94
+ <div class="header">
95
+ <h2 class="heading">${this.heading}</h2>
96
+ <button
97
+ class="close-btn"
98
+ @click="${() => this.close()}"
99
+ aria-label="Close dialog"
100
+ >
101
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true">
102
+ <path
103
+ d="M4 4L12 12M12 4L4 12"
104
+ stroke="currentColor"
105
+ stroke-width="1.5"
106
+ stroke-linecap="round"
107
+ />
108
+ </svg>
109
+ </button>
110
+ </div>
111
+
112
+ <div class="body">
113
+ <slot></slot>
114
+ </div>
115
+
116
+ <div class="footer">
117
+ <slot name="footer"></slot>
118
+ </div>
119
+ </div>
120
+ </dialog>
121
+ `;
122
+ }
123
+ };
124
+ RrDialog.styles = css `
125
+ :host {
126
+ display: contents;
127
+ }
128
+
129
+ dialog {
130
+ padding: 0;
131
+ border: 1px solid var(--color-border-alt);
132
+ border-radius: var(--radius-xl);
133
+ background: var(--color-background-alt);
134
+ color: var(--color-foreground-default);
135
+ max-width: min(90vw, 560px);
136
+ width: 100%;
137
+ box-shadow: var(--shadow-dialog);
138
+ /* Remove UA outline; focus is managed by the browser's dialog role */
139
+ outline: none;
140
+ }
141
+
142
+ dialog::backdrop {
143
+ background: rgba(0, 0, 0, 0.6);
144
+ backdrop-filter: blur(2px);
145
+ }
146
+
147
+ .dialog-inner {
148
+ display: flex;
149
+ flex-direction: column;
150
+ }
151
+
152
+ /* ── Header ── */
153
+ .header {
154
+ display: flex;
155
+ align-items: center;
156
+ justify-content: space-between;
157
+ gap: var(--spacing-tight);
158
+ padding: var(--spacing-element) var(--spacing-component);
159
+ border-bottom: 1px solid var(--color-border-alt);
160
+ }
161
+
162
+ .heading {
163
+ font: var(--font-title-small);
164
+ letter-spacing: var(--letter-spacing-title);
165
+ color: var(--color-foreground-default);
166
+ margin: 0;
167
+ }
168
+
169
+ /* ── Close button ── */
170
+ .close-btn {
171
+ all: unset;
172
+ display: inline-flex;
173
+ align-items: center;
174
+ justify-content: center;
175
+ width: 32px;
176
+ height: 32px;
177
+ border-radius: var(--radius-default);
178
+ color: var(--color-foreground-muted);
179
+ cursor: pointer;
180
+ flex-shrink: 0;
181
+ transition:
182
+ color var(--motion-duration-instant) var(--motion-easing-default),
183
+ background var(--motion-duration-instant) var(--motion-easing-default);
184
+ }
185
+
186
+ .close-btn:hover {
187
+ color: var(--color-foreground-default);
188
+ background: var(--color-background-alt);
189
+ }
190
+
191
+ .close-btn:focus-visible {
192
+ outline: 2px solid var(--color-border-focus);
193
+ outline-offset: 2px;
194
+ }
195
+
196
+ /* ── Body ── */
197
+ .body {
198
+ padding: var(--spacing-component);
199
+ font: var(--font-body-large);
200
+ color: var(--color-foreground-alt);
201
+ overflow-y: auto;
202
+ }
203
+
204
+ /* ── Footer ── */
205
+ .footer {
206
+ display: flex;
207
+ justify-content: flex-end;
208
+ gap: var(--spacing-tight);
209
+ padding: var(--spacing-inline) var(--spacing-component);
210
+ border-top: 1px solid var(--color-border-alt);
211
+ }
212
+
213
+ /* Hide footer when no slotted content */
214
+ .footer:not(:has(*)) {
215
+ display: none;
216
+ }
217
+ `;
218
+ __decorate([
219
+ property()
220
+ ], RrDialog.prototype, "heading", void 0);
221
+ __decorate([
222
+ property({ type: Boolean, reflect: true })
223
+ ], RrDialog.prototype, "open", void 0);
224
+ __decorate([
225
+ property({ type: Boolean, attribute: 'close-on-backdrop' })
226
+ ], RrDialog.prototype, "closeOnBackdrop", void 0);
227
+ __decorate([
228
+ query('dialog')
229
+ ], RrDialog.prototype, "_dialog", void 0);
230
+ RrDialog = __decorate([
231
+ customElement('rr-dialog')
232
+ ], RrDialog);
233
+ export { RrDialog };
234
+ //# sourceMappingURL=dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../src/dialog/dialog.ts"],"names":[],"mappings":"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"}