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
package/lib/components/icon.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TyIcon Web Component
|
|
3
|
-
* PORTED FROM: clj/ty/components/icon.cljs
|
|
4
|
-
* SVG icon component with size variants and animations
|
|
2
|
+
* TyIcon Web Component — SVG icon with size variants and animations.
|
|
5
3
|
*/
|
|
6
4
|
import type { IconSize, IconTempo, TyIconElement } from '../types/common.js';
|
|
7
5
|
import { TyComponent } from '../base/ty-component.js';
|
|
@@ -19,13 +17,6 @@ interface IconState {
|
|
|
19
17
|
}
|
|
20
18
|
/**
|
|
21
19
|
* Ty Icon Component
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```html
|
|
25
|
-
* <ty-icon name="check"></ty-icon>
|
|
26
|
-
* <ty-icon name="spinner" spin></ty-icon>
|
|
27
|
-
* <ty-icon name="heart" size="xl"></ty-icon>
|
|
28
|
-
* ```
|
|
29
20
|
*/
|
|
30
21
|
export declare class TyIcon extends TyComponent<IconState> implements TyIconElement {
|
|
31
22
|
static formAssociated: boolean;
|
|
@@ -69,13 +60,7 @@ export declare class TyIcon extends TyComponent<IconState> implements TyIconElem
|
|
|
69
60
|
*/
|
|
70
61
|
private _slot;
|
|
71
62
|
constructor();
|
|
72
|
-
/**
|
|
73
|
-
* Called when component connects to DOM
|
|
74
|
-
*/
|
|
75
63
|
protected onConnect(): void;
|
|
76
|
-
/**
|
|
77
|
-
* Called when component disconnects from DOM
|
|
78
|
-
*/
|
|
79
64
|
protected onDisconnect(): void;
|
|
80
65
|
/**
|
|
81
66
|
* Handle property changes - called BEFORE render
|
|
@@ -97,13 +82,8 @@ export declare class TyIcon extends TyComponent<IconState> implements TyIconElem
|
|
|
97
82
|
/** Update host element classes */
|
|
98
83
|
private updateClasses;
|
|
99
84
|
/**
|
|
100
|
-
* Render the icon SVG
|
|
101
|
-
*
|
|
102
|
-
* 1. Check memory registry (instant)
|
|
103
|
-
* 2. If found in memory -> render immediately
|
|
104
|
-
* 3. If not in memory -> show NOT_FOUND_ICON immediately (prevents empty state)
|
|
105
|
-
* 4. Then check cache asynchronously and replace if found
|
|
106
|
-
* 5. Only re-render if SVG actually changed
|
|
85
|
+
* Render the icon SVG. Unknown/unset names fall back to NOT_FOUND_ICON
|
|
86
|
+
* immediately rather than rendering nothing (prevents layout shift).
|
|
107
87
|
*/
|
|
108
88
|
protected render(): void;
|
|
109
89
|
/**
|
|
@@ -115,4 +95,3 @@ export declare class TyIcon extends TyComponent<IconState> implements TyIconElem
|
|
|
115
95
|
private renderSvg;
|
|
116
96
|
}
|
|
117
97
|
export { IconRegistry };
|
|
118
|
-
//# sourceMappingURL=icon.d.ts.map
|
package/lib/components/icon.js
CHANGED
|
@@ -1,245 +1,156 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TyIcon Web Component
|
|
3
|
-
* PORTED FROM: clj/ty/components/icon.cljs
|
|
4
|
-
* SVG icon component with size variants and animations
|
|
5
|
-
*/
|
|
6
1
|
import { TyComponent } from '../base/ty-component.js';
|
|
7
2
|
import { ensureStyles } from '../utils/styles.js';
|
|
8
3
|
import { iconStyles } from '../styles/icon.js';
|
|
9
4
|
import * as IconRegistry from '../utils/icon-registry.js';
|
|
10
5
|
let _iconIdCounter = 0;
|
|
11
|
-
/** Fallback SVG for missing icons - More visible to prevent layout shift */
|
|
12
6
|
const NOT_FOUND_ICON = `<svg xmlns="http://www.w3.org/2000/svg"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
7
|
+
viewBox="0 0 512 512"
|
|
8
|
+
fill="currentColor"
|
|
9
|
+
opacity="0.2">
|
|
10
|
+
<path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512z"/>
|
|
17
11
|
</svg>`;
|
|
18
|
-
/**
|
|
19
|
-
* Ty Icon Component
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```html
|
|
23
|
-
* <ty-icon name="check"></ty-icon>
|
|
24
|
-
* <ty-icon name="spinner" spin></ty-icon>
|
|
25
|
-
* <ty-icon name="heart" size="xl"></ty-icon>
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
12
|
export class TyIcon extends TyComponent {
|
|
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
|
-
if (this.getProperty('spin')) {
|
|
161
|
-
classes.push('icon-spin');
|
|
162
|
-
}
|
|
163
|
-
if (this.getProperty('pulse')) {
|
|
164
|
-
classes.push('icon-pulse');
|
|
165
|
-
}
|
|
166
|
-
// Tempo class
|
|
167
|
-
const tempo = this.getProperty('tempo');
|
|
168
|
-
if (tempo && (this.getProperty('spin') || this.getProperty('pulse'))) {
|
|
169
|
-
classes.push(`icon-tempo-${tempo}`);
|
|
170
|
-
}
|
|
171
|
-
// Preserve user-added classes that don't conflict
|
|
172
|
-
const currentClasses = this.className.split(/\s+/).filter(cls => {
|
|
173
|
-
// Filter out component-managed classes
|
|
174
|
-
return cls &&
|
|
175
|
-
!cls.startsWith('icon-') &&
|
|
176
|
-
cls !== 'icon-spin' &&
|
|
177
|
-
cls !== 'icon-pulse';
|
|
178
|
-
});
|
|
179
|
-
return [...classes, ...currentClasses];
|
|
180
|
-
}
|
|
181
|
-
/** Update host element classes */
|
|
182
|
-
updateClasses() {
|
|
183
|
-
const newClasses = this.buildClasses().join(' ');
|
|
184
|
-
if (this.className !== newClasses) {
|
|
185
|
-
this.className = newClasses;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Render the icon SVG
|
|
190
|
-
* Smart rendering strategy:
|
|
191
|
-
* 1. Check memory registry (instant)
|
|
192
|
-
* 2. If found in memory -> render immediately
|
|
193
|
-
* 3. If not in memory -> show NOT_FOUND_ICON immediately (prevents empty state)
|
|
194
|
-
* 4. Then check cache asynchronously and replace if found
|
|
195
|
-
* 5. Only re-render if SVG actually changed
|
|
196
|
-
*/
|
|
197
|
-
render() {
|
|
198
|
-
const name = this.getProperty('name');
|
|
199
|
-
if (!name) {
|
|
200
|
-
this.renderSvg(NOT_FOUND_ICON);
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
// Fast path: Check memory registry first
|
|
204
|
-
const memorySvg = IconRegistry.getIcon(name);
|
|
205
|
-
if (memorySvg) {
|
|
206
|
-
this.renderSvg(memorySvg);
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
this.renderSvg(NOT_FOUND_ICON);
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Update the slot's fallback content.
|
|
213
|
-
* If the user has slotted light-DOM children (e.g., raw <svg>), the browser
|
|
214
|
-
* shows those instead and the fallback stays hidden — but we still keep it
|
|
215
|
-
* up to date so removing the children reveals the right registry/fallback SVG.
|
|
216
|
-
*/
|
|
217
|
-
renderSvg(svg) {
|
|
218
|
-
// Only render if content actually changed
|
|
219
|
-
if (this._currentSvg === svg) {
|
|
220
|
-
return;
|
|
221
|
-
}
|
|
222
|
-
if (this._slot) {
|
|
223
|
-
this._slot.innerHTML = svg;
|
|
224
|
-
this._currentSvg = svg;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
13
|
+
constructor() {
|
|
14
|
+
super();
|
|
15
|
+
this._watchId = null;
|
|
16
|
+
this._currentSvg = '';
|
|
17
|
+
this._slot = null;
|
|
18
|
+
ensureStyles(this.shadowRoot, { css: iconStyles, id: 'ty-icon' });
|
|
19
|
+
this._slot = document.createElement('slot');
|
|
20
|
+
this._slot.innerHTML = NOT_FOUND_ICON;
|
|
21
|
+
this._currentSvg = NOT_FOUND_ICON;
|
|
22
|
+
this.shadowRoot.appendChild(this._slot);
|
|
23
|
+
}
|
|
24
|
+
onConnect() {
|
|
25
|
+
this._watchId = `ty-icon-${++_iconIdCounter}`;
|
|
26
|
+
if (this.name) {
|
|
27
|
+
IconRegistry.addWatcher(this._watchId, this.name, (changedIcons) => {
|
|
28
|
+
if (this.name && changedIcons.has(this.name)) {
|
|
29
|
+
this.render();
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
this.updateClasses();
|
|
34
|
+
}
|
|
35
|
+
onDisconnect() {
|
|
36
|
+
if (this._watchId) {
|
|
37
|
+
IconRegistry.removeWatcher(this._watchId);
|
|
38
|
+
this._watchId = null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
onPropertiesChanged(changes) {
|
|
42
|
+
for (const change of changes) {
|
|
43
|
+
if (change.name === 'name') {
|
|
44
|
+
if (this._watchId) {
|
|
45
|
+
IconRegistry.removeWatcher(this._watchId);
|
|
46
|
+
}
|
|
47
|
+
const newName = change.newValue || '';
|
|
48
|
+
if (newName && this.isConnected) {
|
|
49
|
+
this._watchId = `ty-icon-${++_iconIdCounter}`;
|
|
50
|
+
IconRegistry.addWatcher(this._watchId, newName, (changedIcons) => {
|
|
51
|
+
if (this.name && changedIcons.has(this.name)) {
|
|
52
|
+
this.render();
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
this.updateClasses();
|
|
59
|
+
}
|
|
60
|
+
get name() {
|
|
61
|
+
return this.getProperty('name');
|
|
62
|
+
}
|
|
63
|
+
set name(value) {
|
|
64
|
+
this.setProperty('name', value);
|
|
65
|
+
}
|
|
66
|
+
get size() {
|
|
67
|
+
const val = this.getProperty('size');
|
|
68
|
+
return val || undefined;
|
|
69
|
+
}
|
|
70
|
+
set size(value) {
|
|
71
|
+
this.setProperty('size', value || '');
|
|
72
|
+
}
|
|
73
|
+
get spin() {
|
|
74
|
+
return this.getProperty('spin');
|
|
75
|
+
}
|
|
76
|
+
set spin(value) {
|
|
77
|
+
this.setProperty('spin', value);
|
|
78
|
+
}
|
|
79
|
+
get pulse() {
|
|
80
|
+
return this.getProperty('pulse');
|
|
81
|
+
}
|
|
82
|
+
set pulse(value) {
|
|
83
|
+
this.setProperty('pulse', value);
|
|
84
|
+
}
|
|
85
|
+
get tempo() {
|
|
86
|
+
const val = this.getProperty('tempo');
|
|
87
|
+
return val || undefined;
|
|
88
|
+
}
|
|
89
|
+
set tempo(value) {
|
|
90
|
+
this.setProperty('tempo', value || '');
|
|
91
|
+
}
|
|
92
|
+
buildClasses() {
|
|
93
|
+
const classes = [];
|
|
94
|
+
const size = this.getProperty('size');
|
|
95
|
+
if (size) {
|
|
96
|
+
classes.push(`icon-${size}`);
|
|
97
|
+
}
|
|
98
|
+
if (this.getProperty('spin')) {
|
|
99
|
+
classes.push('icon-spin');
|
|
100
|
+
}
|
|
101
|
+
if (this.getProperty('pulse')) {
|
|
102
|
+
classes.push('icon-pulse');
|
|
103
|
+
}
|
|
104
|
+
const tempo = this.getProperty('tempo');
|
|
105
|
+
if (tempo && (this.getProperty('spin') || this.getProperty('pulse'))) {
|
|
106
|
+
classes.push(`icon-tempo-${tempo}`);
|
|
107
|
+
}
|
|
108
|
+
const currentClasses = this.className.split(/\s+/).filter(cls => {
|
|
109
|
+
return cls &&
|
|
110
|
+
!cls.startsWith('icon-') &&
|
|
111
|
+
cls !== 'icon-spin' &&
|
|
112
|
+
cls !== 'icon-pulse';
|
|
113
|
+
});
|
|
114
|
+
return [...classes, ...currentClasses];
|
|
115
|
+
}
|
|
116
|
+
updateClasses() {
|
|
117
|
+
const newClasses = this.buildClasses().join(' ');
|
|
118
|
+
if (this.className !== newClasses) {
|
|
119
|
+
this.className = newClasses;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
render() {
|
|
123
|
+
const name = this.getProperty('name');
|
|
124
|
+
if (!name) {
|
|
125
|
+
this.renderSvg(NOT_FOUND_ICON);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const memorySvg = IconRegistry.getIcon(name);
|
|
129
|
+
if (memorySvg) {
|
|
130
|
+
this.renderSvg(memorySvg);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
this.renderSvg(NOT_FOUND_ICON);
|
|
134
|
+
}
|
|
135
|
+
renderSvg(svg) {
|
|
136
|
+
if (this._currentSvg === svg) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (this._slot) {
|
|
140
|
+
this._slot.innerHTML = svg;
|
|
141
|
+
this._currentSvg = svg;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
227
144
|
}
|
|
228
145
|
TyIcon.formAssociated = false;
|
|
229
|
-
// ============================================================================
|
|
230
|
-
// PROPERTY CONFIGURATION - Declarative property lifecycle
|
|
231
|
-
// ============================================================================
|
|
232
146
|
TyIcon.properties = {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
147
|
+
name: { type: 'string', visual: true, default: '' },
|
|
148
|
+
size: { type: 'string', visual: true, default: '' },
|
|
149
|
+
spin: { type: 'boolean', visual: true, default: false },
|
|
150
|
+
pulse: { type: 'boolean', visual: true, default: false },
|
|
151
|
+
tempo: { type: 'string', visual: true, default: '' },
|
|
238
152
|
};
|
|
239
|
-
// Register the custom element
|
|
240
153
|
if (!customElements.get('ty-icon')) {
|
|
241
|
-
|
|
154
|
+
customElements.define('ty-icon', TyIcon);
|
|
242
155
|
}
|
|
243
|
-
// Export for use in other modules
|
|
244
156
|
export { IconRegistry };
|
|
245
|
-
//# sourceMappingURL=icon.js.map
|
|
@@ -1,63 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TyInput Web Component
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* Enhanced input component with:
|
|
7
|
-
* - Label, error messages, semantic styling
|
|
8
|
-
* - Icon slots (start/end)
|
|
9
|
-
* - Numeric formatting with shadow values
|
|
10
|
-
* - Currency, percent, compact notation
|
|
11
|
-
* - Format-on-blur / raw-on-focus behavior
|
|
12
|
-
* - Debounce (0-5000ms) for input/change events
|
|
13
|
-
* - Immediate event firing on blur (cancels pending debounce)
|
|
14
|
-
*
|
|
15
|
-
* NOTE: Checkbox functionality is in separate ty-checkbox component
|
|
2
|
+
* TyInput Web Component - text input with label, error, icon slots and
|
|
3
|
+
* locale-aware numeric formatting (format-on-blur / raw-on-focus via a parsed
|
|
4
|
+
* "shadow value"). Debounce 0-5000ms; blur flushes any pending debounced event.
|
|
16
5
|
*/
|
|
17
6
|
import type { Flavor, Size, InputType, TyInputElement } from '../types/common.js';
|
|
18
7
|
import { TyComponent } from '../base/ty-component.js';
|
|
19
8
|
import type { PropertyChange } from '../utils/property-manager.js';
|
|
20
|
-
/**
|
|
21
|
-
* Ty Input Component (Phase D - Complete with Debounce)
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```html
|
|
25
|
-
* <!-- Basic input -->
|
|
26
|
-
* <ty-input label="Email" type="email" placeholder="Enter email" required></ty-input>
|
|
27
|
-
*
|
|
28
|
-
* <!-- With icons -->
|
|
29
|
-
* <ty-input label="Search">
|
|
30
|
-
* <ty-icon slot="start" name="search"></ty-icon>
|
|
31
|
-
* </ty-input>
|
|
32
|
-
*
|
|
33
|
-
* <!-- With debounce (500ms) -->
|
|
34
|
-
* <ty-input
|
|
35
|
-
* label="Search"
|
|
36
|
-
* debounce="500"
|
|
37
|
-
* placeholder="Type to search...">
|
|
38
|
-
* </ty-input>
|
|
39
|
-
*
|
|
40
|
-
* <!-- Currency formatting -->
|
|
41
|
-
* <ty-input
|
|
42
|
-
* label="Price"
|
|
43
|
-
* type="currency"
|
|
44
|
-
* currency="USD"
|
|
45
|
-
* locale="en-US"
|
|
46
|
-
* value="1234.56">
|
|
47
|
-
* </ty-input>
|
|
48
|
-
*
|
|
49
|
-
* <!-- Percent formatting -->
|
|
50
|
-
* <ty-input
|
|
51
|
-
* label="Tax Rate"
|
|
52
|
-
* type="percent"
|
|
53
|
-
* value="15"
|
|
54
|
-
* precision="2">
|
|
55
|
-
* </ty-input>
|
|
56
|
-
* ```
|
|
57
|
-
*/
|
|
58
|
-
/**
|
|
59
|
-
* Internal state interface for TyInput component
|
|
60
|
-
*/
|
|
61
9
|
interface InputState {
|
|
62
10
|
shadowValue: number | string | null;
|
|
63
11
|
isFocused: boolean;
|
|
@@ -119,7 +67,7 @@ export declare class TyInput extends TyComponent<InputState> implements TyInputE
|
|
|
119
67
|
size: {
|
|
120
68
|
type: "string";
|
|
121
69
|
visual: boolean;
|
|
122
|
-
default:
|
|
70
|
+
default: Size;
|
|
123
71
|
validate: (v: any) => boolean;
|
|
124
72
|
coerce: (v: any) => any;
|
|
125
73
|
};
|
|
@@ -165,51 +113,23 @@ export declare class TyInput extends TyComponent<InputState> implements TyInputE
|
|
|
165
113
|
private _changeDebounceTimer;
|
|
166
114
|
private _localeObserver?;
|
|
167
115
|
constructor();
|
|
168
|
-
/**
|
|
169
|
-
* Called when component connects to DOM
|
|
170
|
-
* TyComponent already handled pre-connection property capture
|
|
171
|
-
*/
|
|
116
|
+
/** TyComponent already handled pre-connection property capture. */
|
|
172
117
|
protected onConnect(): void;
|
|
173
118
|
/** Custom (non-built-in) flavors — see utils/flavor-sheet.ts. */
|
|
174
119
|
private _syncCustomFlavor;
|
|
175
|
-
/**
|
|
176
|
-
* Called when component disconnects from DOM
|
|
177
|
-
*/
|
|
178
120
|
protected onDisconnect(): void;
|
|
179
|
-
/**
|
|
180
|
-
* Handle property changes - called BEFORE render
|
|
181
|
-
* This replaces the old attributeChangedCallback logic
|
|
182
|
-
*/
|
|
121
|
+
/** Handle property changes — called BEFORE render. */
|
|
183
122
|
protected onPropertiesChanged(changes: PropertyChange[]): void;
|
|
184
|
-
/**
|
|
185
|
-
* Hook: Called when form is reset
|
|
186
|
-
* Clear shadow value and focus state
|
|
187
|
-
*/
|
|
188
123
|
protected onFormReset(): void;
|
|
189
124
|
/**
|
|
190
125
|
* Override form value to return shadow value
|
|
191
126
|
* This ensures numeric types submit their parsed values
|
|
192
127
|
*/
|
|
193
128
|
protected getFormValue(): FormDataEntryValue | null;
|
|
194
|
-
/**
|
|
195
|
-
* Initialize shadow value from the initial value attribute
|
|
196
|
-
*/
|
|
197
129
|
private initializeShadowValue;
|
|
198
|
-
/**
|
|
199
|
-
* Parse a string value to the appropriate shadow value type
|
|
200
|
-
*/
|
|
201
130
|
private parseShadowValue;
|
|
202
|
-
/**
|
|
203
|
-
* Check if current input should format numbers
|
|
204
|
-
*/
|
|
205
131
|
private shouldFormat;
|
|
206
|
-
/**
|
|
207
|
-
* Get the format configuration for current input
|
|
208
|
-
*/
|
|
209
132
|
private getFormatConfig;
|
|
210
|
-
/**
|
|
211
|
-
* Get the display value (formatted or raw)
|
|
212
|
-
*/
|
|
213
133
|
private getDisplayValue;
|
|
214
134
|
get type(): InputType;
|
|
215
135
|
set type(v: InputType);
|
|
@@ -240,32 +160,13 @@ export declare class TyInput extends TyComponent<InputState> implements TyInputE
|
|
|
240
160
|
get debounce(): number;
|
|
241
161
|
set debounce(v: number | string);
|
|
242
162
|
get form(): HTMLFormElement | null;
|
|
243
|
-
/**
|
|
244
|
-
* Build CSS class list for input wrapper
|
|
245
|
-
*/
|
|
246
163
|
private buildClassList;
|
|
247
|
-
/**
|
|
248
|
-
* Dispatch input event (helper method for debouncing)
|
|
249
|
-
*/
|
|
250
164
|
private dispatchInputEvent;
|
|
251
|
-
/**
|
|
252
|
-
* Dispatch change event (helper method for debouncing)
|
|
253
|
-
*/
|
|
254
165
|
private dispatchChangeEvent;
|
|
255
|
-
/**
|
|
256
|
-
* Remove event listeners for cleanup
|
|
257
|
-
*/
|
|
258
166
|
private removeEventListeners;
|
|
259
|
-
/**
|
|
260
|
-
* Setup event listeners for input element
|
|
261
|
-
* IMPORTANT: Only called ONCE, not on every render (like ClojureScript)
|
|
262
|
-
*/
|
|
167
|
+
/** IMPORTANT: Only called ONCE, not on every render. */
|
|
263
168
|
private setupEventListeners;
|
|
264
|
-
/**
|
|
265
|
-
* Render the input component with wrapper and slots
|
|
266
|
-
* Phase C: Uses getDisplayValue() for formatted output
|
|
267
|
-
*
|
|
268
|
-
*/
|
|
169
|
+
/** Render the input component with wrapper and slots. */
|
|
269
170
|
render(): void;
|
|
270
171
|
/**
|
|
271
172
|
* Wire the password reveal toggle (rendered only for type="password").
|
|
@@ -282,4 +183,3 @@ export declare class TyInput extends TyComponent<InputState> implements TyInputE
|
|
|
282
183
|
private updateValidity;
|
|
283
184
|
}
|
|
284
185
|
export {};
|
|
285
|
-
//# sourceMappingURL=input.d.ts.map
|