tyrell-components 1.0.0-RC6
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/LICENSE +21 -0
- package/README.md +221 -0
- package/css/tyrell.css +1783 -0
- package/dist/tyrell.css +1783 -0
- package/dist/tyrell.js +2 -0
- package/lib/base/ty-component.d.ts +133 -0
- package/lib/base/ty-component.d.ts.map +1 -0
- package/lib/base/ty-component.js +297 -0
- package/lib/base/ty-component.js.map +1 -0
- package/lib/components/button.d.ts +126 -0
- package/lib/components/button.d.ts.map +1 -0
- package/lib/components/button.js +244 -0
- package/lib/components/button.js.map +1 -0
- package/lib/components/calendar-month.d.ts +132 -0
- package/lib/components/calendar-month.d.ts.map +1 -0
- package/lib/components/calendar-month.js +440 -0
- package/lib/components/calendar-month.js.map +1 -0
- package/lib/components/calendar-navigation.d.ts +137 -0
- package/lib/components/calendar-navigation.d.ts.map +1 -0
- package/lib/components/calendar-navigation.js +366 -0
- package/lib/components/calendar-navigation.js.map +1 -0
- package/lib/components/calendar.d.ts +166 -0
- package/lib/components/calendar.d.ts.map +1 -0
- package/lib/components/calendar.js +774 -0
- package/lib/components/calendar.js.map +1 -0
- package/lib/components/checkbox.d.ts +189 -0
- package/lib/components/checkbox.d.ts.map +1 -0
- package/lib/components/checkbox.js +400 -0
- package/lib/components/checkbox.js.map +1 -0
- package/lib/components/copy.d.ts +180 -0
- package/lib/components/copy.d.ts.map +1 -0
- package/lib/components/copy.js +393 -0
- package/lib/components/copy.js.map +1 -0
- package/lib/components/date-picker.d.ts +379 -0
- package/lib/components/date-picker.d.ts.map +1 -0
- package/lib/components/date-picker.js +1586 -0
- package/lib/components/date-picker.js.map +1 -0
- package/lib/components/dropdown.d.ts +402 -0
- package/lib/components/dropdown.d.ts.map +1 -0
- package/lib/components/dropdown.js +1552 -0
- package/lib/components/dropdown.js.map +1 -0
- package/lib/components/icon.d.ts +118 -0
- package/lib/components/icon.d.ts.map +1 -0
- package/lib/components/icon.js +245 -0
- package/lib/components/icon.js.map +1 -0
- package/lib/components/input.d.ts +270 -0
- package/lib/components/input.d.ts.map +1 -0
- package/lib/components/input.js +721 -0
- package/lib/components/input.js.map +1 -0
- package/lib/components/modal.d.ts +58 -0
- package/lib/components/modal.d.ts.map +1 -0
- package/lib/components/modal.js +473 -0
- package/lib/components/modal.js.map +1 -0
- package/lib/components/multiselect.d.ts +397 -0
- package/lib/components/multiselect.d.ts.map +1 -0
- package/lib/components/multiselect.js +1580 -0
- package/lib/components/multiselect.js.map +1 -0
- package/lib/components/option.d.ts +66 -0
- package/lib/components/option.d.ts.map +1 -0
- package/lib/components/option.js +314 -0
- package/lib/components/option.js.map +1 -0
- package/lib/components/popup.d.ts +43 -0
- package/lib/components/popup.d.ts.map +1 -0
- package/lib/components/popup.js +380 -0
- package/lib/components/popup.js.map +1 -0
- package/lib/components/radio.d.ts +198 -0
- package/lib/components/radio.d.ts.map +1 -0
- package/lib/components/radio.js +437 -0
- package/lib/components/radio.js.map +1 -0
- package/lib/components/resize-observer.d.ts +48 -0
- package/lib/components/resize-observer.d.ts.map +1 -0
- package/lib/components/resize-observer.js +108 -0
- package/lib/components/resize-observer.js.map +1 -0
- package/lib/components/scroll-container.d.ts +51 -0
- package/lib/components/scroll-container.d.ts.map +1 -0
- package/lib/components/scroll-container.js +239 -0
- package/lib/components/scroll-container.js.map +1 -0
- package/lib/components/step.d.ts +26 -0
- package/lib/components/step.d.ts.map +1 -0
- package/lib/components/step.js +75 -0
- package/lib/components/step.js.map +1 -0
- package/lib/components/switch.d.ts +111 -0
- package/lib/components/switch.d.ts.map +1 -0
- package/lib/components/switch.js +240 -0
- package/lib/components/switch.js.map +1 -0
- package/lib/components/tab.d.ts +23 -0
- package/lib/components/tab.d.ts.map +1 -0
- package/lib/components/tab.js +76 -0
- package/lib/components/tab.js.map +1 -0
- package/lib/components/tabs.d.ts +93 -0
- package/lib/components/tabs.d.ts.map +1 -0
- package/lib/components/tabs.js +653 -0
- package/lib/components/tabs.js.map +1 -0
- package/lib/components/tag.d.ts +144 -0
- package/lib/components/tag.d.ts.map +1 -0
- package/lib/components/tag.js +316 -0
- package/lib/components/tag.js.map +1 -0
- package/lib/components/textarea.d.ts +241 -0
- package/lib/components/textarea.d.ts.map +1 -0
- package/lib/components/textarea.js +585 -0
- package/lib/components/textarea.js.map +1 -0
- package/lib/components/tooltip.d.ts +40 -0
- package/lib/components/tooltip.d.ts.map +1 -0
- package/lib/components/tooltip.js +439 -0
- package/lib/components/tooltip.js.map +1 -0
- package/lib/components/wizard.d.ts +86 -0
- package/lib/components/wizard.d.ts.map +1 -0
- package/lib/components/wizard.js +636 -0
- package/lib/components/wizard.js.map +1 -0
- package/lib/icons/fontawesome/brands.d.ts +557 -0
- package/lib/icons/fontawesome/brands.d.ts.map +1 -0
- package/lib/icons/fontawesome/brands.js +557 -0
- package/lib/icons/fontawesome/brands.js.map +1 -0
- package/lib/icons/fontawesome/regular.d.ts +281 -0
- package/lib/icons/fontawesome/regular.d.ts.map +1 -0
- package/lib/icons/fontawesome/regular.js +281 -0
- package/lib/icons/fontawesome/regular.js.map +1 -0
- package/lib/icons/fontawesome/solid.d.ts +1992 -0
- package/lib/icons/fontawesome/solid.d.ts.map +1 -0
- package/lib/icons/fontawesome/solid.js +1992 -0
- package/lib/icons/fontawesome/solid.js.map +1 -0
- package/lib/icons/heroicons/micro.d.ts +324 -0
- package/lib/icons/heroicons/micro.d.ts.map +1 -0
- package/lib/icons/heroicons/micro.js +1032 -0
- package/lib/icons/heroicons/micro.js.map +1 -0
- package/lib/icons/heroicons/mini.d.ts +332 -0
- package/lib/icons/heroicons/mini.d.ts.map +1 -0
- package/lib/icons/heroicons/mini.js +1038 -0
- package/lib/icons/heroicons/mini.js.map +1 -0
- package/lib/icons/heroicons/outline.d.ts +332 -0
- package/lib/icons/heroicons/outline.d.ts.map +1 -0
- package/lib/icons/heroicons/outline.js +993 -0
- package/lib/icons/heroicons/outline.js.map +1 -0
- package/lib/icons/heroicons/solid.d.ts +332 -0
- package/lib/icons/heroicons/solid.d.ts.map +1 -0
- package/lib/icons/heroicons/solid.js +1063 -0
- package/lib/icons/heroicons/solid.js.map +1 -0
- package/lib/icons/lucide.d.ts +1872 -0
- package/lib/icons/lucide.d.ts.map +1 -0
- package/lib/icons/lucide.js +28212 -0
- package/lib/icons/lucide.js.map +1 -0
- package/lib/icons/material/filled.d.ts +2180 -0
- package/lib/icons/material/filled.d.ts.map +1 -0
- package/lib/icons/material/filled.js +14003 -0
- package/lib/icons/material/filled.js.map +1 -0
- package/lib/icons/material/outlined.d.ts +2142 -0
- package/lib/icons/material/outlined.d.ts.map +1 -0
- package/lib/icons/material/outlined.js +14545 -0
- package/lib/icons/material/outlined.js.map +1 -0
- package/lib/icons/material/round.d.ts +2147 -0
- package/lib/icons/material/round.d.ts.map +1 -0
- package/lib/icons/material/round.js +14779 -0
- package/lib/icons/material/round.js.map +1 -0
- package/lib/icons/material/sharp.d.ts +2147 -0
- package/lib/icons/material/sharp.d.ts.map +1 -0
- package/lib/icons/material/sharp.js +14189 -0
- package/lib/icons/material/sharp.js.map +1 -0
- package/lib/icons/material/two-tone.d.ts +2185 -0
- package/lib/icons/material/two-tone.d.ts.map +1 -0
- package/lib/icons/material/two-tone.js +17152 -0
- package/lib/icons/material/two-tone.js.map +1 -0
- package/lib/index.d.ts +78 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +71 -0
- package/lib/index.js.map +1 -0
- package/lib/styles/button.d.ts +14 -0
- package/lib/styles/button.d.ts.map +1 -0
- package/lib/styles/button.js +457 -0
- package/lib/styles/button.js.map +1 -0
- package/lib/styles/calendar-month.d.ts +6 -0
- package/lib/styles/calendar-month.d.ts.map +1 -0
- package/lib/styles/calendar-month.js +275 -0
- package/lib/styles/calendar-month.js.map +1 -0
- package/lib/styles/calendar-navigation.d.ts +6 -0
- package/lib/styles/calendar-navigation.d.ts.map +1 -0
- package/lib/styles/calendar-navigation.js +143 -0
- package/lib/styles/calendar-navigation.js.map +1 -0
- package/lib/styles/calendar.d.ts +6 -0
- package/lib/styles/calendar.d.ts.map +1 -0
- package/lib/styles/calendar.js +28 -0
- package/lib/styles/calendar.js.map +1 -0
- package/lib/styles/checkbox.d.ts +9 -0
- package/lib/styles/checkbox.d.ts.map +1 -0
- package/lib/styles/checkbox.js +19 -0
- package/lib/styles/checkbox.js.map +1 -0
- package/lib/styles/copy.d.ts +7 -0
- package/lib/styles/copy.d.ts.map +1 -0
- package/lib/styles/copy.js +94 -0
- package/lib/styles/copy.js.map +1 -0
- package/lib/styles/custom-scrollbar.d.ts +6 -0
- package/lib/styles/custom-scrollbar.d.ts.map +1 -0
- package/lib/styles/custom-scrollbar.js +157 -0
- package/lib/styles/custom-scrollbar.js.map +1 -0
- package/lib/styles/date-picker.d.ts +6 -0
- package/lib/styles/date-picker.d.ts.map +1 -0
- package/lib/styles/date-picker.js +435 -0
- package/lib/styles/date-picker.js.map +1 -0
- package/lib/styles/dropdown.d.ts +12 -0
- package/lib/styles/dropdown.d.ts.map +1 -0
- package/lib/styles/dropdown.js +983 -0
- package/lib/styles/dropdown.js.map +1 -0
- package/lib/styles/icon.d.ts +6 -0
- package/lib/styles/icon.d.ts.map +1 -0
- package/lib/styles/icon.js +241 -0
- package/lib/styles/icon.js.map +1 -0
- package/lib/styles/input.d.ts +7 -0
- package/lib/styles/input.d.ts.map +1 -0
- package/lib/styles/input.js +685 -0
- package/lib/styles/input.js.map +1 -0
- package/lib/styles/modal.d.ts +8 -0
- package/lib/styles/modal.d.ts.map +1 -0
- package/lib/styles/modal.js +134 -0
- package/lib/styles/modal.js.map +1 -0
- package/lib/styles/multiselect.d.ts +6 -0
- package/lib/styles/multiselect.d.ts.map +1 -0
- package/lib/styles/multiselect.js +774 -0
- package/lib/styles/multiselect.js.map +1 -0
- package/lib/styles/option.d.ts +6 -0
- package/lib/styles/option.d.ts.map +1 -0
- package/lib/styles/option.js +116 -0
- package/lib/styles/option.js.map +1 -0
- package/lib/styles/popup.d.ts +8 -0
- package/lib/styles/popup.d.ts.map +1 -0
- package/lib/styles/popup.js +95 -0
- package/lib/styles/popup.js.map +1 -0
- package/lib/styles/radio.d.ts +8 -0
- package/lib/styles/radio.d.ts.map +1 -0
- package/lib/styles/radio.js +160 -0
- package/lib/styles/radio.js.map +1 -0
- package/lib/styles/resize-observer.d.ts +6 -0
- package/lib/styles/resize-observer.d.ts.map +1 -0
- package/lib/styles/resize-observer.js +18 -0
- package/lib/styles/resize-observer.js.map +1 -0
- package/lib/styles/scroll-container.d.ts +6 -0
- package/lib/styles/scroll-container.d.ts.map +1 -0
- package/lib/styles/scroll-container.js +198 -0
- package/lib/styles/scroll-container.js.map +1 -0
- package/lib/styles/step.d.ts +5 -0
- package/lib/styles/step.d.ts.map +1 -0
- package/lib/styles/step.js +50 -0
- package/lib/styles/step.js.map +1 -0
- package/lib/styles/switch.d.ts +9 -0
- package/lib/styles/switch.d.ts.map +1 -0
- package/lib/styles/switch.js +100 -0
- package/lib/styles/switch.js.map +1 -0
- package/lib/styles/tab.d.ts +5 -0
- package/lib/styles/tab.d.ts.map +1 -0
- package/lib/styles/tab.js +51 -0
- package/lib/styles/tab.js.map +1 -0
- package/lib/styles/tabs.d.ts +13 -0
- package/lib/styles/tabs.d.ts.map +1 -0
- package/lib/styles/tabs.js +184 -0
- package/lib/styles/tabs.js.map +1 -0
- package/lib/styles/tag.d.ts +6 -0
- package/lib/styles/tag.d.ts.map +1 -0
- package/lib/styles/tag.js +420 -0
- package/lib/styles/tag.js.map +1 -0
- package/lib/styles/textarea.d.ts +6 -0
- package/lib/styles/textarea.d.ts.map +1 -0
- package/lib/styles/textarea.js +350 -0
- package/lib/styles/textarea.js.map +1 -0
- package/lib/styles/tooltip.d.ts +9 -0
- package/lib/styles/tooltip.d.ts.map +1 -0
- package/lib/styles/tooltip.js +136 -0
- package/lib/styles/tooltip.js.map +1 -0
- package/lib/styles/wizard.d.ts +25 -0
- package/lib/styles/wizard.d.ts.map +1 -0
- package/lib/styles/wizard.js +325 -0
- package/lib/styles/wizard.js.map +1 -0
- package/lib/types/common.d.ts +143 -0
- package/lib/types/common.d.ts.map +1 -0
- package/lib/types/common.js +5 -0
- package/lib/types/common.js.map +1 -0
- package/lib/utils/calendar-utils.d.ts +176 -0
- package/lib/utils/calendar-utils.d.ts.map +1 -0
- package/lib/utils/calendar-utils.js +370 -0
- package/lib/utils/calendar-utils.js.map +1 -0
- package/lib/utils/custom-scrollbar.d.ts +82 -0
- package/lib/utils/custom-scrollbar.d.ts.map +1 -0
- package/lib/utils/custom-scrollbar.js +320 -0
- package/lib/utils/custom-scrollbar.js.map +1 -0
- package/lib/utils/icon-registry.d.ts +78 -0
- package/lib/utils/icon-registry.d.ts.map +1 -0
- package/lib/utils/icon-registry.js +304 -0
- package/lib/utils/icon-registry.js.map +1 -0
- package/lib/utils/locale.d.ts +136 -0
- package/lib/utils/locale.d.ts.map +1 -0
- package/lib/utils/locale.js +213 -0
- package/lib/utils/locale.js.map +1 -0
- package/lib/utils/mobile.d.ts +14 -0
- package/lib/utils/mobile.d.ts.map +1 -0
- package/lib/utils/mobile.js +21 -0
- package/lib/utils/mobile.js.map +1 -0
- package/lib/utils/number-format.d.ts +83 -0
- package/lib/utils/number-format.d.ts.map +1 -0
- package/lib/utils/number-format.js +143 -0
- package/lib/utils/number-format.js.map +1 -0
- package/lib/utils/parse-boolean.d.ts +39 -0
- package/lib/utils/parse-boolean.d.ts.map +1 -0
- package/lib/utils/parse-boolean.js +58 -0
- package/lib/utils/parse-boolean.js.map +1 -0
- package/lib/utils/positioning.d.ts +143 -0
- package/lib/utils/positioning.d.ts.map +1 -0
- package/lib/utils/positioning.js +308 -0
- package/lib/utils/positioning.js.map +1 -0
- package/lib/utils/property-capture.d.ts +132 -0
- package/lib/utils/property-capture.d.ts.map +1 -0
- package/lib/utils/property-capture.js +152 -0
- package/lib/utils/property-capture.js.map +1 -0
- package/lib/utils/property-manager.d.ts +90 -0
- package/lib/utils/property-manager.d.ts.map +1 -0
- package/lib/utils/property-manager.js +197 -0
- package/lib/utils/property-manager.js.map +1 -0
- package/lib/utils/resize-observer.d.ts +42 -0
- package/lib/utils/resize-observer.d.ts.map +1 -0
- package/lib/utils/resize-observer.js +71 -0
- package/lib/utils/resize-observer.js.map +1 -0
- package/lib/utils/scroll-lock.d.ts +79 -0
- package/lib/utils/scroll-lock.d.ts.map +1 -0
- package/lib/utils/scroll-lock.js +197 -0
- package/lib/utils/scroll-lock.js.map +1 -0
- package/lib/utils/styles.d.ts +27 -0
- package/lib/utils/styles.d.ts.map +1 -0
- package/lib/utils/styles.js +53 -0
- package/lib/utils/styles.js.map +1 -0
- package/lib/version.d.ts +8 -0
- package/lib/version.d.ts.map +1 -0
- package/lib/version.js +11 -0
- package/lib/version.js.map +1 -0
- package/package.json +159 -0
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Popup Component
|
|
3
|
+
*
|
|
4
|
+
* Interactive popup component with dropdown-like behavior and tooltip positioning.
|
|
5
|
+
* Uses parent-child relationship - popup opens on click, stays open for interaction,
|
|
6
|
+
* closes on outside click or ESC key.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* <button>
|
|
10
|
+
* Click me
|
|
11
|
+
* <ty-popup placement="bottom" offset="8">
|
|
12
|
+
* <div class="ty-elevated p-4 rounded-lg">
|
|
13
|
+
* Popup content here
|
|
14
|
+
* </div>
|
|
15
|
+
* </ty-popup>
|
|
16
|
+
* </button>
|
|
17
|
+
*/
|
|
18
|
+
import { findBestPosition } from '../utils/positioning.js';
|
|
19
|
+
import { lockScroll, unlockScroll } from '../utils/scroll-lock.js';
|
|
20
|
+
import { ensureStyles } from '../utils/styles.js';
|
|
21
|
+
import { popupStyles } from '../styles/popup.js';
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// WeakMaps for State Management
|
|
24
|
+
// ============================================================================
|
|
25
|
+
const anchorClickHandlers = new WeakMap();
|
|
26
|
+
const outsideClickHandlers = new WeakMap();
|
|
27
|
+
const escapeHandlers = new WeakMap();
|
|
28
|
+
const closeRequestHandlers = new WeakMap();
|
|
29
|
+
const popupIds = new WeakMap(); // Store popup ID for scroll locking
|
|
30
|
+
// ============================================================================
|
|
31
|
+
// Helper Functions
|
|
32
|
+
// ============================================================================
|
|
33
|
+
/**
|
|
34
|
+
* Parse boolean attribute
|
|
35
|
+
*/
|
|
36
|
+
function parseBoolAttr(el, name) {
|
|
37
|
+
return el.hasAttribute(name);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Parse integer attribute
|
|
41
|
+
*/
|
|
42
|
+
function parseIntAttr(el, name, defaultValue) {
|
|
43
|
+
const value = el.getAttribute(name);
|
|
44
|
+
if (value === null)
|
|
45
|
+
return defaultValue;
|
|
46
|
+
const parsed = parseInt(value, 10);
|
|
47
|
+
return isNaN(parsed) ? defaultValue : parsed;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Read popup attributes with simplified API
|
|
51
|
+
*/
|
|
52
|
+
function getPopupAttributes(el) {
|
|
53
|
+
return {
|
|
54
|
+
manual: parseBoolAttr(el, 'manual'),
|
|
55
|
+
disableClose: parseBoolAttr(el, 'disable-close'),
|
|
56
|
+
placement: (el.getAttribute('placement') || 'bottom'),
|
|
57
|
+
offset: parseIntAttr(el, 'offset', 8),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get the parent element as anchor (like tooltip)
|
|
62
|
+
*/
|
|
63
|
+
function getAnchorElement(el) {
|
|
64
|
+
return el.parentElement;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get the popup dialog element
|
|
68
|
+
*/
|
|
69
|
+
function getPopupDialog(shadowRoot) {
|
|
70
|
+
return shadowRoot.querySelector('.popup-dialog');
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get or create a unique popup ID for scroll locking
|
|
74
|
+
*/
|
|
75
|
+
function getPopupId(el) {
|
|
76
|
+
let id = popupIds.get(el);
|
|
77
|
+
if (!id) {
|
|
78
|
+
id = `popup-${el.id || Math.random().toString(36).substr(2, 9)}`;
|
|
79
|
+
popupIds.set(el, id);
|
|
80
|
+
}
|
|
81
|
+
return id;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Calculate and update popup position based on anchor (tooltip style)
|
|
85
|
+
*/
|
|
86
|
+
function updatePosition(el) {
|
|
87
|
+
const { placement, offset } = getPopupAttributes(el);
|
|
88
|
+
const shadowRoot = el.shadowRoot;
|
|
89
|
+
const anchor = getAnchorElement(el);
|
|
90
|
+
const dialog = shadowRoot ? getPopupDialog(shadowRoot) : null;
|
|
91
|
+
if (!anchor || !dialog)
|
|
92
|
+
return;
|
|
93
|
+
// Calculate preferred placements based on placement attribute (like tooltip)
|
|
94
|
+
const preferences = placement === 'top' ? ['top', 'bottom', 'left', 'right'] :
|
|
95
|
+
placement === 'bottom' ? ['bottom', 'top', 'left', 'right'] :
|
|
96
|
+
placement === 'left' ? ['left', 'right', 'top', 'bottom'] :
|
|
97
|
+
placement === 'right' ? ['right', 'left', 'top', 'bottom'] :
|
|
98
|
+
['bottom', 'top', 'right', 'left']; // Default popup placement
|
|
99
|
+
// Use positioning engine to find best position
|
|
100
|
+
const positionData = findBestPosition({
|
|
101
|
+
targetEl: anchor,
|
|
102
|
+
floatingEl: dialog,
|
|
103
|
+
preferences,
|
|
104
|
+
offset,
|
|
105
|
+
padding: 8,
|
|
106
|
+
containerPadding: 16,
|
|
107
|
+
});
|
|
108
|
+
// Update CSS variables with compensated coordinates
|
|
109
|
+
el.style.setProperty('--popup-x', `${positionData.x}px`);
|
|
110
|
+
el.style.setProperty('--popup-y', `${positionData.y}px`);
|
|
111
|
+
// Add position class like dropdown does (this applies the variables)
|
|
112
|
+
dialog.classList.add('position-calculated');
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Close popup with clean animation -> position reset -> hide sequence
|
|
116
|
+
*/
|
|
117
|
+
function closePopup(el, force = false) {
|
|
118
|
+
const { disableClose } = getPopupAttributes(el);
|
|
119
|
+
if (!force && disableClose)
|
|
120
|
+
return;
|
|
121
|
+
const shadowRoot = el.shadowRoot;
|
|
122
|
+
const dialog = shadowRoot ? getPopupDialog(shadowRoot) : null;
|
|
123
|
+
if (!dialog)
|
|
124
|
+
return;
|
|
125
|
+
// Don't unlock scroll here - let the dialog 'close' event handler do it
|
|
126
|
+
// This prevents double-unlock issues
|
|
127
|
+
dialog.classList.remove('open');
|
|
128
|
+
dialog.classList.remove('preparing-animation');
|
|
129
|
+
setTimeout(() => {
|
|
130
|
+
dialog.classList.remove('position-calculated');
|
|
131
|
+
dialog.close(); // This will trigger 'close' event which unlocks scroll
|
|
132
|
+
}, 150);
|
|
133
|
+
// Dispatch close event
|
|
134
|
+
el.dispatchEvent(new CustomEvent('close', { bubbles: true }));
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Open popup with dialog open but hidden → position → animate sequence
|
|
138
|
+
*/
|
|
139
|
+
function openPopup(el) {
|
|
140
|
+
// Lock scroll using the stored popup ID
|
|
141
|
+
const popupId = getPopupId(el);
|
|
142
|
+
lockScroll(popupId);
|
|
143
|
+
const shadowRoot = el.shadowRoot;
|
|
144
|
+
const dialog = shadowRoot ? getPopupDialog(shadowRoot) : null;
|
|
145
|
+
if (!dialog)
|
|
146
|
+
return;
|
|
147
|
+
// Step 1: showModal() immediately - dialog gets [open] attribute and proper layout
|
|
148
|
+
dialog.showModal();
|
|
149
|
+
// Step 2: Wait for layout to settle, then measure and position
|
|
150
|
+
requestAnimationFrame(() => {
|
|
151
|
+
// Now dialog has [open] and accurate dimensions
|
|
152
|
+
// Calculate and apply position while dialog is hidden by CSS
|
|
153
|
+
updatePosition(el);
|
|
154
|
+
// Step 3: Add scale transform for animation prep
|
|
155
|
+
dialog.classList.add('preparing-animation');
|
|
156
|
+
// Step 4: Third RAF - THEN add open class for smooth scale animation
|
|
157
|
+
requestAnimationFrame(() => {
|
|
158
|
+
// Now animate: scale(0.95) → scale(1) + opacity + visibility
|
|
159
|
+
dialog.classList.add('open');
|
|
160
|
+
// Dispatch open event
|
|
161
|
+
el.dispatchEvent(new CustomEvent('open', { bubbles: true }));
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Toggle popup visibility
|
|
167
|
+
*/
|
|
168
|
+
function togglePopup(el) {
|
|
169
|
+
const shadowRoot = el.shadowRoot;
|
|
170
|
+
const dialog = shadowRoot ? getPopupDialog(shadowRoot) : null;
|
|
171
|
+
if (!dialog)
|
|
172
|
+
return;
|
|
173
|
+
if (dialog.classList.contains('open')) {
|
|
174
|
+
closePopup(el);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
openPopup(el);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Handle click on anchor element
|
|
182
|
+
*/
|
|
183
|
+
function handleAnchorClick(el, event) {
|
|
184
|
+
event.preventDefault();
|
|
185
|
+
event.stopPropagation();
|
|
186
|
+
togglePopup(el);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Handle clicks on the dialog element (backdrop clicks)
|
|
190
|
+
*/
|
|
191
|
+
function handleOutsideClick(el, event) {
|
|
192
|
+
event.stopPropagation();
|
|
193
|
+
const shadowRoot = el.shadowRoot;
|
|
194
|
+
const dialog = shadowRoot ? getPopupDialog(shadowRoot) : null;
|
|
195
|
+
// Close if clicking on dialog backdrop (not popup content)
|
|
196
|
+
if (dialog && event.target === dialog) {
|
|
197
|
+
event.preventDefault();
|
|
198
|
+
closePopup(el);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Handle escape key press
|
|
203
|
+
*/
|
|
204
|
+
function handleEscape(el, event) {
|
|
205
|
+
event.stopPropagation();
|
|
206
|
+
if (event.key === 'Escape') {
|
|
207
|
+
const { disableClose } = getPopupAttributes(el);
|
|
208
|
+
if (disableClose) {
|
|
209
|
+
event.preventDefault();
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
closePopup(el);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Handle close requests from inside popup content
|
|
218
|
+
*/
|
|
219
|
+
function handleCloseRequest(el, event) {
|
|
220
|
+
event.stopPropagation();
|
|
221
|
+
closePopup(el, true);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Setup click listener on anchor element (unless manual=true)
|
|
225
|
+
*/
|
|
226
|
+
function setupAnchorEvents(el) {
|
|
227
|
+
const { manual } = getPopupAttributes(el);
|
|
228
|
+
const anchor = getAnchorElement(el);
|
|
229
|
+
if (!anchor || manual)
|
|
230
|
+
return;
|
|
231
|
+
// Remove any existing listener first
|
|
232
|
+
const existingHandler = anchorClickHandlers.get(el);
|
|
233
|
+
if (existingHandler) {
|
|
234
|
+
anchor.removeEventListener('pointerdown', existingHandler);
|
|
235
|
+
}
|
|
236
|
+
// Create new handler and store reference
|
|
237
|
+
const handler = (e) => handleAnchorClick(el, e);
|
|
238
|
+
anchorClickHandlers.set(el, handler);
|
|
239
|
+
anchor.addEventListener('pointerdown', handler);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Cleanup anchor event listeners
|
|
243
|
+
*/
|
|
244
|
+
function cleanupAnchorEvents(el) {
|
|
245
|
+
const anchor = getAnchorElement(el);
|
|
246
|
+
const handler = anchorClickHandlers.get(el);
|
|
247
|
+
if (anchor && handler) {
|
|
248
|
+
anchor.removeEventListener('pointerdown', handler);
|
|
249
|
+
anchorClickHandlers.delete(el);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Render the popup structure
|
|
254
|
+
*/
|
|
255
|
+
function render(el) {
|
|
256
|
+
const shadowRoot = el.shadowRoot;
|
|
257
|
+
if (!shadowRoot)
|
|
258
|
+
return;
|
|
259
|
+
const existingDialog = getPopupDialog(shadowRoot);
|
|
260
|
+
// Ensure styles are loaded
|
|
261
|
+
ensureStyles(shadowRoot, { css: popupStyles, id: 'ty-popup' });
|
|
262
|
+
// Create structure if it doesn't exist
|
|
263
|
+
if (!existingDialog) {
|
|
264
|
+
const dialog = document.createElement('dialog');
|
|
265
|
+
const container = document.createElement('div');
|
|
266
|
+
const content = document.createElement('slot');
|
|
267
|
+
dialog.className = 'popup-dialog';
|
|
268
|
+
container.className = 'popup-container';
|
|
269
|
+
content.id = 'popup-content';
|
|
270
|
+
shadowRoot.appendChild(dialog);
|
|
271
|
+
dialog.appendChild(container);
|
|
272
|
+
container.appendChild(content);
|
|
273
|
+
// Initialize position
|
|
274
|
+
el.style.setProperty('--popup-x', '0px');
|
|
275
|
+
el.style.setProperty('--popup-y', '0px');
|
|
276
|
+
// Setup event listeners
|
|
277
|
+
const outsideHandler = (e) => handleOutsideClick(el, e);
|
|
278
|
+
outsideClickHandlers.set(el, outsideHandler);
|
|
279
|
+
dialog.addEventListener('pointerdown', outsideHandler);
|
|
280
|
+
const escapeHandler = (e) => handleEscape(el, e);
|
|
281
|
+
escapeHandlers.set(el, escapeHandler);
|
|
282
|
+
el.addEventListener('keydown', escapeHandler);
|
|
283
|
+
// Handle native dialog close event
|
|
284
|
+
dialog.addEventListener('close', () => {
|
|
285
|
+
const popupId = getPopupId(el);
|
|
286
|
+
unlockScroll(popupId);
|
|
287
|
+
dialog.classList.remove('open');
|
|
288
|
+
dialog.classList.remove('preparing-animation');
|
|
289
|
+
el.dispatchEvent(new CustomEvent('close', { bubbles: true }));
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
// Add close method to element for programmatic access
|
|
293
|
+
el.closePopup = () => closePopup(el, true);
|
|
294
|
+
el.openPopup = () => openPopup(el);
|
|
295
|
+
el.togglePopup = () => togglePopup(el);
|
|
296
|
+
// Add event listener for close requests from content
|
|
297
|
+
const closeRequestHandler = (e) => handleCloseRequest(el, e);
|
|
298
|
+
closeRequestHandlers.set(el, closeRequestHandler);
|
|
299
|
+
el.addEventListener('ty:close-popup', closeRequestHandler);
|
|
300
|
+
// Setup anchor events
|
|
301
|
+
setupAnchorEvents(el);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Cleanup all resources when component disconnects
|
|
305
|
+
*/
|
|
306
|
+
function cleanup(el) {
|
|
307
|
+
// Force unlock scroll if popup is being removed
|
|
308
|
+
const popupId = popupIds.get(el);
|
|
309
|
+
if (popupId) {
|
|
310
|
+
unlockScroll(popupId);
|
|
311
|
+
popupIds.delete(el);
|
|
312
|
+
}
|
|
313
|
+
// Cleanup anchor events
|
|
314
|
+
cleanupAnchorEvents(el);
|
|
315
|
+
// Cleanup dialog events
|
|
316
|
+
const shadowRoot = el.shadowRoot;
|
|
317
|
+
const dialog = shadowRoot ? getPopupDialog(shadowRoot) : null;
|
|
318
|
+
if (dialog) {
|
|
319
|
+
const outsideHandler = outsideClickHandlers.get(el);
|
|
320
|
+
if (outsideHandler) {
|
|
321
|
+
dialog.removeEventListener('pointerdown', outsideHandler);
|
|
322
|
+
outsideClickHandlers.delete(el);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
const escapeHandler = escapeHandlers.get(el);
|
|
326
|
+
if (escapeHandler) {
|
|
327
|
+
el.removeEventListener('keydown', escapeHandler);
|
|
328
|
+
escapeHandlers.delete(el);
|
|
329
|
+
}
|
|
330
|
+
const closeRequestHandler = closeRequestHandlers.get(el);
|
|
331
|
+
if (closeRequestHandler) {
|
|
332
|
+
el.removeEventListener('ty:close-popup', closeRequestHandler);
|
|
333
|
+
closeRequestHandlers.delete(el);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
// ============================================================================
|
|
337
|
+
// Component Definition
|
|
338
|
+
// ============================================================================
|
|
339
|
+
/**
|
|
340
|
+
* TyPopup Web Component
|
|
341
|
+
*/
|
|
342
|
+
export class TyPopup extends HTMLElement {
|
|
343
|
+
/** Observed attributes */
|
|
344
|
+
static get observedAttributes() {
|
|
345
|
+
return ['manual', 'disable-close', 'placement', 'offset'];
|
|
346
|
+
}
|
|
347
|
+
constructor() {
|
|
348
|
+
super();
|
|
349
|
+
this.attachShadow({ mode: 'open' });
|
|
350
|
+
}
|
|
351
|
+
connectedCallback() {
|
|
352
|
+
render(this);
|
|
353
|
+
}
|
|
354
|
+
disconnectedCallback() {
|
|
355
|
+
cleanup(this);
|
|
356
|
+
}
|
|
357
|
+
attributeChangedCallback(name, _oldValue, _newValue) {
|
|
358
|
+
// Re-render on attribute changes
|
|
359
|
+
render(this);
|
|
360
|
+
// Handle specific attribute changes
|
|
361
|
+
switch (name) {
|
|
362
|
+
case 'placement':
|
|
363
|
+
case 'offset':
|
|
364
|
+
// Update position immediately if open and placement-related attributes change
|
|
365
|
+
render(this);
|
|
366
|
+
break;
|
|
367
|
+
case 'manual':
|
|
368
|
+
case 'disable-close':
|
|
369
|
+
// Recreate anchor events if manual changes
|
|
370
|
+
cleanupAnchorEvents(this);
|
|
371
|
+
setupAnchorEvents(this);
|
|
372
|
+
break;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
// Register the custom element
|
|
377
|
+
if (!customElements.get('ty-popup')) {
|
|
378
|
+
customElements.define('ty-popup', TyPopup);
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=popup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popup.js","sourceRoot":"","sources":["../../src/components/popup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TyRadio + TyRadioGroup Web Components
|
|
3
|
+
*
|
|
4
|
+
* Exclusive selection within a group. ty-radio-group manages the selection
|
|
5
|
+
* value and form integration; ty-radio is the individual choice element.
|
|
6
|
+
*
|
|
7
|
+
* Composition (ty-multiselect-style):
|
|
8
|
+
* <ty-radio-group name="plan" value="pro" label="Plan">
|
|
9
|
+
* <ty-radio value="free">Free</ty-radio>
|
|
10
|
+
* <ty-radio value="pro">Pro</ty-radio>
|
|
11
|
+
* <ty-radio value="team">Team</ty-radio>
|
|
12
|
+
* </ty-radio-group>
|
|
13
|
+
*
|
|
14
|
+
* Keyboard:
|
|
15
|
+
* - Tab focuses the group's currently-selected (or first) radio
|
|
16
|
+
* - Arrow keys move focus AND selection within the group (per W3C ARIA)
|
|
17
|
+
* - Space/Enter selects the focused radio
|
|
18
|
+
*/
|
|
19
|
+
import type { Flavor, Size } from "../types/common.js";
|
|
20
|
+
import { TyComponent } from "../base/ty-component.js";
|
|
21
|
+
import type { PropertyChange } from "../utils/property-manager.js";
|
|
22
|
+
interface RadioState {
|
|
23
|
+
listenersSetup: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface TyRadioElement extends HTMLElement {
|
|
26
|
+
value: string;
|
|
27
|
+
checked: boolean;
|
|
28
|
+
disabled: boolean;
|
|
29
|
+
size: Size;
|
|
30
|
+
flavor: Flavor;
|
|
31
|
+
}
|
|
32
|
+
export declare class TyRadio extends TyComponent<RadioState> implements TyRadioElement {
|
|
33
|
+
protected static properties: {
|
|
34
|
+
value: {
|
|
35
|
+
type: "string";
|
|
36
|
+
default: string;
|
|
37
|
+
};
|
|
38
|
+
checked: {
|
|
39
|
+
type: "boolean";
|
|
40
|
+
visual: boolean;
|
|
41
|
+
default: boolean;
|
|
42
|
+
};
|
|
43
|
+
disabled: {
|
|
44
|
+
type: "boolean";
|
|
45
|
+
visual: boolean;
|
|
46
|
+
default: boolean;
|
|
47
|
+
};
|
|
48
|
+
size: {
|
|
49
|
+
type: "string";
|
|
50
|
+
visual: boolean;
|
|
51
|
+
default: string;
|
|
52
|
+
};
|
|
53
|
+
flavor: {
|
|
54
|
+
type: "string";
|
|
55
|
+
visual: boolean;
|
|
56
|
+
default: string;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
private _listenersSetup;
|
|
60
|
+
private _clickHandler;
|
|
61
|
+
private _focusHandler;
|
|
62
|
+
private _blurHandler;
|
|
63
|
+
constructor();
|
|
64
|
+
protected onConnect(): void;
|
|
65
|
+
protected onDisconnect(): void;
|
|
66
|
+
protected onPropertiesChanged(_changes: PropertyChange[]): void;
|
|
67
|
+
private buildClassList;
|
|
68
|
+
private handleClick;
|
|
69
|
+
private removeEventListeners;
|
|
70
|
+
private setupEventListeners;
|
|
71
|
+
protected render(): void;
|
|
72
|
+
get value(): string;
|
|
73
|
+
set value(v: string);
|
|
74
|
+
get checked(): boolean;
|
|
75
|
+
set checked(v: boolean);
|
|
76
|
+
get disabled(): boolean;
|
|
77
|
+
set disabled(v: boolean);
|
|
78
|
+
get size(): Size;
|
|
79
|
+
set size(v: Size);
|
|
80
|
+
get flavor(): Flavor;
|
|
81
|
+
set flavor(v: Flavor);
|
|
82
|
+
}
|
|
83
|
+
interface RadioGroupState {
|
|
84
|
+
listenersSetup: boolean;
|
|
85
|
+
}
|
|
86
|
+
export interface TyRadioGroupElement extends HTMLElement {
|
|
87
|
+
value: string;
|
|
88
|
+
name: string;
|
|
89
|
+
label: string;
|
|
90
|
+
disabled: boolean;
|
|
91
|
+
required: boolean;
|
|
92
|
+
error: string;
|
|
93
|
+
orientation: "vertical" | "horizontal";
|
|
94
|
+
size: Size;
|
|
95
|
+
flavor: Flavor;
|
|
96
|
+
form: HTMLFormElement | null;
|
|
97
|
+
}
|
|
98
|
+
export declare class TyRadioGroup extends TyComponent<RadioGroupState> implements TyRadioGroupElement {
|
|
99
|
+
static formAssociated: boolean;
|
|
100
|
+
protected static properties: {
|
|
101
|
+
value: {
|
|
102
|
+
type: "string";
|
|
103
|
+
visual: boolean;
|
|
104
|
+
formValue: boolean;
|
|
105
|
+
emitChange: boolean;
|
|
106
|
+
default: string;
|
|
107
|
+
};
|
|
108
|
+
name: {
|
|
109
|
+
type: "string";
|
|
110
|
+
default: string;
|
|
111
|
+
};
|
|
112
|
+
label: {
|
|
113
|
+
type: "string";
|
|
114
|
+
visual: boolean;
|
|
115
|
+
default: string;
|
|
116
|
+
};
|
|
117
|
+
disabled: {
|
|
118
|
+
type: "boolean";
|
|
119
|
+
visual: boolean;
|
|
120
|
+
default: boolean;
|
|
121
|
+
};
|
|
122
|
+
required: {
|
|
123
|
+
type: "boolean";
|
|
124
|
+
visual: boolean;
|
|
125
|
+
default: boolean;
|
|
126
|
+
};
|
|
127
|
+
error: {
|
|
128
|
+
type: "string";
|
|
129
|
+
visual: boolean;
|
|
130
|
+
default: string;
|
|
131
|
+
};
|
|
132
|
+
orientation: {
|
|
133
|
+
type: "string";
|
|
134
|
+
visual: boolean;
|
|
135
|
+
default: string;
|
|
136
|
+
};
|
|
137
|
+
size: {
|
|
138
|
+
type: "string";
|
|
139
|
+
visual: boolean;
|
|
140
|
+
default: string;
|
|
141
|
+
};
|
|
142
|
+
flavor: {
|
|
143
|
+
type: "string";
|
|
144
|
+
visual: boolean;
|
|
145
|
+
default: string;
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
private _listenersSetup;
|
|
149
|
+
private _selectHandler;
|
|
150
|
+
private _keydownHandler;
|
|
151
|
+
constructor();
|
|
152
|
+
protected onConnect(): void;
|
|
153
|
+
protected onDisconnect(): void;
|
|
154
|
+
protected onPropertiesChanged(changes: PropertyChange[]): void;
|
|
155
|
+
protected getFormValue(): FormDataEntryValue | null;
|
|
156
|
+
/**
|
|
157
|
+
* Find ty-radio descendants in this group's light DOM. Searches deeply
|
|
158
|
+
* because consumers may wrap each radio in a `<label>` for click delegation.
|
|
159
|
+
*/
|
|
160
|
+
private getRadios;
|
|
161
|
+
/**
|
|
162
|
+
* Push group state down to each radio child.
|
|
163
|
+
*/
|
|
164
|
+
private syncChildren;
|
|
165
|
+
/**
|
|
166
|
+
* Handle a child's select request — update value, sync, emit change.
|
|
167
|
+
*/
|
|
168
|
+
private handleRadioSelect;
|
|
169
|
+
/**
|
|
170
|
+
* Arrow-key navigation within group (W3C radio practice: arrow keys move
|
|
171
|
+
* focus and selection together).
|
|
172
|
+
*/
|
|
173
|
+
private handleKeydown;
|
|
174
|
+
private removeEventListeners;
|
|
175
|
+
private setupEventListeners;
|
|
176
|
+
protected render(): void;
|
|
177
|
+
get value(): string;
|
|
178
|
+
set value(v: string);
|
|
179
|
+
get name(): string;
|
|
180
|
+
set name(v: string);
|
|
181
|
+
get label(): string;
|
|
182
|
+
set label(v: string);
|
|
183
|
+
get disabled(): boolean;
|
|
184
|
+
set disabled(v: boolean);
|
|
185
|
+
get required(): boolean;
|
|
186
|
+
set required(v: boolean);
|
|
187
|
+
get error(): string;
|
|
188
|
+
set error(v: string);
|
|
189
|
+
get orientation(): "vertical" | "horizontal";
|
|
190
|
+
set orientation(v: "vertical" | "horizontal");
|
|
191
|
+
get size(): Size;
|
|
192
|
+
set size(v: Size);
|
|
193
|
+
get flavor(): Flavor;
|
|
194
|
+
set flavor(v: Flavor);
|
|
195
|
+
get form(): HTMLFormElement | null;
|
|
196
|
+
}
|
|
197
|
+
export {};
|
|
198
|
+
//# sourceMappingURL=radio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio.d.ts","sourceRoot":"","sources":["../../src/components/radio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAUnE,UAAU,UAAU;IAClB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,OACX,SAAQ,WAAW,CAAC,UAAU,CAC9B,YAAW,cAAc;IAEzB,SAAS,CAAC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;MAsBzB;IAEF,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,YAAY,CAA6B;;IAQjD,SAAS,CAAC,SAAS,IAAI,IAAI;IAC3B,SAAS,CAAC,YAAY,IAAI,IAAI;IAG9B,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI;IAE/D,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,mBAAmB;IAe3B,SAAS,CAAC,MAAM,IAAI,IAAI;IA4BxB,IAAI,KAAK,IAAI,MAAM,CAAsC;IACzD,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAAmC;IAEtD,IAAI,OAAO,IAAI,OAAO,CAAwC;IAC9D,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,EAAqC;IAE3D,IAAI,QAAQ,IAAI,OAAO,CAAyC;IAChE,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAsC;IAE7D,IAAI,IAAI,IAAI,IAAI,CAA6C;IAC7D,IAAI,IAAI,CAAC,CAAC,EAAE,IAAI,EAAkC;IAElD,IAAI,MAAM,IAAI,MAAM,CAAiD;IACrE,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAAoC;CACzD;AAUD,UAAU,eAAe;IACvB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,UAAU,GAAG,YAAY,CAAC;IACvC,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;CAC9B;AAED,qBAAa,YACX,SAAQ,WAAW,CAAC,eAAe,CACnC,YAAW,mBAAmB;IAE9B,MAAM,CAAC,cAAc,UAAQ;IAE7B,SAAS,CAAC,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA4BzB;IAEF,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,eAAe,CAAqC;;IAQ5D,SAAS,CAAC,SAAS,IAAI,IAAI;IAK3B,SAAS,CAAC,YAAY,IAAI,IAAI;IAI9B,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAM9D,SAAS,CAAC,YAAY,IAAI,kBAAkB,GAAG,IAAI;IAInD;;;OAGG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwBzB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAqDrB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,mBAAmB;IAS3B,SAAS,CAAC,MAAM,IAAI,IAAI;IAuFxB,IAAI,KAAK,IAAI,MAAM,CAAsC;IACzD,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAAmC;IAEtD,IAAI,IAAI,IAAI,MAAM,CAAqC;IACvD,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,EAAkC;IAEpD,IAAI,KAAK,IAAI,MAAM,CAAsC;IACzD,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAAmC;IAEtD,IAAI,QAAQ,IAAI,OAAO,CAAyC;IAChE,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAsC;IAE7D,IAAI,QAAQ,IAAI,OAAO,CAAyC;IAChE,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAsC;IAE7D,IAAI,KAAK,IAAI,MAAM,CAAsC;IACzD,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAAmC;IAEtD,IAAI,WAAW,IAAI,UAAU,GAAG,YAAY,CAE3C;IACD,IAAI,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,YAAY,EAE3C;IAED,IAAI,IAAI,IAAI,IAAI,CAA6C;IAC7D,IAAI,IAAI,CAAC,CAAC,EAAE,IAAI,EAAkC;IAElD,IAAI,MAAM,IAAI,MAAM,CAAiD;IACrE,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAAoC;IAExD,IAAI,IAAI,IAAI,eAAe,GAAG,IAAI,CAAiC;CACpE"}
|