@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,183 @@
|
|
|
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 } from 'lit/decorators.js';
|
|
9
|
+
/**
|
|
10
|
+
* A form-associated group of radio buttons.
|
|
11
|
+
*
|
|
12
|
+
* Manages selection state and form participation for its `<rr-radio>` children.
|
|
13
|
+
* Renders a `<fieldset>` + `<legend>` for accessible grouping.
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* <rr-radio-group name="size" label="Size" value="md">
|
|
17
|
+
* <rr-radio value="sm">Small</rr-radio>
|
|
18
|
+
* <rr-radio value="md">Medium</rr-radio>
|
|
19
|
+
* <rr-radio value="lg">Large</rr-radio>
|
|
20
|
+
* </rr-radio-group>
|
|
21
|
+
*
|
|
22
|
+
* @slot - rr-radio elements
|
|
23
|
+
* @fires change - When the selected value changes
|
|
24
|
+
* @csspart fieldset - The outer fieldset element
|
|
25
|
+
* @csspart legend - The legend / label element
|
|
26
|
+
*/
|
|
27
|
+
let RrRadioGroup = class RrRadioGroup extends LitElement {
|
|
28
|
+
constructor() {
|
|
29
|
+
super();
|
|
30
|
+
/** Form field name submitted with the selected value. */
|
|
31
|
+
this.name = '';
|
|
32
|
+
/** Selected radio value. Syncs the checked state of child radios. */
|
|
33
|
+
this.value = '';
|
|
34
|
+
/** Group label rendered as the legend. */
|
|
35
|
+
this.label = '';
|
|
36
|
+
/** Error message; sets data-invalid and a custom validity. Maps to attribute error-text. */
|
|
37
|
+
this.errorText = '';
|
|
38
|
+
/** Marks the group as required. */
|
|
39
|
+
this.required = false;
|
|
40
|
+
/** Disables the group and all child radios. */
|
|
41
|
+
this.disabled = false;
|
|
42
|
+
/** Layout direction of the radio options. */
|
|
43
|
+
this.orientation = 'vertical';
|
|
44
|
+
this._onRadioChange = (e) => {
|
|
45
|
+
const prev = this.value;
|
|
46
|
+
this.value = e.detail.value;
|
|
47
|
+
this._internals.setFormValue?.(this.value);
|
|
48
|
+
this._syncRadios();
|
|
49
|
+
if (prev !== this.value) {
|
|
50
|
+
this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
this._internals = this.attachInternals();
|
|
54
|
+
}
|
|
55
|
+
connectedCallback() {
|
|
56
|
+
super.connectedCallback();
|
|
57
|
+
this.addEventListener('rr-radio-change', this._onRadioChange);
|
|
58
|
+
}
|
|
59
|
+
disconnectedCallback() {
|
|
60
|
+
super.disconnectedCallback();
|
|
61
|
+
this.removeEventListener('rr-radio-change', this._onRadioChange);
|
|
62
|
+
}
|
|
63
|
+
updated(changed) {
|
|
64
|
+
if (changed.has('value') || changed.has('disabled')) {
|
|
65
|
+
this._syncRadios();
|
|
66
|
+
}
|
|
67
|
+
if (changed.has('value')) {
|
|
68
|
+
this._internals.setFormValue?.(this.value || null);
|
|
69
|
+
}
|
|
70
|
+
if (changed.has('errorText')) {
|
|
71
|
+
if (this.errorText) {
|
|
72
|
+
this.setAttribute('data-invalid', '');
|
|
73
|
+
this._internals.setValidity?.({ customError: true }, this.errorText);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
this.removeAttribute('data-invalid');
|
|
77
|
+
this._internals.setValidity?.({});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
firstUpdated() {
|
|
82
|
+
this._syncRadios();
|
|
83
|
+
this._internals.setFormValue?.(this.value || null);
|
|
84
|
+
}
|
|
85
|
+
_syncRadios() {
|
|
86
|
+
for (const radio of this._radios) {
|
|
87
|
+
radio.checked = radio.value === this.value;
|
|
88
|
+
if (this.disabled)
|
|
89
|
+
radio.disabled = true;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
get _radios() {
|
|
93
|
+
return Array.from(this.querySelectorAll('rr-radio'));
|
|
94
|
+
}
|
|
95
|
+
render() {
|
|
96
|
+
return html `
|
|
97
|
+
<fieldset part="fieldset" ?disabled=${this.disabled}>
|
|
98
|
+
${this.label
|
|
99
|
+
? html `<legend part="legend">${this.label}${this.required
|
|
100
|
+
? html `<span aria-hidden="true" style="color:var(--component-input-foreground-label-required);margin-left:2px">*</span>`
|
|
101
|
+
: nothing}
|
|
102
|
+
</legend>`
|
|
103
|
+
: nothing}
|
|
104
|
+
<div class="options" role="radiogroup" aria-required=${this.required ? 'true' : nothing}>
|
|
105
|
+
<slot></slot>
|
|
106
|
+
</div>
|
|
107
|
+
${this.errorText
|
|
108
|
+
? html `<div class="error" role="alert">${this.errorText}</div>`
|
|
109
|
+
: nothing}
|
|
110
|
+
</fieldset>
|
|
111
|
+
`;
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
RrRadioGroup.formAssociated = true;
|
|
115
|
+
RrRadioGroup.styles = css `
|
|
116
|
+
:host {
|
|
117
|
+
display: block;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
fieldset {
|
|
121
|
+
border: none;
|
|
122
|
+
margin: 0;
|
|
123
|
+
padding: 0;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
legend {
|
|
127
|
+
display: block;
|
|
128
|
+
font: var(--font-label-medium);
|
|
129
|
+
color: var(--component-radio-foreground-label);
|
|
130
|
+
margin-bottom: var(--spacing-tight);
|
|
131
|
+
padding: 0;
|
|
132
|
+
float: none;
|
|
133
|
+
width: 100%;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
:host([disabled]) legend {
|
|
137
|
+
color: var(--component-radio-foreground-disabled);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.options {
|
|
141
|
+
display: flex;
|
|
142
|
+
flex-direction: column;
|
|
143
|
+
gap: var(--spacing-tight);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
:host([orientation='horizontal']) .options {
|
|
147
|
+
flex-direction: row;
|
|
148
|
+
gap: var(--spacing-element);
|
|
149
|
+
flex-wrap: wrap;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.error {
|
|
153
|
+
font: var(--font-label-small);
|
|
154
|
+
color: var(--component-input-foreground-error);
|
|
155
|
+
margin-top: 4px;
|
|
156
|
+
}
|
|
157
|
+
`;
|
|
158
|
+
__decorate([
|
|
159
|
+
property()
|
|
160
|
+
], RrRadioGroup.prototype, "name", void 0);
|
|
161
|
+
__decorate([
|
|
162
|
+
property({ reflect: true })
|
|
163
|
+
], RrRadioGroup.prototype, "value", void 0);
|
|
164
|
+
__decorate([
|
|
165
|
+
property()
|
|
166
|
+
], RrRadioGroup.prototype, "label", void 0);
|
|
167
|
+
__decorate([
|
|
168
|
+
property({ attribute: 'error-text' })
|
|
169
|
+
], RrRadioGroup.prototype, "errorText", void 0);
|
|
170
|
+
__decorate([
|
|
171
|
+
property({ type: Boolean, reflect: true })
|
|
172
|
+
], RrRadioGroup.prototype, "required", void 0);
|
|
173
|
+
__decorate([
|
|
174
|
+
property({ type: Boolean, reflect: true })
|
|
175
|
+
], RrRadioGroup.prototype, "disabled", void 0);
|
|
176
|
+
__decorate([
|
|
177
|
+
property({ reflect: true })
|
|
178
|
+
], RrRadioGroup.prototype, "orientation", void 0);
|
|
179
|
+
RrRadioGroup = __decorate([
|
|
180
|
+
customElement('rr-radio-group')
|
|
181
|
+
], RrRadioGroup);
|
|
182
|
+
export { RrRadioGroup };
|
|
183
|
+
//# sourceMappingURL=radio-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-group.js","sourceRoot":"","sources":["../../src/radio/radio-group.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 Vertical: Story;
|
|
7
|
+
export declare const Horizontal: Story;
|
|
8
|
+
export declare const WithError: Story;
|
|
9
|
+
//# sourceMappingURL=radio-group.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-group.stories.d.ts","sourceRoot":"","sources":["../../src/radio/radio-group.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,yCAAyC,CAAC;AAEjD,QAAA,MAAM,IAAI,EAAE,IAoCX,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,QAAQ,EAAE,KAAU,CAAC;AAElC,eAAO,MAAM,UAAU,EAAE,KAA+C,CAAC;AAEzE,eAAO,MAAM,SAAS,EAAE,KAAsD,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
import '@digital2analogue2/parsimony-components';
|
|
3
|
+
const meta = {
|
|
4
|
+
title: 'Components/Radio Group',
|
|
5
|
+
component: 'rr-radio-group',
|
|
6
|
+
argTypes: {
|
|
7
|
+
name: { control: 'text' },
|
|
8
|
+
value: { control: 'text' },
|
|
9
|
+
label: { control: 'text' },
|
|
10
|
+
errorText: { control: 'text' },
|
|
11
|
+
required: { control: 'boolean' },
|
|
12
|
+
disabled: { control: 'boolean' },
|
|
13
|
+
orientation: { control: 'select', options: ['vertical', 'horizontal'] },
|
|
14
|
+
},
|
|
15
|
+
args: {
|
|
16
|
+
name: 'plan',
|
|
17
|
+
value: 'standard',
|
|
18
|
+
label: 'Choose a plan',
|
|
19
|
+
errorText: '',
|
|
20
|
+
required: false,
|
|
21
|
+
disabled: false,
|
|
22
|
+
orientation: 'vertical',
|
|
23
|
+
},
|
|
24
|
+
render: ({ name, value, label, errorText, required, disabled, orientation }) => html `
|
|
25
|
+
<rr-radio-group
|
|
26
|
+
name=${name}
|
|
27
|
+
value=${value}
|
|
28
|
+
label=${label}
|
|
29
|
+
error-text=${errorText}
|
|
30
|
+
?required=${required}
|
|
31
|
+
?disabled=${disabled}
|
|
32
|
+
orientation=${orientation}
|
|
33
|
+
>
|
|
34
|
+
<rr-radio value="basic">Basic</rr-radio>
|
|
35
|
+
<rr-radio value="standard">Standard</rr-radio>
|
|
36
|
+
<rr-radio value="pro">Pro</rr-radio>
|
|
37
|
+
</rr-radio-group>
|
|
38
|
+
`,
|
|
39
|
+
};
|
|
40
|
+
export default meta;
|
|
41
|
+
export const Vertical = {};
|
|
42
|
+
export const Horizontal = { args: { orientation: 'horizontal' } };
|
|
43
|
+
export const WithError = { args: { value: '', errorText: 'Pick one' } };
|
|
44
|
+
//# sourceMappingURL=radio-group.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-group.stories.js","sourceRoot":"","sources":["../../src/radio/radio-group.stories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,yCAAyC,CAAC;AAEjD,MAAM,IAAI,GAAS;IACjB,KAAK,EAAE,wBAAwB;IAC/B,SAAS,EAAE,gBAAgB;IAC3B,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QACzB,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QAC1B,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QAC1B,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QAC9B,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;QAChC,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;QAChC,WAAW,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE;KACxE;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,eAAe;QACtB,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,UAAU;KACxB;IACD,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,IAAI,CAAA;;aAEzE,IAAI;cACH,KAAK;cACL,KAAK;mBACA,SAAS;kBACV,QAAQ;kBACR,QAAQ;oBACN,WAAW;;;;;;GAM5B;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,QAAQ,GAAU,EAAE,CAAC;AAElC,MAAM,CAAC,MAAM,UAAU,GAAU,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,CAAC;AAEzE,MAAM,CAAC,MAAM,SAAS,GAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
/**
|
|
3
|
+
* An individual radio button. Must be used inside `<rr-radio-group>`.
|
|
4
|
+
*
|
|
5
|
+
* The group manages the name, form value, and selection state — individual
|
|
6
|
+
* radios only hold their own `value` prop and visual `checked` state.
|
|
7
|
+
*
|
|
8
|
+
* @slot - Label text
|
|
9
|
+
* @fires rr-radio-change - Bubbles to the parent rr-radio-group when selected
|
|
10
|
+
* @csspart circle - The visual radio circle element
|
|
11
|
+
* @csspart label - The label text element
|
|
12
|
+
*/
|
|
13
|
+
export declare class RrRadio extends LitElement {
|
|
14
|
+
static styles: import("lit").CSSResult;
|
|
15
|
+
/** The value this radio contributes to the group when selected. */
|
|
16
|
+
value: string;
|
|
17
|
+
/** Visual checked state. Managed by the parent rr-radio-group. */
|
|
18
|
+
checked: boolean;
|
|
19
|
+
/** Disables the radio. */
|
|
20
|
+
disabled: boolean;
|
|
21
|
+
private _onChange;
|
|
22
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
23
|
+
}
|
|
24
|
+
declare global {
|
|
25
|
+
interface HTMLElementTagNameMap {
|
|
26
|
+
'rr-radio': RrRadio;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=radio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio.d.ts","sourceRoot":"","sources":["../../src/radio/radio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C;;;;;;;;;;GAUG;AACH,qBACa,OAAQ,SAAQ,UAAU;IACrC,MAAM,CAAC,MAAM,0BA6FX;IAEF,mEAAmE;IACtC,KAAK,SAAM;IACxC,kEAAkE;IACtB,OAAO,UAAS;IAC5D,0BAA0B;IACkB,QAAQ,UAAS;IAE7D,OAAO,CAAC,SAAS;IAWjB,MAAM;CAmBP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}
|
|
@@ -0,0 +1,166 @@
|
|
|
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 individual radio button. Must be used inside `<rr-radio-group>`.
|
|
11
|
+
*
|
|
12
|
+
* The group manages the name, form value, and selection state — individual
|
|
13
|
+
* radios only hold their own `value` prop and visual `checked` state.
|
|
14
|
+
*
|
|
15
|
+
* @slot - Label text
|
|
16
|
+
* @fires rr-radio-change - Bubbles to the parent rr-radio-group when selected
|
|
17
|
+
* @csspart circle - The visual radio circle element
|
|
18
|
+
* @csspart label - The label text element
|
|
19
|
+
*/
|
|
20
|
+
let RrRadio = class RrRadio extends LitElement {
|
|
21
|
+
constructor() {
|
|
22
|
+
super(...arguments);
|
|
23
|
+
/** The value this radio contributes to the group when selected. */
|
|
24
|
+
this.value = '';
|
|
25
|
+
/** Visual checked state. Managed by the parent rr-radio-group. */
|
|
26
|
+
this.checked = false;
|
|
27
|
+
/** Disables the radio. */
|
|
28
|
+
this.disabled = false;
|
|
29
|
+
}
|
|
30
|
+
_onChange() {
|
|
31
|
+
if (this.disabled || this.checked)
|
|
32
|
+
return;
|
|
33
|
+
this.dispatchEvent(new CustomEvent('rr-radio-change', {
|
|
34
|
+
bubbles: true,
|
|
35
|
+
composed: true,
|
|
36
|
+
detail: { value: this.value },
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
render() {
|
|
40
|
+
return html `
|
|
41
|
+
<div class="circle-wrap">
|
|
42
|
+
<input
|
|
43
|
+
type="radio"
|
|
44
|
+
id="radio"
|
|
45
|
+
.value=${this.value}
|
|
46
|
+
.checked=${this.checked}
|
|
47
|
+
.disabled=${this.disabled}
|
|
48
|
+
aria-checked=${this.checked ? 'true' : 'false'}
|
|
49
|
+
@change=${this._onChange}
|
|
50
|
+
/>
|
|
51
|
+
<div class="circle" part="circle">
|
|
52
|
+
<div class="dot"></div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
<label part="label" for="radio"><slot></slot></label>
|
|
56
|
+
`;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
RrRadio.styles = css `
|
|
60
|
+
:host {
|
|
61
|
+
display: inline-flex;
|
|
62
|
+
align-items: flex-start;
|
|
63
|
+
gap: var(--spacing-tight);
|
|
64
|
+
cursor: pointer;
|
|
65
|
+
user-select: none;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
:host([disabled]) {
|
|
69
|
+
cursor: not-allowed;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.circle-wrap {
|
|
73
|
+
position: relative;
|
|
74
|
+
flex-shrink: 0;
|
|
75
|
+
width: 16px;
|
|
76
|
+
height: 16px;
|
|
77
|
+
margin-top: 2px;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
input {
|
|
81
|
+
position: absolute;
|
|
82
|
+
inset: 0;
|
|
83
|
+
width: 100%;
|
|
84
|
+
height: 100%;
|
|
85
|
+
opacity: 0;
|
|
86
|
+
margin: 0;
|
|
87
|
+
cursor: inherit;
|
|
88
|
+
z-index: 1;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.circle {
|
|
92
|
+
position: absolute;
|
|
93
|
+
inset: 0;
|
|
94
|
+
border: 1px solid var(--component-radio-border-default);
|
|
95
|
+
border-radius: 50%;
|
|
96
|
+
background: var(--component-radio-background-unchecked);
|
|
97
|
+
display: flex;
|
|
98
|
+
align-items: center;
|
|
99
|
+
justify-content: center;
|
|
100
|
+
transition:
|
|
101
|
+
border-color var(--motion-duration-instant) var(--motion-easing-default),
|
|
102
|
+
background-color var(--motion-duration-instant) var(--motion-easing-default);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
:host(:not([disabled]):not([checked])) .circle-wrap:hover .circle {
|
|
106
|
+
border-color: var(--component-radio-border-hover);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
:host([checked]) .circle {
|
|
110
|
+
border-color: var(--component-radio-border-checked);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
:host([disabled]) .circle {
|
|
114
|
+
background: var(--component-radio-background-disabled);
|
|
115
|
+
border-color: var(--component-radio-border-disabled);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* Inner dot */
|
|
119
|
+
.dot {
|
|
120
|
+
width: 8px;
|
|
121
|
+
height: 8px;
|
|
122
|
+
border-radius: 50%;
|
|
123
|
+
background: var(--component-radio-background-checked);
|
|
124
|
+
transform: scale(0);
|
|
125
|
+
transition: transform var(--motion-duration-instant) var(--motion-easing-enter);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
:host([checked]) .dot {
|
|
129
|
+
transform: scale(1);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
:host([disabled]) .dot {
|
|
133
|
+
background: var(--component-radio-foreground-disabled);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/* Focus ring */
|
|
137
|
+
input:focus-visible ~ .circle {
|
|
138
|
+
outline: 2px solid var(--component-radio-border-focus);
|
|
139
|
+
outline-offset: 2px;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
label {
|
|
143
|
+
font: var(--font-label-medium);
|
|
144
|
+
color: var(--component-radio-foreground-label);
|
|
145
|
+
cursor: inherit;
|
|
146
|
+
line-height: 1.4;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
:host([disabled]) label {
|
|
150
|
+
color: var(--component-radio-foreground-disabled);
|
|
151
|
+
}
|
|
152
|
+
`;
|
|
153
|
+
__decorate([
|
|
154
|
+
property({ reflect: true })
|
|
155
|
+
], RrRadio.prototype, "value", void 0);
|
|
156
|
+
__decorate([
|
|
157
|
+
property({ type: Boolean, reflect: true })
|
|
158
|
+
], RrRadio.prototype, "checked", void 0);
|
|
159
|
+
__decorate([
|
|
160
|
+
property({ type: Boolean, reflect: true })
|
|
161
|
+
], RrRadio.prototype, "disabled", void 0);
|
|
162
|
+
RrRadio = __decorate([
|
|
163
|
+
customElement('rr-radio')
|
|
164
|
+
], RrRadio);
|
|
165
|
+
export { RrRadio };
|
|
166
|
+
//# sourceMappingURL=radio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio.js","sourceRoot":"","sources":["../../src/radio/radio.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;AAE5D;;;;;;;;;;GAUG;AAEI,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,UAAU;IAAhC;;QAgGL,mEAAmE;QACtC,UAAK,GAAG,EAAE,CAAC;QACxC,kEAAkE;QACtB,YAAO,GAAG,KAAK,CAAC;QAC5D,0BAA0B;QACkB,aAAQ,GAAG,KAAK,CAAC;IAgC/D,CAAC;IA9BS,SAAS;QACf,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1C,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,iBAAiB,EAAE;YACjC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;SAC9B,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;mBAKI,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;;;;;;;KAO7B,CAAC;IACJ,CAAC;;AAnIM,cAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6FlB,AA7FY,CA6FX;AAG2B;IAA5B,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;sCAAY;AAEI;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;wCAAiB;AAEhB;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;yCAAkB;AArGlD,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CAqInB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
2
|
+
import '@digital2analogue2/parsimony-components';
|
|
3
|
+
/**
|
|
4
|
+
* `rr-radio` is a child element: it must live inside an `rr-radio-group`,
|
|
5
|
+
* which manages selection state and keyboard navigation. This standalone
|
|
6
|
+
* story shows a single radio in isolation for reference only — see the
|
|
7
|
+
* Radio Group stories for real usage.
|
|
8
|
+
*/
|
|
9
|
+
declare const meta: Meta;
|
|
10
|
+
export default meta;
|
|
11
|
+
type Story = StoryObj;
|
|
12
|
+
export declare const Default: Story;
|
|
13
|
+
//# sourceMappingURL=radio.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio.stories.d.ts","sourceRoot":"","sources":["../../src/radio/radio.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,yCAAyC,CAAC;AAEjD;;;;;GAKG;AACH,QAAA,MAAM,IAAI,EAAE,IAgBX,CAAC;AACF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
import '@digital2analogue2/parsimony-components';
|
|
3
|
+
/**
|
|
4
|
+
* `rr-radio` is a child element: it must live inside an `rr-radio-group`,
|
|
5
|
+
* which manages selection state and keyboard navigation. This standalone
|
|
6
|
+
* story shows a single radio in isolation for reference only — see the
|
|
7
|
+
* Radio Group stories for real usage.
|
|
8
|
+
*/
|
|
9
|
+
const meta = {
|
|
10
|
+
title: 'Components/Radio',
|
|
11
|
+
component: 'rr-radio',
|
|
12
|
+
argTypes: {
|
|
13
|
+
value: { control: 'text' },
|
|
14
|
+
checked: { control: 'boolean' },
|
|
15
|
+
disabled: { control: 'boolean' },
|
|
16
|
+
},
|
|
17
|
+
args: {
|
|
18
|
+
value: 'a',
|
|
19
|
+
checked: false,
|
|
20
|
+
disabled: false,
|
|
21
|
+
},
|
|
22
|
+
render: ({ value, checked, disabled }) => html `
|
|
23
|
+
<rr-radio value=${value} ?checked=${checked} ?disabled=${disabled}>Option A</rr-radio>
|
|
24
|
+
`,
|
|
25
|
+
};
|
|
26
|
+
export default meta;
|
|
27
|
+
export const Default = {};
|
|
28
|
+
//# sourceMappingURL=radio.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio.stories.js","sourceRoot":"","sources":["../../src/radio/radio.stories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,yCAAyC,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,IAAI,GAAS;IACjB,KAAK,EAAE,kBAAkB;IACzB,SAAS,EAAE,UAAU;IACrB,QAAQ,EAAE;QACR,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QAC1B,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;QAC/B,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;KACjC;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,KAAK;KAChB;IACD,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,IAAI,CAAA;sBAC1B,KAAK,aAAa,OAAO,cAAc,QAAQ;GAClE;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,OAAO,GAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export type SelectOption = {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* A form-associated select dropdown with label, helper text, and error state.
|
|
9
|
+
*
|
|
10
|
+
* Pass options via the `options` property (array of `{ value, label, disabled? }`).
|
|
11
|
+
* Uses `ElementInternals` for native form participation and `delegatesFocus`
|
|
12
|
+
* so the host forwards focus to the inner `<select>`.
|
|
13
|
+
*
|
|
14
|
+
* Reuses `--component-input-*` tokens — the input token set covers
|
|
15
|
+
* text input, textarea, and select (see tokens/components/input.tokens.json).
|
|
16
|
+
*
|
|
17
|
+
* @fires change - When the selected value changes
|
|
18
|
+
* @csspart label - The label element
|
|
19
|
+
* @csspart select - The inner select element
|
|
20
|
+
* @csspart helper - The helper text container
|
|
21
|
+
* @csspart error - The error message container
|
|
22
|
+
*/
|
|
23
|
+
export declare class RrSelect extends LitElement {
|
|
24
|
+
static formAssociated: boolean;
|
|
25
|
+
static shadowRootOptions: {
|
|
26
|
+
delegatesFocus: boolean;
|
|
27
|
+
clonable?: boolean;
|
|
28
|
+
customElementRegistry?: CustomElementRegistry | null;
|
|
29
|
+
mode: ShadowRootMode;
|
|
30
|
+
serializable?: boolean;
|
|
31
|
+
slotAssignment?: SlotAssignmentMode;
|
|
32
|
+
};
|
|
33
|
+
static styles: import("lit").CSSResult;
|
|
34
|
+
/** Form field name submitted with the selected value. */
|
|
35
|
+
name: string;
|
|
36
|
+
/** Selected option value. */
|
|
37
|
+
value: string;
|
|
38
|
+
/** Field label rendered above the select. */
|
|
39
|
+
label: string;
|
|
40
|
+
/** Helper text shown when there is no error. Maps to attribute helper-text. */
|
|
41
|
+
helperText: string;
|
|
42
|
+
/** Error message; sets data-invalid and a custom validity. Maps to attribute error-text. */
|
|
43
|
+
errorText: string;
|
|
44
|
+
/** Marks the field as required and shows an asterisk. */
|
|
45
|
+
required: boolean;
|
|
46
|
+
/** Disables the select. */
|
|
47
|
+
disabled: boolean;
|
|
48
|
+
/** Options to render: array of { value: string; label: string; disabled?: boolean }. */
|
|
49
|
+
options: SelectOption[];
|
|
50
|
+
private _select;
|
|
51
|
+
private _internals;
|
|
52
|
+
constructor();
|
|
53
|
+
private get _isInvalid();
|
|
54
|
+
updated(changed: Map<string, unknown>): void;
|
|
55
|
+
private _onChange;
|
|
56
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
57
|
+
}
|
|
58
|
+
declare global {
|
|
59
|
+
interface HTMLElementTagNameMap {
|
|
60
|
+
'rr-select': RrSelect;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/select/select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAGrD,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,qBACa,QAAS,SAAQ,UAAU;IACtC,MAAM,CAAC,cAAc,UAAQ;IAE7B,MAAM,CAAC,iBAAiB;;;;;;;MAGtB;IAEF,MAAM,CAAC,MAAM,0BA6FX;IAEF,yDAAyD;IAC7C,IAAI,SAAM;IACtB,6BAA6B;IACA,KAAK,SAAM;IACxC,6CAA6C;IACjC,KAAK,SAAM;IACvB,+EAA+E;IACvC,UAAU,SAAM;IACxD,4FAA4F;IACrD,SAAS,SAAM;IACtD,yDAAyD;IACb,QAAQ,UAAS;IAC7D,2BAA2B;IACiB,QAAQ,UAAS;IAC7D,wFAAwF;IAC7D,OAAO,EAAE,YAAY,EAAE,CAAM;IAEvC,OAAO,CAAC,OAAO,CAAqB;IAErD,OAAO,CAAC,UAAU,CAAmB;;IAOrC,OAAO,KAAK,UAAU,GAErB;IAEQ,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAkC9C,OAAO,CAAC,SAAS;IAOjB,MAAM;CA+CP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,QAAQ,CAAC;KACvB;CACF"}
|