@salt-ds/core 1.64.1 → 1.65.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 (93) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/css/salt-core.css +252 -5
  3. package/dist-cjs/avatar/Avatar.css.js +1 -1
  4. package/dist-cjs/avatar/Avatar.js +12 -2
  5. package/dist-cjs/avatar/Avatar.js.map +1 -1
  6. package/dist-cjs/index.js +6 -0
  7. package/dist-cjs/index.js.map +1 -1
  8. package/dist-cjs/spinner/Spinner.css.js +1 -1
  9. package/dist-cjs/spinner/Spinner.js +4 -5
  10. package/dist-cjs/spinner/Spinner.js.map +1 -1
  11. package/dist-cjs/spinner/svgSpinners/SpinnerSVG.js +32 -50
  12. package/dist-cjs/spinner/svgSpinners/SpinnerSVG.js.map +1 -1
  13. package/dist-cjs/toolbar/Toolbar.css.js +6 -0
  14. package/dist-cjs/toolbar/Toolbar.css.js.map +1 -0
  15. package/dist-cjs/toolbar/Toolbar.js +401 -0
  16. package/dist-cjs/toolbar/Toolbar.js.map +1 -0
  17. package/dist-cjs/toolbar/ToolbarContent.css.js +6 -0
  18. package/dist-cjs/toolbar/ToolbarContent.css.js.map +1 -0
  19. package/dist-cjs/toolbar/ToolbarContent.js +38 -0
  20. package/dist-cjs/toolbar/ToolbarContent.js.map +1 -0
  21. package/dist-cjs/toolbar/ToolbarOverflow.css.js +6 -0
  22. package/dist-cjs/toolbar/ToolbarOverflow.css.js.map +1 -0
  23. package/dist-cjs/toolbar/ToolbarOverflow.js +712 -0
  24. package/dist-cjs/toolbar/ToolbarOverflow.js.map +1 -0
  25. package/dist-cjs/toolbar/ToolbarOverflowFloatingBoundary.js +160 -0
  26. package/dist-cjs/toolbar/ToolbarOverflowFloatingBoundary.js.map +1 -0
  27. package/dist-cjs/toolbar/Tooltray.css.js +6 -0
  28. package/dist-cjs/toolbar/Tooltray.css.js.map +1 -0
  29. package/dist-cjs/toolbar/Tooltray.js +59 -0
  30. package/dist-cjs/toolbar/Tooltray.js.map +1 -0
  31. package/dist-cjs/toolbar/toolbarKeyboardUtils.js +400 -0
  32. package/dist-cjs/toolbar/toolbarKeyboardUtils.js.map +1 -0
  33. package/dist-cjs/toolbar/toolbarUtils.js +220 -0
  34. package/dist-cjs/toolbar/toolbarUtils.js.map +1 -0
  35. package/dist-cjs/toolbar/useToolbarKeyboardNavigation.js +309 -0
  36. package/dist-cjs/toolbar/useToolbarKeyboardNavigation.js.map +1 -0
  37. package/dist-cjs/toolbar/useToolbarOverflow.js +750 -0
  38. package/dist-cjs/toolbar/useToolbarOverflow.js.map +1 -0
  39. package/dist-cjs/utils/mergeProps.js +2 -0
  40. package/dist-cjs/utils/mergeProps.js.map +1 -1
  41. package/dist-es/avatar/Avatar.css.js +1 -1
  42. package/dist-es/avatar/Avatar.js +12 -2
  43. package/dist-es/avatar/Avatar.js.map +1 -1
  44. package/dist-es/index.js +3 -0
  45. package/dist-es/index.js.map +1 -1
  46. package/dist-es/spinner/Spinner.css.js +1 -1
  47. package/dist-es/spinner/Spinner.js +4 -5
  48. package/dist-es/spinner/Spinner.js.map +1 -1
  49. package/dist-es/spinner/svgSpinners/SpinnerSVG.js +32 -50
  50. package/dist-es/spinner/svgSpinners/SpinnerSVG.js.map +1 -1
  51. package/dist-es/toolbar/Toolbar.css.js +4 -0
  52. package/dist-es/toolbar/Toolbar.css.js.map +1 -0
  53. package/dist-es/toolbar/Toolbar.js +399 -0
  54. package/dist-es/toolbar/Toolbar.js.map +1 -0
  55. package/dist-es/toolbar/ToolbarContent.css.js +4 -0
  56. package/dist-es/toolbar/ToolbarContent.css.js.map +1 -0
  57. package/dist-es/toolbar/ToolbarContent.js +36 -0
  58. package/dist-es/toolbar/ToolbarContent.js.map +1 -0
  59. package/dist-es/toolbar/ToolbarOverflow.css.js +4 -0
  60. package/dist-es/toolbar/ToolbarOverflow.css.js.map +1 -0
  61. package/dist-es/toolbar/ToolbarOverflow.js +707 -0
  62. package/dist-es/toolbar/ToolbarOverflow.js.map +1 -0
  63. package/dist-es/toolbar/ToolbarOverflowFloatingBoundary.js +154 -0
  64. package/dist-es/toolbar/ToolbarOverflowFloatingBoundary.js.map +1 -0
  65. package/dist-es/toolbar/Tooltray.css.js +4 -0
  66. package/dist-es/toolbar/Tooltray.css.js.map +1 -0
  67. package/dist-es/toolbar/Tooltray.js +57 -0
  68. package/dist-es/toolbar/Tooltray.js.map +1 -0
  69. package/dist-es/toolbar/toolbarKeyboardUtils.js +381 -0
  70. package/dist-es/toolbar/toolbarKeyboardUtils.js.map +1 -0
  71. package/dist-es/toolbar/toolbarUtils.js +216 -0
  72. package/dist-es/toolbar/toolbarUtils.js.map +1 -0
  73. package/dist-es/toolbar/useToolbarKeyboardNavigation.js +307 -0
  74. package/dist-es/toolbar/useToolbarKeyboardNavigation.js.map +1 -0
  75. package/dist-es/toolbar/useToolbarOverflow.js +748 -0
  76. package/dist-es/toolbar/useToolbarOverflow.js.map +1 -0
  77. package/dist-es/utils/mergeProps.js +2 -0
  78. package/dist-es/utils/mergeProps.js.map +1 -1
  79. package/dist-types/avatar/Avatar.d.ts +5 -0
  80. package/dist-types/index.d.ts +1 -0
  81. package/dist-types/spinner/svgSpinners/SpinnerSVG.d.ts +10 -10
  82. package/dist-types/toolbar/Toolbar.d.ts +12 -0
  83. package/dist-types/toolbar/ToolbarContent.d.ts +10 -0
  84. package/dist-types/toolbar/ToolbarOverflow.d.ts +34 -0
  85. package/dist-types/toolbar/ToolbarOverflowFloatingBoundary.d.ts +16 -0
  86. package/dist-types/toolbar/Tooltray.d.ts +36 -0
  87. package/dist-types/toolbar/index.d.ts +3 -0
  88. package/dist-types/toolbar/toolbarKeyboardUtils.d.ts +39 -0
  89. package/dist-types/toolbar/toolbarUtils.d.ts +44 -0
  90. package/dist-types/toolbar/useToolbarKeyboardNavigation.d.ts +42 -0
  91. package/dist-types/toolbar/useToolbarOverflow.d.ts +38 -0
  92. package/dist-types/utils/mergeProps.d.ts +4 -0
  93. package/package.json +2 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,63 @@
1
1
  # @salt-ds/core
2
2
 
3
+ ## 1.65.1
4
+
5
+ ### Patch Changes
6
+
7
+ - a41099d: Fixed `compute-scroll-into-view` not being listed as a dependency.
8
+ - 562f2e6: - Refactored `Spinner` so its size and stroke width are driven by CSS density tokens rather than computed in JavaScript. Density changes no longer cause `Spinner` to re-render.
9
+ - Fixed the small `Spinner` rendering at a smaller size than intended in high density.
10
+
11
+ ## 1.65.0
12
+
13
+ ### Minor Changes
14
+
15
+ - 2516755: Added `Toolbar`, `ToolbarContent`, and `Tooltray` for composing horizontal toolbars with responsive overflow, grouped controls, and keyboard navigation.
16
+
17
+ Renamed from `ToolbarNext`, `ToolbarContentNext`, and `TooltrayNext` in lab.
18
+
19
+ **Basic Toolbar** — place `Tooltray` components directly inside `Toolbar`; use `align="end"` for trailing actions
20
+
21
+ ```tsx
22
+ import { Toolbar, Tooltray } from "@salt-ds/core";
23
+
24
+ <Toolbar aria-label="Data controls">
25
+ <Tooltray>{/* controls */}</Tooltray>
26
+ <Tooltray align="end" role="group" aria-label="View and actions">
27
+ {/* controls */}
28
+ </Tooltray>
29
+ </Toolbar>;
30
+ ```
31
+
32
+ **Centered Toolbar With Named Overflow** — use `ToolbarContent` when you need explicit start, center, and end regions
33
+
34
+ ```tsx
35
+ import { ToolbarContent, Toolbar, Tooltray } from "@salt-ds/core";
36
+
37
+ <Toolbar aria-label="Centered actions">
38
+ <ToolbarContent position="start">
39
+ <Tooltray overflowGroup="filters" overflowLabel="Filters">
40
+ {/* controls */}
41
+ </Tooltray>
42
+ </ToolbarContent>
43
+ <ToolbarContent position="center">
44
+ <Tooltray overflowMode="none" role="group" aria-label="View options">
45
+ {/* controls */}
46
+ </Tooltray>
47
+ </ToolbarContent>
48
+ <ToolbarContent position="end">
49
+ <Tooltray align="end">{/* controls */}</Tooltray>
50
+ </ToolbarContent>
51
+ </Toolbar>;
52
+ ```
53
+
54
+ - 027f8c4: Added a `render` prop to `Avatar` so teams can render the avatar root as a custom interactive element such as a button or link.
55
+
56
+ ### Patch Changes
57
+
58
+ - 906c94e: Fixed `Avatar` to use the notation text characteristic tokens for `font-family` and `font-weight`, aligning with its existing `font-size` and `line-height` values.
59
+ - 027f8c4: Fixed `mergeProps` discarding the host component's inline `style` when the render element supplied its own `style`. Both `style` objects are now shallow-merged, so CSS custom properties set internally by the component are preserved. Conflicting keys still resolve in favor of the render element's value.
60
+
3
61
  ## 1.64.1
4
62
 
5
63
  ### Patch Changes
package/css/salt-core.css CHANGED
@@ -129,13 +129,19 @@
129
129
  background: var(--saltAvatar-background, var(--avatar-background));
130
130
  font-size: var(--avatar-fontSize);
131
131
  line-height: var(--saltAvatar-lineHeight, var(--salt-text-notation-lineHeight));
132
- font-family: var(--salt-text-fontFamily);
133
- font-weight: var(--salt-text-fontWeight);
132
+ font-family: var(--salt-text-notation-fontFamily);
133
+ font-weight: var(--salt-text-notation-fontWeight);
134
134
  width: var(--avatar-container-size);
135
135
  min-width: var(--avatar-container-size);
136
136
  height: var(--avatar-container-size);
137
137
  min-height: var(--avatar-container-size);
138
138
  border-radius: var(--saltAvatar-borderRadius, var(--salt-palette-corner-strongest, 50%));
139
+ border: none;
140
+ padding: 0;
141
+ appearance: none;
142
+ -webkit-appearance: none;
143
+ text-decoration: none;
144
+ position: relative;
139
145
  display: flex;
140
146
  justify-content: center;
141
147
  align-items: center;
@@ -214,6 +220,38 @@
214
220
  width: 100%;
215
221
  height: 100%;
216
222
  }
223
+ .saltAvatar:focus-visible {
224
+ outline-offset: var(--salt-spacing-fixed-100);
225
+ }
226
+ button.saltAvatar,
227
+ a.saltAvatar {
228
+ cursor: var(--salt-cursor-hover);
229
+ }
230
+ button.saltAvatar:disabled {
231
+ cursor: var(--salt-cursor-disabled);
232
+ }
233
+ button.saltAvatar::after,
234
+ a.saltAvatar::after {
235
+ content: "";
236
+ position: absolute;
237
+ inset: 0;
238
+ border-radius: inherit;
239
+ pointer-events: none;
240
+ background: transparent;
241
+ }
242
+ .saltAvatar[aria-expanded=true][aria-haspopup=menu]::after,
243
+ .saltAvatar[aria-expanded=true][aria-haspopup=dialog]::after {
244
+ background: var(--salt-overlayable-background-hover);
245
+ }
246
+ @media (hover: hover) {
247
+ button.saltAvatar:hover::after,
248
+ a.saltAvatar:hover::after {
249
+ background: var(--salt-overlayable-background-hover);
250
+ }
251
+ button.saltAvatar:disabled:hover::after {
252
+ background: transparent;
253
+ }
254
+ }
217
255
 
218
256
  /* src/badge/Badge.css */
219
257
  .saltBadge {
@@ -4052,15 +4090,24 @@ a:focus .saltCard-interactable.saltCard-disabled {
4052
4090
  height: var(--salt-size-base);
4053
4091
  width: var(--salt-size-base);
4054
4092
  }
4093
+ .saltSpinner-medium .saltSpinner-arc {
4094
+ r: calc((var(--salt-size-base) - var(--spinner-strokeWidth)) / 2);
4095
+ }
4055
4096
  .saltSpinner-large {
4056
4097
  --spinner-strokeWidth: var(--salt-size-bar);
4057
4098
  height: calc(var(--salt-size-base) * 2);
4058
4099
  width: calc(var(--salt-size-base) * 2);
4059
4100
  }
4101
+ .saltSpinner-large .saltSpinner-arc {
4102
+ r: calc((var(--salt-size-base) * 2 - var(--spinner-strokeWidth)) / 2);
4103
+ }
4060
4104
  .saltSpinner-small {
4061
4105
  --spinner-strokeWidth: var(--salt-size-fixed-200);
4062
- height: var(--salt-size-icon);
4063
- width: var(--salt-size-icon);
4106
+ height: max(var(--salt-size-icon), 12px);
4107
+ width: max(var(--salt-size-icon), 12px);
4108
+ }
4109
+ .saltSpinner-small .saltSpinner-arc {
4110
+ r: calc((max(var(--salt-size-icon), 12px) - var(--spinner-strokeWidth)) / 2);
4064
4111
  }
4065
4112
  .saltSpinner-spinner {
4066
4113
  animation: spinner 0.9s linear infinite;
@@ -5510,6 +5557,206 @@ label.saltText small,
5510
5557
  outline-offset: var(--salt-size-fixed-100);
5511
5558
  }
5512
5559
 
5560
+ /* src/toolbar/Toolbar.css */
5561
+ .saltToolbar {
5562
+ box-sizing: border-box;
5563
+ inline-size: 100%;
5564
+ min-width: 0;
5565
+ position: relative;
5566
+ }
5567
+ .saltToolbar-layout {
5568
+ align-items: center;
5569
+ --saltToolbar-band-gap: var(--salt-spacing-100);
5570
+ }
5571
+ .saltToolbar-layout:not([data-centered]) {
5572
+ display: flex;
5573
+ column-gap: var(--saltToolbar-band-gap);
5574
+ }
5575
+ .saltToolbar-layout[data-centered] {
5576
+ display: grid;
5577
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
5578
+ }
5579
+ .saltToolbar-band {
5580
+ display: flex;
5581
+ align-items: center;
5582
+ gap: var(--saltToolbar-band-gap);
5583
+ min-width: 0;
5584
+ }
5585
+ .saltToolbar-layout:not([data-centered]) > .saltToolbar-band[data-band-position=end] {
5586
+ justify-content: flex-end;
5587
+ margin-inline-start: auto;
5588
+ }
5589
+ .saltToolbar-layout[data-centered] > .saltToolbar-band[data-band-position=start] {
5590
+ grid-column: 1;
5591
+ }
5592
+ .saltToolbar-layout[data-centered] > .saltToolbar-band[data-band-position=center] {
5593
+ grid-column: 2;
5594
+ justify-content: center;
5595
+ }
5596
+ .saltToolbar-layout[data-centered] > .saltToolbar-band[data-band-position=end] {
5597
+ grid-column: 3;
5598
+ justify-content: flex-end;
5599
+ }
5600
+ .saltToolbar-fallback {
5601
+ display: flex;
5602
+ align-items: center;
5603
+ gap: var(--salt-spacing-100);
5604
+ }
5605
+ .saltToolbar-layout > * {
5606
+ min-width: 0;
5607
+ }
5608
+ .saltToolbar-primary {
5609
+ --toolbar-background: var(--salt-container-primary-background);
5610
+ --toolbar-borderColor: var(--salt-container-primary-borderColor);
5611
+ }
5612
+ .saltToolbar-secondary {
5613
+ --toolbar-background: var(--salt-container-secondary-background);
5614
+ --toolbar-borderColor: var(--salt-container-secondary-borderColor);
5615
+ }
5616
+ .saltToolbar-tertiary {
5617
+ --toolbar-background: var(--salt-container-tertiary-background);
5618
+ --toolbar-borderColor: var(--salt-container-tertiary-borderColor);
5619
+ }
5620
+ .saltToolbar-bordered {
5621
+ background: var(--saltToolbar-background, var(--toolbar-background));
5622
+ border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--saltToolbar-borderColor, var(--toolbar-borderColor));
5623
+ border-radius: var(--salt-palette-corner, 0);
5624
+ padding: var(--salt-spacing-100);
5625
+ }
5626
+ .saltToolbar-transparent {
5627
+ background: transparent;
5628
+ border: none;
5629
+ padding: 0;
5630
+ }
5631
+ .saltToolbar-measurements {
5632
+ display: flex;
5633
+ gap: var(--salt-spacing-100);
5634
+ position: absolute;
5635
+ visibility: hidden;
5636
+ pointer-events: none;
5637
+ inset: 0 auto auto 0;
5638
+ block-size: 0;
5639
+ overflow: hidden;
5640
+ }
5641
+ .saltToolbar-measureTrigger {
5642
+ white-space: nowrap;
5643
+ }
5644
+
5645
+ /* src/toolbar/ToolbarContent.css */
5646
+ .saltToolbarContent {
5647
+ display: flex;
5648
+ align-items: center;
5649
+ gap: var(--salt-spacing-100);
5650
+ min-width: 0;
5651
+ flex-shrink: 0;
5652
+ }
5653
+ .saltToolbarContent[data-position=start] {
5654
+ justify-content: flex-start;
5655
+ }
5656
+ .saltToolbarContent[data-position=center] {
5657
+ justify-content: center;
5658
+ }
5659
+ .saltToolbarContent[data-position=end] {
5660
+ justify-content: flex-end;
5661
+ }
5662
+ .saltToolbarContent[data-implicit] > .saltTooltray[data-align=center],
5663
+ .saltToolbarContent[data-implicit] > .saltTooltray[data-align=end] {
5664
+ margin-inline-start: 0;
5665
+ margin-inline-end: 0;
5666
+ }
5667
+
5668
+ /* src/toolbar/ToolbarOverflow.css */
5669
+ .saltToolbarOverflow-content {
5670
+ position: relative;
5671
+ }
5672
+ .saltToolbarOverflow-slot,
5673
+ .saltToolbarOverflow-panelItem {
5674
+ align-items: center;
5675
+ display: flex;
5676
+ flex-shrink: 0;
5677
+ gap: var(--salt-spacing-100);
5678
+ min-width: 0;
5679
+ }
5680
+ .saltToolbarOverflow-slot[data-align=end] {
5681
+ margin-inline-start: auto;
5682
+ }
5683
+ .saltToolbarOverflow-slot[data-align=center] {
5684
+ margin-inline-start: auto;
5685
+ margin-inline-end: auto;
5686
+ }
5687
+ .saltToolbarOverflow-item {
5688
+ align-items: center;
5689
+ display: flex;
5690
+ flex-shrink: 0;
5691
+ min-width: 0;
5692
+ }
5693
+ .saltToolbarOverflow-menu {
5694
+ display: flex;
5695
+ flex-shrink: 0;
5696
+ }
5697
+ .saltToolbarOverflow-itemHost,
5698
+ .saltToolbarOverflow-contentHost {
5699
+ display: contents;
5700
+ }
5701
+ .saltToolbarOverflow-trigger {
5702
+ white-space: nowrap;
5703
+ }
5704
+ .saltToolbarOverflow-panel {
5705
+ background: var(--salt-container-primary-background);
5706
+ border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);
5707
+ border-radius: var(--salt-palette-corner, 0);
5708
+ box-shadow: var(--salt-overlayable-shadow-popout);
5709
+ box-sizing: border-box;
5710
+ max-width: min(32rem, calc(100vw - var(--salt-spacing-300)));
5711
+ overflow: auto;
5712
+ position: absolute;
5713
+ z-index: var(--salt-zIndex-flyover);
5714
+ }
5715
+ .saltToolbarOverflow-floatingDescendant.saltToolbarOverflow-floatingDescendant {
5716
+ z-index: calc(var(--salt-zIndex-flyover) + var(--salt-zIndex-default));
5717
+ }
5718
+ .saltToolbarOverflow-panelContent {
5719
+ align-items: center;
5720
+ display: flex;
5721
+ flex-wrap: wrap;
5722
+ gap: var(--salt-spacing-100);
5723
+ max-width: inherit;
5724
+ min-width: max-content;
5725
+ padding: var(--salt-spacing-100);
5726
+ }
5727
+ .saltToolbarOverflow-panel .saltTooltray[data-align=center],
5728
+ .saltToolbarOverflow-panel .saltTooltray[data-align=end] {
5729
+ margin-inline-start: 0;
5730
+ margin-inline-end: 0;
5731
+ }
5732
+ .saltToolbarOverflow-panel .saltTooltray > * {
5733
+ inline-size: auto;
5734
+ }
5735
+ .saltToolbarOverflow-content > .saltToolbarOverflow-slot .saltTooltray[data-align=center],
5736
+ .saltToolbarOverflow-content > .saltToolbarOverflow-slot .saltTooltray[data-align=end] {
5737
+ margin-inline-start: 0;
5738
+ margin-inline-end: 0;
5739
+ }
5740
+
5741
+ /* src/toolbar/Tooltray.css */
5742
+ .saltTooltray {
5743
+ display: flex;
5744
+ align-items: center;
5745
+ flex: 0 0 auto;
5746
+ gap: var(--salt-spacing-100);
5747
+ min-width: 0;
5748
+ }
5749
+ .saltTooltray > * {
5750
+ flex-shrink: 0;
5751
+ }
5752
+ .saltTooltray[data-align=end] {
5753
+ margin-inline-start: auto;
5754
+ }
5755
+ .saltTooltray[data-align=center] {
5756
+ margin-inline-start: auto;
5757
+ margin-inline-end: auto;
5758
+ }
5759
+
5513
5760
  /* src/tooltip/Tooltip.css */
5514
5761
  .saltTooltip {
5515
5762
  --tooltip-background: var(--saltTooltip-background, var(--salt-container-primary-background));
@@ -6494,4 +6741,4 @@ label.saltText small,
6494
6741
  box-shadow: 0 calc(var(--salt-size-fixed-100) * -1) 0 0 var(--salt-selectable-borderColor-selected), 0 var(--salt-size-fixed-100) 0 0 var(--salt-selectable-borderColor-selected);
6495
6742
  }
6496
6743
 
6497
- /* src/8da7d430-1995-4d8c-8a61-22f6edca92c1.css */
6744
+ /* src/e33ddadc-0f4f-47bc-8cf4-c2c50b07ad47.css */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* Default variables applied to the root element */\n.saltAvatar {\n --avatar-size-multiplier: var(--saltAvatar-size-multiplier, 1);\n --avatar-base-size: var(--salt-size-base);\n --avatar-base-fontSize: var(--saltAvatar-fontSize, var(--salt-text-notation-fontSize));\n --avatar-container-size: calc(var(--avatar-base-size) * var(--avatar-size-multiplier));\n --avatar-fontSize: calc(var(--avatar-base-fontSize) * var(--avatar-size-multiplier));\n /* Icon styling */\n --saltIcon-size: calc(var(--avatar-container-size) / 2);\n}\n\n/* Style applied to the root element */\n.saltAvatar {\n color: var(--saltAvatar-foreground, var(--salt-content-bold-foreground));\n background: var(--saltAvatar-background, var(--avatar-background));\n font-size: var(--avatar-fontSize);\n line-height: var(--saltAvatar-lineHeight, var(--salt-text-notation-lineHeight));\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n width: var(--avatar-container-size);\n min-width: var(--avatar-container-size);\n height: var(--avatar-container-size);\n min-height: var(--avatar-container-size);\n border-radius: var(--saltAvatar-borderRadius, var(--salt-palette-corner-strongest, 50%));\n\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n user-select: none;\n}\n\n.saltAvatar-accent {\n --avatar-background: var(--salt-sentiment-accent-background);\n}\n\n.saltAvatar-category-1 {\n --avatar-background: var(--salt-category-1-bold-background);\n}\n.saltAvatar-category-2 {\n --avatar-background: var(--salt-category-2-bold-background);\n}\n\n.saltAvatar-category-3 {\n --avatar-background: var(--salt-category-3-bold-background);\n}\n\n.saltAvatar-category-4 {\n --avatar-background: var(--salt-category-4-bold-background);\n}\n\n.saltAvatar-category-5 {\n --avatar-background: var(--salt-category-5-bold-background);\n}\n\n.saltAvatar-category-6 {\n --avatar-background: var(--salt-category-6-bold-background);\n}\n\n.saltAvatar-category-7 {\n --avatar-background: var(--salt-category-7-bold-background);\n}\n\n.saltAvatar-category-8 {\n --avatar-background: var(--salt-category-8-bold-background);\n}\n\n.saltAvatar-category-9 {\n --avatar-background: var(--salt-category-9-bold-background);\n}\n\n.saltAvatar-category-10 {\n --avatar-background: var(--salt-category-10-bold-background);\n}\n.saltAvatar-category-11 {\n --avatar-background: var(--salt-category-11-bold-background);\n}\n.saltAvatar-category-12 {\n --avatar-background: var(--salt-category-12-bold-background);\n}\n.saltAvatar-category-13 {\n --avatar-background: var(--salt-category-13-bold-background);\n}\n.saltAvatar-category-14 {\n --avatar-background: var(--salt-category-14-bold-background);\n}\n.saltAvatar-category-15 {\n --avatar-background: var(--salt-category-15-bold-background);\n}\n.saltAvatar-category-16 {\n --avatar-background: var(--salt-category-16-bold-background);\n}\n.saltAvatar-category-17 {\n --avatar-background: var(--salt-category-17-bold-background);\n}\n.saltAvatar-category-18 {\n --avatar-background: var(--salt-category-18-bold-background);\n}\n.saltAvatar-category-19 {\n --avatar-background: var(--salt-category-19-bold-background);\n}\n.saltAvatar-category-20 {\n --avatar-background: var(--salt-category-20-bold-background);\n}\n\n.saltAvatar:has(img),\n.saltAvatar-withImage {\n --avatar-background: none;\n}\n\n/* Style applied to the image/svg element. We specifically allow SVGs as the Avatar image to enable SVGs such as Flags to take up the full Avatar space */\n.saltAvatar > img,\n.saltAvatar > svg:not(.saltIcon) {\n width: 100%;\n height: 100%;\n}\n";
3
+ var css_248z = "/* Default variables applied to the root element */\n.saltAvatar {\n --avatar-size-multiplier: var(--saltAvatar-size-multiplier, 1);\n --avatar-base-size: var(--salt-size-base);\n --avatar-base-fontSize: var(--saltAvatar-fontSize, var(--salt-text-notation-fontSize));\n --avatar-container-size: calc(var(--avatar-base-size) * var(--avatar-size-multiplier));\n --avatar-fontSize: calc(var(--avatar-base-fontSize) * var(--avatar-size-multiplier));\n /* Icon styling */\n --saltIcon-size: calc(var(--avatar-container-size) / 2);\n}\n\n/* Style applied to the root element */\n.saltAvatar {\n color: var(--saltAvatar-foreground, var(--salt-content-bold-foreground));\n background: var(--saltAvatar-background, var(--avatar-background));\n font-size: var(--avatar-fontSize);\n line-height: var(--saltAvatar-lineHeight, var(--salt-text-notation-lineHeight));\n font-family: var(--salt-text-notation-fontFamily);\n font-weight: var(--salt-text-notation-fontWeight);\n width: var(--avatar-container-size);\n min-width: var(--avatar-container-size);\n height: var(--avatar-container-size);\n min-height: var(--avatar-container-size);\n border-radius: var(--saltAvatar-borderRadius, var(--salt-palette-corner-strongest, 50%));\n border: none;\n padding: 0;\n appearance: none;\n -webkit-appearance: none;\n text-decoration: none;\n position: relative;\n\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n user-select: none;\n}\n\n.saltAvatar-accent {\n --avatar-background: var(--salt-sentiment-accent-background);\n}\n\n.saltAvatar-category-1 {\n --avatar-background: var(--salt-category-1-bold-background);\n}\n.saltAvatar-category-2 {\n --avatar-background: var(--salt-category-2-bold-background);\n}\n\n.saltAvatar-category-3 {\n --avatar-background: var(--salt-category-3-bold-background);\n}\n\n.saltAvatar-category-4 {\n --avatar-background: var(--salt-category-4-bold-background);\n}\n\n.saltAvatar-category-5 {\n --avatar-background: var(--salt-category-5-bold-background);\n}\n\n.saltAvatar-category-6 {\n --avatar-background: var(--salt-category-6-bold-background);\n}\n\n.saltAvatar-category-7 {\n --avatar-background: var(--salt-category-7-bold-background);\n}\n\n.saltAvatar-category-8 {\n --avatar-background: var(--salt-category-8-bold-background);\n}\n\n.saltAvatar-category-9 {\n --avatar-background: var(--salt-category-9-bold-background);\n}\n\n.saltAvatar-category-10 {\n --avatar-background: var(--salt-category-10-bold-background);\n}\n.saltAvatar-category-11 {\n --avatar-background: var(--salt-category-11-bold-background);\n}\n.saltAvatar-category-12 {\n --avatar-background: var(--salt-category-12-bold-background);\n}\n.saltAvatar-category-13 {\n --avatar-background: var(--salt-category-13-bold-background);\n}\n.saltAvatar-category-14 {\n --avatar-background: var(--salt-category-14-bold-background);\n}\n.saltAvatar-category-15 {\n --avatar-background: var(--salt-category-15-bold-background);\n}\n.saltAvatar-category-16 {\n --avatar-background: var(--salt-category-16-bold-background);\n}\n.saltAvatar-category-17 {\n --avatar-background: var(--salt-category-17-bold-background);\n}\n.saltAvatar-category-18 {\n --avatar-background: var(--salt-category-18-bold-background);\n}\n.saltAvatar-category-19 {\n --avatar-background: var(--salt-category-19-bold-background);\n}\n.saltAvatar-category-20 {\n --avatar-background: var(--salt-category-20-bold-background);\n}\n\n.saltAvatar:has(img),\n.saltAvatar-withImage {\n --avatar-background: none;\n}\n\n/* Style applied to the image/svg element. We specifically allow SVGs as the Avatar image to enable SVGs such as Flags to take up the full Avatar space */\n.saltAvatar > img,\n.saltAvatar > svg:not(.saltIcon) {\n width: 100%;\n height: 100%;\n}\n\n.saltAvatar:focus-visible {\n outline-offset: var(--salt-spacing-fixed-100);\n}\n\nbutton.saltAvatar,\na.saltAvatar {\n cursor: var(--salt-cursor-hover);\n}\n\nbutton.saltAvatar:disabled {\n cursor: var(--salt-cursor-disabled);\n}\n\nbutton.saltAvatar::after,\na.saltAvatar::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-radius: inherit;\n pointer-events: none;\n background: transparent;\n}\n\n.saltAvatar[aria-expanded=\"true\"][aria-haspopup=\"menu\"]::after,\n.saltAvatar[aria-expanded=\"true\"][aria-haspopup=\"dialog\"]::after {\n background: var(--salt-overlayable-background-hover);\n}\n\n@media (hover: hover) {\n button.saltAvatar:hover::after,\n a.saltAvatar:hover::after {\n background: var(--salt-overlayable-background-hover);\n }\n\n button.saltAvatar:disabled:hover::after {\n background: transparent;\n }\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=Avatar.css.js.map
@@ -7,6 +7,7 @@ var clsx = require('clsx');
7
7
  var React = require('react');
8
8
  var SemanticIconProvider = require('../semantic-icon-provider/SemanticIconProvider.js');
9
9
  var makePrefixer = require('../utils/makePrefixer.js');
10
+ var renderProps = require('../utils/renderProps.js');
10
11
  require('../utils/useFloatingUI/useFloatingUI.js');
11
12
  require('../utils/useId.js');
12
13
  require('../salt-provider/SaltProvider.js');
@@ -16,6 +17,11 @@ var useAvatarImage = require('./useAvatarImage.js');
16
17
 
17
18
  const withBaseName = makePrefixer.makePrefixer("saltAvatar");
18
19
  const DEFAULT_AVATAR_SIZE = 2;
20
+ const AvatarAction = React.forwardRef(
21
+ function AvatarAction2(props, ref) {
22
+ return renderProps.renderProps("div", { ...props, ref });
23
+ }
24
+ );
19
25
  const defaultNameToInitials = (name) => name == null ? void 0 : name.split(" ").slice(0, 2).map((n) => n[0]).join("").toUpperCase();
20
26
  const Avatar = React.forwardRef(function Avatar2({
21
27
  className,
@@ -27,6 +33,7 @@ const Avatar = React.forwardRef(function Avatar2({
27
33
  size = DEFAULT_AVATAR_SIZE,
28
34
  style: styleProp,
29
35
  fallbackIcon: fallbackIconProp,
36
+ render,
30
37
  ...rest
31
38
  }, ref) {
32
39
  const targetWindow = window.useWindow();
@@ -50,14 +57,17 @@ const Avatar = React.forwardRef(function Avatar2({
50
57
  children = childrenProp;
51
58
  }
52
59
  const avatarInitials = nameToInitials(name);
53
- const ariaProps = name ? {
60
+ const ariaProps = name ? render ? {
61
+ "aria-label": name
62
+ } : {
54
63
  role: "img",
55
64
  "aria-label": name
56
65
  } : {};
57
66
  return /* @__PURE__ */ jsxRuntime.jsx(
58
- "div",
67
+ AvatarAction,
59
68
  {
60
69
  ref,
70
+ render,
61
71
  style,
62
72
  className: clsx.clsx(
63
73
  withBaseName(),
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.js","sources":["../src/avatar/Avatar.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { useIcon } from \"../semantic-icon-provider\";\nimport { makePrefixer } from \"../utils\";\nimport avatarCss from \"./Avatar.css\";\nimport { useAvatarImage } from \"./useAvatarImage\";\n\nexport type NameToInitials = (name?: string) => string;\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The name that Avatar represents.\n */\n name?: string;\n /**\n * Defines the function that gets initials. Default is capital first letter of each separate word in name.\n * If a function is not passed or returns undefined, Avatar will default to Icon.\n */\n nameToInitials?: NameToInitials;\n /**\n * Image src of Avatar.\n */\n src?: string;\n /**\n * Multiplier for the base avatar.\n */\n size?: number;\n /**\n * Icon to be used as a default item. Defaults to `UserIcon`.\n */\n fallbackIcon?: ReactNode;\n /**\n * Changes Avatar's color.\n */\n color?:\n | \"accent\"\n | \"category-1\"\n | \"category-2\"\n | \"category-3\"\n | \"category-4\"\n | \"category-5\"\n | \"category-6\"\n | \"category-7\"\n | \"category-8\"\n | \"category-9\"\n | \"category-10\"\n | \"category-11\"\n | \"category-12\"\n | \"category-13\"\n | \"category-14\"\n | \"category-15\"\n | \"category-16\"\n | \"category-17\"\n | \"category-18\"\n | \"category-19\"\n | \"category-20\";\n}\n\nconst withBaseName = makePrefixer(\"saltAvatar\");\nconst DEFAULT_AVATAR_SIZE = 2; // medium\n\nconst defaultNameToInitials = (name?: string) =>\n name\n ?.split(\" \")\n .slice(0, 2)\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase();\n\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(function Avatar(\n {\n className,\n children: childrenProp,\n color = \"accent\",\n name,\n nameToInitials = defaultNameToInitials,\n src,\n size = DEFAULT_AVATAR_SIZE,\n style: styleProp,\n fallbackIcon: fallbackIconProp,\n ...rest\n },\n ref,\n) {\n const targetWindow = useWindow();\n const { UserIcon } = useIcon();\n\n const fallbackIcon =\n fallbackIconProp === undefined ? (\n <UserIcon aria-hidden />\n ) : (\n fallbackIconProp\n );\n\n useComponentCssInjection({\n testId: \"salt-avatar\",\n css: avatarCss,\n window: targetWindow,\n });\n\n let children: ReactNode;\n\n const style = {\n ...styleProp,\n \"--saltAvatar-size-multiplier\": `${size}`,\n };\n\n const status = useAvatarImage({ src });\n const hasImgNotFailing = status === \"loaded\";\n if (hasImgNotFailing) {\n children = <img alt=\"\" src={src} />;\n } else if (childrenProp != null) {\n children = childrenProp;\n }\n\n const avatarInitials = nameToInitials(name);\n\n const ariaProps = name\n ? {\n role: \"img\",\n \"aria-label\": name,\n }\n : {};\n\n return (\n <div\n ref={ref}\n style={style}\n className={clsx(\n withBaseName(),\n withBaseName(color),\n {\n [withBaseName(\"withImage\")]: hasImgNotFailing,\n },\n className,\n )}\n {...ariaProps}\n {...rest}\n >\n {children || avatarInitials || fallbackIcon}\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","Avatar","useWindow","useIcon","useComponentCssInjection","avatarCss","useAvatarImage","jsx","clsx"],"mappings":";;;;;;;;;;;;;;;;AA4DA,MAAM,YAAA,GAAeA,0BAAa,YAAY,CAAA;AAC9C,MAAM,mBAAA,GAAsB,CAAA;AAE5B,MAAM,wBAAwB,CAAC,IAAA,KAC7B,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CACI,KAAA,CAAM,KACP,KAAA,CAAM,CAAA,EAAG,CAAA,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,CAAA,CACd,KAAK,EAAA,CAAA,CACL,WAAA,EAAA;AAEE,MAAM,MAAA,GAASC,gBAAA,CAAwC,SAASC,OAAAA,CACrE;AAAA,EACE,SAAA;AAAA,EACA,QAAA,EAAU,YAAA;AAAA,EACV,KAAA,GAAQ,QAAA;AAAA,EACR,IAAA;AAAA,EACA,cAAA,GAAiB,qBAAA;AAAA,EACjB,GAAA;AAAA,EACA,IAAA,GAAO,mBAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA,EACP,YAAA,EAAc,gBAAA;AAAA,EACd,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,EAAA,MAAM,EAAE,QAAA,EAAS,GAAIC,4BAAA,EAAQ;AAE7B,EAAA,MAAM,eACJ,gBAAA,KAAqB,MAAA,kCAClB,QAAA,EAAA,EAAS,aAAA,EAAW,MAAC,CAAA,GAEtB,gBAAA;AAGJ,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,aAAA;AAAA,IACR,GAAA,EAAKC,QAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,IAAI,QAAA;AAEJ,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,GAAG,SAAA;AAAA,IACH,8BAAA,EAAgC,GAAG,IAAI,CAAA;AAAA,GACzC;AAEA,EAAA,MAAM,MAAA,GAASC,6BAAA,CAAe,EAAE,GAAA,EAAK,CAAA;AACrC,EAAA,MAAM,mBAAmB,MAAA,KAAW,QAAA;AACpC,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,QAAA,mBAAWC,cAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAI,EAAA,EAAG,GAAA,EAAU,CAAA;AAAA,EACnC,CAAA,MAAA,IAAW,gBAAgB,IAAA,EAAM;AAC/B,IAAA,QAAA,GAAW,YAAA;AAAA,EACb;AAEA,EAAA,MAAM,cAAA,GAAiB,eAAe,IAAI,CAAA;AAE1C,EAAA,MAAM,YAAY,IAAA,GACd;AAAA,IACE,IAAA,EAAM,KAAA;AAAA,IACN,YAAA,EAAc;AAAA,MAEhB,EAAC;AAEL,EAAA,uBACEA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,EAAWC,SAAA;AAAA,QACT,YAAA,EAAa;AAAA,QACb,aAAa,KAAK,CAAA;AAAA,QAClB;AAAA,UACE,CAAC,YAAA,CAAa,WAAW,CAAC,GAAG;AAAA,SAC/B;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,SAAA;AAAA,MACH,GAAG,IAAA;AAAA,MAEH,sBAAY,cAAA,IAAkB;AAAA;AAAA,GACjC;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"Avatar.js","sources":["../src/avatar/Avatar.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { useIcon } from \"../semantic-icon-provider\";\nimport { makePrefixer, type RenderPropsType, renderProps } from \"../utils\";\nimport avatarCss from \"./Avatar.css\";\nimport { useAvatarImage } from \"./useAvatarImage\";\n\nexport type NameToInitials = (name?: string) => string;\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * The name that Avatar represents.\n */\n name?: string;\n /**\n * Defines the function that gets initials. Default is capital first letter of each separate word in name.\n * If a function is not passed or returns undefined, Avatar will default to Icon.\n */\n nameToInitials?: NameToInitials;\n /**\n * Image src of Avatar.\n */\n src?: string;\n /**\n * Multiplier for the base avatar.\n */\n size?: number;\n /**\n * Icon to be used as a default item. Defaults to `UserIcon`.\n */\n fallbackIcon?: ReactNode;\n /**\n * Changes Avatar's color.\n */\n color?:\n | \"accent\"\n | \"category-1\"\n | \"category-2\"\n | \"category-3\"\n | \"category-4\"\n | \"category-5\"\n | \"category-6\"\n | \"category-7\"\n | \"category-8\"\n | \"category-9\"\n | \"category-10\"\n | \"category-11\"\n | \"category-12\"\n | \"category-13\"\n | \"category-14\"\n | \"category-15\"\n | \"category-16\"\n | \"category-17\"\n | \"category-18\"\n | \"category-19\"\n | \"category-20\";\n /**\n * Render prop to enable customization of the avatar root element.\n */\n render?: RenderPropsType[\"render\"];\n}\n\nconst withBaseName = makePrefixer(\"saltAvatar\");\nconst DEFAULT_AVATAR_SIZE = 2; // medium\n\ninterface AvatarActionProps extends ComponentPropsWithoutRef<\"div\"> {\n render?: RenderPropsType[\"render\"];\n}\n\nconst AvatarAction = forwardRef<HTMLDivElement, AvatarActionProps>(\n function AvatarAction(props, ref) {\n return renderProps(\"div\", { ...props, ref });\n },\n);\n\nconst defaultNameToInitials = (name?: string) =>\n name\n ?.split(\" \")\n .slice(0, 2)\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase();\n\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(function Avatar(\n {\n className,\n children: childrenProp,\n color = \"accent\",\n name,\n nameToInitials = defaultNameToInitials,\n src,\n size = DEFAULT_AVATAR_SIZE,\n style: styleProp,\n fallbackIcon: fallbackIconProp,\n render,\n ...rest\n },\n ref,\n) {\n const targetWindow = useWindow();\n const { UserIcon } = useIcon();\n\n const fallbackIcon =\n fallbackIconProp === undefined ? (\n <UserIcon aria-hidden />\n ) : (\n fallbackIconProp\n );\n\n useComponentCssInjection({\n testId: \"salt-avatar\",\n css: avatarCss,\n window: targetWindow,\n });\n\n let children: ReactNode;\n\n const style = {\n ...styleProp,\n \"--saltAvatar-size-multiplier\": `${size}`,\n };\n\n const status = useAvatarImage({ src });\n const hasImgNotFailing = status === \"loaded\";\n if (hasImgNotFailing) {\n children = <img alt=\"\" src={src} />;\n } else if (childrenProp != null) {\n children = childrenProp;\n }\n\n const avatarInitials = nameToInitials(name);\n\n const ariaProps = name\n ? render\n ? {\n \"aria-label\": name,\n }\n : {\n role: \"img\",\n \"aria-label\": name,\n }\n : {};\n\n return (\n <AvatarAction\n ref={ref}\n render={render}\n style={style}\n className={clsx(\n withBaseName(),\n withBaseName(color),\n {\n [withBaseName(\"withImage\")]: hasImgNotFailing,\n },\n className,\n )}\n {...ariaProps}\n {...rest}\n >\n {children || avatarInitials || fallbackIcon}\n </AvatarAction>\n );\n});\n"],"names":["makePrefixer","forwardRef","AvatarAction","renderProps","Avatar","useWindow","useIcon","useComponentCssInjection","avatarCss","useAvatarImage","jsx","clsx"],"mappings":";;;;;;;;;;;;;;;;;AAqEA,MAAM,YAAA,GAAeA,0BAAa,YAAY,CAAA;AAC9C,MAAM,mBAAA,GAAsB,CAAA;AAM5B,MAAM,YAAA,GAAeC,gBAAA;AAAA,EACnB,SAASC,aAAAA,CAAa,KAAA,EAAO,GAAA,EAAK;AAChC,IAAA,OAAOC,wBAAY,KAAA,EAAO,EAAE,GAAG,KAAA,EAAO,KAAK,CAAA;AAAA,EAC7C;AACF,CAAA;AAEA,MAAM,wBAAwB,CAAC,IAAA,KAC7B,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CACI,KAAA,CAAM,KACP,KAAA,CAAM,CAAA,EAAG,CAAA,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,CAAA,CACd,KAAK,EAAA,CAAA,CACL,WAAA,EAAA;AAEE,MAAM,MAAA,GAASF,gBAAA,CAAwC,SAASG,OAAAA,CACrE;AAAA,EACE,SAAA;AAAA,EACA,QAAA,EAAU,YAAA;AAAA,EACV,KAAA,GAAQ,QAAA;AAAA,EACR,IAAA;AAAA,EACA,cAAA,GAAiB,qBAAA;AAAA,EACjB,GAAA;AAAA,EACA,IAAA,GAAO,mBAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA,EACP,YAAA,EAAc,gBAAA;AAAA,EACd,MAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,EAAA,MAAM,EAAE,QAAA,EAAS,GAAIC,4BAAA,EAAQ;AAE7B,EAAA,MAAM,eACJ,gBAAA,KAAqB,MAAA,kCAClB,QAAA,EAAA,EAAS,aAAA,EAAW,MAAC,CAAA,GAEtB,gBAAA;AAGJ,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,aAAA;AAAA,IACR,GAAA,EAAKC,QAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,IAAI,QAAA;AAEJ,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,GAAG,SAAA;AAAA,IACH,8BAAA,EAAgC,GAAG,IAAI,CAAA;AAAA,GACzC;AAEA,EAAA,MAAM,MAAA,GAASC,6BAAA,CAAe,EAAE,GAAA,EAAK,CAAA;AACrC,EAAA,MAAM,mBAAmB,MAAA,KAAW,QAAA;AACpC,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,QAAA,mBAAWC,cAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAI,EAAA,EAAG,GAAA,EAAU,CAAA;AAAA,EACnC,CAAA,MAAA,IAAW,gBAAgB,IAAA,EAAM;AAC/B,IAAA,QAAA,GAAW,YAAA;AAAA,EACb;AAEA,EAAA,MAAM,cAAA,GAAiB,eAAe,IAAI,CAAA;AAE1C,EAAA,MAAM,SAAA,GAAY,OACd,MAAA,GACE;AAAA,IACE,YAAA,EAAc;AAAA,GAChB,GACA;AAAA,IACE,IAAA,EAAM,KAAA;AAAA,IACN,YAAA,EAAc;AAAA,MAElB,EAAC;AAEL,EAAA,uBACEA,cAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,EAAWC,SAAA;AAAA,QACT,YAAA,EAAa;AAAA,QACb,aAAa,KAAK,CAAA;AAAA,QAClB;AAAA,UACE,CAAC,YAAA,CAAa,WAAW,CAAC,GAAG;AAAA,SAC/B;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,SAAA;AAAA,MACH,GAAG,IAAA;AAAA,MAEH,sBAAY,cAAA,IAAkB;AAAA;AAAA,GACjC;AAEJ,CAAC;;;;"}
package/dist-cjs/index.js CHANGED
@@ -153,6 +153,9 @@ var ToggleButtonGroupContext = require('./toggle-button-group/ToggleButtonGroupC
153
153
  var Toggletip = require('./toggletip/Toggletip.js');
154
154
  var ToggletipPanel = require('./toggletip/ToggletipPanel.js');
155
155
  var ToggletipTrigger = require('./toggletip/ToggletipTrigger.js');
156
+ var Toolbar = require('./toolbar/Toolbar.js');
157
+ var ToolbarContent = require('./toolbar/ToolbarContent.js');
158
+ var Tooltray = require('./toolbar/Tooltray.js');
156
159
  var Tooltip = require('./tooltip/Tooltip.js');
157
160
  var useTooltip = require('./tooltip/useTooltip.js');
158
161
  var Tree = require('./tree/Tree.js');
@@ -381,6 +384,9 @@ exports.useToggleButtonGroup = ToggleButtonGroupContext.useToggleButtonGroup;
381
384
  exports.Toggletip = Toggletip.Toggletip;
382
385
  exports.ToggletipPanel = ToggletipPanel.ToggletipPanel;
383
386
  exports.ToggletipTrigger = ToggletipTrigger.ToggletipTrigger;
387
+ exports.Toolbar = Toolbar.Toolbar;
388
+ exports.ToolbarContent = ToolbarContent.ToolbarContent;
389
+ exports.Tooltray = Tooltray.Tooltray;
384
390
  exports.Tooltip = Tooltip.Tooltip;
385
391
  exports.useTooltip = useTooltip.useTooltip;
386
392
  exports.Tree = Tree.Tree;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* Styles applied to the root element */\n.saltSpinner {\n position: relative;\n}\n\n/* Styles applied to the SVG stop elements */\n.saltSpinner-gradientStop {\n stop-color: var(--saltSpinner-gradient-color, var(--salt-sentiment-accent-background));\n}\n\n/* Styles applied when `size=\"medium\"` */\n.saltSpinner-medium {\n --spinner-strokeWidth: var(--salt-size-bar);\n height: var(--salt-size-base);\n width: var(--salt-size-base);\n}\n\n/* Styles applied when `size=\"large\"` */\n.saltSpinner-large {\n --spinner-strokeWidth: var(--salt-size-bar);\n height: calc(var(--salt-size-base) * 2);\n width: calc(var(--salt-size-base) * 2);\n}\n\n/* Styles applied when `size=\"small\"` */\n.saltSpinner-small {\n --spinner-strokeWidth: var(--salt-size-fixed-200);\n height: var(--salt-size-icon);\n width: var(--salt-size-icon);\n}\n\n/* Styles applied to the SVG */\n.saltSpinner-spinner {\n animation: spinner 0.9s linear infinite;\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n}\n\n@keyframes spinner {\n 0% {\n transform: rotate(0);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n";
3
+ var css_248z = "/* Styles applied to the root element */\n.saltSpinner {\n position: relative;\n}\n\n/* Styles applied to the SVG stop elements */\n.saltSpinner-gradientStop {\n stop-color: var(--saltSpinner-gradient-color, var(--salt-sentiment-accent-background));\n}\n\n/* Styles applied when `size=\"medium\"` */\n.saltSpinner-medium {\n --spinner-strokeWidth: var(--salt-size-bar);\n height: var(--salt-size-base);\n width: var(--salt-size-base);\n}\n.saltSpinner-medium .saltSpinner-arc {\n r: calc((var(--salt-size-base) - var(--spinner-strokeWidth)) / 2);\n}\n\n/* Styles applied when `size=\"large\"` */\n.saltSpinner-large {\n --spinner-strokeWidth: var(--salt-size-bar);\n height: calc(var(--salt-size-base) * 2);\n width: calc(var(--salt-size-base) * 2);\n}\n.saltSpinner-large .saltSpinner-arc {\n r: calc((var(--salt-size-base) * 2 - var(--spinner-strokeWidth)) / 2);\n}\n\n/* Styles applied when `size=\"small\"` */\n.saltSpinner-small {\n --spinner-strokeWidth: var(--salt-size-fixed-200);\n height: max(var(--salt-size-icon), 12px);\n width: max(var(--salt-size-icon), 12px);\n}\n.saltSpinner-small .saltSpinner-arc {\n r: calc((max(var(--salt-size-icon), 12px) - var(--spinner-strokeWidth)) / 2);\n}\n\n/* Styles applied to the SVG */\n.saltSpinner-spinner {\n animation: spinner 0.9s linear infinite;\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n}\n\n@keyframes spinner {\n 0% {\n transform: rotate(0);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=Spinner.css.js.map
@@ -8,10 +8,10 @@ var React = require('react');
8
8
  var useAriaAnnouncer = require('../aria-announcer/useAriaAnnouncer.js');
9
9
  require('../aria-announcer/AriaAnnouncerContext.js');
10
10
  require('../aria-announcer/AriaAnnouncerProvider.js');
11
- var SaltProvider = require('../salt-provider/SaltProvider.js');
12
11
  var makePrefixer = require('../utils/makePrefixer.js');
13
12
  require('../utils/useFloatingUI/useFloatingUI.js');
14
13
  var useId = require('../utils/useId.js');
14
+ require('../salt-provider/SaltProvider.js');
15
15
  require('../viewport/ViewportProvider.js');
16
16
  var Spinner$1 = require('./Spinner.css.js');
17
17
  var SpinnerSVG = require('./svgSpinners/SpinnerSVG.js');
@@ -32,7 +32,7 @@ const Spinner = React.forwardRef(
32
32
  completionAnnouncement = `finished ${ariaLabel}`,
33
33
  disableAnnouncer,
34
34
  className,
35
- size = "medium",
35
+ size: sizeProp = "medium",
36
36
  id: idProp,
37
37
  ...rest
38
38
  }, ref) {
@@ -44,8 +44,7 @@ const Spinner = React.forwardRef(
44
44
  window: targetWindow
45
45
  });
46
46
  const { announce } = useAriaAnnouncer.useAriaAnnouncer();
47
- const density = SaltProvider.useDensity();
48
- size = handleSize(size);
47
+ const size = handleSize(sizeProp);
49
48
  React.useEffect(() => {
50
49
  if (disableAnnouncer) return;
51
50
  announce(ariaLabel);
@@ -83,7 +82,7 @@ const Spinner = React.forwardRef(
83
82
  ref,
84
83
  role: "img",
85
84
  ...rest,
86
- children: /* @__PURE__ */ jsxRuntime.jsx(SpinnerSVG.SpinnerSVG, { size, density, id })
85
+ children: /* @__PURE__ */ jsxRuntime.jsx(SpinnerSVG.SpinnerSVG, { id })
87
86
  }
88
87
  );
89
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Spinner.js","sources":["../src/spinner/Spinner.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, type HTMLAttributes, useEffect } from \"react\";\nimport { useAriaAnnouncer } from \"../aria-announcer\";\nimport { useDensity } from \"../salt-provider\";\nimport { makePrefixer, useId } from \"../utils\";\nimport spinnerCss from \"./Spinner.css\";\nimport { SpinnerSVG } from \"./svgSpinners/SpinnerSVG\";\n\n/**\n * Spinner component, provides an indeterminate loading indicator\n *\n * @example\n * <Spinner size=\"small\" | \"medium\" | \"large\" />\n */\n\nexport const SpinnerSizeValues = [\n \"default\",\n \"large\",\n \"small\",\n \"medium\",\n] as const;\n\ntype SpinnerSize = (typeof SpinnerSizeValues)[number];\n\nexport type SpinnerSVGSize = Exclude<SpinnerSize, \"default\">;\n\nconst handleSize = (size: SpinnerSize): SpinnerSVGSize =>\n size === \"default\" ? \"medium\" : size;\n\nconst withBaseName = makePrefixer(\"saltSpinner\");\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Determines the interval on which the component will continue to announce the aria-label. Defaults to 5000ms (5s)\n */\n announcerInterval?: number;\n /**\n * * Determines the interval after which the component will stop announcing the aria-label. Defaults to 20000ms (20s)\n */\n announcerTimeout?: number;\n /**\n * The className(s) of the component\n */\n className?: string;\n /**\n * Determines the message to be announced by the component when it unmounts. Set to null if not needed.\n */\n completionAnnouncement?: string | null;\n /**\n * If true, built in aria announcer will be inactive\n */\n disableAnnouncer?: boolean;\n /**\n * The prop for the role attribute of the component\n */\n role?: string;\n /**\n * Determines the size of the spinner. Must be one of: 'default', 'large', 'small', 'medium'.\n */\n size?: SpinnerSize;\n /**\n * The ids of the SvgSpinner components\n */\n id?: string;\n}\n\nexport const Spinner = forwardRef<HTMLDivElement, SpinnerProps>(\n function Spinner(\n {\n \"aria-label\": ariaLabel = \"loading\",\n announcerInterval = 5000,\n announcerTimeout = 20000,\n completionAnnouncement = `finished ${ariaLabel}`,\n disableAnnouncer,\n className,\n size = \"medium\",\n id: idProp,\n ...rest\n },\n ref,\n ) {\n const id = useId(idProp);\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-spinner\",\n css: spinnerCss,\n window: targetWindow,\n });\n\n const { announce } = useAriaAnnouncer();\n\n const density = useDensity();\n size = handleSize(size);\n\n useEffect(() => {\n if (disableAnnouncer) return;\n\n announce(ariaLabel);\n\n const startTime = Date.now();\n\n const interval =\n announcerInterval > 0 &&\n setInterval(() => {\n if (Date.now() - startTime > announcerTimeout) {\n // The announcer will stop after `announcerTimeout` time\n announce(\n `${ariaLabel} is still in progress, but will no longer announce.`,\n );\n interval && clearInterval(interval);\n return;\n }\n announce(ariaLabel);\n }, announcerInterval);\n\n return () => {\n if (disableAnnouncer) return;\n\n interval && clearInterval(interval);\n if (completionAnnouncement) {\n announce(completionAnnouncement);\n }\n };\n }, [\n announce,\n announcerInterval,\n announcerTimeout,\n ariaLabel,\n completionAnnouncement,\n disableAnnouncer,\n ]);\n\n return (\n <div\n aria-label={ariaLabel}\n className={clsx(withBaseName(), withBaseName(size), className)}\n ref={ref}\n role=\"img\"\n {...rest}\n >\n <SpinnerSVG size={size} density={density} id={id} />\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Spinner","useId","useWindow","useComponentCssInjection","spinnerCss","useAriaAnnouncer","useDensity","useEffect","jsx","clsx","SpinnerSVG"],"mappings":";;;;;;;;;;;;;;;;;;AAiBO,MAAM,iBAAA,GAAoB;AAAA,EAC/B,SAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF;AAMA,MAAM,UAAA,GAAa,CAAC,IAAA,KAClB,IAAA,KAAS,YAAY,QAAA,GAAW,IAAA;AAElC,MAAM,YAAA,GAAeA,0BAAa,aAAa,CAAA;AAqCxC,MAAM,OAAA,GAAUC,gBAAA;AAAA,EACrB,SAASC,QAAAA,CACP;AAAA,IACE,cAAc,SAAA,GAAY,SAAA;AAAA,IAC1B,iBAAA,GAAoB,GAAA;AAAA,IACpB,gBAAA,GAAmB,GAAA;AAAA,IACnB,sBAAA,GAAyB,YAAY,SAAS,CAAA,CAAA;AAAA,IAC9C,gBAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA,GAAO,QAAA;AAAA,IACP,EAAA,EAAI,MAAA;AAAA,IACJ,GAAG;AAAA,KAEL,GAAA,EACA;AACA,IAAA,MAAM,EAAA,GAAKC,YAAM,MAAM,CAAA;AACvB,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,cAAA;AAAA,MACR,GAAA,EAAKC,SAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,EAAE,QAAA,EAAS,GAAIC,iCAAA,EAAiB;AAEtC,IAAA,MAAM,UAAUC,uBAAA,EAAW;AAC3B,IAAA,IAAA,GAAO,WAAW,IAAI,CAAA;AAEtB,IAAAC,eAAA,CAAU,MAAM;AACd,MAAA,IAAI,gBAAA,EAAkB;AAEtB,MAAA,QAAA,CAAS,SAAS,CAAA;AAElB,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,MAAA,MAAM,QAAA,GACJ,iBAAA,GAAoB,CAAA,IACpB,WAAA,CAAY,MAAM;AAChB,QAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,GAAY,gBAAA,EAAkB;AAE7C,UAAA,QAAA;AAAA,YACE,GAAG,SAAS,CAAA,mDAAA;AAAA,WACd;AACA,UAAA,QAAA,IAAY,cAAc,QAAQ,CAAA;AAClC,UAAA;AAAA,QACF;AACA,QAAA,QAAA,CAAS,SAAS,CAAA;AAAA,MACpB,GAAG,iBAAiB,CAAA;AAEtB,MAAA,OAAO,MAAM;AACX,QAAA,IAAI,gBAAA,EAAkB;AAEtB,QAAA,QAAA,IAAY,cAAc,QAAQ,CAAA;AAClC,QAAA,IAAI,sBAAA,EAAwB;AAC1B,UAAA,QAAA,CAAS,sBAAsB,CAAA;AAAA,QACjC;AAAA,MACF,CAAA;AAAA,IACF,CAAA,EAAG;AAAA,MACD,QAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,SAAA;AAAA,MACA,sBAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,uBACEC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAY,SAAA;AAAA,QACZ,WAAWC,SAAA,CAAK,YAAA,IAAgB,YAAA,CAAa,IAAI,GAAG,SAAS,CAAA;AAAA,QAC7D,GAAA;AAAA,QACA,IAAA,EAAK,KAAA;AAAA,QACJ,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAD,cAAA,CAACE,qBAAA,EAAA,EAAW,IAAA,EAAY,OAAA,EAAkB,EAAA,EAAQ;AAAA;AAAA,KACpD;AAAA,EAEJ;AACF;;;;;"}
1
+ {"version":3,"file":"Spinner.js","sources":["../src/spinner/Spinner.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, type HTMLAttributes, useEffect } from \"react\";\nimport { useAriaAnnouncer } from \"../aria-announcer\";\nimport { makePrefixer, useId } from \"../utils\";\nimport spinnerCss from \"./Spinner.css\";\nimport { SpinnerSVG } from \"./svgSpinners/SpinnerSVG\";\n\n/**\n * Spinner component, provides an indeterminate loading indicator\n *\n * @example\n * <Spinner size=\"small\" | \"medium\" | \"large\" />\n */\n\nexport const SpinnerSizeValues = [\n \"default\",\n \"large\",\n \"small\",\n \"medium\",\n] as const;\n\ntype SpinnerSize = (typeof SpinnerSizeValues)[number];\n\nexport type SpinnerSVGSize = Exclude<SpinnerSize, \"default\">;\n\nconst handleSize = (size: SpinnerSize): SpinnerSVGSize =>\n size === \"default\" ? \"medium\" : size;\n\nconst withBaseName = makePrefixer(\"saltSpinner\");\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Determines the interval on which the component will continue to announce the aria-label. Defaults to 5000ms (5s)\n */\n announcerInterval?: number;\n /**\n * * Determines the interval after which the component will stop announcing the aria-label. Defaults to 20000ms (20s)\n */\n announcerTimeout?: number;\n /**\n * The className(s) of the component\n */\n className?: string;\n /**\n * Determines the message to be announced by the component when it unmounts. Set to null if not needed.\n */\n completionAnnouncement?: string | null;\n /**\n * If true, built in aria announcer will be inactive\n */\n disableAnnouncer?: boolean;\n /**\n * The prop for the role attribute of the component\n */\n role?: string;\n /**\n * Determines the size of the spinner. Must be one of: 'default', 'large', 'small', 'medium'.\n */\n size?: SpinnerSize;\n /**\n * The ids of the SvgSpinner components\n */\n id?: string;\n}\n\nexport const Spinner = forwardRef<HTMLDivElement, SpinnerProps>(\n function Spinner(\n {\n \"aria-label\": ariaLabel = \"loading\",\n announcerInterval = 5000,\n announcerTimeout = 20000,\n completionAnnouncement = `finished ${ariaLabel}`,\n disableAnnouncer,\n className,\n size: sizeProp = \"medium\",\n id: idProp,\n ...rest\n },\n ref,\n ) {\n const id = useId(idProp);\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-spinner\",\n css: spinnerCss,\n window: targetWindow,\n });\n\n const { announce } = useAriaAnnouncer();\n\n const size = handleSize(sizeProp);\n\n useEffect(() => {\n if (disableAnnouncer) return;\n\n announce(ariaLabel);\n\n const startTime = Date.now();\n\n const interval =\n announcerInterval > 0 &&\n setInterval(() => {\n if (Date.now() - startTime > announcerTimeout) {\n // The announcer will stop after `announcerTimeout` time\n announce(\n `${ariaLabel} is still in progress, but will no longer announce.`,\n );\n interval && clearInterval(interval);\n return;\n }\n announce(ariaLabel);\n }, announcerInterval);\n\n return () => {\n if (disableAnnouncer) return;\n\n interval && clearInterval(interval);\n if (completionAnnouncement) {\n announce(completionAnnouncement);\n }\n };\n }, [\n announce,\n announcerInterval,\n announcerTimeout,\n ariaLabel,\n completionAnnouncement,\n disableAnnouncer,\n ]);\n\n return (\n <div\n aria-label={ariaLabel}\n className={clsx(withBaseName(), withBaseName(size), className)}\n ref={ref}\n role=\"img\"\n {...rest}\n >\n <SpinnerSVG id={id} />\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","Spinner","useId","useWindow","useComponentCssInjection","spinnerCss","useAriaAnnouncer","useEffect","jsx","clsx","SpinnerSVG"],"mappings":";;;;;;;;;;;;;;;;;;AAgBO,MAAM,iBAAA,GAAoB;AAAA,EAC/B,SAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF;AAMA,MAAM,UAAA,GAAa,CAAC,IAAA,KAClB,IAAA,KAAS,YAAY,QAAA,GAAW,IAAA;AAElC,MAAM,YAAA,GAAeA,0BAAa,aAAa,CAAA;AAqCxC,MAAM,OAAA,GAAUC,gBAAA;AAAA,EACrB,SAASC,QAAAA,CACP;AAAA,IACE,cAAc,SAAA,GAAY,SAAA;AAAA,IAC1B,iBAAA,GAAoB,GAAA;AAAA,IACpB,gBAAA,GAAmB,GAAA;AAAA,IACnB,sBAAA,GAAyB,YAAY,SAAS,CAAA,CAAA;AAAA,IAC9C,gBAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAM,QAAA,GAAW,QAAA;AAAA,IACjB,EAAA,EAAI,MAAA;AAAA,IACJ,GAAG;AAAA,KAEL,GAAA,EACA;AACA,IAAA,MAAM,EAAA,GAAKC,YAAM,MAAM,CAAA;AACvB,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,cAAA;AAAA,MACR,GAAA,EAAKC,SAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,EAAE,QAAA,EAAS,GAAIC,iCAAA,EAAiB;AAEtC,IAAA,MAAM,IAAA,GAAO,WAAW,QAAQ,CAAA;AAEhC,IAAAC,eAAA,CAAU,MAAM;AACd,MAAA,IAAI,gBAAA,EAAkB;AAEtB,MAAA,QAAA,CAAS,SAAS,CAAA;AAElB,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,MAAA,MAAM,QAAA,GACJ,iBAAA,GAAoB,CAAA,IACpB,WAAA,CAAY,MAAM;AAChB,QAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,GAAY,gBAAA,EAAkB;AAE7C,UAAA,QAAA;AAAA,YACE,GAAG,SAAS,CAAA,mDAAA;AAAA,WACd;AACA,UAAA,QAAA,IAAY,cAAc,QAAQ,CAAA;AAClC,UAAA;AAAA,QACF;AACA,QAAA,QAAA,CAAS,SAAS,CAAA;AAAA,MACpB,GAAG,iBAAiB,CAAA;AAEtB,MAAA,OAAO,MAAM;AACX,QAAA,IAAI,gBAAA,EAAkB;AAEtB,QAAA,QAAA,IAAY,cAAc,QAAQ,CAAA;AAClC,QAAA,IAAI,sBAAA,EAAwB;AAC1B,UAAA,QAAA,CAAS,sBAAsB,CAAA;AAAA,QACjC;AAAA,MACF,CAAA;AAAA,IACF,CAAA,EAAG;AAAA,MACD,QAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,SAAA;AAAA,MACA,sBAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,uBACEC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAY,SAAA;AAAA,QACZ,WAAWC,SAAA,CAAK,YAAA,IAAgB,YAAA,CAAa,IAAI,GAAG,SAAS,CAAA;AAAA,QAC7D,GAAA;AAAA,QACA,IAAA,EAAK,KAAA;AAAA,QACJ,GAAG,IAAA;AAAA,QAEJ,QAAA,kBAAAD,cAAA,CAACE,yBAAW,EAAA,EAAQ;AAAA;AAAA,KACtB;AAAA,EAEJ;AACF;;;;;"}