tyrell-components 1.0.0-RC13 → 1.0.0-RC15
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/README.md +10 -2
- package/css/tyrell-theme.css +192 -180
- package/css/tyrell.css +23 -0
- package/dist/tyrell-colors-static.css +1 -316
- package/dist/tyrell-theme.css +1 -1454
- package/dist/tyrell.css +1 -1371
- package/dist/tyrell.js +1 -1
- package/lib/base/ty-component.d.ts +20 -10
- package/lib/base/ty-component.js +196 -319
- package/lib/components/button.d.ts +3 -17
- package/lib/components/button.js +261 -295
- package/lib/components/calendar-month.d.ts +4 -50
- package/lib/components/calendar-month.js +443 -582
- package/lib/components/calendar-navigation.d.ts +3 -48
- package/lib/components/calendar-navigation.js +239 -362
- package/lib/components/calendar.d.ts +8 -83
- package/lib/components/calendar.js +616 -829
- package/lib/components/checkbox.d.ts +5 -72
- package/lib/components/checkbox.js +273 -416
- package/lib/components/copy.d.ts +4 -57
- package/lib/components/copy.js +280 -397
- package/lib/components/date-picker.d.ts +21 -163
- package/lib/components/date-picker.js +1143 -1674
- package/lib/components/file-upload.d.ts +9 -15
- package/lib/components/file-upload.js +404 -426
- package/lib/components/icon.d.ts +3 -24
- package/lib/components/icon.js +141 -230
- package/lib/components/input.d.ts +8 -108
- package/lib/components/input.js +593 -784
- package/lib/components/modal.d.ts +17 -26
- package/lib/components/modal.js +340 -484
- package/lib/components/option.d.ts +2 -9
- package/lib/components/option.js +168 -216
- package/lib/components/popup.d.ts +2 -17
- package/lib/components/popup.js +249 -380
- package/lib/components/radio.d.ts +5 -25
- package/lib/components/radio.js +407 -461
- package/lib/components/resize-observer.d.ts +3 -30
- package/lib/components/resize-observer.js +69 -103
- package/lib/components/scroll-container.d.ts +2 -12
- package/lib/components/scroll-container.js +293 -338
- package/lib/components/select.d.ts +87 -159
- package/lib/components/select.js +1609 -2090
- package/lib/components/selected-tags.d.ts +5 -48
- package/lib/components/selected-tags.js +188 -276
- package/lib/components/step.d.ts +1 -6
- package/lib/components/step.js +62 -68
- package/lib/components/switch.d.ts +1 -12
- package/lib/components/switch.js +214 -247
- package/lib/components/tab.d.ts +1 -6
- package/lib/components/tab.js +62 -69
- package/lib/components/tabs.d.ts +6 -63
- package/lib/components/tabs.js +545 -777
- package/lib/components/tag.d.ts +3 -37
- package/lib/components/tag.js +236 -335
- package/lib/components/textarea.d.ts +7 -87
- package/lib/components/textarea.js +457 -627
- package/lib/components/tooltip.d.ts +3 -11
- package/lib/components/tooltip.js +307 -443
- package/lib/components/wizard.d.ts +6 -54
- package/lib/components/wizard.js +405 -618
- package/lib/icons/fontawesome/brands.d.ts +0 -1
- package/lib/icons/fontawesome/brands.js +0 -8
- package/lib/icons/fontawesome/regular.d.ts +0 -1
- package/lib/icons/fontawesome/regular.js +0 -8
- package/lib/icons/fontawesome/solid.d.ts +0 -1
- package/lib/icons/fontawesome/solid.js +0 -8
- package/lib/icons/heroicons/micro.d.ts +0 -1
- package/lib/icons/heroicons/micro.js +392 -400
- package/lib/icons/heroicons/mini.d.ts +0 -1
- package/lib/icons/heroicons/mini.js +382 -390
- package/lib/icons/heroicons/outline.d.ts +0 -1
- package/lib/icons/heroicons/outline.js +337 -345
- package/lib/icons/heroicons/solid.d.ts +0 -1
- package/lib/icons/heroicons/solid.js +407 -415
- package/lib/icons/lucide.d.ts +0 -1
- package/lib/icons/lucide.js +24479 -26351
- package/lib/icons/material/filled.d.ts +0 -1
- package/lib/icons/material/filled.js +9653 -9663
- package/lib/icons/material/outlined.d.ts +0 -1
- package/lib/icons/material/outlined.js +10271 -10281
- package/lib/icons/material/round.d.ts +0 -1
- package/lib/icons/material/round.js +10495 -10505
- package/lib/icons/material/sharp.d.ts +0 -1
- package/lib/icons/material/sharp.js +9905 -9915
- package/lib/icons/material/two-tone.d.ts +0 -1
- package/lib/icons/material/two-tone.js +12792 -12802
- package/lib/index.d.ts +0 -1
- package/lib/index.js +21 -41
- package/lib/styles/button.d.ts +2 -20
- package/lib/styles/button.js +202 -404
- package/lib/styles/calendar-month.d.ts +1 -5
- package/lib/styles/calendar-month.js +127 -244
- package/lib/styles/calendar-navigation.d.ts +2 -6
- package/lib/styles/calendar-navigation.js +64 -104
- package/lib/styles/calendar.d.ts +1 -2
- package/lib/styles/calendar.js +9 -22
- package/lib/styles/checkbox.d.ts +0 -1
- package/lib/styles/checkbox.js +45 -94
- package/lib/styles/copy.d.ts +0 -1
- package/lib/styles/copy.js +67 -106
- package/lib/styles/custom-scrollbar.d.ts +1 -2
- package/lib/styles/custom-scrollbar.js +80 -115
- package/lib/styles/date-picker.d.ts +1 -5
- package/lib/styles/date-picker.js +261 -335
- package/lib/styles/field-size.d.ts +6 -0
- package/lib/styles/field-size.js +91 -0
- package/lib/styles/file-upload.d.ts +1 -2
- package/lib/styles/file-upload.js +143 -188
- package/lib/styles/icon.d.ts +2 -6
- package/lib/styles/icon.js +92 -170
- package/lib/styles/input.d.ts +1 -6
- package/lib/styles/input.js +125 -290
- package/lib/styles/modal.d.ts +1 -2
- package/lib/styles/modal.js +71 -108
- package/lib/styles/option.d.ts +2 -6
- package/lib/styles/option.js +49 -64
- package/lib/styles/popup.d.ts +1 -2
- package/lib/styles/popup.js +42 -77
- package/lib/styles/radio.d.ts +0 -1
- package/lib/styles/radio.js +69 -110
- package/lib/styles/resize-observer.d.ts +1 -2
- package/lib/styles/resize-observer.js +2 -12
- package/lib/styles/scroll-container.d.ts +1 -2
- package/lib/styles/scroll-container.js +100 -149
- package/lib/styles/select-base.d.ts +0 -1
- package/lib/styles/select-base.js +597 -785
- package/lib/styles/select.d.ts +1 -2
- package/lib/styles/select.js +140 -236
- package/lib/styles/step.d.ts +1 -2
- package/lib/styles/step.js +22 -33
- package/lib/styles/switch.d.ts +0 -1
- package/lib/styles/switch.js +34 -73
- package/lib/styles/tab.d.ts +1 -2
- package/lib/styles/tab.js +22 -34
- package/lib/styles/tabs.d.ts +3 -11
- package/lib/styles/tabs.js +190 -222
- package/lib/styles/tag.d.ts +1 -5
- package/lib/styles/tag.js +136 -218
- package/lib/styles/textarea.d.ts +1 -2
- package/lib/styles/textarea.js +210 -319
- package/lib/styles/tooltip.d.ts +0 -1
- package/lib/styles/tooltip.js +3 -13
- package/lib/styles/wizard.d.ts +5 -21
- package/lib/styles/wizard.js +170 -306
- package/lib/types/common.d.ts +2 -2
- package/lib/types/common.js +6 -17
- package/lib/utils/calendar-utils.d.ts +4 -21
- package/lib/utils/calendar-utils.js +100 -273
- package/lib/utils/custom-scrollbar.d.ts +6 -20
- package/lib/utils/custom-scrollbar.js +273 -317
- package/lib/utils/flavor-sheet.d.ts +0 -1
- package/lib/utils/flavor-sheet.js +14 -37
- package/lib/utils/icon-registry.d.ts +0 -2
- package/lib/utils/icon-registry.js +137 -243
- package/lib/utils/icons.d.ts +0 -1
- package/lib/utils/icons.js +0 -9
- package/lib/utils/loader-registry.d.ts +0 -1
- package/lib/utils/loader-registry.js +3 -35
- package/lib/utils/locale.d.ts +2 -23
- package/lib/utils/locale.js +34 -120
- package/lib/utils/mobile.d.ts +0 -1
- package/lib/utils/mobile.js +1 -18
- package/lib/utils/number-format.d.ts +6 -3
- package/lib/utils/number-format.js +54 -110
- package/lib/utils/positioning.d.ts +50 -7
- package/lib/utils/positioning.js +224 -234
- package/lib/utils/property-capture.d.ts +5 -27
- package/lib/utils/property-capture.js +36 -144
- package/lib/utils/property-manager.d.ts +0 -1
- package/lib/utils/property-manager.js +126 -196
- package/lib/utils/resize-observer.d.ts +0 -1
- package/lib/utils/resize-observer.js +23 -59
- package/lib/utils/scroll-lock.d.ts +4 -11
- package/lib/utils/scroll-lock.js +65 -172
- package/lib/utils/styles.d.ts +0 -1
- package/lib/utils/styles.js +17 -41
- package/lib/version.d.ts +1 -2
- package/lib/version.js +1 -11
- package/package.json +4 -4
- package/lib/base/ty-component.d.ts.map +0 -1
- package/lib/base/ty-component.js.map +0 -1
- package/lib/components/button.d.ts.map +0 -1
- package/lib/components/button.js.map +0 -1
- package/lib/components/calendar-month.d.ts.map +0 -1
- package/lib/components/calendar-month.js.map +0 -1
- package/lib/components/calendar-navigation.d.ts.map +0 -1
- package/lib/components/calendar-navigation.js.map +0 -1
- package/lib/components/calendar.d.ts.map +0 -1
- package/lib/components/calendar.js.map +0 -1
- package/lib/components/checkbox.d.ts.map +0 -1
- package/lib/components/checkbox.js.map +0 -1
- package/lib/components/copy.d.ts.map +0 -1
- package/lib/components/copy.js.map +0 -1
- package/lib/components/date-picker.d.ts.map +0 -1
- package/lib/components/date-picker.js.map +0 -1
- package/lib/components/file-upload.d.ts.map +0 -1
- package/lib/components/file-upload.js.map +0 -1
- package/lib/components/icon.d.ts.map +0 -1
- package/lib/components/icon.js.map +0 -1
- package/lib/components/input.d.ts.map +0 -1
- package/lib/components/input.js.map +0 -1
- package/lib/components/modal.d.ts.map +0 -1
- package/lib/components/modal.js.map +0 -1
- package/lib/components/option.d.ts.map +0 -1
- package/lib/components/option.js.map +0 -1
- package/lib/components/popup.d.ts.map +0 -1
- package/lib/components/popup.js.map +0 -1
- package/lib/components/radio.d.ts.map +0 -1
- package/lib/components/radio.js.map +0 -1
- package/lib/components/resize-observer.d.ts.map +0 -1
- package/lib/components/resize-observer.js.map +0 -1
- package/lib/components/scroll-container.d.ts.map +0 -1
- package/lib/components/scroll-container.js.map +0 -1
- package/lib/components/select.d.ts.map +0 -1
- package/lib/components/select.js.map +0 -1
- package/lib/components/selected-tags.d.ts.map +0 -1
- package/lib/components/selected-tags.js.map +0 -1
- package/lib/components/step.d.ts.map +0 -1
- package/lib/components/step.js.map +0 -1
- package/lib/components/switch.d.ts.map +0 -1
- package/lib/components/switch.js.map +0 -1
- package/lib/components/tab.d.ts.map +0 -1
- package/lib/components/tab.js.map +0 -1
- package/lib/components/tabs.d.ts.map +0 -1
- package/lib/components/tabs.js.map +0 -1
- package/lib/components/tag.d.ts.map +0 -1
- package/lib/components/tag.js.map +0 -1
- package/lib/components/textarea.d.ts.map +0 -1
- package/lib/components/textarea.js.map +0 -1
- package/lib/components/tooltip.d.ts.map +0 -1
- package/lib/components/tooltip.js.map +0 -1
- package/lib/components/wizard.d.ts.map +0 -1
- package/lib/components/wizard.js.map +0 -1
- package/lib/icons/fontawesome/brands.d.ts.map +0 -1
- package/lib/icons/fontawesome/brands.js.map +0 -1
- package/lib/icons/fontawesome/regular.d.ts.map +0 -1
- package/lib/icons/fontawesome/regular.js.map +0 -1
- package/lib/icons/fontawesome/solid.d.ts.map +0 -1
- package/lib/icons/fontawesome/solid.js.map +0 -1
- package/lib/icons/heroicons/micro.d.ts.map +0 -1
- package/lib/icons/heroicons/micro.js.map +0 -1
- package/lib/icons/heroicons/mini.d.ts.map +0 -1
- package/lib/icons/heroicons/mini.js.map +0 -1
- package/lib/icons/heroicons/outline.d.ts.map +0 -1
- package/lib/icons/heroicons/outline.js.map +0 -1
- package/lib/icons/heroicons/solid.d.ts.map +0 -1
- package/lib/icons/heroicons/solid.js.map +0 -1
- package/lib/icons/lucide.d.ts.map +0 -1
- package/lib/icons/lucide.js.map +0 -1
- package/lib/icons/material/filled.d.ts.map +0 -1
- package/lib/icons/material/filled.js.map +0 -1
- package/lib/icons/material/outlined.d.ts.map +0 -1
- package/lib/icons/material/outlined.js.map +0 -1
- package/lib/icons/material/round.d.ts.map +0 -1
- package/lib/icons/material/round.js.map +0 -1
- package/lib/icons/material/sharp.d.ts.map +0 -1
- package/lib/icons/material/sharp.js.map +0 -1
- package/lib/icons/material/two-tone.d.ts.map +0 -1
- package/lib/icons/material/two-tone.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/styles/button.d.ts.map +0 -1
- package/lib/styles/button.js.map +0 -1
- package/lib/styles/calendar-month.d.ts.map +0 -1
- package/lib/styles/calendar-month.js.map +0 -1
- package/lib/styles/calendar-navigation.d.ts.map +0 -1
- package/lib/styles/calendar-navigation.js.map +0 -1
- package/lib/styles/calendar.d.ts.map +0 -1
- package/lib/styles/calendar.js.map +0 -1
- package/lib/styles/checkbox.d.ts.map +0 -1
- package/lib/styles/checkbox.js.map +0 -1
- package/lib/styles/copy.d.ts.map +0 -1
- package/lib/styles/copy.js.map +0 -1
- package/lib/styles/custom-scrollbar.d.ts.map +0 -1
- package/lib/styles/custom-scrollbar.js.map +0 -1
- package/lib/styles/date-picker.d.ts.map +0 -1
- package/lib/styles/date-picker.js.map +0 -1
- package/lib/styles/file-upload.d.ts.map +0 -1
- package/lib/styles/file-upload.js.map +0 -1
- package/lib/styles/icon.d.ts.map +0 -1
- package/lib/styles/icon.js.map +0 -1
- package/lib/styles/input.d.ts.map +0 -1
- package/lib/styles/input.js.map +0 -1
- package/lib/styles/modal.d.ts.map +0 -1
- package/lib/styles/modal.js.map +0 -1
- package/lib/styles/multiselect.d.ts +0 -8
- package/lib/styles/multiselect.d.ts.map +0 -1
- package/lib/styles/multiselect.js +0 -849
- package/lib/styles/multiselect.js.map +0 -1
- package/lib/styles/option.d.ts.map +0 -1
- package/lib/styles/option.js.map +0 -1
- package/lib/styles/popup.d.ts.map +0 -1
- package/lib/styles/popup.js.map +0 -1
- package/lib/styles/radio.d.ts.map +0 -1
- package/lib/styles/radio.js.map +0 -1
- package/lib/styles/resize-observer.d.ts.map +0 -1
- package/lib/styles/resize-observer.js.map +0 -1
- package/lib/styles/scroll-container.d.ts.map +0 -1
- package/lib/styles/scroll-container.js.map +0 -1
- package/lib/styles/select-base.d.ts.map +0 -1
- package/lib/styles/select-base.js.map +0 -1
- package/lib/styles/select.d.ts.map +0 -1
- package/lib/styles/select.js.map +0 -1
- package/lib/styles/step.d.ts.map +0 -1
- package/lib/styles/step.js.map +0 -1
- package/lib/styles/switch.d.ts.map +0 -1
- package/lib/styles/switch.js.map +0 -1
- package/lib/styles/tab.d.ts.map +0 -1
- package/lib/styles/tab.js.map +0 -1
- package/lib/styles/tabs.d.ts.map +0 -1
- package/lib/styles/tabs.js.map +0 -1
- package/lib/styles/tag.d.ts.map +0 -1
- package/lib/styles/tag.js.map +0 -1
- package/lib/styles/textarea.d.ts.map +0 -1
- package/lib/styles/textarea.js.map +0 -1
- package/lib/styles/tooltip.d.ts.map +0 -1
- package/lib/styles/tooltip.js.map +0 -1
- package/lib/styles/wizard.d.ts.map +0 -1
- package/lib/styles/wizard.js.map +0 -1
- package/lib/types/common.d.ts.map +0 -1
- package/lib/types/common.js.map +0 -1
- package/lib/utils/calendar-utils.d.ts.map +0 -1
- package/lib/utils/calendar-utils.js.map +0 -1
- package/lib/utils/custom-scrollbar.d.ts.map +0 -1
- package/lib/utils/custom-scrollbar.js.map +0 -1
- package/lib/utils/flavor-sheet.d.ts.map +0 -1
- package/lib/utils/flavor-sheet.js.map +0 -1
- package/lib/utils/icon-registry.d.ts.map +0 -1
- package/lib/utils/icon-registry.js.map +0 -1
- package/lib/utils/icons.d.ts.map +0 -1
- package/lib/utils/icons.js.map +0 -1
- package/lib/utils/loader-registry.d.ts.map +0 -1
- package/lib/utils/loader-registry.js.map +0 -1
- package/lib/utils/locale.d.ts.map +0 -1
- package/lib/utils/locale.js.map +0 -1
- package/lib/utils/mobile.d.ts.map +0 -1
- package/lib/utils/mobile.js.map +0 -1
- package/lib/utils/number-format.d.ts.map +0 -1
- package/lib/utils/number-format.js.map +0 -1
- package/lib/utils/parse-boolean.d.ts +0 -39
- package/lib/utils/parse-boolean.d.ts.map +0 -1
- package/lib/utils/parse-boolean.js +0 -58
- package/lib/utils/parse-boolean.js.map +0 -1
- package/lib/utils/positioning.d.ts.map +0 -1
- package/lib/utils/positioning.js.map +0 -1
- package/lib/utils/property-capture.d.ts.map +0 -1
- package/lib/utils/property-capture.js.map +0 -1
- package/lib/utils/property-manager.d.ts.map +0 -1
- package/lib/utils/property-manager.js.map +0 -1
- package/lib/utils/resize-observer.d.ts.map +0 -1
- package/lib/utils/resize-observer.js.map +0 -1
- package/lib/utils/scroll-lock.d.ts.map +0 -1
- package/lib/utils/scroll-lock.js.map +0 -1
- package/lib/utils/styles.d.ts.map +0 -1
- package/lib/utils/styles.js.map +0 -1
- package/lib/version.d.ts.map +0 -1
- package/lib/version.js.map +0 -1
|
@@ -40,13 +40,7 @@ export declare abstract class TyComponent<T = any> extends HTMLElement {
|
|
|
40
40
|
* Sync property value to HTML attribute
|
|
41
41
|
*/
|
|
42
42
|
private _syncPropertyToAttribute;
|
|
43
|
-
/**
|
|
44
|
-
* Convert camelCase to kebab-case
|
|
45
|
-
*/
|
|
46
43
|
private _toKebabCase;
|
|
47
|
-
/**
|
|
48
|
-
* Convert kebab-case to camelCase
|
|
49
|
-
*/
|
|
50
44
|
private _toCamelCase;
|
|
51
45
|
/**
|
|
52
46
|
* Attribute changed callback - unified for all components
|
|
@@ -126,9 +120,26 @@ export declare abstract class TyComponent<T = any> extends HTMLElement {
|
|
|
126
120
|
* the role element as aria-label, giving it an accessible name.
|
|
127
121
|
*/
|
|
128
122
|
protected applyLabelName(roleEl: HTMLElement): void;
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
*
|
|
123
|
+
private _handlingActivationClick;
|
|
124
|
+
/**
|
|
125
|
+
* Guard for click-driven toggle handlers (checkbox/switch) on components
|
|
126
|
+
* whose whole host is the click target AND that expect a wrapping
|
|
127
|
+
* <label> to delegate to them. Some browsers still forward a label's own
|
|
128
|
+
* synthetic click to the associated control even when the original click
|
|
129
|
+
* already targeted that control directly, firing 'click' twice for one
|
|
130
|
+
* user gesture. Both arrive synchronously in the same task, so a flag
|
|
131
|
+
* cleared on the next microtask catches only the spurious duplicate —
|
|
132
|
+
* two genuinely separate clicks are always in different tasks.
|
|
133
|
+
*/
|
|
134
|
+
protected isDuplicateActivationClick(): boolean;
|
|
135
|
+
private _resetDefaults;
|
|
136
|
+
/**
|
|
137
|
+
* Form reset callback - called when form.reset() is invoked.
|
|
138
|
+
* Restores every formValue-bearing property to its attribute-declared
|
|
139
|
+
* default captured at first connect (native defaultValue/defaultChecked
|
|
140
|
+
* semantics). Non-form state (e.g. a checkbox's submission `value`, a
|
|
141
|
+
* ty-radio's option `value`) is deliberately left alone — the old
|
|
142
|
+
* blanket 'value' reset corrupted radio groups by wiping child values.
|
|
132
143
|
*/
|
|
133
144
|
formResetCallback(): void;
|
|
134
145
|
/**
|
|
@@ -137,4 +148,3 @@ export declare abstract class TyComponent<T = any> extends HTMLElement {
|
|
|
137
148
|
*/
|
|
138
149
|
protected onFormReset(): void;
|
|
139
150
|
}
|
|
140
|
-
//# sourceMappingURL=ty-component.d.ts.map
|
package/lib/base/ty-component.js
CHANGED
|
@@ -1,324 +1,201 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TyComponent - Base class for all Ty web components
|
|
3
|
-
*
|
|
4
|
-
* Provides unified property/attribute lifecycle management:
|
|
5
|
-
* - Single code path for all property updates
|
|
6
|
-
* - Declarative property configuration
|
|
7
|
-
* - Predictable rendering behavior
|
|
8
|
-
* - Form association support
|
|
9
|
-
* - Property change events via 'prop:change' (separate from user 'change' events)
|
|
10
|
-
*/
|
|
11
1
|
import { PropertyManager } from '../utils/property-manager.js';
|
|
12
|
-
/**
|
|
13
|
-
* Base class for all Ty components with unified property lifecycle
|
|
14
|
-
*/
|
|
15
2
|
export class TyComponent extends HTMLElement {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
property: change.name,
|
|
213
|
-
oldValue: change.oldValue,
|
|
214
|
-
newValue: change.newValue
|
|
215
|
-
},
|
|
216
|
-
bubbles: true,
|
|
217
|
-
composed: true
|
|
218
|
-
}));
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Update form value via ElementInternals
|
|
224
|
-
* Subclasses can override to customize form value
|
|
225
|
-
*/
|
|
226
|
-
updateFormValue() {
|
|
227
|
-
const formValue = this.getFormValue();
|
|
228
|
-
this._internals.setFormValue(formValue);
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Get the form value for this component
|
|
232
|
-
* Default: return 'value' property
|
|
233
|
-
* Override for custom behavior
|
|
234
|
-
*/
|
|
235
|
-
getFormValue() {
|
|
236
|
-
return this.props.get('value') ?? null;
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Hook: Called when properties change
|
|
240
|
-
* Subclasses can override to update internal state
|
|
241
|
-
*
|
|
242
|
-
* This is called BEFORE rendering, so you can update
|
|
243
|
-
* internal state here and it will be reflected in the render
|
|
244
|
-
*/
|
|
245
|
-
onPropertiesChanged(changes) {
|
|
246
|
-
// Default: no-op
|
|
247
|
-
// Subclasses can override to update _state, _config, etc.
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Hook: Called when component is connected
|
|
251
|
-
* Use this instead of overriding connectedCallback
|
|
252
|
-
*/
|
|
253
|
-
onConnect() {
|
|
254
|
-
// Default: no-op
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Hook: Called when component is disconnected
|
|
258
|
-
* Use this for cleanup instead of overriding disconnectedCallback
|
|
259
|
-
*/
|
|
260
|
-
onDisconnect() {
|
|
261
|
-
// Default: no-op
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Get the form element this component is associated with
|
|
265
|
-
*/
|
|
266
|
-
get form() {
|
|
267
|
-
return this._internals.form;
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* a11y helper for components whose ARIA role lives on an inner shadow element
|
|
271
|
-
* (checkbox/switch/radio). A wrapping <label> names the form-associated HOST,
|
|
272
|
-
* not the inner role element — so mirror the host's associated label text onto
|
|
273
|
-
* the role element as aria-label, giving it an accessible name.
|
|
274
|
-
*/
|
|
275
|
-
applyLabelName(roleEl) {
|
|
276
|
-
let text = Array.from(this._internals.labels ?? [])
|
|
277
|
-
.map((l) => l.textContent?.trim())
|
|
278
|
-
.filter(Boolean)
|
|
279
|
-
.join(' ');
|
|
280
|
-
if (!text) {
|
|
281
|
-
// Non-form-associated controls (e.g. ty-radio) aren't labelable, so the
|
|
282
|
-
// wrapping <label> never appears in internals.labels — read it directly,
|
|
283
|
-
// stripping this element's own subtree from the text.
|
|
284
|
-
const lbl = this.closest('label');
|
|
285
|
-
if (lbl) {
|
|
286
|
-
const clone = lbl.cloneNode(true);
|
|
287
|
-
clone.querySelectorAll(this.tagName.toLowerCase()).forEach((n) => n.remove());
|
|
288
|
-
text = clone.textContent?.trim() ?? '';
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
if (text)
|
|
292
|
-
roleEl.setAttribute('aria-label', text);
|
|
293
|
-
else
|
|
294
|
-
roleEl.removeAttribute('aria-label');
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* Form reset callback - called when form.reset() is invoked
|
|
298
|
-
* Resets component to its default value
|
|
299
|
-
*/
|
|
300
|
-
formResetCallback() {
|
|
301
|
-
// Get the default value from property configuration
|
|
302
|
-
const ctor = this.constructor;
|
|
303
|
-
const valueConfig = ctor.properties['value'];
|
|
304
|
-
if (valueConfig) {
|
|
305
|
-
const defaultValue = valueConfig.default ?? '';
|
|
306
|
-
// Reset the value property through setProperty to trigger lifecycle
|
|
307
|
-
this.setProperty('value', defaultValue);
|
|
308
|
-
}
|
|
309
|
-
// Call subclass hook for custom reset behavior
|
|
310
|
-
this.onFormReset();
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Hook: Called when form is reset
|
|
314
|
-
* Subclasses can override to perform additional reset actions
|
|
315
|
-
*/
|
|
316
|
-
onFormReset() {
|
|
317
|
-
// Default: no-op
|
|
318
|
-
// Subclasses can override to reset additional state
|
|
319
|
-
}
|
|
3
|
+
constructor() {
|
|
4
|
+
super();
|
|
5
|
+
this._connected = false;
|
|
6
|
+
this._rendered = false;
|
|
7
|
+
this._handlingActivationClick = false;
|
|
8
|
+
this._resetDefaults = null;
|
|
9
|
+
const ctor = this.constructor;
|
|
10
|
+
this.props = new PropertyManager(ctor.properties);
|
|
11
|
+
this._internals = this.attachInternals();
|
|
12
|
+
if (!this.shadowRoot) {
|
|
13
|
+
this.attachShadow({ mode: 'open' });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
static get observedAttributes() {
|
|
17
|
+
const attrs = [];
|
|
18
|
+
for (const [name, config] of Object.entries(this.properties)) {
|
|
19
|
+
attrs.push(name.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase());
|
|
20
|
+
if (config.aliases) {
|
|
21
|
+
for (const alias of Object.keys(config.aliases)) {
|
|
22
|
+
attrs.push(alias);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return attrs;
|
|
27
|
+
}
|
|
28
|
+
setProperty(name, value) {
|
|
29
|
+
const change = this.props.updateProperty(name, value, 'property');
|
|
30
|
+
if (change) {
|
|
31
|
+
this._syncPropertyToAttribute(change);
|
|
32
|
+
this._handlePropertyChanges([change]);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
getProperty(name) {
|
|
36
|
+
return this.props.get(name);
|
|
37
|
+
}
|
|
38
|
+
_syncPropertyToAttribute(change) {
|
|
39
|
+
const { name, newValue } = change;
|
|
40
|
+
const config = this.props.getConfig(name);
|
|
41
|
+
if (!config)
|
|
42
|
+
return;
|
|
43
|
+
const attrName = this._toKebabCase(name);
|
|
44
|
+
if (config.type === 'boolean') {
|
|
45
|
+
if (newValue) {
|
|
46
|
+
this.setAttribute(attrName, '');
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
this.removeAttribute(attrName);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if (newValue === null || newValue === undefined) {
|
|
53
|
+
this.removeAttribute(attrName);
|
|
54
|
+
}
|
|
55
|
+
else if (typeof newValue === 'object') {
|
|
56
|
+
this.setAttribute(attrName, JSON.stringify(newValue));
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
this.setAttribute(attrName, String(newValue));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
_toKebabCase(str) {
|
|
63
|
+
return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
|
|
64
|
+
}
|
|
65
|
+
_toCamelCase(str) {
|
|
66
|
+
return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
67
|
+
}
|
|
68
|
+
attributeChangedCallback(name, oldValue, newValue) {
|
|
69
|
+
if (oldValue === newValue)
|
|
70
|
+
return;
|
|
71
|
+
let change = this.props.handleAlias(name, newValue);
|
|
72
|
+
if (!change) {
|
|
73
|
+
const camelName = this._toCamelCase(name);
|
|
74
|
+
const propName = this.props.hasConfig(name) ? name : camelName;
|
|
75
|
+
change = this.props.updateProperty(propName, newValue, 'attribute');
|
|
76
|
+
}
|
|
77
|
+
if (change) {
|
|
78
|
+
this._handlePropertyChanges([change]);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
connectedCallback() {
|
|
82
|
+
this._connected = true;
|
|
83
|
+
if (!this._resetDefaults) {
|
|
84
|
+
this._resetDefaults = new Map();
|
|
85
|
+
const ctor = this.constructor;
|
|
86
|
+
for (const [name, config] of Object.entries(ctor.properties)) {
|
|
87
|
+
if (!config.formValue)
|
|
88
|
+
continue;
|
|
89
|
+
const attr = this.getAttribute(this._toKebabCase(name));
|
|
90
|
+
this._resetDefaults.set(name, attr ?? config.default ?? null);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const preSetProps = this._capturePreSetProperties();
|
|
94
|
+
if (preSetProps.length > 0) {
|
|
95
|
+
this._handlePropertyChanges(preSetProps);
|
|
96
|
+
}
|
|
97
|
+
this.onConnect();
|
|
98
|
+
if (!this._rendered) {
|
|
99
|
+
this.render();
|
|
100
|
+
this._rendered = true;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
disconnectedCallback() {
|
|
104
|
+
this._connected = false;
|
|
105
|
+
this.onDisconnect();
|
|
106
|
+
}
|
|
107
|
+
_capturePreSetProperties() {
|
|
108
|
+
const changes = [];
|
|
109
|
+
const ctor = this.constructor;
|
|
110
|
+
for (const propName of Object.keys(ctor.properties)) {
|
|
111
|
+
const descriptor = Object.getOwnPropertyDescriptor(this, propName);
|
|
112
|
+
if (descriptor && descriptor.value !== undefined) {
|
|
113
|
+
const change = this.props.updateProperty(propName, descriptor.value, 'property');
|
|
114
|
+
if (change) {
|
|
115
|
+
changes.push(change);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return changes;
|
|
120
|
+
}
|
|
121
|
+
_handlePropertyChanges(changes) {
|
|
122
|
+
if (changes.length === 0)
|
|
123
|
+
return;
|
|
124
|
+
this.onPropertiesChanged(changes);
|
|
125
|
+
const formValueChanged = changes.some(c => this.props.isFormValue(c.name));
|
|
126
|
+
if (formValueChanged) {
|
|
127
|
+
this.updateFormValue();
|
|
128
|
+
}
|
|
129
|
+
const visualChanged = changes.some(c => this.props.isVisual(c.name));
|
|
130
|
+
if (visualChanged && this._connected) {
|
|
131
|
+
this.render();
|
|
132
|
+
}
|
|
133
|
+
this._emitChangeEvents(changes);
|
|
134
|
+
}
|
|
135
|
+
_emitChangeEvents(changes) {
|
|
136
|
+
for (const change of changes) {
|
|
137
|
+
if (this.props.shouldEmitChange(change.name)) {
|
|
138
|
+
this.dispatchEvent(new CustomEvent('prop:change', {
|
|
139
|
+
detail: {
|
|
140
|
+
property: change.name,
|
|
141
|
+
oldValue: change.oldValue,
|
|
142
|
+
newValue: change.newValue
|
|
143
|
+
},
|
|
144
|
+
bubbles: true,
|
|
145
|
+
composed: true
|
|
146
|
+
}));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
updateFormValue() {
|
|
151
|
+
const formValue = this.getFormValue();
|
|
152
|
+
this._internals.setFormValue(formValue);
|
|
153
|
+
}
|
|
154
|
+
getFormValue() {
|
|
155
|
+
return this.props.get('value') ?? null;
|
|
156
|
+
}
|
|
157
|
+
onPropertiesChanged(changes) {
|
|
158
|
+
}
|
|
159
|
+
onConnect() {
|
|
160
|
+
}
|
|
161
|
+
onDisconnect() {
|
|
162
|
+
}
|
|
163
|
+
get form() {
|
|
164
|
+
return this._internals.form;
|
|
165
|
+
}
|
|
166
|
+
applyLabelName(roleEl) {
|
|
167
|
+
let text = Array.from(this._internals.labels ?? [])
|
|
168
|
+
.map((l) => l.textContent?.trim())
|
|
169
|
+
.filter(Boolean)
|
|
170
|
+
.join(' ');
|
|
171
|
+
if (!text) {
|
|
172
|
+
const lbl = this.closest('label');
|
|
173
|
+
if (lbl) {
|
|
174
|
+
const clone = lbl.cloneNode(true);
|
|
175
|
+
clone.querySelectorAll(this.tagName.toLowerCase()).forEach((n) => n.remove());
|
|
176
|
+
text = clone.textContent?.trim() ?? '';
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (text)
|
|
180
|
+
roleEl.setAttribute('aria-label', text);
|
|
181
|
+
else
|
|
182
|
+
roleEl.removeAttribute('aria-label');
|
|
183
|
+
}
|
|
184
|
+
isDuplicateActivationClick() {
|
|
185
|
+
if (this._handlingActivationClick)
|
|
186
|
+
return true;
|
|
187
|
+
this._handlingActivationClick = true;
|
|
188
|
+
queueMicrotask(() => { this._handlingActivationClick = false; });
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
formResetCallback() {
|
|
192
|
+
for (const [name, def] of this._resetDefaults ?? []) {
|
|
193
|
+
this.setProperty(name, def);
|
|
194
|
+
}
|
|
195
|
+
this.onFormReset();
|
|
196
|
+
}
|
|
197
|
+
onFormReset() {
|
|
198
|
+
}
|
|
320
199
|
}
|
|
321
200
|
TyComponent.formAssociated = true;
|
|
322
|
-
// Subclasses must define their property configuration
|
|
323
201
|
TyComponent.properties = {};
|
|
324
|
-
//# sourceMappingURL=ty-component.js.map
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TyButton Web Component
|
|
3
|
-
*
|
|
4
|
-
* Three appearance variants × six flavors × three tones (+/base/-).
|
|
5
|
-
* appearance="solid" saturated brand fill (default)
|
|
6
|
-
* appearance="outlined" transparent bg, text === border
|
|
7
|
-
* appearance="ghost" text only, hover bg
|
|
8
|
-
*
|
|
9
|
-
* Append `+` or `-` to a flavor for stronger/softer tone (e.g. "primary+").
|
|
2
|
+
* TyButton Web Component — three appearances (solid/outlined/ghost) × six
|
|
3
|
+
* flavors × three tones. Append `+`/`-` to a flavor for stronger/softer tone.
|
|
10
4
|
*/
|
|
11
5
|
import type { Flavor, Size, TyButtonElement } from "../types/common.js";
|
|
12
6
|
import { TyComponent } from "../base/ty-component.js";
|
|
@@ -27,13 +21,6 @@ interface ButtonState {
|
|
|
27
21
|
}
|
|
28
22
|
/**
|
|
29
23
|
* Ty Button Component
|
|
30
|
-
*
|
|
31
|
-
* @example
|
|
32
|
-
* ```html
|
|
33
|
-
* <ty-button flavor="primary">Default solid</ty-button>
|
|
34
|
-
* <ty-button appearance="outlined" flavor="danger">Outlined</ty-button>
|
|
35
|
-
* <ty-button appearance="ghost" flavor="success+">Ghost stronger</ty-button>
|
|
36
|
-
* ```
|
|
37
24
|
*/
|
|
38
25
|
export declare class TyButton extends TyComponent<ButtonState> implements TyButtonElement {
|
|
39
26
|
static formAssociated: boolean;
|
|
@@ -46,7 +33,7 @@ export declare class TyButton extends TyComponent<ButtonState> implements TyButt
|
|
|
46
33
|
size: {
|
|
47
34
|
type: "string";
|
|
48
35
|
visual: boolean;
|
|
49
|
-
default:
|
|
36
|
+
default: Size;
|
|
50
37
|
validate: (v: any) => boolean;
|
|
51
38
|
coerce: (v: any) => any;
|
|
52
39
|
};
|
|
@@ -147,4 +134,3 @@ export declare class TyButton extends TyComponent<ButtonState> implements TyButt
|
|
|
147
134
|
protected render(): void;
|
|
148
135
|
}
|
|
149
136
|
export {};
|
|
150
|
-
//# sourceMappingURL=button.d.ts.map
|