@warp-ds/elements 2.11.0-next.1 → 2.12.0-next.1

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 (75) hide show
  1. package/dist/custom-elements.json +326 -0
  2. package/dist/docs/index.md +1 -0
  3. package/dist/docs/modal/modal.md +1 -0
  4. package/dist/docs/modal/styling.md +1 -0
  5. package/dist/docs/textfield/api.md +12 -0
  6. package/dist/docs/textfield/textfield.md +12 -0
  7. package/dist/docs/tooltip/accessibility.md +9 -0
  8. package/dist/docs/tooltip/api.md +87 -0
  9. package/dist/docs/tooltip/examples.md +32 -0
  10. package/dist/docs/tooltip/styling.md +47 -0
  11. package/dist/docs/tooltip/tooltip.md +197 -0
  12. package/dist/docs/tooltip/usage.md +10 -0
  13. package/dist/entrypoint-react.d.ts +1 -0
  14. package/dist/entrypoint-react.js +1 -0
  15. package/dist/index.d.ts +163 -0
  16. package/dist/packages/affix/affix.js +3 -3
  17. package/dist/packages/affix/affix.js.map +2 -2
  18. package/dist/packages/affix/styles.js +1 -1
  19. package/dist/packages/attention/attention.stories.js +5 -1
  20. package/dist/packages/modal/modal.d.ts +1 -0
  21. package/dist/packages/modal/modal.js +5 -1
  22. package/dist/packages/modal/modal.js.map +2 -2
  23. package/dist/packages/modal/modal.react.stories.d.ts +1 -1
  24. package/dist/packages/modal/react.d.ts +13 -5
  25. package/dist/packages/modal/react.js +10 -4
  26. package/dist/packages/modal/styles.js +5 -1
  27. package/dist/packages/modal-footer/react.d.ts +2 -1
  28. package/dist/packages/modal-footer/react.js +11 -5
  29. package/dist/packages/modal-header/react.js +1 -0
  30. package/dist/packages/select/select.js +1 -1
  31. package/dist/packages/select/select.js.map +2 -2
  32. package/dist/packages/select/styles.js +1 -1
  33. package/dist/packages/tab/react.d.ts +1 -0
  34. package/dist/packages/tab/react.js +2 -1
  35. package/dist/packages/tabs/tabs.js +4 -4
  36. package/dist/packages/tabs/tabs.js.map +3 -3
  37. package/dist/packages/tabs/tabs.react.stories.js +5 -5
  38. package/dist/packages/textarea/styles.js +1 -1
  39. package/dist/packages/textarea/textarea.js +6 -6
  40. package/dist/packages/textarea/textarea.js.map +2 -2
  41. package/dist/packages/textfield/input-styles.js +1 -1
  42. package/dist/packages/textfield/react.d.ts +1 -1
  43. package/dist/packages/textfield/styles.js +1 -1
  44. package/dist/packages/textfield/textfield.d.ts +8 -0
  45. package/dist/packages/textfield/textfield.js +32 -15
  46. package/dist/packages/textfield/textfield.js.map +3 -3
  47. package/dist/packages/textfield/textfield.react.stories.d.ts +2 -2
  48. package/dist/packages/tooltip/locales/da/messages.d.mts +1 -0
  49. package/dist/packages/tooltip/locales/da/messages.mjs +1 -0
  50. package/dist/packages/tooltip/locales/en/messages.d.mts +1 -0
  51. package/dist/packages/tooltip/locales/en/messages.mjs +1 -0
  52. package/dist/packages/tooltip/locales/fi/messages.d.mts +1 -0
  53. package/dist/packages/tooltip/locales/fi/messages.mjs +1 -0
  54. package/dist/packages/tooltip/locales/nb/messages.d.mts +1 -0
  55. package/dist/packages/tooltip/locales/nb/messages.mjs +1 -0
  56. package/dist/packages/tooltip/locales/sv/messages.d.mts +1 -0
  57. package/dist/packages/tooltip/locales/sv/messages.mjs +1 -0
  58. package/dist/packages/tooltip/react.d.ts +16 -0
  59. package/dist/packages/tooltip/react.js +28 -0
  60. package/dist/packages/tooltip/styles.d.ts +1 -0
  61. package/dist/packages/tooltip/styles.js +66 -0
  62. package/dist/packages/tooltip/tooltip.d.ts +72 -0
  63. package/dist/packages/tooltip/tooltip.hydration.test.d.ts +1 -0
  64. package/dist/packages/tooltip/tooltip.hydration.test.js +13 -0
  65. package/dist/packages/tooltip/tooltip.js +2528 -0
  66. package/dist/packages/tooltip/tooltip.js.map +7 -0
  67. package/dist/packages/tooltip/tooltip.react.stories.d.ts +12 -0
  68. package/dist/packages/tooltip/tooltip.react.stories.js +12 -0
  69. package/dist/packages/tooltip/tooltip.stories.d.ts +17 -0
  70. package/dist/packages/tooltip/tooltip.stories.js +115 -0
  71. package/dist/packages/tooltip/tooltip.test.d.ts +2 -0
  72. package/dist/packages/tooltip/tooltip.test.js +130 -0
  73. package/dist/web-types.json +89 -2
  74. package/eik/index.js +19 -19
  75. package/package.json +2 -1
@@ -0,0 +1,197 @@
1
+ # Tooltip (w-tooltip)
2
+
3
+ ## Description
4
+
5
+ A tooltip is a message box that is displayed when a user hovers over or gives focus to a UI element.
6
+
7
+ Tooltips should be used sparingly and contain succinct, supplementary information.
8
+
9
+ ## Usage
10
+
11
+ A tooltip is a message box that is displayed when a user hovers over or gives focus to a UI element.
12
+
13
+ Tooltips should be used sparingly and contain succinct, supplementary information.
14
+
15
+ ```html
16
+ <w-button id="my-button" aria-labelledby="my-tooltip">Hover over me</w-button>
17
+ <w-tooltip id="my-tooltip" for="my-button">I am a tooltip</w-tooltip>
18
+ ```
19
+
20
+ ## Accessibility
21
+
22
+ ### ARIA attribute
23
+
24
+ We use `aria-labelledby` instead of `aria-describedby` to create the relationship between the tooltip and its target.
25
+
26
+ The ARIA Authoring Practices Guide (APG) recommends `aria-describedby`, but at time of writing that must be set directly on the focusable element. Since `w-button`'s focusable `button` element is inside a shadow root we can't set up that relationship. Cross-root references by ID is impossible and the related ARIA properties on the `Element` are read only.
27
+
28
+ We might revisit this design later should cross-root ARIA references become supported.
29
+
30
+ ## Examples
31
+
32
+ By default the tooltip is placed above the target element if there is room. If there's no room above it flips side and is placed below the target.
33
+
34
+ <elements-example>
35
+
36
+ ```html
37
+ <w-button id="basic-button" aria-labelledby="basic-tooltip">Hover over me</w-button>
38
+ <w-tooltip id="basic-tooltip" for="basic-button">I am a tooltip</w-tooltip>
39
+ ```
40
+
41
+ </elements-example>
42
+
43
+ ### Adjust placement
44
+
45
+ You can specify a different initial placement. If there's no room the tooltip flips to the opposite side of the target.
46
+
47
+ Available positions:
48
+
49
+ - `top` (this is the default)
50
+ - `bottom`
51
+ - `left`
52
+ - `right`
53
+
54
+ <elements-example>
55
+
56
+ ```html
57
+ <w-button id="placed-button" aria-labelledby="placed-tooltip">Hover over me</w-button>
58
+ <w-tooltip id="placed-tooltip" for="placed-button" placement="right">I am a tooltip</w-tooltip>
59
+ ```
60
+
61
+ </elements-example>
62
+
63
+ ## Styling API
64
+
65
+ This component supports styling through **component tokens** (CSS custom properties with a --w-c- prefix) and **parts**.
66
+
67
+ ### Parts
68
+
69
+ Use `::part(...)` from outside the component.
70
+
71
+ - `tooltip` - the tooltip container with background color, padding etc.
72
+ - `arrow` - a square container used for positioning the visual part of the arrow
73
+ - `beak` - the visual part of the arrow pointing at the target
74
+ - `hover-bridge` - an invisible element there to ensure the tooltip doesn't close when moving the cursor from the target to the tooltip
75
+
76
+ Example:
77
+
78
+ ```css
79
+ w-tooltip::part(tooltip) {
80
+ text-transform: uppercase;
81
+ }
82
+ ```
83
+
84
+ ### Component tokens
85
+
86
+ Set these on `w-tooltip` to override visuals.
87
+
88
+ ```css
89
+ w-tooltip {
90
+ --w-c-tooltip-bg: lime;
91
+ --w-c-tooltip-color: black;
92
+ }
93
+ ```
94
+
95
+ #### Layout & typography
96
+
97
+ - `--w-c-tooltip-z-index`
98
+
99
+ #### Background
100
+
101
+ - `--w-c-tooltip-bg`
102
+
103
+ #### Text color
104
+
105
+ - `--w-c-tooltip-color`
106
+
107
+ ##### Shadow
108
+
109
+ - `--w-c-tooltip-box-shadow`
110
+
111
+ ## `<w-tooltip>` API
112
+
113
+ Unless otherwise noted all properties are HTML attributes (as opposed to JavaScript object properties).
114
+
115
+ ### Properties
116
+
117
+ | Name | Type | Default | Summary |
118
+ |-|-|-|-|
119
+ | for | `string` | `""` | ID of the element that triggers the tooltip on hover or focus. |
120
+ | hide (JS only) | `hide() => void` | `-` | - |
121
+ | hide-delay | `number` | `0` | Milliseconds to wait before hiding the tooltip on mouseout. |
122
+ | no-arrow | `boolean` | `false` | Hide the arrow pointing toward the tooltip target. |
123
+ | open | `boolean` | `false` | Indicates whether the tooltip is visible or not. |
124
+ | placement | [`TooltipPlacement`](#tooltipplacement) | `"top"` | Sets the placement of the tooltip relative to its target. |
125
+ | show (JS only) | `show() => void` | `-` | - |
126
+ | show-delay | `number` | `150` | Milliseconds to wait before showing the tooltip on hover. |
127
+
128
+ ### Property Details
129
+
130
+ #### for
131
+
132
+ ID of the element that triggers the tooltip on hover or focus.
133
+
134
+ - Type: `string`
135
+ - Default: `""`
136
+
137
+ #### hide (JS only)
138
+
139
+
140
+
141
+ - Type: `hide() => void`
142
+ - Default: `-`
143
+
144
+ #### hide-delay
145
+
146
+ Milliseconds to wait before hiding the tooltip on mouseout.
147
+
148
+ - Type: `number`
149
+ - Default: `0`
150
+
151
+ #### no-arrow
152
+
153
+ Hide the arrow pointing toward the tooltip target.
154
+
155
+ - Type: `boolean`
156
+ - Default: `false`
157
+
158
+ #### open
159
+
160
+ Indicates whether the tooltip is visible or not.
161
+
162
+ - Type: `boolean`
163
+ - Default: `false`
164
+
165
+ #### placement
166
+
167
+ Sets the placement of the tooltip relative to its target.
168
+
169
+ The tooltip will try to position itself at the given placement. If there is no room it will flip to the opposite side automatically.
170
+
171
+ - Type: [`TooltipPlacement`](#tooltipplacement)
172
+ - Default: `"top"`
173
+
174
+ #### show (JS only)
175
+
176
+
177
+
178
+ - Type: `show() => void`
179
+ - Default: `-`
180
+
181
+ #### show-delay
182
+
183
+ Milliseconds to wait before showing the tooltip on hover.
184
+
185
+ Keep at a non-zero value to avoid flickering the tooltip on and off when cursors move quickly past the target element.
186
+
187
+ Focusing the target element shows the tooltip immediately.
188
+
189
+ - Type: `number`
190
+ - Default: `150`
191
+
192
+ ### Types
193
+
194
+ #### TooltipPlacement
195
+
196
+ `'top' | 'right' | 'bottom' | 'left'`
197
+
@@ -0,0 +1,10 @@
1
+ ## Usage
2
+
3
+ A tooltip is a message box that is displayed when a user hovers over or gives focus to a UI element.
4
+
5
+ Tooltips should be used sparingly and contain succinct, supplementary information.
6
+
7
+ ```html
8
+ <w-button id="my-button" aria-labelledby="my-tooltip">Hover over me</w-button>
9
+ <w-tooltip id="my-tooltip" for="my-button">I am a tooltip</w-tooltip>
10
+ ```
@@ -36,3 +36,4 @@ export * from "./packages/tab-panel/react.js";
36
36
  export * from "./packages/tabs/react.js";
37
37
  export * from "./packages/textarea/react.js";
38
38
  export * from "./packages/textfield/react.js";
39
+ export * from "./packages/tooltip/react.js";
@@ -37,3 +37,4 @@ export * from "./packages/tab-panel/react.js";
37
37
  export * from "./packages/tabs/react.js";
38
38
  export * from "./packages/textarea/react.js";
39
39
  export * from "./packages/textfield/react.js";
40
+ export * from "./packages/tooltip/react.js";
package/dist/index.d.ts CHANGED
@@ -47,6 +47,7 @@ import type { WarpTab } from "./packages/tab/tab.ts";
47
47
  import type { WarpTabPanel } from "./packages/tab-panel/tab-panel.ts";
48
48
  import type { WarpTabs } from "./packages/tabs/tabs.ts";
49
49
  import type { WarpTextarea } from "./packages/textarea/textarea.ts";
50
+ import type { WarpTooltip } from "./packages/tooltip/tooltip.ts";
50
51
 
51
52
  /**
52
53
  * This type can be used to create scoped tags for your components.
@@ -301,6 +302,12 @@ Using arrow up and down in the input field increments and decrements by 5. */
301
302
  step?: WarpTextField["step"];
302
303
  /** A space-separated string that hints to browsers [what type of content it can suggest](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/autocomplete#value) to autofill. */
303
304
  autocomplete?: WarpTextField["autocomplete"];
305
+ /** Suplementary information that should show in a tooltip behind an information icon after the label.
306
+
307
+ Use the `tooltip` slot if you need markup and not just text.
308
+
309
+ You must provide a label to be able to show an info icon with a tooltip. */
310
+ tooltip?: WarpTextField["tooltip"];
304
311
  /** Function to format value when the input field.
305
312
 
306
313
  Only active when the input field does not have focus,
@@ -372,6 +379,12 @@ Using arrow up and down in the input field increments and decrements by 5. */
372
379
  "prop:step"?: WarpTextField["step"];
373
380
  /** A space-separated string that hints to browsers [what type of content it can suggest](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/autocomplete#value) to autofill. */
374
381
  "prop:autocomplete"?: WarpTextField["autocomplete"];
382
+ /** Suplementary information that should show in a tooltip behind an information icon after the label.
383
+
384
+ Use the `tooltip` slot if you need markup and not just text.
385
+
386
+ You must provide a label to be able to show an info icon with a tooltip. */
387
+ "prop:tooltip"?: WarpTextField["tooltip"];
375
388
  /** Function to format value when the input field.
376
389
 
377
390
  Only active when the input field does not have focus,
@@ -2307,6 +2320,73 @@ Placeholder text should not be used as a substitute for labeling the element wit
2307
2320
  textContent?: string | number;
2308
2321
  };
2309
2322
 
2323
+ export type WarpTooltipProps = {
2324
+ /** ID of the element that triggers the tooltip on hover or focus. */
2325
+ for?: WarpTooltip["for"];
2326
+ /** Hide the arrow pointing toward the tooltip target. */
2327
+ "no-arrow"?: WarpTooltip["noArrow"];
2328
+ /** Hide the arrow pointing toward the tooltip target. */
2329
+ noArrow?: WarpTooltip["noArrow"];
2330
+ /** Indicates whether the tooltip is visible or not. */
2331
+ open?: WarpTooltip["open"];
2332
+ /** Sets the placement of the tooltip relative to its target.
2333
+
2334
+ The tooltip will try to position itself at the given placement. If there is no room it will flip to the opposite side automatically. */
2335
+ placement?: WarpTooltip["placement"];
2336
+ /** Milliseconds to wait before showing the tooltip on hover.
2337
+
2338
+ Keep at a non-zero value to avoid flickering the tooltip on and off when cursors move quickly past the target element.
2339
+
2340
+ Focusing the target element shows the tooltip immediately. */
2341
+ "show-delay"?: WarpTooltip["showDelay"];
2342
+ /** Milliseconds to wait before showing the tooltip on hover.
2343
+
2344
+ Keep at a non-zero value to avoid flickering the tooltip on and off when cursors move quickly past the target element.
2345
+
2346
+ Focusing the target element shows the tooltip immediately. */
2347
+ showDelay?: WarpTooltip["showDelay"];
2348
+ /** Milliseconds to wait before hiding the tooltip on mouseout. */
2349
+ "hide-delay"?: WarpTooltip["hideDelay"];
2350
+ /** Milliseconds to wait before hiding the tooltip on mouseout. */
2351
+ hideDelay?: WarpTooltip["hideDelay"];
2352
+ };
2353
+
2354
+ export type WarpTooltipSolidJsProps = {
2355
+ /** ID of the element that triggers the tooltip on hover or focus. */
2356
+ "prop:for"?: WarpTooltip["for"];
2357
+ /** Hide the arrow pointing toward the tooltip target. */
2358
+ "bool:no-arrow"?: WarpTooltip["noArrow"];
2359
+ /** Hide the arrow pointing toward the tooltip target. */
2360
+ "prop:noArrow"?: WarpTooltip["noArrow"];
2361
+ /** Indicates whether the tooltip is visible or not. */
2362
+ "prop:open"?: WarpTooltip["open"];
2363
+ /** Sets the placement of the tooltip relative to its target.
2364
+
2365
+ The tooltip will try to position itself at the given placement. If there is no room it will flip to the opposite side automatically. */
2366
+ "prop:placement"?: WarpTooltip["placement"];
2367
+ /** Milliseconds to wait before showing the tooltip on hover.
2368
+
2369
+ Keep at a non-zero value to avoid flickering the tooltip on and off when cursors move quickly past the target element.
2370
+
2371
+ Focusing the target element shows the tooltip immediately. */
2372
+ "attr:show-delay"?: WarpTooltip["showDelay"];
2373
+ /** Milliseconds to wait before showing the tooltip on hover.
2374
+
2375
+ Keep at a non-zero value to avoid flickering the tooltip on and off when cursors move quickly past the target element.
2376
+
2377
+ Focusing the target element shows the tooltip immediately. */
2378
+ "prop:showDelay"?: WarpTooltip["showDelay"];
2379
+ /** Milliseconds to wait before hiding the tooltip on mouseout. */
2380
+ "attr:hide-delay"?: WarpTooltip["hideDelay"];
2381
+ /** Milliseconds to wait before hiding the tooltip on mouseout. */
2382
+ "prop:hideDelay"?: WarpTooltip["hideDelay"];
2383
+
2384
+ /** Set the innerHTML of the element */
2385
+ innerHTML?: string;
2386
+ /** Set the textContent of the element */
2387
+ textContent?: string | number;
2388
+ };
2389
+
2310
2390
  export type CustomElements = {
2311
2391
  /**
2312
2392
  * A single-line input component used for entering and editing textual or numeric data.
@@ -2349,6 +2429,11 @@ export type CustomElements = {
2349
2429
  * For example with a `step="5"` only values that divide evenly on 5 are allowed.
2350
2430
  * Using arrow up and down in the input field increments and decrements by 5.
2351
2431
  * - `autocomplete`: A space-separated string that hints to browsers [what type of content it can suggest](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/autocomplete#value) to autofill.
2432
+ * - `tooltip`: Suplementary information that should show in a tooltip behind an information icon after the label.
2433
+ *
2434
+ * Use the `tooltip` slot if you need markup and not just text.
2435
+ *
2436
+ * You must provide a label to be able to show an info icon with a tooltip.
2352
2437
  * - `formatter`: Function to format value when the input field.
2353
2438
  *
2354
2439
  * Only active when the input field does not have focus,
@@ -2970,6 +3055,7 @@ export type CustomElements = {
2970
3055
  * - `--w-c-modal-max-height`: undefined (default: `undefined`)
2971
3056
  * - `--w-c-modal-min-height`: undefined (default: `undefined`)
2972
3057
  * - `--w-c-modal-translate-distance`: undefined (default: `undefined`)
3058
+ * - `--w-c-modal-padding-bottom`: undefined (default: `undefined`)
2973
3059
  * - `--w-c-modal-width`: undefined (default: `undefined`)
2974
3060
  *
2975
3061
  * ## CSS Parts
@@ -3559,6 +3645,37 @@ export type CustomElements = {
3559
3645
  "w-textarea": Partial<
3560
3646
  WarpTextareaProps & BaseProps<WarpTextarea> & BaseEvents
3561
3647
  >;
3648
+
3649
+ /**
3650
+ * A tooltip is a message box that is displayed when a user hovers over or gives focus to a UI element.
3651
+ *
3652
+ * Tooltips should be used sparingly and contain succinct, supplementary information.
3653
+ *
3654
+ * ## Attributes & Properties
3655
+ *
3656
+ * Component attributes and properties that can be applied to the element or by using JavaScript.
3657
+ *
3658
+ * - `for`: ID of the element that triggers the tooltip on hover or focus.
3659
+ * - `no-arrow`/`noArrow`: Hide the arrow pointing toward the tooltip target.
3660
+ * - `open`: Indicates whether the tooltip is visible or not.
3661
+ * - `placement`: Sets the placement of the tooltip relative to its target.
3662
+ *
3663
+ * The tooltip will try to position itself at the given placement. If there is no room it will flip to the opposite side automatically.
3664
+ * - `show-delay`/`showDelay`: Milliseconds to wait before showing the tooltip on hover.
3665
+ *
3666
+ * Keep at a non-zero value to avoid flickering the tooltip on and off when cursors move quickly past the target element.
3667
+ *
3668
+ * Focusing the target element shows the tooltip immediately.
3669
+ * - `hide-delay`/`hideDelay`: Milliseconds to wait before hiding the tooltip on mouseout.
3670
+ *
3671
+ * ## Methods
3672
+ *
3673
+ * Methods that can be called to access component functionality.
3674
+ *
3675
+ * - `hide() => void`: undefined
3676
+ * - `show() => void`: undefined
3677
+ */
3678
+ "w-tooltip": Partial<WarpTooltipProps & BaseProps<WarpTooltip> & BaseEvents>;
3562
3679
  };
3563
3680
 
3564
3681
  type ReactElementProps<T extends HTMLElement> = import("react").DOMAttributes<T> &
@@ -3619,6 +3736,7 @@ type CustomElementInstances = {
3619
3736
  "w-tab-panel": WarpTabPanel;
3620
3737
  "w-tabs": WarpTabs;
3621
3738
  "w-textarea": WarpTextarea;
3739
+ "w-tooltip": WarpTooltip;
3622
3740
  };
3623
3741
 
3624
3742
  type CustomElementComponentProps = {
@@ -3659,6 +3777,7 @@ type CustomElementComponentProps = {
3659
3777
  "w-tab-panel": WarpTabPanelProps;
3660
3778
  "w-tabs": WarpTabsProps;
3661
3779
  "w-textarea": WarpTextareaProps;
3780
+ "w-tooltip": WarpTooltipProps;
3662
3781
  };
3663
3782
 
3664
3783
  export type ReactCustomElements = {
@@ -3709,6 +3828,11 @@ export type CustomElementsSolidJs = {
3709
3828
  * For example with a `step="5"` only values that divide evenly on 5 are allowed.
3710
3829
  * Using arrow up and down in the input field increments and decrements by 5.
3711
3830
  * - `autocomplete`: A space-separated string that hints to browsers [what type of content it can suggest](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/autocomplete#value) to autofill.
3831
+ * - `tooltip`: Suplementary information that should show in a tooltip behind an information icon after the label.
3832
+ *
3833
+ * Use the `tooltip` slot if you need markup and not just text.
3834
+ *
3835
+ * You must provide a label to be able to show an info icon with a tooltip.
3712
3836
  * - `formatter`: Function to format value when the input field.
3713
3837
  *
3714
3838
  * Only active when the input field does not have focus,
@@ -4376,6 +4500,7 @@ export type CustomElementsSolidJs = {
4376
4500
  * - `--w-c-modal-max-height`: undefined (default: `undefined`)
4377
4501
  * - `--w-c-modal-min-height`: undefined (default: `undefined`)
4378
4502
  * - `--w-c-modal-translate-distance`: undefined (default: `undefined`)
4503
+ * - `--w-c-modal-padding-bottom`: undefined (default: `undefined`)
4379
4504
  * - `--w-c-modal-width`: undefined (default: `undefined`)
4380
4505
  *
4381
4506
  * ## CSS Parts
@@ -5025,6 +5150,42 @@ export type CustomElementsSolidJs = {
5025
5150
  BaseProps<WarpTextarea> &
5026
5151
  BaseEvents
5027
5152
  >;
5153
+
5154
+ /**
5155
+ * A tooltip is a message box that is displayed when a user hovers over or gives focus to a UI element.
5156
+ *
5157
+ * Tooltips should be used sparingly and contain succinct, supplementary information.
5158
+ *
5159
+ * ## Attributes & Properties
5160
+ *
5161
+ * Component attributes and properties that can be applied to the element or by using JavaScript.
5162
+ *
5163
+ * - `for`: ID of the element that triggers the tooltip on hover or focus.
5164
+ * - `no-arrow`/`noArrow`: Hide the arrow pointing toward the tooltip target.
5165
+ * - `open`: Indicates whether the tooltip is visible or not.
5166
+ * - `placement`: Sets the placement of the tooltip relative to its target.
5167
+ *
5168
+ * The tooltip will try to position itself at the given placement. If there is no room it will flip to the opposite side automatically.
5169
+ * - `show-delay`/`showDelay`: Milliseconds to wait before showing the tooltip on hover.
5170
+ *
5171
+ * Keep at a non-zero value to avoid flickering the tooltip on and off when cursors move quickly past the target element.
5172
+ *
5173
+ * Focusing the target element shows the tooltip immediately.
5174
+ * - `hide-delay`/`hideDelay`: Milliseconds to wait before hiding the tooltip on mouseout.
5175
+ *
5176
+ * ## Methods
5177
+ *
5178
+ * Methods that can be called to access component functionality.
5179
+ *
5180
+ * - `hide() => void`: undefined
5181
+ * - `show() => void`: undefined
5182
+ */
5183
+ "w-tooltip": Partial<
5184
+ WarpTooltipProps &
5185
+ WarpTooltipSolidJsProps &
5186
+ BaseProps<WarpTooltip> &
5187
+ BaseEvents
5188
+ >;
5028
5189
  };
5029
5190
 
5030
5191
  export type CustomCssProperties = {
@@ -5045,6 +5206,8 @@ export type CustomCssProperties = {
5045
5206
  /** */
5046
5207
  "--w-c-modal-translate-distance"?: string;
5047
5208
  /** */
5209
+ "--w-c-modal-padding-bottom"?: string;
5210
+ /** */
5048
5211
  "--w-c-modal-width"?: string;
5049
5212
  /** adjusts the flex gap between actions in the footer. */
5050
5213
  "--w-c-modal-footer-gap"?: string;
@@ -1,4 +1,4 @@
1
- var me=Object.defineProperty;var ve=Object.getOwnPropertyDescriptor;var w=(t,e,r,o)=>{for(var a=o>1?void 0:o?ve(e,r):e,d=t.length-1,s;d>=0;d--)(s=t[d])&&(a=(o?s(e,r,a):s(a))||a);return o&&a&&me(e,r,a),a};var U=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return t.reduce(function(r,o){return r.concat(typeof o=="string"?o:Array.isArray(o)?U.apply(void 0,o):typeof o=="object"&&o?Object.keys(o).map(function(a){return o[a]?a:""}):"")},[]).join(" ")};var c=function(t,e,r,o){if(r==="a"&&!o)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?t!==e||!o:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return r==="m"?o:r==="a"?o.call(t):o?o.value:e.get(t)},h=function(t,e,r,o,a){if(o==="m")throw new TypeError("Private method is not writable");if(o==="a"&&!a)throw new TypeError("Private accessor was defined without a setter");if(typeof e=="function"?t!==e||!a:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return o==="a"?a.call(t,r):a?a.value=r:e.set(t,r),r};function te(t){var e,r,o,a,d,s,n,p,g,y,_,P,v,z,C,m,M,T,X;class ge extends t{constructor(...i){var l,b,u;super(...i),e.add(this),this.internals=this.attachInternals(),r.set(this,!1),o.set(this,!1),a.set(this,!1),d.set(this,void 0),s.set(this,void 0),n.set(this,!0),g.set(this,""),y.set(this,()=>{h(this,a,!0,"f"),h(this,r,!0,"f"),c(this,e,"m",m).call(this)}),_.set(this,()=>{h(this,r,!1,"f"),c(this,e,"m",M).call(this,this.shouldFormValueUpdate()?c(this,g,"f"):""),!this.validity.valid&&c(this,a,"f")&&h(this,o,!0,"f");let x=c(this,e,"m",m).call(this);this.validationMessageCallback&&this.validationMessageCallback(x?this.internals.validationMessage:"")}),P.set(this,()=>{var x;c(this,n,"f")&&this.validationTarget&&(this.internals.setValidity(this.validity,this.validationMessage,this.validationTarget),h(this,n,!1,"f")),h(this,a,!0,"f"),h(this,o,!0,"f"),c(this,e,"m",m).call(this),(x=this===null||this===void 0?void 0:this.validationMessageCallback)===null||x===void 0||x.call(this,this.showError?this.internals.validationMessage:"")}),v.set(this,void 0),z.set(this,!1),C.set(this,Promise.resolve()),(l=this.addEventListener)===null||l===void 0||l.call(this,"focus",c(this,y,"f")),(b=this.addEventListener)===null||b===void 0||b.call(this,"blur",c(this,_,"f")),(u=this.addEventListener)===null||u===void 0||u.call(this,"invalid",c(this,P,"f")),this.setValue(null)}static get formAssociated(){return!0}static get validators(){return this.formControlValidators||[]}static get observedAttributes(){let i=this.validators.map(u=>u.attribute).flat(),l=super.observedAttributes||[];return[...new Set([...l,...i])]}static getValidator(i){return this.validators.find(l=>l.attribute===i)||null}static getValidators(i){return this.validators.filter(l=>{var b;if(l.attribute===i||!((b=l.attribute)===null||b===void 0)&&b.includes(i))return!0})}get form(){return this.internals.form}get showError(){return c(this,e,"m",m).call(this)}checkValidity(){return this.internals.checkValidity()}get validity(){return this.internals.validity}get validationMessage(){return this.internals.validationMessage}attributeChangedCallback(i,l,b){var u;(u=super.attributeChangedCallback)===null||u===void 0||u.call(this,i,l,b);let j=this.constructor.getValidators(i);j?.length&&this.validationTarget&&this.setValue(c(this,g,"f"))}setValue(i){var l;h(this,o,!1,"f"),(l=this.validationMessageCallback)===null||l===void 0||l.call(this,""),h(this,g,i,"f");let u=this.shouldFormValueUpdate()?i:null;this.internals.setFormValue(u),c(this,e,"m",M).call(this,u),this.valueChangedCallback&&this.valueChangedCallback(u),c(this,e,"m",m).call(this)}shouldFormValueUpdate(){return!0}get validationComplete(){return new Promise(i=>i(c(this,C,"f")))}formResetCallback(){var i,l;h(this,a,!1,"f"),h(this,o,!1,"f"),c(this,e,"m",m).call(this),(i=this.resetFormControl)===null||i===void 0||i.call(this),(l=this.validationMessageCallback)===null||l===void 0||l.call(this,c(this,e,"m",m).call(this)?this.validationMessage:"")}}return r=new WeakMap,o=new WeakMap,a=new WeakMap,d=new WeakMap,s=new WeakMap,n=new WeakMap,g=new WeakMap,y=new WeakMap,_=new WeakMap,P=new WeakMap,v=new WeakMap,z=new WeakMap,C=new WeakMap,e=new WeakSet,p=function(){let i=this.getRootNode(),l=`${this.localName}[name="${this.getAttribute("name")}"]`;return i.querySelectorAll(l)},m=function(){if(this.hasAttribute("disabled"))return!1;let i=c(this,o,"f")||c(this,a,"f")&&!this.validity.valid&&!c(this,r,"f");return i&&this.internals.states?this.internals.states.add("--show-error"):this.internals.states&&this.internals.states.delete("--show-error"),i},M=function(i){let l=this.constructor,b={},u=l.validators,x=[],j=u.some(f=>f.isValid instanceof Promise);c(this,z,"f")||(h(this,C,new Promise(f=>{h(this,v,f,"f")}),"f"),h(this,z,!0,"f")),c(this,d,"f")&&(c(this,d,"f").abort(),h(this,s,c(this,d,"f"),"f"));let $=new AbortController;h(this,d,$,"f");let A,oe=!1;u.length&&(u.forEach(f=>{let Z=f.key||"customError",S=f.isValid(this,i,$.signal);S instanceof Promise?(x.push(S),S.then(G=>{G!=null&&(b[Z]=!G,A=c(this,e,"m",X).call(this,f,i),c(this,e,"m",T).call(this,b,A))})):(b[Z]=!S,this.validity[Z]!==!S&&(oe=!0),!S&&!A&&(A=c(this,e,"m",X).call(this,f,i)))}),Promise.allSettled(x).then(()=>{var f;$?.signal.aborted||(h(this,z,!1,"f"),(f=c(this,v,"f"))===null||f===void 0||f.call(this))}),(oe||!j)&&c(this,e,"m",T).call(this,b,A))},T=function(i,l){if(this.validationTarget)this.internals.setValidity(i,l,this.validationTarget),h(this,n,!1,"f");else{if(this.internals.setValidity(i,l),this.internals.validity.valid)return;h(this,n,!0,"f")}},X=function(i,l){if(this.validityCallback){let b=this.validityCallback(i.key||"customError");if(b)return b}return i.message instanceof Function?i.message(this,l):i.message},ge}var F=t=>typeof t=="string",fe=t=>typeof t=="function",ae=new Map,ne="en";function q(t){return[...Array.isArray(t)?t:[t],ne]}function K(t,e,r){let o=q(t);r||(r="default");let a;if(typeof r=="string")switch(a={day:"numeric",month:"short",year:"numeric"},r){case"full":a.weekday="long";case"long":a.month="long";break;case"short":a.month="numeric";break}else a=r;return N(()=>O("date",o,r),()=>new Intl.DateTimeFormat(o,a)).format(F(e)?new Date(e):e)}function we(t,e,r){let o;if(r||(r="default"),typeof r=="string")switch(o={second:"numeric",minute:"numeric",hour:"numeric"},r){case"full":case"long":o.timeZoneName="short";break;case"short":delete o.second}else o=r;return K(t,e,o)}function W(t,e,r){let o=q(t);return N(()=>O("number",o,r),()=>new Intl.NumberFormat(o,r)).format(e)}function ie(t,e,r,{offset:o=0,...a}){let d=q(t),s=e?N(()=>O("plural-ordinal",d),()=>new Intl.PluralRules(d,{type:"ordinal"})):N(()=>O("plural-cardinal",d),()=>new Intl.PluralRules(d,{type:"cardinal"}));return a[r]??a[s.select(r-o)]??a.other}function N(t,e){let r=t(),o=ae.get(r);return o||(o=e(),ae.set(r,o)),o}function O(t,e,r){let o=e.join("-");return`${t}-${o}-${JSON.stringify(r)}`}var se=/\\u[a-fA-F0-9]{4}|\\x[a-fA-F0-9]{2}/,le=t=>t.replace(/\\u([a-fA-F0-9]{4})|\\x([a-fA-F0-9]{2})/g,(e,r,o)=>{if(r){let a=parseInt(r,16);return String.fromCharCode(a)}else{let a=parseInt(o,16);return String.fromCharCode(a)}}),ce="%__lingui_octothorpe__%",xe=(t,e,r={})=>{let o=e||t,a=s=>typeof s=="object"?s:r[s],d=(s,n)=>{let p=Object.keys(r).length?a("number"):void 0,g=W(o,s,p);return n.replace(new RegExp(ce,"g"),g)};return{plural:(s,n)=>{let{offset:p=0}=n,g=ie(o,!1,s,n);return d(s-p,g)},selectordinal:(s,n)=>{let{offset:p=0}=n,g=ie(o,!0,s,n);return d(s-p,g)},select:ke,number:(s,n)=>W(o,s,a(n)||{style:n}),date:(s,n)=>K(o,s,a(n)||n),time:(s,n)=>we(o,s,a(n)||n)}},ke=(t,e)=>e[t]??e.other;function ye(t,e,r){return(o={},a)=>{let d=xe(e,r,a),s=(p,g=!1)=>Array.isArray(p)?p.reduce((y,_)=>{if(_==="#"&&g)return y+ce;if(F(_))return y+_;let[P,v,z]=_,C={};v==="plural"||v==="selectordinal"||v==="select"?Object.entries(z).forEach(([M,T])=>{C[M]=s(T,v==="plural"||v==="selectordinal")}):C=z;let m;if(v){let M=d[v];m=M(o[P],C)}else m=o[P];return m==null?y:y+m},""):p,n=s(t);return F(n)&&se.test(n)?le(n):F(n)?n:n?String(n):""}}var _e=Object.defineProperty,ze=(t,e,r)=>e in t?_e(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Ce=(t,e,r)=>(ze(t,typeof e!="symbol"?e+"":e,r),r),B=class{constructor(){Ce(this,"_events",{})}on(e,r){var o;return(o=this._events)[e]??(o[e]=[]),this._events[e].push(r),()=>this.removeListener(e,r)}removeListener(e,r){let o=this._getListeners(e);if(!o)return;let a=o.indexOf(r);~a&&o.splice(a,1)}emit(e,...r){let o=this._getListeners(e);o&&o.map(a=>a.apply(this,r))}_getListeners(e){let r=this._events[e];return Array.isArray(r)?r:!1}},Fe=Object.defineProperty,Ee=(t,e,r)=>e in t?Fe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,L=(t,e,r)=>(Ee(t,typeof e!="symbol"?e+"":e,r),r),H=class extends B{constructor(e){super(),L(this,"_locale",""),L(this,"_locales"),L(this,"_localeData",{}),L(this,"_messages",{}),L(this,"_missing"),L(this,"_messageCompiler"),L(this,"t",this._.bind(this)),e.missing!=null&&(this._missing=e.missing),e.messages!=null&&this.load(e.messages),e.localeData!=null&&this.loadLocaleData(e.localeData),(typeof e.locale=="string"||e.locales)&&this.activate(e.locale??ne,e.locales)}get locale(){return this._locale}get locales(){return this._locales}get messages(){return this._messages[this._locale]??{}}get localeData(){return this._localeData[this._locale]??{}}_loadLocaleData(e,r){let o=this._localeData[e];o?Object.assign(o,r):this._localeData[e]=r}setMessagesCompiler(e){return this._messageCompiler=e,this}loadLocaleData(e,r){typeof e=="string"?this._loadLocaleData(e,r):Object.keys(e).forEach(o=>this._loadLocaleData(o,e[o])),this.emit("change")}_load(e,r){let o=this._messages[e];o?Object.assign(o,r):this._messages[e]=r}load(e,r){typeof e=="string"&&typeof r=="object"?this._load(e,r):Object.entries(e).forEach(([o,a])=>this._load(o,a)),this.emit("change")}loadAndActivate({locale:e,locales:r,messages:o}){this._locale=e,this._locales=r||void 0,this._messages[this._locale]=o,this.emit("change")}activate(e,r){this._locale=e,this._locales=r,this.emit("change")}_(e,r,o){if(!this.locale)throw new Error("Lingui: Attempted to call a translation function without setting a locale.\nMake sure to call `i18n.activate(locale)` before using Lingui functions.\nThis issue may also occur due to a race condition in your initialization logic.");let a=o?.message;e||(e=""),F(e)||(r=e.values||r,a=e.message,e=e.id);let d=this.messages[e],s=d===void 0,n=this._missing;if(n&&s)return fe(n)?n(this._locale,e):n;s&&this.emit("missing",{id:e,locale:this._locale});let p=d||a||e;return F(p)&&(this._messageCompiler?p=this._messageCompiler(p):console.warn(`Uncompiled message detected! Message:
1
+ var me=Object.defineProperty;var ve=Object.getOwnPropertyDescriptor;var w=(t,e,r,o)=>{for(var a=o>1?void 0:o?ve(e,r):e,d=t.length-1,s;d>=0;d--)(s=t[d])&&(a=(o?s(e,r,a):s(a))||a);return o&&a&&me(e,r,a),a};var U=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return t.reduce(function(r,o){return r.concat(typeof o=="string"?o:Array.isArray(o)?U.apply(void 0,o):typeof o=="object"&&o?Object.keys(o).map(function(a){return o[a]?a:""}):"")},[]).join(" ")};var c=function(t,e,r,o){if(r==="a"&&!o)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?t!==e||!o:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return r==="m"?o:r==="a"?o.call(t):o?o.value:e.get(t)},h=function(t,e,r,o,a){if(o==="m")throw new TypeError("Private method is not writable");if(o==="a"&&!a)throw new TypeError("Private accessor was defined without a setter");if(typeof e=="function"?t!==e||!a:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return o==="a"?a.call(t,r):a?a.value=r:e.set(t,r),r};function te(t){var e,r,o,a,d,s,n,p,g,y,_,P,v,z,C,m,M,T,X;class ge extends t{constructor(...i){var l,b,u;super(...i),e.add(this),this.internals=this.attachInternals(),r.set(this,!1),o.set(this,!1),a.set(this,!1),d.set(this,void 0),s.set(this,void 0),n.set(this,!0),g.set(this,""),y.set(this,()=>{h(this,a,!0,"f"),h(this,r,!0,"f"),c(this,e,"m",m).call(this)}),_.set(this,()=>{h(this,r,!1,"f"),c(this,e,"m",M).call(this,this.shouldFormValueUpdate()?c(this,g,"f"):""),!this.validity.valid&&c(this,a,"f")&&h(this,o,!0,"f");let x=c(this,e,"m",m).call(this);this.validationMessageCallback&&this.validationMessageCallback(x?this.internals.validationMessage:"")}),P.set(this,()=>{var x;c(this,n,"f")&&this.validationTarget&&(this.internals.setValidity(this.validity,this.validationMessage,this.validationTarget),h(this,n,!1,"f")),h(this,a,!0,"f"),h(this,o,!0,"f"),c(this,e,"m",m).call(this),(x=this===null||this===void 0?void 0:this.validationMessageCallback)===null||x===void 0||x.call(this,this.showError?this.internals.validationMessage:"")}),v.set(this,void 0),z.set(this,!1),C.set(this,Promise.resolve()),(l=this.addEventListener)===null||l===void 0||l.call(this,"focus",c(this,y,"f")),(b=this.addEventListener)===null||b===void 0||b.call(this,"blur",c(this,_,"f")),(u=this.addEventListener)===null||u===void 0||u.call(this,"invalid",c(this,P,"f")),this.setValue(null)}static get formAssociated(){return!0}static get validators(){return this.formControlValidators||[]}static get observedAttributes(){let i=this.validators.map(u=>u.attribute).flat(),l=super.observedAttributes||[];return[...new Set([...l,...i])]}static getValidator(i){return this.validators.find(l=>l.attribute===i)||null}static getValidators(i){return this.validators.filter(l=>{var b;if(l.attribute===i||!((b=l.attribute)===null||b===void 0)&&b.includes(i))return!0})}get form(){return this.internals.form}get showError(){return c(this,e,"m",m).call(this)}checkValidity(){return this.internals.checkValidity()}get validity(){return this.internals.validity}get validationMessage(){return this.internals.validationMessage}attributeChangedCallback(i,l,b){var u;(u=super.attributeChangedCallback)===null||u===void 0||u.call(this,i,l,b);let $=this.constructor.getValidators(i);$?.length&&this.validationTarget&&this.setValue(c(this,g,"f"))}setValue(i){var l;h(this,o,!1,"f"),(l=this.validationMessageCallback)===null||l===void 0||l.call(this,""),h(this,g,i,"f");let u=this.shouldFormValueUpdate()?i:null;this.internals.setFormValue(u),c(this,e,"m",M).call(this,u),this.valueChangedCallback&&this.valueChangedCallback(u),c(this,e,"m",m).call(this)}shouldFormValueUpdate(){return!0}get validationComplete(){return new Promise(i=>i(c(this,C,"f")))}formResetCallback(){var i,l;h(this,a,!1,"f"),h(this,o,!1,"f"),c(this,e,"m",m).call(this),(i=this.resetFormControl)===null||i===void 0||i.call(this),(l=this.validationMessageCallback)===null||l===void 0||l.call(this,c(this,e,"m",m).call(this)?this.validationMessage:"")}}return r=new WeakMap,o=new WeakMap,a=new WeakMap,d=new WeakMap,s=new WeakMap,n=new WeakMap,g=new WeakMap,y=new WeakMap,_=new WeakMap,P=new WeakMap,v=new WeakMap,z=new WeakMap,C=new WeakMap,e=new WeakSet,p=function(){let i=this.getRootNode(),l=`${this.localName}[name="${this.getAttribute("name")}"]`;return i.querySelectorAll(l)},m=function(){if(this.hasAttribute("disabled"))return!1;let i=c(this,o,"f")||c(this,a,"f")&&!this.validity.valid&&!c(this,r,"f");return i&&this.internals.states?this.internals.states.add("--show-error"):this.internals.states&&this.internals.states.delete("--show-error"),i},M=function(i){let l=this.constructor,b={},u=l.validators,x=[],$=u.some(f=>f.isValid instanceof Promise);c(this,z,"f")||(h(this,C,new Promise(f=>{h(this,v,f,"f")}),"f"),h(this,z,!0,"f")),c(this,d,"f")&&(c(this,d,"f").abort(),h(this,s,c(this,d,"f"),"f"));let j=new AbortController;h(this,d,j,"f");let A,oe=!1;u.length&&(u.forEach(f=>{let Z=f.key||"customError",S=f.isValid(this,i,j.signal);S instanceof Promise?(x.push(S),S.then(G=>{G!=null&&(b[Z]=!G,A=c(this,e,"m",X).call(this,f,i),c(this,e,"m",T).call(this,b,A))})):(b[Z]=!S,this.validity[Z]!==!S&&(oe=!0),!S&&!A&&(A=c(this,e,"m",X).call(this,f,i)))}),Promise.allSettled(x).then(()=>{var f;j?.signal.aborted||(h(this,z,!1,"f"),(f=c(this,v,"f"))===null||f===void 0||f.call(this))}),(oe||!$)&&c(this,e,"m",T).call(this,b,A))},T=function(i,l){if(this.validationTarget)this.internals.setValidity(i,l,this.validationTarget),h(this,n,!1,"f");else{if(this.internals.setValidity(i,l),this.internals.validity.valid)return;h(this,n,!0,"f")}},X=function(i,l){if(this.validityCallback){let b=this.validityCallback(i.key||"customError");if(b)return b}return i.message instanceof Function?i.message(this,l):i.message},ge}var F=t=>typeof t=="string",fe=t=>typeof t=="function",ae=new Map,ne="en";function q(t){return[...Array.isArray(t)?t:[t],ne]}function K(t,e,r){let o=q(t);r||(r="default");let a;if(typeof r=="string")switch(a={day:"numeric",month:"short",year:"numeric"},r){case"full":a.weekday="long";case"long":a.month="long";break;case"short":a.month="numeric";break}else a=r;return N(()=>O("date",o,r),()=>new Intl.DateTimeFormat(o,a)).format(F(e)?new Date(e):e)}function we(t,e,r){let o;if(r||(r="default"),typeof r=="string")switch(o={second:"numeric",minute:"numeric",hour:"numeric"},r){case"full":case"long":o.timeZoneName="short";break;case"short":delete o.second}else o=r;return K(t,e,o)}function W(t,e,r){let o=q(t);return N(()=>O("number",o,r),()=>new Intl.NumberFormat(o,r)).format(e)}function ie(t,e,r,{offset:o=0,...a}){let d=q(t),s=e?N(()=>O("plural-ordinal",d),()=>new Intl.PluralRules(d,{type:"ordinal"})):N(()=>O("plural-cardinal",d),()=>new Intl.PluralRules(d,{type:"cardinal"}));return a[r]??a[s.select(r-o)]??a.other}function N(t,e){let r=t(),o=ae.get(r);return o||(o=e(),ae.set(r,o)),o}function O(t,e,r){let o=e.join("-");return`${t}-${o}-${JSON.stringify(r)}`}var se=/\\u[a-fA-F0-9]{4}|\\x[a-fA-F0-9]{2}/,le=t=>t.replace(/\\u([a-fA-F0-9]{4})|\\x([a-fA-F0-9]{2})/g,(e,r,o)=>{if(r){let a=parseInt(r,16);return String.fromCharCode(a)}else{let a=parseInt(o,16);return String.fromCharCode(a)}}),ce="%__lingui_octothorpe__%",xe=(t,e,r={})=>{let o=e||t,a=s=>typeof s=="object"?s:r[s],d=(s,n)=>{let p=Object.keys(r).length?a("number"):void 0,g=W(o,s,p);return n.replace(new RegExp(ce,"g"),g)};return{plural:(s,n)=>{let{offset:p=0}=n,g=ie(o,!1,s,n);return d(s-p,g)},selectordinal:(s,n)=>{let{offset:p=0}=n,g=ie(o,!0,s,n);return d(s-p,g)},select:ke,number:(s,n)=>W(o,s,a(n)||{style:n}),date:(s,n)=>K(o,s,a(n)||n),time:(s,n)=>we(o,s,a(n)||n)}},ke=(t,e)=>e[t]??e.other;function ye(t,e,r){return(o={},a)=>{let d=xe(e,r,a),s=(p,g=!1)=>Array.isArray(p)?p.reduce((y,_)=>{if(_==="#"&&g)return y+ce;if(F(_))return y+_;let[P,v,z]=_,C={};v==="plural"||v==="selectordinal"||v==="select"?Object.entries(z).forEach(([M,T])=>{C[M]=s(T,v==="plural"||v==="selectordinal")}):C=z;let m;if(v){let M=d[v];m=M(o[P],C)}else m=o[P];return m==null?y:y+m},""):p,n=s(t);return F(n)&&se.test(n)?le(n):F(n)?n:n?String(n):""}}var _e=Object.defineProperty,ze=(t,e,r)=>e in t?_e(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,Ce=(t,e,r)=>(ze(t,typeof e!="symbol"?e+"":e,r),r),B=class{constructor(){Ce(this,"_events",{})}on(e,r){var o;return(o=this._events)[e]??(o[e]=[]),this._events[e].push(r),()=>this.removeListener(e,r)}removeListener(e,r){let o=this._getListeners(e);if(!o)return;let a=o.indexOf(r);~a&&o.splice(a,1)}emit(e,...r){let o=this._getListeners(e);o&&o.map(a=>a.apply(this,r))}_getListeners(e){let r=this._events[e];return Array.isArray(r)?r:!1}},Fe=Object.defineProperty,Ee=(t,e,r)=>e in t?Fe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,L=(t,e,r)=>(Ee(t,typeof e!="symbol"?e+"":e,r),r),H=class extends B{constructor(e){super(),L(this,"_locale",""),L(this,"_locales"),L(this,"_localeData",{}),L(this,"_messages",{}),L(this,"_missing"),L(this,"_messageCompiler"),L(this,"t",this._.bind(this)),e.missing!=null&&(this._missing=e.missing),e.messages!=null&&this.load(e.messages),e.localeData!=null&&this.loadLocaleData(e.localeData),(typeof e.locale=="string"||e.locales)&&this.activate(e.locale??ne,e.locales)}get locale(){return this._locale}get locales(){return this._locales}get messages(){return this._messages[this._locale]??{}}get localeData(){return this._localeData[this._locale]??{}}_loadLocaleData(e,r){let o=this._localeData[e];o?Object.assign(o,r):this._localeData[e]=r}setMessagesCompiler(e){return this._messageCompiler=e,this}loadLocaleData(e,r){typeof e=="string"?this._loadLocaleData(e,r):Object.keys(e).forEach(o=>this._loadLocaleData(o,e[o])),this.emit("change")}_load(e,r){let o=this._messages[e];o?Object.assign(o,r):this._messages[e]=r}load(e,r){typeof e=="string"&&typeof r=="object"?this._load(e,r):Object.entries(e).forEach(([o,a])=>this._load(o,a)),this.emit("change")}loadAndActivate({locale:e,locales:r,messages:o}){this._locale=e,this._locales=r||void 0,this._messages[this._locale]=o,this.emit("change")}activate(e,r){this._locale=e,this._locales=r,this.emit("change")}_(e,r,o){if(!this.locale)throw new Error("Lingui: Attempted to call a translation function without setting a locale.\nMake sure to call `i18n.activate(locale)` before using Lingui functions.\nThis issue may also occur due to a race condition in your initialization logic.");let a=o?.message;e||(e=""),F(e)||(r=e.values||r,a=e.message,e=e.id);let d=this.messages[e],s=d===void 0,n=this._missing;if(n&&s)return fe(n)?n(this._locale,e):n;s&&this.emit("missing",{id:e,locale:this._locale});let p=d||a||e;return F(p)&&(this._messageCompiler?p=this._messageCompiler(p):console.warn(`Uncompiled message detected! Message:
2
2
 
3
3
  > ${p}
4
4
 
@@ -2445,7 +2445,7 @@ Please compile your catalog first.
2445
2445
  display: none
2446
2446
  }
2447
2447
  }
2448
- `);import{css as je}from"lit";var be=je`
2448
+ `);import{css as $e}from"lit";var be=$e`
2449
2449
  /* Wrapper component tokens with semantic fallbacks */
2450
2450
  :host {
2451
2451
  /* Internal tokens - not part of public API */
@@ -2544,7 +2544,7 @@ Please compile your catalog first.
2544
2544
  button[part="wrapper"]:not(:focus-visible) {
2545
2545
  outline: none;
2546
2546
  }
2547
- `;import{unsafeCSS as $e}from"lit";var he=$e("*,:before,:after{--w-rotate:0;--w-rotate-x:0;--w-rotate-y:0;--w-rotate-z:0;--w-scale-x:1;--w-scale-y:1;--w-scale-z:1;--w-skew-x:0;--w-skew-y:0;--w-translate-x:0;--w-translate-y:0;--w-translate-z:0}.focus\\:\\[--w-outline-offset\\:-2px\\]:focus{--w-outline-offset:-2px}.bg-transparent{background-color:#0000}.rounded-4{border-radius:4px}.block{display:block}.flex{display:flex}.focusable:focus{outline:2px solid var(--w-s-color-border-focus);outline-offset:var(--w-outline-offset,1px)}.focusable:focus-visible{outline:2px solid var(--w-s-color-border-focus);outline-offset:var(--w-outline-offset,1px)}.focusable:not(:focus-visible){outline:none}.items-center{align-items:center}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.justify-center{justify-content:center}.absolute{position:absolute}.relative{position:relative}.static{position:static}.s-text{color:var(--w-s-color-text)}.w-40{width:4rem}.w-max{width:max-content}.pb-0{padding-bottom:0}.pl-12{padding-left:1.2rem}.pr-12{padding-right:1.2rem}.cursor-default{cursor:default}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:grayscale}.font-bold{font-weight:700}.text-xs{font-size:var(--w-font-size-xs);line-height:var(--w-line-height-xs)}");import{html as Ye,LitElement as De}from"lit";import{property as ee,state as Ne}from"lit/decorators.js";import{classMap as Oe}from"lit/directives/class-map.js";import{css as Ae}from"lit";var ue=Ae`
2547
+ `;import{unsafeCSS as je}from"lit";var he=je("*,:before,:after{--w-rotate:0;--w-rotate-x:0;--w-rotate-y:0;--w-rotate-z:0;--w-scale-x:1;--w-scale-y:1;--w-scale-z:1;--w-skew-x:0;--w-skew-y:0;--w-translate-x:0;--w-translate-y:0;--w-translate-z:0}.flex{display:flex}.static{position:static}");import{html as Ye,LitElement as De}from"lit";import{property as ee,state as Ne}from"lit/decorators.js";import{classMap as Oe}from"lit/directives/class-map.js";import{css as Ae}from"lit";var ue=Ae`
2548
2548
  :host {
2549
2549
  display: inline-block;
2550
2550
  }