@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,38 @@
1
+ import { LitElement } from 'lit';
2
+ export type TagVariant = 'default' | 'subtle';
3
+ /**
4
+ * An outlined, uppercase tag / chip component.
5
+ *
6
+ * The deliberate inverse of `<rr-badge>`: where the badge is a filled pill for
7
+ * status, the tag is a square-cornered (radius.sm), transparent-filled, bordered
8
+ * label for skills, categories, and metadata. Content is rendered UPPERCASE with
9
+ * all-caps letter-spacing, so authors pass normal-case text.
10
+ *
11
+ * Uses component-level design tokens for all visual properties. Brand theming
12
+ * cascades automatically via CSS custom properties on `:root`.
13
+ *
14
+ * @slot - Tag label text
15
+ * @cssprop --component-tag-{variant}-background
16
+ * @cssprop --component-tag-{variant}-foreground
17
+ * @cssprop --component-tag-{variant}-border
18
+ * @cssprop --component-tag-radius
19
+ * @cssprop --component-tag-padding-x
20
+ * @cssprop --component-tag-padding-y
21
+ */
22
+ export declare class RrTag extends LitElement {
23
+ static styles: import("lit").CSSResult;
24
+ /**
25
+ * Emphasis level. `default` is the standard visible outline (alt text,
26
+ * muted-foreground border) that reads correctly standalone — use it for skill
27
+ * tags and most labels. `subtle` is a quieter treatment (muted text,
28
+ * elevated-border) for dense or secondary contexts.
29
+ */
30
+ variant: TagVariant;
31
+ render(): import("lit-html").TemplateResult<1>;
32
+ }
33
+ declare global {
34
+ interface HTMLElementTagNameMap {
35
+ 'rr-tag': RrTag;
36
+ }
37
+ }
38
+ //# sourceMappingURL=tag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/tag/tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9C;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBACa,KAAM,SAAQ,UAAU;IACnC,MAAM,CAAC,MAAM,0BAoBX;IAEF;;;;;OAKG;IAEH,OAAO,EAAE,UAAU,CAAa;IAEhC,MAAM;CAGP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,QAAQ,EAAE,KAAK,CAAC;KACjB;CACF"}
@@ -0,0 +1,71 @@
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
+ * An outlined, uppercase tag / chip component.
11
+ *
12
+ * The deliberate inverse of `<rr-badge>`: where the badge is a filled pill for
13
+ * status, the tag is a square-cornered (radius.sm), transparent-filled, bordered
14
+ * label for skills, categories, and metadata. Content is rendered UPPERCASE with
15
+ * all-caps letter-spacing, so authors pass normal-case text.
16
+ *
17
+ * Uses component-level design tokens for all visual properties. Brand theming
18
+ * cascades automatically via CSS custom properties on `:root`.
19
+ *
20
+ * @slot - Tag label text
21
+ * @cssprop --component-tag-{variant}-background
22
+ * @cssprop --component-tag-{variant}-foreground
23
+ * @cssprop --component-tag-{variant}-border
24
+ * @cssprop --component-tag-radius
25
+ * @cssprop --component-tag-padding-x
26
+ * @cssprop --component-tag-padding-y
27
+ */
28
+ let RrTag = class RrTag extends LitElement {
29
+ constructor() {
30
+ super(...arguments);
31
+ /**
32
+ * Emphasis level. `default` is the standard visible outline (alt text,
33
+ * muted-foreground border) that reads correctly standalone — use it for skill
34
+ * tags and most labels. `subtle` is a quieter treatment (muted text,
35
+ * elevated-border) for dense or secondary contexts.
36
+ */
37
+ this.variant = 'default';
38
+ }
39
+ render() {
40
+ return html `<slot></slot>`;
41
+ }
42
+ };
43
+ RrTag.styles = css `
44
+ :host {
45
+ display: inline-flex;
46
+ align-items: center;
47
+ white-space: nowrap;
48
+ text-transform: uppercase;
49
+ letter-spacing: var(--letter-spacing-all-caps);
50
+ font: var(--font-label-small);
51
+ border-radius: var(--component-tag-radius);
52
+ padding: var(--component-tag-padding-y) var(--component-tag-padding-x);
53
+ border: 1px solid var(--component-tag-default-border);
54
+ background: var(--component-tag-default-background);
55
+ color: var(--component-tag-default-foreground);
56
+ }
57
+
58
+ :host([variant='subtle']) {
59
+ background: var(--component-tag-subtle-background);
60
+ color: var(--component-tag-subtle-foreground);
61
+ border-color: var(--component-tag-subtle-border);
62
+ }
63
+ `;
64
+ __decorate([
65
+ property({ reflect: true })
66
+ ], RrTag.prototype, "variant", void 0);
67
+ RrTag = __decorate([
68
+ customElement('rr-tag')
69
+ ], RrTag);
70
+ export { RrTag };
71
+ //# sourceMappingURL=tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/tag/tag.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;;;;;;;;;;;;;;;;;;GAkBG;AAEI,IAAM,KAAK,GAAX,MAAM,KAAM,SAAQ,UAAU;IAA9B;;QAuBL;;;;;WAKG;QAEH,YAAO,GAAe,SAAS,CAAC;IAKlC,CAAC;IAHC,MAAM;QACJ,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;;AAjCM,YAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;GAoBlB,AApBY,CAoBX;AASF;IADC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;sCACI;AA9BrB,KAAK;IADjB,aAAa,CAAC,QAAQ,CAAC;GACX,KAAK,CAmCjB"}
@@ -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 Subtle: Story;
8
+ export declare const AllVariants: Story;
9
+ export declare const SkillTags: Story;
10
+ //# sourceMappingURL=tag.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.stories.d.ts","sourceRoot":"","sources":["../../src/tag/tag.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,yCAAyC,CAAC;AAIjD,QAAA,MAAM,IAAI,EAAE,IASX,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,eAAO,MAAM,MAAM,EAAE,KAAkE,CAAC;AAExF,eAAO,MAAM,WAAW,EAAE,KAMzB,CAAC;AAIF,eAAO,MAAM,SAAS,EAAE,KAevB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { html } from 'lit';
2
+ // Barrel side-effect import registers every rr-* element (see story-ui.config.js).
3
+ import '@digital2analogue2/parsimony-components';
4
+ const VARIANTS = ['default', 'subtle'];
5
+ const meta = {
6
+ title: 'Components/Tag',
7
+ component: 'rr-tag',
8
+ argTypes: {
9
+ variant: { control: 'select', options: VARIANTS },
10
+ label: { control: 'text' },
11
+ },
12
+ args: { variant: 'default', label: 'Design Systems' },
13
+ render: ({ variant, label }) => html `<rr-tag variant=${variant}>${label}</rr-tag>`,
14
+ };
15
+ export default meta;
16
+ export const Default = {};
17
+ export const Subtle = { args: { variant: 'subtle', label: 'Decision Tooling' } };
18
+ export const AllVariants = {
19
+ render: () => html `
20
+ <div style="display: flex; flex-wrap: wrap; gap: var(--spacing-inline);">
21
+ ${VARIANTS.map((v) => html `<rr-tag variant=${v}>${v}</rr-tag>`)}
22
+ </div>
23
+ `,
24
+ };
25
+ // Mirrors the skill-tag row on riverromney.design/about that motivated this
26
+ // component — the outlined uppercase pattern badge was never meant to cover.
27
+ export const SkillTags = {
28
+ render: () => html `
29
+ <div style="display: flex; flex-wrap: wrap; gap: var(--spacing-tight);">
30
+ ${[
31
+ 'Design Systems',
32
+ 'B2B / Enterprise UX',
33
+ 'Compliance UX',
34
+ 'Decision Tooling',
35
+ 'Figma',
36
+ 'Research',
37
+ 'Prototyping',
38
+ 'Cross-functional Leadership',
39
+ ].map((s) => html `<rr-tag>${s}</rr-tag>`)}
40
+ </div>
41
+ `,
42
+ };
43
+ //# sourceMappingURL=tag.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.stories.js","sourceRoot":"","sources":["../../src/tag/tag.stories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,mFAAmF;AACnF,OAAO,yCAAyC,CAAC;AAEjD,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAU,CAAC;AAEhD,MAAM,IAAI,GAAS;IACjB,KAAK,EAAE,gBAAgB;IACvB,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE;QACR,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;QACjD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;KAC3B;IACD,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE;IACrD,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAA,mBAAmB,OAAO,IAAI,KAAK,WAAW;CACnF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,OAAO,GAAU,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,MAAM,GAAU,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC;AAExF,MAAM,CAAC,MAAM,WAAW,GAAU;IAChC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAA;;QAEZ,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAA,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC;;GAElE;CACF,CAAC;AAEF,4EAA4E;AAC5E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,SAAS,GAAU;IAC9B,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAA;;QAEZ;QACA,gBAAgB;QAChB,qBAAqB;QACrB,eAAe;QACf,kBAAkB;QAClB,OAAO;QACP,UAAU;QACV,aAAa;QACb,6BAA6B;KAC9B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAA,WAAW,CAAC,WAAW,CAAC;;GAE5C;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import 'vitest-axe/extend-expect';
2
+ //# sourceMappingURL=test-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import 'vitest-axe/extend-expect';
2
+ //# sourceMappingURL=test-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-setup.js","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * A form-associated multi-line text area with label, helper text, and error state.
4
+ *
5
+ * Mirrors `<rr-input>` in API and token usage. Uses `ElementInternals` for
6
+ * native form participation and `delegatesFocus` so the host forwards focus
7
+ * to the inner `<textarea>`.
8
+ *
9
+ * @slot label - Optional override for the label text
10
+ * @fires input - When the value changes (mirrors native input event)
11
+ * @fires change - When the value is committed (mirrors native change event)
12
+ * @csspart label - The label element
13
+ * @csspart textarea - The inner textarea element
14
+ * @csspart helper - The helper text container
15
+ * @csspart error - The error message container
16
+ */
17
+ export declare class RrTextarea extends LitElement {
18
+ static formAssociated: boolean;
19
+ static shadowRootOptions: {
20
+ delegatesFocus: boolean;
21
+ clonable?: boolean;
22
+ customElementRegistry?: CustomElementRegistry | null;
23
+ mode: ShadowRootMode;
24
+ serializable?: boolean;
25
+ slotAssignment?: SlotAssignmentMode;
26
+ };
27
+ static styles: import("lit").CSSResult;
28
+ /** Form field name submitted with the form value. */
29
+ name: string;
30
+ /** Current text value; set as the form value via ElementInternals. */
31
+ value: string;
32
+ /** Placeholder text shown when empty. */
33
+ placeholder: string;
34
+ /** Label text; renders a label element when non-empty. */
35
+ label: string;
36
+ /** Helper text shown below the field (attribute: helper-text). Hidden when an error is present. */
37
+ helperText: string;
38
+ /** Error message (attribute: error-text); when set, marks the field invalid and replaces the helper text. */
39
+ errorText: string;
40
+ /** Number of visible text rows on the inner textarea. */
41
+ rows: number;
42
+ /** Marks the field required; shows a required indicator. Reflected. */
43
+ required: boolean;
44
+ /** Disables the field. Reflected. */
45
+ disabled: boolean;
46
+ private _textarea;
47
+ private _internals;
48
+ constructor();
49
+ private get _isInvalid();
50
+ updated(changed: Map<string, unknown>): void;
51
+ private _onInput;
52
+ private _onChange;
53
+ render(): import("lit-html").TemplateResult<1>;
54
+ }
55
+ declare global {
56
+ interface HTMLElementTagNameMap {
57
+ 'rr-textarea': RrTextarea;
58
+ }
59
+ }
60
+ //# sourceMappingURL=textarea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../src/textarea/textarea.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD;;;;;;;;;;;;;;GAcG;AACH,qBACa,UAAW,SAAQ,UAAU;IACxC,MAAM,CAAC,cAAc,UAAQ;IAE7B,MAAM,CAAC,iBAAiB;;;;;;;MAGtB;IAEF,MAAM,CAAC,MAAM,0BA8EX;IAEF,qDAAqD;IACzC,IAAI,SAAM;IACtB,sEAAsE;IAC1D,KAAK,SAAM;IACvB,yCAAyC;IAC7B,WAAW,SAAM;IAC7B,0DAA0D;IAC9C,KAAK,SAAM;IACvB,mGAAmG;IAC3D,UAAU,SAAM;IACxD,6GAA6G;IACtE,SAAS,SAAM;IACtD,yDAAyD;IAC7B,IAAI,SAAK;IACrC,uEAAuE;IAC3B,QAAQ,UAAS;IAC7D,qCAAqC;IACO,QAAQ,UAAS;IAE1C,OAAO,CAAC,SAAS,CAAuB;IAE3D,OAAO,CAAC,UAAU,CAAmB;;IAOrC,OAAO,KAAK,UAAU,GAErB;IAEQ,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAmB9C,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,SAAS;IAOjB,MAAM;CAoCP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;KAC3B;CACF"}
@@ -0,0 +1,232 @@
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, nothing } from 'lit';
8
+ import { customElement, property, query } from 'lit/decorators.js';
9
+ import { live } from 'lit/directives/live.js';
10
+ /**
11
+ * A form-associated multi-line text area with label, helper text, and error state.
12
+ *
13
+ * Mirrors `<rr-input>` in API and token usage. Uses `ElementInternals` for
14
+ * native form participation and `delegatesFocus` so the host forwards focus
15
+ * to the inner `<textarea>`.
16
+ *
17
+ * @slot label - Optional override for the label text
18
+ * @fires input - When the value changes (mirrors native input event)
19
+ * @fires change - When the value is committed (mirrors native change event)
20
+ * @csspart label - The label element
21
+ * @csspart textarea - The inner textarea element
22
+ * @csspart helper - The helper text container
23
+ * @csspart error - The error message container
24
+ */
25
+ let RrTextarea = class RrTextarea extends LitElement {
26
+ constructor() {
27
+ super();
28
+ /** Form field name submitted with the form value. */
29
+ this.name = '';
30
+ /** Current text value; set as the form value via ElementInternals. */
31
+ this.value = '';
32
+ /** Placeholder text shown when empty. */
33
+ this.placeholder = '';
34
+ /** Label text; renders a label element when non-empty. */
35
+ this.label = '';
36
+ /** Helper text shown below the field (attribute: helper-text). Hidden when an error is present. */
37
+ this.helperText = '';
38
+ /** Error message (attribute: error-text); when set, marks the field invalid and replaces the helper text. */
39
+ this.errorText = '';
40
+ /** Number of visible text rows on the inner textarea. */
41
+ this.rows = 3;
42
+ /** Marks the field required; shows a required indicator. Reflected. */
43
+ this.required = false;
44
+ /** Disables the field. Reflected. */
45
+ this.disabled = false;
46
+ this._internals = this.attachInternals();
47
+ }
48
+ get _isInvalid() {
49
+ return this.errorText.length > 0;
50
+ }
51
+ updated(changed) {
52
+ if (changed.has('value')) {
53
+ this._internals.setFormValue?.(this.value);
54
+ }
55
+ if (changed.has('errorText')) {
56
+ if (this._isInvalid) {
57
+ this.setAttribute('data-invalid', '');
58
+ this._internals.setValidity?.({ customError: true }, this.errorText, this._textarea);
59
+ }
60
+ else {
61
+ this.removeAttribute('data-invalid');
62
+ this._internals.setValidity?.({});
63
+ }
64
+ }
65
+ }
66
+ _onInput(e) {
67
+ const ta = e.target;
68
+ this.value = ta.value;
69
+ this._internals.setFormValue?.(this.value);
70
+ this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));
71
+ }
72
+ _onChange(e) {
73
+ const ta = e.target;
74
+ this.value = ta.value;
75
+ this._internals.setFormValue?.(this.value);
76
+ this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));
77
+ }
78
+ render() {
79
+ const hasLabel = this.label.length > 0;
80
+ const describedBy = this._isInvalid ? 'error' : this.helperText ? 'helper' : undefined;
81
+ return html `
82
+ ${hasLabel
83
+ ? html `<label part="label" for="textarea">
84
+ <slot name="label">${this.label}</slot>${this.required
85
+ ? html `<span class="required" aria-hidden="true">*</span>`
86
+ : nothing}
87
+ </label>`
88
+ : nothing}
89
+ <textarea
90
+ part="textarea"
91
+ id="textarea"
92
+ .value=${live(this.value)}
93
+ .placeholder=${this.placeholder}
94
+ .name=${this.name}
95
+ .disabled=${this.disabled}
96
+ .required=${this.required}
97
+ .rows=${this.rows}
98
+ aria-required=${this.required ? 'true' : nothing}
99
+ aria-invalid=${this._isInvalid ? 'true' : nothing}
100
+ aria-errormessage=${this._isInvalid ? 'error' : nothing}
101
+ aria-describedby=${describedBy || nothing}
102
+ @input=${this._onInput}
103
+ @change=${this._onChange}
104
+ ></textarea>
105
+ ${this.helperText && !this._isInvalid
106
+ ? html `<div id="helper" part="helper" class="helper">${this.helperText}</div>`
107
+ : nothing}
108
+ ${this._isInvalid
109
+ ? html `<div id="error" part="error" class="error" role="alert">${this.errorText}</div>`
110
+ : nothing}
111
+ `;
112
+ }
113
+ };
114
+ RrTextarea.formAssociated = true;
115
+ RrTextarea.shadowRootOptions = {
116
+ ...LitElement.shadowRootOptions,
117
+ delegatesFocus: true,
118
+ };
119
+ RrTextarea.styles = css `
120
+ :host {
121
+ display: block;
122
+ }
123
+
124
+ label {
125
+ display: block;
126
+ font: var(--font-label-medium);
127
+ color: var(--component-input-foreground-label);
128
+ margin-bottom: 4px;
129
+ }
130
+
131
+ .required {
132
+ color: var(--component-input-foreground-label-required);
133
+ margin-left: 2px;
134
+ }
135
+
136
+ textarea {
137
+ display: block;
138
+ width: 100%;
139
+ box-sizing: border-box;
140
+ font: var(--font-body-large);
141
+ font-family: inherit;
142
+ color: var(--component-input-foreground-value);
143
+ background: var(--component-input-background-default);
144
+ border: 1px solid var(--component-input-border-default);
145
+ border-radius: var(--component-input-radius);
146
+ padding: var(--component-input-padding-y) var(--component-input-padding-x);
147
+ outline: none;
148
+ resize: vertical;
149
+ min-height: 80px;
150
+ transition: border-color var(--motion-duration-instant) var(--motion-easing-default);
151
+ }
152
+
153
+ textarea::placeholder {
154
+ color: var(--component-input-foreground-placeholder);
155
+ }
156
+
157
+ textarea:hover {
158
+ border-color: var(--component-input-border-hover);
159
+ }
160
+
161
+ textarea:focus {
162
+ border-color: var(--component-input-border-focus);
163
+ box-shadow: 0 0 0 1px var(--component-input-border-focus);
164
+ }
165
+
166
+ :host([disabled]) textarea {
167
+ background: var(--component-input-background-disabled);
168
+ border-color: var(--component-input-border-disabled);
169
+ color: var(--component-input-foreground-disabled);
170
+ cursor: not-allowed;
171
+ resize: none;
172
+ }
173
+
174
+ :host([disabled]) label {
175
+ color: var(--component-input-foreground-disabled);
176
+ }
177
+
178
+ :host([data-invalid]) textarea {
179
+ border-color: var(--component-input-border-error);
180
+ }
181
+
182
+ :host([data-invalid]) textarea:focus {
183
+ box-shadow: 0 0 0 1px var(--component-input-border-error);
184
+ }
185
+
186
+ .helper {
187
+ font: var(--font-label-small);
188
+ color: var(--component-input-foreground-helper);
189
+ margin-top: 4px;
190
+ }
191
+
192
+ .error {
193
+ font: var(--font-label-small);
194
+ color: var(--component-input-foreground-error);
195
+ margin-top: 4px;
196
+ }
197
+ `;
198
+ __decorate([
199
+ property()
200
+ ], RrTextarea.prototype, "name", void 0);
201
+ __decorate([
202
+ property()
203
+ ], RrTextarea.prototype, "value", void 0);
204
+ __decorate([
205
+ property()
206
+ ], RrTextarea.prototype, "placeholder", void 0);
207
+ __decorate([
208
+ property()
209
+ ], RrTextarea.prototype, "label", void 0);
210
+ __decorate([
211
+ property({ attribute: 'helper-text' })
212
+ ], RrTextarea.prototype, "helperText", void 0);
213
+ __decorate([
214
+ property({ attribute: 'error-text' })
215
+ ], RrTextarea.prototype, "errorText", void 0);
216
+ __decorate([
217
+ property({ type: Number })
218
+ ], RrTextarea.prototype, "rows", void 0);
219
+ __decorate([
220
+ property({ type: Boolean, reflect: true })
221
+ ], RrTextarea.prototype, "required", void 0);
222
+ __decorate([
223
+ property({ type: Boolean, reflect: true })
224
+ ], RrTextarea.prototype, "disabled", void 0);
225
+ __decorate([
226
+ query('textarea')
227
+ ], RrTextarea.prototype, "_textarea", void 0);
228
+ RrTextarea = __decorate([
229
+ customElement('rr-textarea')
230
+ ], RrTextarea);
231
+ export { RrTextarea };
232
+ //# sourceMappingURL=textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../src/textarea/textarea.ts"],"names":[],"mappings":"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"}
@@ -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 WithHelper: Story;
8
+ export declare const WithError: Story;
9
+ export declare const Disabled: Story;
10
+ //# sourceMappingURL=textarea.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.stories.d.ts","sourceRoot":"","sources":["../../src/textarea/textarea.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,yCAAyC,CAAC;AAEjD,QAAA,MAAM,IAAI,EAAE,IAsCX,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,eAAO,MAAM,UAAU,EAAE,KAAuD,CAAC;AAEjF,eAAO,MAAM,SAAS,EAAE,KAA0D,CAAC;AAEnF,eAAO,MAAM,QAAQ,EAAE,KAAgE,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { html } from 'lit';
2
+ import '@digital2analogue2/parsimony-components';
3
+ const meta = {
4
+ title: 'Components/Textarea',
5
+ component: 'rr-textarea',
6
+ argTypes: {
7
+ name: { control: 'text' },
8
+ value: { control: 'text' },
9
+ placeholder: { control: 'text' },
10
+ label: { control: 'text' },
11
+ helperText: { control: 'text' },
12
+ errorText: { control: 'text' },
13
+ rows: { control: { type: 'number' } },
14
+ required: { control: 'boolean' },
15
+ disabled: { control: 'boolean' },
16
+ },
17
+ args: {
18
+ name: '',
19
+ value: '',
20
+ placeholder: 'Share your thoughts…',
21
+ label: 'Feedback',
22
+ helperText: '',
23
+ errorText: '',
24
+ rows: 3,
25
+ required: false,
26
+ disabled: false,
27
+ },
28
+ render: ({ name, value, placeholder, label, helperText, errorText, rows, required, disabled }) => html `
29
+ <rr-textarea
30
+ name=${name}
31
+ value=${value}
32
+ placeholder=${placeholder}
33
+ label=${label}
34
+ helper-text=${helperText}
35
+ error-text=${errorText}
36
+ rows=${rows}
37
+ ?required=${required}
38
+ ?disabled=${disabled}
39
+ ></rr-textarea>
40
+ `,
41
+ };
42
+ export default meta;
43
+ export const Default = {};
44
+ export const WithHelper = { args: { helperText: 'Max 500 characters.' } };
45
+ export const WithError = { args: { errorText: 'This field is required.' } };
46
+ export const Disabled = { args: { disabled: true, value: 'Cannot edit this.' } };
47
+ //# sourceMappingURL=textarea.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.stories.js","sourceRoot":"","sources":["../../src/textarea/textarea.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,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QACzB,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QAC1B,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QAChC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QAC1B,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QAC/B,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QAC9B,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QACrC,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;QAChC,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;KACjC;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,EAAE;QACT,WAAW,EAAE,sBAAsB;QACnC,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;KAChB;IACD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,IAAI,CAAA;;aAE3F,IAAI;cACH,KAAK;oBACC,WAAW;cACjB,KAAK;oBACC,UAAU;mBACX,SAAS;aACf,IAAI;kBACC,QAAQ;kBACR,QAAQ;;GAEvB;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,OAAO,GAAU,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,UAAU,GAAU,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,qBAAqB,EAAE,EAAE,CAAC;AAEjF,MAAM,CAAC,MAAM,SAAS,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,yBAAyB,EAAE,EAAE,CAAC;AAEnF,MAAM,CAAC,MAAM,QAAQ,GAAU,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * A form-associated toggle switch for binary on/off settings.
4
+ *
5
+ * The pill-shaped track and sliding knob are rendered in shadow DOM;
6
+ * the hidden native `<input type="checkbox">` provides focus, keyboard,
7
+ * and label-click semantics. `ElementInternals` handles form participation.
8
+ *
9
+ * Usage:
10
+ * <rr-toggle name="darkMode" label="Dark mode" checked></rr-toggle>
11
+ * <rr-toggle name="notify">Email notifications</rr-toggle>
12
+ *
13
+ * @slot - Label text (alternative to the `label` property)
14
+ * @fires change - When the toggle state changes
15
+ * @csspart track - The pill-shaped track element
16
+ * @csspart knob - The sliding knob element
17
+ * @csspart label - The label text element
18
+ */
19
+ export declare class RrToggle extends LitElement {
20
+ static formAssociated: boolean;
21
+ static styles: import("lit").CSSResult;
22
+ /** On/off state. Reflected. */
23
+ checked: boolean;
24
+ /** Disables the toggle. Reflected. */
25
+ disabled: boolean;
26
+ /** Form value submitted when the toggle is on. */
27
+ value: string;
28
+ /** Form field name submitted with the form value. */
29
+ name: string;
30
+ /** Label text; falls back to slotted content when empty. */
31
+ label: string;
32
+ private _internals;
33
+ constructor();
34
+ updated(): void;
35
+ private _onChange;
36
+ render(): import("lit-html").TemplateResult<1>;
37
+ }
38
+ declare global {
39
+ interface HTMLElementTagNameMap {
40
+ 'rr-toggle': RrToggle;
41
+ }
42
+ }
43
+ //# sourceMappingURL=toggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../src/toggle/toggle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAGrD;;;;;;;;;;;;;;;;GAgBG;AACH,qBACa,QAAS,SAAQ,UAAU;IACtC,MAAM,CAAC,cAAc,UAAQ;IAE7B,MAAM,CAAC,MAAM,0BA6FX;IAEF,+BAA+B;IACa,OAAO,UAAS;IAC5D,sCAAsC;IACM,QAAQ,UAAS;IAC7D,kDAAkD;IACtC,KAAK,SAAQ;IACzB,qDAAqD;IACzC,IAAI,SAAM;IACtB,4DAA4D;IAChD,KAAK,SAAM;IAEvB,OAAO,CAAC,UAAU,CAAmB;;IAO5B,OAAO;IAIhB,OAAO,CAAC,SAAS;IAOjB,MAAM;CAuBP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,QAAQ,CAAC;KACvB;CACF"}