@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,189 @@
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 toggle switch for binary on/off settings.
11
+ *
12
+ * The pill-shaped track and sliding knob are rendered in shadow DOM;
13
+ * the hidden native `<input type="checkbox">` provides focus, keyboard,
14
+ * and label-click semantics. `ElementInternals` handles form participation.
15
+ *
16
+ * Usage:
17
+ * <rr-toggle name="darkMode" label="Dark mode" checked></rr-toggle>
18
+ * <rr-toggle name="notify">Email notifications</rr-toggle>
19
+ *
20
+ * @slot - Label text (alternative to the `label` property)
21
+ * @fires change - When the toggle state changes
22
+ * @csspart track - The pill-shaped track element
23
+ * @csspart knob - The sliding knob element
24
+ * @csspart label - The label text element
25
+ */
26
+ let RrToggle = class RrToggle extends LitElement {
27
+ constructor() {
28
+ super();
29
+ /** On/off state. Reflected. */
30
+ this.checked = false;
31
+ /** Disables the toggle. Reflected. */
32
+ this.disabled = false;
33
+ /** Form value submitted when the toggle is on. */
34
+ this.value = 'on';
35
+ /** Form field name submitted with the form value. */
36
+ this.name = '';
37
+ /** Label text; falls back to slotted content when empty. */
38
+ this.label = '';
39
+ this._internals = this.attachInternals();
40
+ }
41
+ updated() {
42
+ this._internals.setFormValue?.(this.checked ? this.value : null);
43
+ }
44
+ _onChange() {
45
+ if (this.disabled)
46
+ return;
47
+ this.checked = !this.checked;
48
+ this._internals.setFormValue?.(this.checked ? this.value : null);
49
+ this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));
50
+ }
51
+ render() {
52
+ return html `
53
+ <div class="track-wrap">
54
+ <input
55
+ type="checkbox"
56
+ id="toggle"
57
+ role="switch"
58
+ .name=${this.name}
59
+ .value=${this.value}
60
+ .checked=${this.checked}
61
+ .disabled=${this.disabled}
62
+ aria-checked=${this.checked ? 'true' : 'false'}
63
+ @change=${this._onChange}
64
+ />
65
+ <div class="track" part="track">
66
+ <div class="knob" part="knob"></div>
67
+ </div>
68
+ </div>
69
+ <label part="label" for="toggle">
70
+ ${this.label ? this.label : html `<slot></slot>`}
71
+ </label>
72
+ `;
73
+ }
74
+ };
75
+ RrToggle.formAssociated = true;
76
+ RrToggle.styles = css `
77
+ :host {
78
+ display: inline-flex;
79
+ align-items: center;
80
+ gap: var(--spacing-tight);
81
+ cursor: pointer;
82
+ user-select: none;
83
+ }
84
+
85
+ :host([disabled]) {
86
+ cursor: not-allowed;
87
+ }
88
+
89
+ /* Wrap positions the hidden input over the visible track */
90
+ .track-wrap {
91
+ position: relative;
92
+ flex-shrink: 0;
93
+ width: 36px;
94
+ height: 20px;
95
+ }
96
+
97
+ /* Visually hidden native input — covers the track area for click/focus */
98
+ input {
99
+ position: absolute;
100
+ inset: 0;
101
+ width: 100%;
102
+ height: 100%;
103
+ opacity: 0;
104
+ margin: 0;
105
+ cursor: inherit;
106
+ z-index: 1;
107
+ }
108
+
109
+ .track {
110
+ position: absolute;
111
+ inset: 0;
112
+ border-radius: var(--radius-full);
113
+ border: 1px solid var(--component-toggle-track-border-off);
114
+ background: var(--component-toggle-track-background-off);
115
+ transition:
116
+ background-color var(--motion-duration-instant) var(--motion-easing-default),
117
+ border-color var(--motion-duration-instant) var(--motion-easing-default);
118
+ display: flex;
119
+ align-items: center;
120
+ padding: 0 3px;
121
+ }
122
+
123
+ :host([checked]) .track {
124
+ background: var(--component-toggle-track-background-on);
125
+ border-color: var(--component-toggle-track-border-on);
126
+ }
127
+
128
+ :host([disabled]) .track {
129
+ background: var(--component-toggle-track-background-disabled);
130
+ border-color: var(--component-toggle-track-border-disabled);
131
+ }
132
+
133
+ .knob {
134
+ width: 12px;
135
+ height: 12px;
136
+ border-radius: 50%;
137
+ background: var(--component-toggle-knob-background-off);
138
+ transition:
139
+ transform var(--motion-duration-instant) var(--motion-easing-move),
140
+ background-color var(--motion-duration-instant) var(--motion-easing-default);
141
+ flex-shrink: 0;
142
+ }
143
+
144
+ :host([checked]) .knob {
145
+ transform: translateX(16px);
146
+ background: var(--component-toggle-knob-background-on);
147
+ }
148
+
149
+ :host([disabled]) .knob {
150
+ background: var(--component-toggle-knob-background-disabled);
151
+ }
152
+
153
+ /* Focus ring on the track driven by the hidden input's focus state */
154
+ input:focus-visible ~ .track {
155
+ outline: 2px solid var(--color-border-focus);
156
+ outline-offset: 2px;
157
+ }
158
+
159
+ label {
160
+ font: var(--font-label-medium);
161
+ color: var(--component-toggle-foreground-label);
162
+ cursor: inherit;
163
+ line-height: 1.4;
164
+ }
165
+
166
+ :host([disabled]) label {
167
+ color: var(--component-toggle-foreground-disabled);
168
+ }
169
+ `;
170
+ __decorate([
171
+ property({ type: Boolean, reflect: true })
172
+ ], RrToggle.prototype, "checked", void 0);
173
+ __decorate([
174
+ property({ type: Boolean, reflect: true })
175
+ ], RrToggle.prototype, "disabled", void 0);
176
+ __decorate([
177
+ property()
178
+ ], RrToggle.prototype, "value", void 0);
179
+ __decorate([
180
+ property()
181
+ ], RrToggle.prototype, "name", void 0);
182
+ __decorate([
183
+ property()
184
+ ], RrToggle.prototype, "label", void 0);
185
+ RrToggle = __decorate([
186
+ customElement('rr-toggle')
187
+ ], RrToggle);
188
+ export { RrToggle };
189
+ //# sourceMappingURL=toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.js","sourceRoot":"","sources":["../../src/toggle/toggle.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;;;;;;;;;;;;;;;;GAgBG;AAEI,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,UAAU;IA+GtC;QACE,KAAK,EAAE,CAAC;QAdV,+BAA+B;QACa,YAAO,GAAG,KAAK,CAAC;QAC5D,sCAAsC;QACM,aAAQ,GAAG,KAAK,CAAC;QAC7D,kDAAkD;QACtC,UAAK,GAAG,IAAI,CAAC;QACzB,qDAAqD;QACzC,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,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;;;;;;kBAMG,IAAI,CAAC,IAAI;mBACR,IAAI,CAAC,KAAK;qBACR,IAAI,CAAC,OAAO;sBACX,IAAI,CAAC,QAAQ;yBACV,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;oBACpC,IAAI,CAAC,SAAS;;;;;;;UAOxB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA,eAAe;;KAElD,CAAC;IACJ,CAAC;;AApJM,uBAAc,GAAG,IAAI,AAAP,CAAQ;AAEtB,eAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6FlB,AA7FY,CA6FX;AAG0C;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;yCAAiB;AAEhB;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;0CAAkB;AAEjD;IAAX,QAAQ,EAAE;uCAAc;AAEb;IAAX,QAAQ,EAAE;sCAAW;AAEV;IAAX,QAAQ,EAAE;uCAAY;AA3GZ,QAAQ;IADpB,aAAa,CAAC,WAAW,CAAC;GACd,QAAQ,CAsJpB"}
@@ -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 Off: Story;
7
+ export declare const On: Story;
8
+ export declare const Disabled: Story;
9
+ //# sourceMappingURL=toggle.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.stories.d.ts","sourceRoot":"","sources":["../../src/toggle/toggle.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,yCAAyC,CAAC;AAEjD,QAAA,MAAM,IAAI,EAAE,IA0BX,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,GAAG,EAAE,KAAU,CAAC;AAE7B,eAAO,MAAM,EAAE,EAAE,KAAmC,CAAC;AAErD,eAAO,MAAM,QAAQ,EAAE,KAAoC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { html } from 'lit';
2
+ import '@digital2analogue2/parsimony-components';
3
+ const meta = {
4
+ title: 'Components/Toggle',
5
+ component: 'rr-toggle',
6
+ argTypes: {
7
+ checked: { control: 'boolean' },
8
+ disabled: { control: 'boolean' },
9
+ value: { control: 'text' },
10
+ name: { control: 'text' },
11
+ label: { control: 'text' },
12
+ },
13
+ args: {
14
+ checked: false,
15
+ disabled: false,
16
+ value: 'on',
17
+ name: '',
18
+ label: 'Enable notifications',
19
+ },
20
+ render: ({ checked, disabled, value, name, label }) => html `
21
+ <rr-toggle
22
+ ?checked=${checked}
23
+ ?disabled=${disabled}
24
+ value=${value}
25
+ name=${name}
26
+ label=${label}
27
+ ></rr-toggle>
28
+ `,
29
+ };
30
+ export default meta;
31
+ export const Off = {};
32
+ export const On = { args: { checked: true } };
33
+ export const Disabled = { args: { disabled: true } };
34
+ //# sourceMappingURL=toggle.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.stories.js","sourceRoot":"","sources":["../../src/toggle/toggle.stories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,yCAAyC,CAAC;AAEjD,MAAM,IAAI,GAAS;IACjB,KAAK,EAAE,mBAAmB;IAC1B,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE;QACR,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;QAC/B,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,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,sBAAsB;KAC9B;IACD,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAA;;iBAE5C,OAAO;kBACN,QAAQ;cACZ,KAAK;aACN,IAAI;cACH,KAAK;;GAEhB;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,GAAG,GAAU,EAAE,CAAC;AAE7B,MAAM,CAAC,MAAM,EAAE,GAAU,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;AAErD,MAAM,CAAC,MAAM,QAAQ,GAAU,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@digital2analogue2/parsimony-components",
3
+ "version": "0.1.0",
4
+ "description": "Framework-agnostic Lit web components for the River Romney design system",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./react": {
14
+ "types": "./dist/react.d.ts"
15
+ },
16
+ "./package.json": "./package.json"
17
+ },
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "test": "vitest run",
21
+ "test:watch": "vitest",
22
+ "cem": "cem analyze --litelement",
23
+ "figma:connect": "figma connect publish",
24
+ "storybook": "storybook dev -p 6006",
25
+ "build-storybook": "storybook build",
26
+ "story-ui": "story-ui start",
27
+ "test:visual": "playwright test",
28
+ "test:visual:update": "playwright test --update-snapshots",
29
+ "prepack": "npm run build"
30
+ },
31
+ "peerDependencies": {
32
+ "lit": "^3.0.0 || ^4.0.0"
33
+ },
34
+ "devDependencies": {
35
+ "@custom-elements-manifest/analyzer": "^0.11.0",
36
+ "@figma/code-connect": "^1.4.8",
37
+ "@playwright/test": "^1.49.0",
38
+ "@storybook/addon-a11y": "^10.4.6",
39
+ "@storybook/addon-docs": "^10.4.6",
40
+ "@storybook/web-components-vite": "^10.4.6",
41
+ "@tpitre/story-ui": "^4.16.12",
42
+ "http-server": "^14.1.1",
43
+ "jsdom": "^29.1.1",
44
+ "lit": "^3.2.0",
45
+ "storybook": "^10.4.4",
46
+ "typescript": "^6.0.3",
47
+ "vite": "^8.1.3",
48
+ "vitest": "^4.1.9",
49
+ "vitest-axe": "^1.0.0-pre.3"
50
+ },
51
+ "customElements": "custom-elements.json",
52
+ "publishConfig": {
53
+ "access": "public"
54
+ },
55
+ "files": [
56
+ "dist",
57
+ "custom-elements.json",
58
+ "src/react.d.ts"
59
+ ],
60
+ "repository": {
61
+ "type": "git",
62
+ "url": "https://github.com/digital2analogue/parsimony.git",
63
+ "directory": "packages/components"
64
+ }
65
+ }
package/src/react.d.ts ADDED
@@ -0,0 +1,199 @@
1
+ /**
2
+ * JSX IntrinsicElements declarations for React consumers.
3
+ *
4
+ * React 19 passes unknown props to custom elements natively, but
5
+ * TypeScript still needs these declarations for autocomplete and
6
+ * type checking in TSX files.
7
+ *
8
+ * Usage in a React project:
9
+ * /// <reference types="@digital2analogue2/parsimony-components/react" />
10
+ * // or add to tsconfig: "types": ["@digital2analogue2/parsimony-components/react"]
11
+ */
12
+
13
+ import type { RrAlert } from './alert/alert.js';
14
+ import type { RrAvatar } from './avatar/avatar.js';
15
+ import type { RrBadge } from './badge/badge.js';
16
+ import type { RrButton } from './button/button.js';
17
+ import type { RrCard } from './card/card.js';
18
+ import type { RrCheckbox } from './checkbox/checkbox.js';
19
+ import type { RrDialog } from './dialog/dialog.js';
20
+ import type { RrIcon } from './icon/icon.js';
21
+ import type { RrInput } from './input/input.js';
22
+ import type { RrLink } from './link/link.js';
23
+ import type { RrProgress } from './progress/progress.js';
24
+ import type { RrRadio } from './radio/radio.js';
25
+ import type { RrRadioGroup } from './radio/radio-group.js';
26
+ import type { RrSelect, SelectOption } from './select/select.js';
27
+ import type { RrSkeleton } from './skeleton/skeleton.js';
28
+ import type { RrSpinner } from './spinner/spinner.js';
29
+ import type { RrTab } from './tabs/tab.js';
30
+ import type { RrTabList } from './tabs/tab-list.js';
31
+ import type { RrTag } from './tag/tag.js';
32
+ import type { RrTextarea } from './textarea/textarea.js';
33
+ import type { RrToggle } from './toggle/toggle.js';
34
+
35
+ type LitProps<T> = Partial<Omit<T, keyof HTMLElement>> & React.HTMLAttributes<HTMLElement>;
36
+
37
+ declare global {
38
+ // eslint-disable-next-line @typescript-eslint/no-namespace
39
+ namespace JSX {
40
+ interface IntrinsicElements {
41
+ 'rr-alert': LitProps<RrAlert> & {
42
+ variant?: RrAlert['variant'];
43
+ title?: string;
44
+ dismissible?: boolean;
45
+ children?: React.ReactNode;
46
+ onClose?: (e: Event) => void;
47
+ };
48
+ 'rr-avatar': LitProps<RrAvatar> & {
49
+ size?: RrAvatar['size'];
50
+ color?: RrAvatar['color'];
51
+ name?: string;
52
+ src?: string;
53
+ };
54
+ 'rr-badge': LitProps<RrBadge> & {
55
+ variant?: RrBadge['variant'];
56
+ children?: React.ReactNode;
57
+ };
58
+ 'rr-button': LitProps<RrButton> & {
59
+ variant?: RrButton['variant'];
60
+ size?: RrButton['size'];
61
+ disabled?: boolean;
62
+ loading?: boolean;
63
+ type?: 'button' | 'submit' | 'reset';
64
+ 'aria-label'?: string;
65
+ children?: React.ReactNode;
66
+ };
67
+ 'rr-card': LitProps<RrCard> & {
68
+ padding?: RrCard['padding'];
69
+ children?: React.ReactNode;
70
+ };
71
+ 'rr-checkbox': LitProps<RrCheckbox> & {
72
+ name?: string;
73
+ value?: string;
74
+ checked?: boolean;
75
+ indeterminate?: boolean;
76
+ disabled?: boolean;
77
+ label?: string;
78
+ children?: React.ReactNode;
79
+ onChange?: (e: Event) => void;
80
+ };
81
+ 'rr-dialog': LitProps<RrDialog> & {
82
+ heading?: string;
83
+ open?: boolean;
84
+ 'close-on-backdrop'?: boolean;
85
+ children?: React.ReactNode;
86
+ 'onRr-dialog-close'?: (e: CustomEvent) => void;
87
+ };
88
+ 'rr-icon': LitProps<RrIcon> & {
89
+ size?: RrIcon['size'];
90
+ label?: string;
91
+ children?: React.ReactNode;
92
+ };
93
+ 'rr-input': LitProps<RrInput> & {
94
+ type?: string;
95
+ name?: string;
96
+ value?: string;
97
+ placeholder?: string;
98
+ label?: string;
99
+ 'helper-text'?: string;
100
+ 'error-text'?: string;
101
+ required?: boolean;
102
+ disabled?: boolean;
103
+ autocomplete?: string;
104
+ onInput?: (e: Event) => void;
105
+ onChange?: (e: Event) => void;
106
+ };
107
+ 'rr-link': LitProps<RrLink> & {
108
+ href?: string;
109
+ target?: string;
110
+ color?: RrLink['color'];
111
+ children?: React.ReactNode;
112
+ };
113
+ 'rr-radio': LitProps<RrRadio> & {
114
+ value?: string;
115
+ checked?: boolean;
116
+ disabled?: boolean;
117
+ children?: React.ReactNode;
118
+ 'onRr-radio-change'?: (e: CustomEvent) => void;
119
+ };
120
+ 'rr-radio-group': LitProps<RrRadioGroup> & {
121
+ name?: string;
122
+ value?: string;
123
+ label?: string;
124
+ orientation?: RrRadioGroup['orientation'];
125
+ disabled?: boolean;
126
+ 'error-text'?: string;
127
+ children?: React.ReactNode;
128
+ onChange?: (e: Event) => void;
129
+ };
130
+ 'rr-skeleton': LitProps<RrSkeleton> & {
131
+ variant?: RrSkeleton['variant'];
132
+ width?: string;
133
+ height?: string;
134
+ };
135
+ 'rr-select': LitProps<RrSelect> & {
136
+ name?: string;
137
+ value?: string;
138
+ options?: SelectOption[];
139
+ placeholder?: string;
140
+ label?: string;
141
+ 'helper-text'?: string;
142
+ 'error-text'?: string;
143
+ required?: boolean;
144
+ disabled?: boolean;
145
+ onChange?: (e: Event) => void;
146
+ };
147
+ 'rr-progress': LitProps<RrProgress> & {
148
+ value?: number;
149
+ max?: number;
150
+ indeterminate?: boolean;
151
+ label?: string;
152
+ };
153
+ 'rr-spinner': LitProps<RrSpinner> & {
154
+ size?: RrSpinner['size'];
155
+ label?: string;
156
+ };
157
+ 'rr-tab': LitProps<RrTab> & {
158
+ value?: string;
159
+ selected?: boolean;
160
+ disabled?: boolean;
161
+ children?: React.ReactNode;
162
+ };
163
+ 'rr-tab-list': LitProps<RrTabList> & {
164
+ label?: string;
165
+ value?: string;
166
+ children?: React.ReactNode;
167
+ onChange?: (e: CustomEvent<{ value: string }>) => void;
168
+ };
169
+ 'rr-tag': LitProps<RrTag> & {
170
+ variant?: RrTag['variant'];
171
+ children?: React.ReactNode;
172
+ };
173
+ 'rr-textarea': LitProps<RrTextarea> & {
174
+ name?: string;
175
+ value?: string;
176
+ placeholder?: string;
177
+ label?: string;
178
+ rows?: number;
179
+ 'helper-text'?: string;
180
+ 'error-text'?: string;
181
+ required?: boolean;
182
+ disabled?: boolean;
183
+ onInput?: (e: Event) => void;
184
+ onChange?: (e: Event) => void;
185
+ };
186
+ 'rr-toggle': LitProps<RrToggle> & {
187
+ name?: string;
188
+ value?: string;
189
+ checked?: boolean;
190
+ disabled?: boolean;
191
+ label?: string;
192
+ children?: React.ReactNode;
193
+ onChange?: (e: Event) => void;
194
+ };
195
+ }
196
+ }
197
+ }
198
+
199
+ export {};