@salmexio/ui 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/dialogs/ContextMenu/ContextMenu.svelte +521 -0
  2. package/dist/dialogs/ContextMenu/ContextMenu.svelte.d.ts +53 -0
  3. package/dist/dialogs/ContextMenu/ContextMenu.svelte.d.ts.map +1 -0
  4. package/dist/dialogs/ContextMenu/index.d.ts +3 -0
  5. package/dist/dialogs/ContextMenu/index.d.ts.map +1 -0
  6. package/dist/dialogs/ContextMenu/index.js +1 -0
  7. package/dist/dialogs/index.d.ts +2 -0
  8. package/dist/dialogs/index.d.ts.map +1 -1
  9. package/dist/dialogs/index.js +1 -0
  10. package/dist/feedback/Alert/Alert.svelte +1 -62
  11. package/dist/feedback/Alert/Alert.svelte.d.ts +1 -1
  12. package/dist/feedback/Alert/Alert.svelte.d.ts.map +1 -1
  13. package/dist/forms/Select/Select.svelte +883 -0
  14. package/dist/forms/Select/Select.svelte.d.ts +68 -0
  15. package/dist/forms/Select/Select.svelte.d.ts.map +1 -0
  16. package/dist/forms/Select/index.d.ts +3 -0
  17. package/dist/forms/Select/index.d.ts.map +1 -0
  18. package/dist/forms/Select/index.js +1 -0
  19. package/dist/forms/index.d.ts +2 -0
  20. package/dist/forms/index.d.ts.map +1 -1
  21. package/dist/forms/index.js +1 -0
  22. package/dist/layout/Card/Card.svelte +29 -169
  23. package/dist/layout/Card/Card.svelte.d.ts +3 -9
  24. package/dist/layout/Card/Card.svelte.d.ts.map +1 -1
  25. package/dist/navigation/CommandPalette/CommandPalette.svelte +574 -0
  26. package/dist/navigation/CommandPalette/CommandPalette.svelte.d.ts +47 -0
  27. package/dist/navigation/CommandPalette/CommandPalette.svelte.d.ts.map +1 -0
  28. package/dist/navigation/CommandPalette/index.d.ts +3 -0
  29. package/dist/navigation/CommandPalette/index.d.ts.map +1 -0
  30. package/dist/navigation/CommandPalette/index.js +1 -0
  31. package/dist/navigation/index.d.ts +2 -0
  32. package/dist/navigation/index.d.ts.map +1 -1
  33. package/dist/navigation/index.js +1 -0
  34. package/dist/primitives/Badge/Badge.svelte +45 -9
  35. package/dist/primitives/Badge/Badge.svelte.d.ts +0 -2
  36. package/dist/primitives/Badge/Badge.svelte.d.ts.map +1 -1
  37. package/dist/primitives/Button/Button.svelte +40 -14
  38. package/dist/primitives/Button/Button.svelte.d.ts +1 -1
  39. package/dist/primitives/Button/Button.svelte.d.ts.map +1 -1
  40. package/dist/styles/tokens.css +4 -4
  41. package/dist/windowing/Window/Window.svelte +3 -3
  42. package/package.json +1 -1
@@ -0,0 +1,68 @@
1
+ export interface SelectOption {
2
+ value: string;
3
+ label: string;
4
+ disabled?: boolean;
5
+ }
6
+ export interface SelectGroup {
7
+ label: string;
8
+ options: SelectOption[];
9
+ }
10
+ type SelectSize = 'sm' | 'md' | 'lg';
11
+ interface Props {
12
+ /** Visible label (required for a11y) */
13
+ label: string;
14
+ /** Flat list of options */
15
+ options?: SelectOption[];
16
+ /** Grouped options (mutually exclusive with options) */
17
+ groups?: SelectGroup[];
18
+ /** Selected value (single mode) */
19
+ value?: string;
20
+ /** Selected values (multi mode) */
21
+ values?: string[];
22
+ /** Enable multi-select with checkboxes */
23
+ multiple?: boolean;
24
+ /** Placeholder when nothing selected */
25
+ placeholder?: string;
26
+ /** Error message */
27
+ error?: string;
28
+ /** Hint text */
29
+ hint?: string;
30
+ /** Size variant */
31
+ size?: SelectSize;
32
+ /** Disabled state */
33
+ disabled?: boolean;
34
+ /** Required field */
35
+ required?: boolean;
36
+ /** Hide label visually (still accessible) */
37
+ hideLabel?: boolean;
38
+ /** Additional CSS class */
39
+ class?: string;
40
+ /** Called when value changes (single mode) */
41
+ onchange?: (value: string) => void;
42
+ /** Called when values change (multi mode) */
43
+ onchangemulti?: (values: string[]) => void;
44
+ /** Test ID */
45
+ testId?: string;
46
+ }
47
+ /**
48
+ * Select
49
+ *
50
+ * Win2K × Basquiat — Dropdown select with sunken trigger field, raised panel,
51
+ * keyboard-first navigation, type-ahead search, option groups, and multi-select.
52
+ *
53
+ * Follows WAI-ARIA APG Select-Only Combobox pattern: DOM focus stays on
54
+ * the trigger button; visual focus in the listbox is communicated via
55
+ * aria-activedescendant. The dropdown is portaled to document.body via
56
+ * $effect to escape transforms/overflow on ancestor elements.
57
+ *
58
+ * @example
59
+ * <Select
60
+ * label="Country"
61
+ * options={[{ value: 'us', label: 'United States' }, { value: 'uk', label: 'United Kingdom' }]}
62
+ * bind:value={selectedCountry}
63
+ * />
64
+ */
65
+ declare const Select: import("svelte").Component<Props, {}, "value" | "values">;
66
+ type Select = ReturnType<typeof Select>;
67
+ export default Select;
68
+ //# sourceMappingURL=Select.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.svelte.d.ts","sourceRoot":"","sources":["../../../src/forms/Select/Select.svelte.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,YAAY,EAAE,CAAC;CACxB;AAQD,KAAK,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAErC,UAAU,KAAK;IACd,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,wDAAwD;IACxD,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,6CAA6C;IAC7C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC3C,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAudD;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,MAAM,2DAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { default as Select } from './Select.svelte';
2
+ export type { SelectOption, SelectGroup } from './Select.svelte';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forms/Select/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1 @@
1
+ export { default as Select } from './Select.svelte';
@@ -1,3 +1,5 @@
1
1
  export { TextInput } from './TextInput/index.js';
2
2
  export { Checkbox } from './Checkbox/index.js';
3
+ export { Select } from './Select/index.js';
4
+ export type { SelectOption, SelectGroup } from './Select/index.js';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export { TextInput } from './TextInput/index.js';
2
2
  export { Checkbox } from './Checkbox/index.js';
3
+ export { Select } from './Select/index.js';
@@ -2,26 +2,20 @@
2
2
  @component Card
3
3
 
4
4
  Win2K × Basquiat — Panel with canvas background, bold 3px borders, flat shadow.
5
- Optional header/footer, interactive mode, semantic element support.
5
+ Optional header/footer, semantic element support.
6
6
 
7
7
  @example
8
8
  <Card><p>Content</p></Card>
9
- <Card variant="accent" accentColor="success" header={...} footer={...} />
9
+ <Card header={headerSnippet} footer={footerSnippet}>Body</Card>
10
10
  -->
11
11
  <script lang="ts">
12
12
  import type { Snippet } from 'svelte';
13
13
  import { cn } from '../../utils/cn.js';
14
14
 
15
- type CardPadding = 'none' | 'sm' | 'md' | 'lg' | 'xl';
16
- type CardVariant = 'default' | 'elevated' | 'outlined' | 'accent';
17
- type AccentColor = 'primary' | 'success' | 'warning' | 'error' | 'info';
15
+ type CardPadding = 'sm' | 'md' | 'lg';
18
16
 
19
17
  interface Props {
20
- variant?: CardVariant;
21
18
  padding?: CardPadding;
22
- accentColor?: AccentColor;
23
- interactive?: boolean;
24
- asButton?: boolean;
25
19
  as?: 'div' | 'article' | 'section';
26
20
  id?: string;
27
21
  ariaLabelledby?: string;
@@ -35,11 +29,7 @@ interface Props {
35
29
  }
36
30
 
37
31
  let {
38
- variant = 'default',
39
32
  padding = 'md',
40
- accentColor = 'primary',
41
- interactive = false,
42
- asButton = false,
43
33
  as = 'div',
44
34
  id,
45
35
  ariaLabelledby,
@@ -53,22 +43,12 @@ let {
53
43
  }: Props = $props();
54
44
 
55
45
  const paddingValues: Record<CardPadding, string> = {
56
- none: '0',
57
46
  sm: 'var(--salmex-space-4)',
58
47
  md: 'var(--salmex-space-6)',
59
- lg: 'var(--salmex-space-8)',
60
- xl: 'var(--salmex-space-10)'
48
+ lg: 'var(--salmex-space-8)'
61
49
  };
62
50
 
63
51
  const currentPadding = $derived(paddingValues[padding]);
64
-
65
- function handleKeydown(e: KeyboardEvent) {
66
- if (e.key === 'Enter' || e.key === ' ') {
67
- e.preventDefault();
68
- (e.currentTarget as HTMLElement).click();
69
- }
70
- onkeydown?.(e);
71
- }
72
52
  </script>
73
53
 
74
54
  {#snippet cardContent()}
@@ -95,86 +75,34 @@ function handleKeydown(e: KeyboardEvent) {
95
75
  {/if}
96
76
  {/snippet}
97
77
 
98
- {#if asButton}
99
- <button
100
- type="button"
101
- {id}
102
- class={cn(
103
- 'salmex-card',
104
- `salmex-card-${variant}`,
105
- `salmex-card-padding-${padding}`,
106
- interactive && 'salmex-card-interactive',
107
- variant === 'accent' && `salmex-card-accent-${accentColor}`,
108
- className
109
- )}
110
- aria-labelledby={ariaLabelledby}
111
- data-testid={testId}
112
- onclick={onclick}
113
- onkeydown={handleKeydown}
114
- >
115
- {@render cardContent()}
116
- </button>
117
- {:else if interactive || onclick}
118
- <svelte:element
119
- this={as}
120
- {id}
121
- class={cn(
122
- 'salmex-card',
123
- `salmex-card-${variant}`,
124
- `salmex-card-padding-${padding}`,
125
- 'salmex-card-interactive',
126
- variant === 'accent' && `salmex-card-accent-${accentColor}`,
127
- className
128
- )}
129
- role="button"
130
- tabindex={0}
131
- aria-labelledby={ariaLabelledby}
132
- data-testid={testId}
133
- onclick={onclick}
134
- onkeydown={handleKeydown}
135
- >
136
- {@render cardContent()}
137
- </svelte:element>
138
- {:else}
139
- <svelte:element
140
- this={as}
141
- {id}
142
- class={cn(
143
- 'salmex-card',
144
- `salmex-card-${variant}`,
145
- `salmex-card-padding-${padding}`,
146
- variant === 'accent' && `salmex-card-accent-${accentColor}`,
147
- className
148
- )}
149
- aria-labelledby={ariaLabelledby}
150
- data-testid={testId}
151
- >
152
- {@render cardContent()}
153
- </svelte:element>
154
- {/if}
78
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
79
+ <svelte:element
80
+ this={as}
81
+ {id}
82
+ class={cn(
83
+ 'salmex-card',
84
+ `salmex-card-padding-${padding}`,
85
+ className
86
+ )}
87
+ aria-labelledby={ariaLabelledby}
88
+ data-testid={testId}
89
+ {onclick}
90
+ {onkeydown}
91
+ >
92
+ {@render cardContent()}
93
+ </svelte:element>
155
94
 
156
95
  <style>
157
96
  .salmex-card {
158
97
  position: relative;
159
98
  overflow: hidden;
160
99
  border-radius: var(--salmex-radius-none);
161
- transition: transform var(--salmex-transition-base), box-shadow var(--salmex-transition-base);
100
+ background: rgb(var(--salmex-window-surface));
162
101
  /* Bold 3px border, flat shadow — Win2K × Basquiat */
163
102
  border: 3px solid rgb(var(--salmex-border-dark));
164
103
  box-shadow: var(--salmex-shadow-lg);
165
104
  }
166
105
 
167
- button.salmex-card {
168
- width: 100%;
169
- text-align: left;
170
- font: inherit;
171
- cursor: pointer;
172
- }
173
-
174
- .salmex-card-padding-none {
175
- padding: 0;
176
- }
177
-
178
106
  .salmex-card-padding-sm {
179
107
  padding: var(--salmex-space-4);
180
108
  }
@@ -187,73 +115,6 @@ function handleKeydown(e: KeyboardEvent) {
187
115
  padding: var(--salmex-space-8);
188
116
  }
189
117
 
190
- .salmex-card-padding-xl {
191
- padding: var(--salmex-space-10);
192
- }
193
-
194
- /* Default — canvas/paper surface */
195
- .salmex-card-default {
196
- background: rgb(var(--salmex-window-surface));
197
- }
198
-
199
- .salmex-card-elevated {
200
- background: rgb(var(--salmex-bg-primary));
201
- box-shadow: var(--salmex-shadow-lg), 0 6px 0 rgb(0 0 0 / 0.15);
202
- }
203
-
204
- .salmex-card-outlined {
205
- background: transparent;
206
- border-width: 3px;
207
- }
208
-
209
- .salmex-card-accent-primary,
210
- .salmex-card-accent-success,
211
- .salmex-card-accent-warning,
212
- .salmex-card-accent-error,
213
- .salmex-card-accent-info {
214
- border-left-width: 6px;
215
- background: rgb(var(--salmex-window-surface));
216
- }
217
-
218
- .salmex-card-accent-primary {
219
- border-left-color: rgb(var(--salmex-electric-blue));
220
- }
221
-
222
- .salmex-card-accent-success {
223
- border-left-color: rgb(var(--salmex-urban-green));
224
- }
225
-
226
- .salmex-card-accent-warning {
227
- border-left-color: rgb(var(--salmex-spray-orange));
228
- }
229
-
230
- .salmex-card-accent-error {
231
- border-left-color: rgb(var(--salmex-street-red));
232
- }
233
-
234
- .salmex-card-accent-info {
235
- border-left-color: rgb(var(--salmex-info));
236
- }
237
-
238
- .salmex-card-interactive:hover {
239
- transform: translateY(-2px);
240
- box-shadow: 5px 7px 0 rgb(0 0 0 / 0.35);
241
- }
242
-
243
- .salmex-card-interactive:active {
244
- transform: translate(2px, 2px);
245
- box-shadow: 3px 3px 0 rgb(0 0 0 / 0.4);
246
- }
247
-
248
- .salmex-card-interactive:focus-visible {
249
- outline: none;
250
- box-shadow: 5px 7px 0 rgb(0 0 0 / 0.35), 0 0 0 2px rgb(var(--salmex-midnight-black)), 0 0 0 5px rgb(var(--salmex-crown-yellow));
251
- }
252
-
253
- :global([data-theme='dark']) .salmex-card-interactive:focus-visible {
254
- box-shadow: 5px 7px 0 rgb(0 0 0 / 0.35), 0 0 0 3px rgb(var(--salmex-crown-yellow));
255
- }
256
-
257
118
  .salmex-card-header {
258
119
  border-bottom: 2px solid rgb(var(--salmex-border-default));
259
120
  font-weight: 700;
@@ -269,15 +130,14 @@ function handleKeydown(e: KeyboardEvent) {
269
130
  display: block;
270
131
  }
271
132
 
272
- @media (prefers-reduced-motion: reduce) {
273
- .salmex-card {
274
- transition: none;
275
- }
276
- .salmex-card-interactive:hover {
277
- transform: none;
278
- }
279
- .salmex-card-interactive:active {
280
- transform: none;
133
+ /* Dark mode — heavier shadow (flat shadow on near-black bg is invisible) */
134
+ :global([data-theme='dark']) .salmex-card {
135
+ box-shadow: 5px 5px 0 rgb(0 0 0 / 0.7);
136
+ }
137
+
138
+ @media (prefers-color-scheme: dark) {
139
+ :global(:root:not([data-theme='light'])) .salmex-card {
140
+ box-shadow: 5px 5px 0 rgb(0 0 0 / 0.7);
281
141
  }
282
142
  }
283
143
  </style>
@@ -1,13 +1,7 @@
1
1
  import type { Snippet } from 'svelte';
2
- type CardPadding = 'none' | 'sm' | 'md' | 'lg' | 'xl';
3
- type CardVariant = 'default' | 'elevated' | 'outlined' | 'accent';
4
- type AccentColor = 'primary' | 'success' | 'warning' | 'error' | 'info';
2
+ type CardPadding = 'sm' | 'md' | 'lg';
5
3
  interface Props {
6
- variant?: CardVariant;
7
4
  padding?: CardPadding;
8
- accentColor?: AccentColor;
9
- interactive?: boolean;
10
- asButton?: boolean;
11
5
  as?: 'div' | 'article' | 'section';
12
6
  id?: string;
13
7
  ariaLabelledby?: string;
@@ -23,11 +17,11 @@ interface Props {
23
17
  * Card
24
18
  *
25
19
  * Win2K × Basquiat — Panel with canvas background, bold 3px borders, flat shadow.
26
- * Optional header/footer, interactive mode, semantic element support.
20
+ * Optional header/footer, semantic element support.
27
21
  *
28
22
  * @example
29
23
  * <Card><p>Content</p></Card>
30
- * <Card variant="accent" accentColor="success" header={...} footer={...} />
24
+ * <Card header={headerSnippet} footer={footerSnippet}>Body</Card>
31
25
  */
32
26
  declare const Card: import("svelte").Component<Props, {}, "">;
33
27
  type Card = ReturnType<typeof Card>;
@@ -1 +1 @@
1
- {"version":3,"file":"Card.svelte.d.ts","sourceRoot":"","sources":["../../../src/layout/Card/Card.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAItC,KAAK,WAAW,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACtD,KAAK,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;AAClE,KAAK,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAExE,UAAU,KAAK;IACd,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAuGD;;;;;;;;;GASG;AACH,QAAA,MAAM,IAAI,2CAAwC,CAAC;AACnD,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;AACpC,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Card.svelte.d.ts","sourceRoot":"","sources":["../../../src/layout/Card/Card.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAItC,KAAK,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtC,UAAU,KAAK;IACd,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,EAAE,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AA8DD;;;;;;;;;GASG;AACH,QAAA,MAAM,IAAI,2CAAwC,CAAC;AACnD,KAAK,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;AACpC,eAAe,IAAI,CAAC"}