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
|
@@ -1,152 +1,44 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Property Capture Utility
|
|
3
|
-
*
|
|
4
|
-
* Solves the problem of frameworks (React, Reagent, etc.) setting properties
|
|
5
|
-
* on custom elements BEFORE connectedCallback runs.
|
|
6
|
-
*
|
|
7
|
-
* PROBLEM:
|
|
8
|
-
* 1. Framework creates element: document.createElement('ty-dropdown')
|
|
9
|
-
* 2. Framework sets properties: element.value = "foo"
|
|
10
|
-
* 3. Constructor runs and defines getters/setters
|
|
11
|
-
* 4. BUT properties were already set, creating instance properties
|
|
12
|
-
* 5. Instance properties shadow the class getters/setters
|
|
13
|
-
* 6. connectedCallback runs - too late!
|
|
14
|
-
*
|
|
15
|
-
* SOLUTION:
|
|
16
|
-
* In connectedCallback, capture any pre-set properties and apply them properly.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```typescript
|
|
20
|
-
* connectedCallback(): void {
|
|
21
|
-
* const preSetProps = capturePreSetProperties(this, [
|
|
22
|
-
* 'value', 'clearable', 'disabled'
|
|
23
|
-
* ])
|
|
24
|
-
*
|
|
25
|
-
* if (preSetProps.value !== undefined) {
|
|
26
|
-
* this._value = preSetProps.value
|
|
27
|
-
* }
|
|
28
|
-
* }
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
/**
|
|
32
|
-
* Capture properties that were set before connectedCallback
|
|
33
|
-
*
|
|
34
|
-
* @param element - The custom element instance
|
|
35
|
-
* @param propertyNames - Array of property names to check
|
|
36
|
-
* @param options - Capture options
|
|
37
|
-
* @returns Record of captured properties with metadata
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* ```typescript
|
|
41
|
-
* const captured = capturePreSetProperties(this, ['value', 'disabled'])
|
|
42
|
-
* // {
|
|
43
|
-
* // value: { name: 'value', value: 'foo', hadProperty: true },
|
|
44
|
-
* // disabled: { name: 'disabled', value: undefined, hadProperty: false }
|
|
45
|
-
* // }
|
|
46
|
-
* ```
|
|
47
|
-
*/
|
|
48
1
|
export function capturePreSetProperties(element, propertyNames, options = { cleanup: true }) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
return captured;
|
|
2
|
+
const captured = {};
|
|
3
|
+
for (const name of propertyNames) {
|
|
4
|
+
const descriptor = Object.getOwnPropertyDescriptor(element, name);
|
|
5
|
+
captured[name] = {
|
|
6
|
+
name,
|
|
7
|
+
value: descriptor?.value,
|
|
8
|
+
hadProperty: descriptor !== undefined && descriptor.value !== undefined
|
|
9
|
+
};
|
|
10
|
+
if (options.cleanup && captured[name].hadProperty) {
|
|
11
|
+
delete element[name];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return captured;
|
|
63
15
|
}
|
|
64
|
-
/**
|
|
65
|
-
* Simpler API - just get the values that were pre-set
|
|
66
|
-
*
|
|
67
|
-
* @param element - The custom element instance
|
|
68
|
-
* @param propertyNames - Array of property names to check
|
|
69
|
-
* @param options - Capture options
|
|
70
|
-
* @returns Record of property names to values (only includes properties that were set)
|
|
71
|
-
*
|
|
72
|
-
* @example
|
|
73
|
-
* ```typescript
|
|
74
|
-
* const values = getCapturedValues(this, ['value', 'disabled'])
|
|
75
|
-
* if (values.value !== undefined) {
|
|
76
|
-
* this._value = values.value
|
|
77
|
-
* }
|
|
78
|
-
* ```
|
|
79
|
-
*/
|
|
80
16
|
export function getCapturedValues(element, propertyNames, options) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
17
|
+
const captured = capturePreSetProperties(element, propertyNames, options);
|
|
18
|
+
const values = {};
|
|
19
|
+
for (const [name, data] of Object.entries(captured)) {
|
|
20
|
+
if (data.hadProperty) {
|
|
21
|
+
values[name] = data.value;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return values;
|
|
89
25
|
}
|
|
90
|
-
/**
|
|
91
|
-
* Automatically apply pre-set properties to private fields
|
|
92
|
-
*
|
|
93
|
-
* @param element - The custom element instance
|
|
94
|
-
* @param propertyNames - Array of property names to check
|
|
95
|
-
* @param propertyMap - Optional mapping of public names to private field names
|
|
96
|
-
* Default: adds underscore prefix (e.g., 'value' -> '_value')
|
|
97
|
-
* @param options - Capture options
|
|
98
|
-
*
|
|
99
|
-
* @example
|
|
100
|
-
* ```typescript
|
|
101
|
-
* // Simple usage (uses _propertyName convention)
|
|
102
|
-
* applyPreSetProperties(this, ['value', 'disabled'])
|
|
103
|
-
* // Sets this._value and this._disabled
|
|
104
|
-
*
|
|
105
|
-
* // Custom mapping
|
|
106
|
-
* applyPreSetProperties(this, ['value'], { value: 'internalValue' })
|
|
107
|
-
* // Sets this.internalValue
|
|
108
|
-
* ```
|
|
109
|
-
*/
|
|
110
26
|
export function applyPreSetProperties(element, propertyNames, propertyMap, options) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
27
|
+
const captured = capturePreSetProperties(element, propertyNames, options);
|
|
28
|
+
for (const [name, data] of Object.entries(captured)) {
|
|
29
|
+
if (data.hadProperty) {
|
|
30
|
+
const privateName = propertyMap?.[name] || `_${name}`;
|
|
31
|
+
element[privateName] = data.value;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
119
34
|
}
|
|
120
|
-
/**
|
|
121
|
-
* Helper for components with standard _propertyName pattern
|
|
122
|
-
*
|
|
123
|
-
* @param element - The custom element instance
|
|
124
|
-
* @param propertyNames - Array of property names to check
|
|
125
|
-
* @param transformer - Optional function to transform values before setting
|
|
126
|
-
* @param options - Capture options
|
|
127
|
-
*
|
|
128
|
-
* @example
|
|
129
|
-
* ```typescript
|
|
130
|
-
* connectedCallback(): void {
|
|
131
|
-
* // Basic usage
|
|
132
|
-
* captureAndApplyProperties(this, ['value', 'disabled', 'required'])
|
|
133
|
-
*
|
|
134
|
-
* // With transformation
|
|
135
|
-
* captureAndApplyProperties(this, ['value'], (name, value) => {
|
|
136
|
-
* if (name === 'value') return this.parseValue(value)
|
|
137
|
-
* return value
|
|
138
|
-
* })
|
|
139
|
-
* }
|
|
140
|
-
* ```
|
|
141
|
-
*/
|
|
142
35
|
export function captureAndApplyProperties(element, propertyNames, transformer, options) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
36
|
+
const captured = capturePreSetProperties(element, propertyNames, options);
|
|
37
|
+
for (const [name, data] of Object.entries(captured)) {
|
|
38
|
+
if (data.hadProperty) {
|
|
39
|
+
const privateName = `_${name}`;
|
|
40
|
+
const value = transformer ? transformer(name, data.value) : data.value;
|
|
41
|
+
element[privateName] = value;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
151
44
|
}
|
|
152
|
-
//# sourceMappingURL=property-capture.js.map
|
|
@@ -1,197 +1,127 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Property Manager - Unified property lifecycle for web components
|
|
3
|
-
*
|
|
4
|
-
* Handles property/attribute synchronization, validation, coercion, and change tracking.
|
|
5
|
-
* All property updates flow through a single code path for consistency.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Manages component properties with unified lifecycle
|
|
9
|
-
*/
|
|
10
1
|
export class PropertyManager {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
// Deep equality for objects/arrays (simple implementation)
|
|
139
|
-
// For production, consider using a proper deep equality library
|
|
140
|
-
try {
|
|
141
|
-
return JSON.stringify(a) === JSON.stringify(b);
|
|
142
|
-
}
|
|
143
|
-
catch {
|
|
144
|
-
return false;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Get a property value
|
|
149
|
-
*/
|
|
150
|
-
get(name) {
|
|
151
|
-
return this._props.get(name);
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Get all properties as an object
|
|
155
|
-
*/
|
|
156
|
-
getAll() {
|
|
157
|
-
return Object.fromEntries(this._props);
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Get property configuration
|
|
161
|
-
*/
|
|
162
|
-
getConfig(name) {
|
|
163
|
-
return this._config[name];
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Check if a property is visual (requires render)
|
|
167
|
-
*/
|
|
168
|
-
isVisual(name) {
|
|
169
|
-
return this._config[name]?.visual ?? false;
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Check if a property affects form value
|
|
173
|
-
*/
|
|
174
|
-
isFormValue(name) {
|
|
175
|
-
return this._config[name]?.formValue ?? false;
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Check if a property should emit change events
|
|
179
|
-
*/
|
|
180
|
-
shouldEmitChange(name) {
|
|
181
|
-
return this._config[name]?.emitChange ?? false;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Handle property aliases (e.g., not-clearable → clearable: false)
|
|
185
|
-
*/
|
|
186
|
-
handleAlias(aliasName, value) {
|
|
187
|
-
// Find property with this alias
|
|
188
|
-
for (const [propName, config] of Object.entries(this._config)) {
|
|
189
|
-
if (config.aliases && aliasName in config.aliases) {
|
|
190
|
-
const aliasedValue = config.aliases[aliasName];
|
|
191
|
-
return this.updateProperty(propName, aliasedValue, 'attribute');
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
return null;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
//# sourceMappingURL=property-manager.js.map
|
|
2
|
+
constructor(config) {
|
|
3
|
+
this._props = new Map();
|
|
4
|
+
this._config = config;
|
|
5
|
+
this._initializeDefaults();
|
|
6
|
+
}
|
|
7
|
+
_initializeDefaults() {
|
|
8
|
+
for (const [name, config] of Object.entries(this._config)) {
|
|
9
|
+
if (config.default !== undefined) {
|
|
10
|
+
this._props.set(name, config.default);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
hasConfig(name) {
|
|
15
|
+
return name in this._config;
|
|
16
|
+
}
|
|
17
|
+
updateProperty(name, value, source = 'property') {
|
|
18
|
+
const config = this._config[name];
|
|
19
|
+
if (!config) {
|
|
20
|
+
console.warn(`[PropertyManager] Unknown property: ${name}`);
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const oldValue = this._props.get(name);
|
|
24
|
+
const coercedValue = this._coerceValue(name, value, config);
|
|
25
|
+
if (!this._validateValue(name, coercedValue, config)) {
|
|
26
|
+
console.warn(`[PropertyManager] Invalid value for ${name}:`, coercedValue);
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
if (this._valuesEqual(oldValue, coercedValue)) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
this._props.set(name, coercedValue);
|
|
33
|
+
const change = {
|
|
34
|
+
name,
|
|
35
|
+
oldValue,
|
|
36
|
+
newValue: coercedValue,
|
|
37
|
+
source
|
|
38
|
+
};
|
|
39
|
+
return change;
|
|
40
|
+
}
|
|
41
|
+
_coerceValue(name, value, config) {
|
|
42
|
+
if (config.coerce) {
|
|
43
|
+
return config.coerce(value);
|
|
44
|
+
}
|
|
45
|
+
if (value === null || value === undefined) {
|
|
46
|
+
return config.default ?? null;
|
|
47
|
+
}
|
|
48
|
+
switch (config.type) {
|
|
49
|
+
case 'boolean':
|
|
50
|
+
if (typeof value === 'string') {
|
|
51
|
+
if (value === '')
|
|
52
|
+
return true;
|
|
53
|
+
const normalized = value.toLowerCase().trim();
|
|
54
|
+
if (normalized === 'false' || normalized === '0')
|
|
55
|
+
return false;
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
return Boolean(value);
|
|
59
|
+
case 'number':
|
|
60
|
+
const num = Number(value);
|
|
61
|
+
return isNaN(num) ? (config.default ?? 0) : num;
|
|
62
|
+
case 'string':
|
|
63
|
+
return String(value);
|
|
64
|
+
case 'object':
|
|
65
|
+
case 'array':
|
|
66
|
+
if (typeof value === 'string') {
|
|
67
|
+
try {
|
|
68
|
+
return JSON.parse(value);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
console.warn(`[PropertyManager] Failed to parse ${name}:`, value);
|
|
72
|
+
return config.default ?? (config.type === 'array' ? [] : {});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return value;
|
|
76
|
+
default:
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
_validateValue(name, value, config) {
|
|
81
|
+
if (config.validate) {
|
|
82
|
+
return config.validate(value);
|
|
83
|
+
}
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
_valuesEqual(a, b) {
|
|
87
|
+
if (typeof a !== 'object' || typeof b !== 'object') {
|
|
88
|
+
return a === b;
|
|
89
|
+
}
|
|
90
|
+
if (a === null || b === null) {
|
|
91
|
+
return a === b;
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
get(name) {
|
|
101
|
+
return this._props.get(name);
|
|
102
|
+
}
|
|
103
|
+
getAll() {
|
|
104
|
+
return Object.fromEntries(this._props);
|
|
105
|
+
}
|
|
106
|
+
getConfig(name) {
|
|
107
|
+
return this._config[name];
|
|
108
|
+
}
|
|
109
|
+
isVisual(name) {
|
|
110
|
+
return this._config[name]?.visual ?? false;
|
|
111
|
+
}
|
|
112
|
+
isFormValue(name) {
|
|
113
|
+
return this._config[name]?.formValue ?? false;
|
|
114
|
+
}
|
|
115
|
+
shouldEmitChange(name) {
|
|
116
|
+
return this._config[name]?.emitChange ?? false;
|
|
117
|
+
}
|
|
118
|
+
handleAlias(aliasName, value) {
|
|
119
|
+
for (const [propName, config] of Object.entries(this._config)) {
|
|
120
|
+
if (config.aliases && aliasName in config.aliases) {
|
|
121
|
+
const aliasedValue = config.aliases[aliasName];
|
|
122
|
+
return this.updateProperty(propName, aliasedValue, 'attribute');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -1,71 +1,35 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Resize Observer Registry & Callbacks
|
|
3
|
-
*
|
|
4
|
-
* Provides global registry for element sizes and optional callback subscriptions.
|
|
5
|
-
*/
|
|
6
|
-
// Global registry (Map-based storage)
|
|
7
1
|
const sizes = new Map();
|
|
8
2
|
const callbacks = new Map();
|
|
9
|
-
/**
|
|
10
|
-
* Get current size for element by ID (sync query)
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* const size = getSize('parent-container')
|
|
14
|
-
* if (size) console.log(`Width: ${size.width}px`)
|
|
15
|
-
*/
|
|
16
3
|
export function getSize(id) {
|
|
17
|
-
|
|
4
|
+
return sizes.get(id);
|
|
18
5
|
}
|
|
19
|
-
/**
|
|
20
|
-
* Subscribe to size changes for element by ID
|
|
21
|
-
* Returns unsubscribe function
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* const unsubscribe = onResize('parent', ({ width, height }) => {
|
|
25
|
-
* console.log(`Resized to ${width}x${height}`)
|
|
26
|
-
* })
|
|
27
|
-
* // Later: unsubscribe()
|
|
28
|
-
*/
|
|
29
6
|
export function onResize(id, callback) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
};
|
|
7
|
+
if (!callbacks.has(id)) {
|
|
8
|
+
callbacks.set(id, new Set());
|
|
9
|
+
}
|
|
10
|
+
callbacks.get(id).add(callback);
|
|
11
|
+
const current = sizes.get(id);
|
|
12
|
+
if (current)
|
|
13
|
+
callback(current);
|
|
14
|
+
return () => {
|
|
15
|
+
callbacks.get(id)?.delete(callback);
|
|
16
|
+
if (callbacks.get(id)?.size === 0) {
|
|
17
|
+
callbacks.delete(id);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
45
20
|
}
|
|
46
|
-
/**
|
|
47
|
-
* Get all registered sizes (for debugging/window API)
|
|
48
|
-
*/
|
|
49
21
|
export function getAllSizes() {
|
|
50
|
-
|
|
22
|
+
return Object.fromEntries(sizes);
|
|
51
23
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Internal: Update size in registry and notify callbacks
|
|
54
|
-
*/
|
|
55
24
|
export function updateSize(id, width, height) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
25
|
+
sizes.set(id, { width, height });
|
|
26
|
+
const cbs = callbacks.get(id);
|
|
27
|
+
if (cbs) {
|
|
28
|
+
const size = { width, height };
|
|
29
|
+
cbs.forEach(cb => cb(size));
|
|
30
|
+
}
|
|
63
31
|
}
|
|
64
|
-
/**
|
|
65
|
-
* Internal: Remove size from registry and cleanup callbacks
|
|
66
|
-
*/
|
|
67
32
|
export function removeSize(id) {
|
|
68
|
-
|
|
69
|
-
|
|
33
|
+
sizes.delete(id);
|
|
34
|
+
callbacks.delete(id);
|
|
70
35
|
}
|
|
71
|
-
//# sourceMappingURL=resize-observer.js.map
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CSS-based scroll prevention
|
|
2
|
+
* CSS-based scroll prevention.
|
|
3
3
|
*
|
|
4
|
-
* Prevents
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Key benefits:
|
|
8
|
-
* - No event manipulation complexity
|
|
9
|
-
* - No interference with component keyboard navigation
|
|
10
|
-
* - Preserves scroll position perfectly
|
|
11
|
-
* - Standard industry technique
|
|
12
|
-
* - Multiple component support with proper cleanup
|
|
4
|
+
* Prevents page scrolling via CSS rather than event cancellation — no event
|
|
5
|
+
* manipulation, no interference with component keyboard navigation, scroll
|
|
6
|
+
* position preserved. Reference-counted so multiple components can lock at once.
|
|
13
7
|
*/
|
|
14
8
|
declare global {
|
|
15
9
|
interface Window {
|
|
@@ -76,4 +70,3 @@ export declare function getLockState(): Readonly<{
|
|
|
76
70
|
scrollY: number;
|
|
77
71
|
activeLocks: string[];
|
|
78
72
|
}>;
|
|
79
|
-
//# sourceMappingURL=scroll-lock.d.ts.map
|