@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.
- package/custom-elements.json +3751 -0
- package/dist/alert/alert.d.ts +36 -0
- package/dist/alert/alert.d.ts.map +1 -0
- package/dist/alert/alert.js +179 -0
- package/dist/alert/alert.js.map +1 -0
- package/dist/alert/alert.stories.d.ts +12 -0
- package/dist/alert/alert.stories.d.ts.map +1 -0
- package/dist/alert/alert.stories.js +59 -0
- package/dist/alert/alert.stories.js.map +1 -0
- package/dist/avatar/avatar.d.ts +37 -0
- package/dist/avatar/avatar.d.ts.map +1 -0
- package/dist/avatar/avatar.js +150 -0
- package/dist/avatar/avatar.js.map +1 -0
- package/dist/avatar/avatar.stories.d.ts +10 -0
- package/dist/avatar/avatar.stories.d.ts.map +1 -0
- package/dist/avatar/avatar.stories.js +56 -0
- package/dist/avatar/avatar.stories.js.map +1 -0
- package/dist/badge/badge.d.ts +31 -0
- package/dist/badge/badge.d.ts.map +1 -0
- package/dist/badge/badge.js +104 -0
- package/dist/badge/badge.js.map +1 -0
- package/dist/badge/badge.stories.d.ts +9 -0
- package/dist/badge/badge.stories.d.ts.map +1 -0
- package/dist/badge/badge.stories.js +35 -0
- package/dist/badge/badge.stories.js.map +1 -0
- package/dist/button/button.d.ts +50 -0
- package/dist/button/button.d.ts.map +1 -0
- package/dist/button/button.js +237 -0
- package/dist/button/button.js.map +1 -0
- package/dist/button/button.stories.d.ts +12 -0
- package/dist/button/button.stories.d.ts.map +1 -0
- package/dist/button/button.stories.js +44 -0
- package/dist/button/button.stories.js.map +1 -0
- package/dist/card/card.d.ts +32 -0
- package/dist/card/card.d.ts.map +1 -0
- package/dist/card/card.js +107 -0
- package/dist/card/card.js.map +1 -0
- package/dist/card/card.stories.d.ts +9 -0
- package/dist/card/card.stories.d.ts.map +1 -0
- package/dist/card/card.stories.js +39 -0
- package/dist/card/card.stories.js.map +1 -0
- package/dist/checkbox/checkbox.d.ts +44 -0
- package/dist/checkbox/checkbox.d.ts.map +1 -0
- package/dist/checkbox/checkbox.js +201 -0
- package/dist/checkbox/checkbox.js.map +1 -0
- package/dist/checkbox/checkbox.stories.d.ts +10 -0
- package/dist/checkbox/checkbox.stories.d.ts.map +1 -0
- package/dist/checkbox/checkbox.stories.js +38 -0
- package/dist/checkbox/checkbox.stories.js.map +1 -0
- package/dist/dialog/dialog.d.ts +51 -0
- package/dist/dialog/dialog.d.ts.map +1 -0
- package/dist/dialog/dialog.js +234 -0
- package/dist/dialog/dialog.js.map +1 -0
- package/dist/dialog/dialog.stories.d.ts +7 -0
- package/dist/dialog/dialog.stories.d.ts.map +1 -0
- package/dist/dialog/dialog.stories.js +30 -0
- package/dist/dialog/dialog.stories.js.map +1 -0
- package/dist/icon/icon.d.ts +40 -0
- package/dist/icon/icon.d.ts.map +1 -0
- package/dist/icon/icon.js +99 -0
- package/dist/icon/icon.js.map +1 -0
- package/dist/icon/icon.stories.d.ts +9 -0
- package/dist/icon/icon.stories.d.ts.map +1 -0
- package/dist/icon/icon.stories.js +41 -0
- package/dist/icon/icon.stories.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/input/input.d.ts +61 -0
- package/dist/input/input.d.ts.map +1 -0
- package/dist/input/input.js +233 -0
- package/dist/input/input.js.map +1 -0
- package/dist/input/input.stories.d.ts +10 -0
- package/dist/input/input.stories.d.ts.map +1 -0
- package/dist/input/input.stories.js +48 -0
- package/dist/input/input.stories.js.map +1 -0
- package/dist/link/link.d.ts +39 -0
- package/dist/link/link.d.ts.map +1 -0
- package/dist/link/link.js +112 -0
- package/dist/link/link.js.map +1 -0
- package/dist/link/link.stories.d.ts +9 -0
- package/dist/link/link.stories.d.ts.map +1 -0
- package/dist/link/link.stories.js +44 -0
- package/dist/link/link.stories.js.map +1 -0
- package/dist/progress/progress.d.ts +35 -0
- package/dist/progress/progress.d.ts.map +1 -0
- package/dist/progress/progress.js +116 -0
- package/dist/progress/progress.js.map +1 -0
- package/dist/progress/progress.stories.d.ts +10 -0
- package/dist/progress/progress.stories.d.ts.map +1 -0
- package/dist/progress/progress.stories.js +32 -0
- package/dist/progress/progress.stories.js.map +1 -0
- package/dist/radio/radio-group.d.ts +53 -0
- package/dist/radio/radio-group.d.ts.map +1 -0
- package/dist/radio/radio-group.js +183 -0
- package/dist/radio/radio-group.js.map +1 -0
- package/dist/radio/radio-group.stories.d.ts +9 -0
- package/dist/radio/radio-group.stories.d.ts.map +1 -0
- package/dist/radio/radio-group.stories.js +44 -0
- package/dist/radio/radio-group.stories.js.map +1 -0
- package/dist/radio/radio.d.ts +29 -0
- package/dist/radio/radio.d.ts.map +1 -0
- package/dist/radio/radio.js +166 -0
- package/dist/radio/radio.js.map +1 -0
- package/dist/radio/radio.stories.d.ts +13 -0
- package/dist/radio/radio.stories.d.ts.map +1 -0
- package/dist/radio/radio.stories.js +28 -0
- package/dist/radio/radio.stories.js.map +1 -0
- package/dist/select/select.d.ts +63 -0
- package/dist/select/select.d.ts.map +1 -0
- package/dist/select/select.js +258 -0
- package/dist/select/select.js.map +1 -0
- package/dist/select/select.stories.d.ts +9 -0
- package/dist/select/select.stories.d.ts.map +1 -0
- package/dist/select/select.stories.js +46 -0
- package/dist/select/select.stories.js.map +1 -0
- package/dist/skeleton/skeleton.d.ts +39 -0
- package/dist/skeleton/skeleton.d.ts.map +1 -0
- package/dist/skeleton/skeleton.js +111 -0
- package/dist/skeleton/skeleton.js.map +1 -0
- package/dist/skeleton/skeleton.stories.d.ts +9 -0
- package/dist/skeleton/skeleton.stories.d.ts.map +1 -0
- package/dist/skeleton/skeleton.stories.js +36 -0
- package/dist/skeleton/skeleton.stories.js.map +1 -0
- package/dist/spinner/spinner.d.ts +29 -0
- package/dist/spinner/spinner.d.ts.map +1 -0
- package/dist/spinner/spinner.js +131 -0
- package/dist/spinner/spinner.js.map +1 -0
- package/dist/spinner/spinner.stories.d.ts +8 -0
- package/dist/spinner/spinner.stories.d.ts.map +1 -0
- package/dist/spinner/spinner.stories.js +29 -0
- package/dist/spinner/spinner.stories.js.map +1 -0
- package/dist/tabs/tab-list.d.ts +45 -0
- package/dist/tabs/tab-list.d.ts.map +1 -0
- package/dist/tabs/tab-list.js +150 -0
- package/dist/tabs/tab-list.js.map +1 -0
- package/dist/tabs/tab-list.stories.d.ts +7 -0
- package/dist/tabs/tab-list.stories.d.ts.map +1 -0
- package/dist/tabs/tab-list.stories.js +27 -0
- package/dist/tabs/tab-list.stories.js.map +1 -0
- package/dist/tabs/tab.d.ts +40 -0
- package/dist/tabs/tab.d.ts.map +1 -0
- package/dist/tabs/tab.js +114 -0
- package/dist/tabs/tab.js.map +1 -0
- package/dist/tabs/tab.stories.d.ts +13 -0
- package/dist/tabs/tab.stories.d.ts.map +1 -0
- package/dist/tabs/tab.stories.js +28 -0
- package/dist/tabs/tab.stories.js.map +1 -0
- package/dist/tag/tag.d.ts +38 -0
- package/dist/tag/tag.d.ts.map +1 -0
- package/dist/tag/tag.js +71 -0
- package/dist/tag/tag.js.map +1 -0
- package/dist/tag/tag.stories.d.ts +10 -0
- package/dist/tag/tag.stories.d.ts.map +1 -0
- package/dist/tag/tag.stories.js +43 -0
- package/dist/tag/tag.stories.js.map +1 -0
- package/dist/test-setup.d.ts +2 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/test-setup.js +2 -0
- package/dist/test-setup.js.map +1 -0
- package/dist/textarea/textarea.d.ts +60 -0
- package/dist/textarea/textarea.d.ts.map +1 -0
- package/dist/textarea/textarea.js +232 -0
- package/dist/textarea/textarea.js.map +1 -0
- package/dist/textarea/textarea.stories.d.ts +10 -0
- package/dist/textarea/textarea.stories.d.ts.map +1 -0
- package/dist/textarea/textarea.stories.js +47 -0
- package/dist/textarea/textarea.stories.js.map +1 -0
- package/dist/toggle/toggle.d.ts +43 -0
- package/dist/toggle/toggle.d.ts.map +1 -0
- package/dist/toggle/toggle.js +189 -0
- package/dist/toggle/toggle.js.map +1 -0
- package/dist/toggle/toggle.stories.d.ts +9 -0
- package/dist/toggle/toggle.stories.d.ts.map +1 -0
- package/dist/toggle/toggle.stories.js +34 -0
- package/dist/toggle/toggle.stories.js.map +1 -0
- package/package.json +65 -0
- 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"}
|
package/dist/tag/tag.js
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAC"}
|
|
@@ -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"}
|