@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
@@ -10,46 +10,20 @@ require('../../salt-provider/SaltProvider.js');
10
10
  require('../../viewport/ViewportProvider.js');
11
11
 
12
12
  const withBaseName = makePrefixer.makePrefixer("saltSpinner");
13
- const sizeAndStrokeWidthMapping = {
14
- small: {
15
- high: { width: 12, strokeWidth: 2 },
16
- medium: { width: 12, strokeWidth: 2 },
17
- low: { width: 14, strokeWidth: 2 },
18
- touch: { width: 16, strokeWidth: 2 },
19
- mobile: { width: 16, strokeWidth: 2 }
20
- },
21
- medium: {
22
- high: { width: 20, strokeWidth: 2 },
23
- medium: { width: 28, strokeWidth: 4 },
24
- low: { width: 36, strokeWidth: 6 },
25
- touch: { width: 44, strokeWidth: 8 },
26
- mobile: { width: 44, strokeWidth: 8 }
27
- },
28
- large: {
29
- high: { width: 40, strokeWidth: 2 },
30
- medium: { width: 56, strokeWidth: 4 },
31
- low: { width: 72, strokeWidth: 6 },
32
- touch: { width: 88, strokeWidth: 8 },
33
- mobile: { width: 88, strokeWidth: 8 }
34
- }
35
- };
36
13
  const SpinnerSVG = ({
37
14
  id = "svg-spinner",
38
- rest,
39
- size,
40
- density
15
+ ...rest
41
16
  }) => {
42
- const { width, strokeWidth } = sizeAndStrokeWidthMapping[size][density];
43
- const radius = (width - strokeWidth) / 2;
17
+ const gradientId = `${id}-1`;
44
18
  return /* @__PURE__ */ jsxRuntime.jsxs(
45
19
  "svg",
46
20
  {
47
21
  className: withBaseName("spinner"),
48
- viewBox: `0 0 ${width} ${width}`,
22
+ preserveAspectRatio: "xMidYMid meet",
49
23
  id,
50
24
  ...rest,
51
25
  children: [
52
- /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs("linearGradient", { id: `${id}-1`, x1: "0", y1: "0", x2: "100%", y2: "0", children: [
26
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "50%", y2: "0", children: [
53
27
  /* @__PURE__ */ jsxRuntime.jsx(
54
28
  "stop",
55
29
  {
@@ -67,26 +41,34 @@ const SpinnerSVG = ({
67
41
  }
68
42
  )
69
43
  ] }) }),
70
- /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "none", children: [
71
- /* @__PURE__ */ jsxRuntime.jsx(
72
- "path",
73
- {
74
- d: `M${width - strokeWidth / 2},${width / 2} a${radius},${radius} 0 1,0 -${width - strokeWidth},0`,
75
- stroke: "var(--saltSpinner-gradient-color, var(--salt-sentiment-accent-background)",
76
- strokeWidth: "var(--spinner-strokeWidth)",
77
- fill: "none"
78
- }
79
- ),
80
- /* @__PURE__ */ jsxRuntime.jsx(
81
- "path",
82
- {
83
- d: `M${width / 2},${strokeWidth / 2} a${radius},${radius} 0 1,0 0,${width - strokeWidth}`,
84
- stroke: `url(#${id}-1)`,
85
- strokeWidth: "var(--spinner-strokeWidth)",
86
- fill: "none"
87
- }
88
- )
89
- ] })
44
+ /* @__PURE__ */ jsxRuntime.jsx(
45
+ "circle",
46
+ {
47
+ className: withBaseName("arc"),
48
+ cx: "50%",
49
+ cy: "50%",
50
+ fill: "none",
51
+ stroke: "var(--saltSpinner-gradient-color, var(--salt-sentiment-accent-background))",
52
+ strokeWidth: "var(--spinner-strokeWidth)",
53
+ pathLength: "100",
54
+ strokeDasharray: "50 50",
55
+ strokeDashoffset: "50"
56
+ }
57
+ ),
58
+ /* @__PURE__ */ jsxRuntime.jsx(
59
+ "circle",
60
+ {
61
+ className: withBaseName("arc"),
62
+ cx: "50%",
63
+ cy: "50%",
64
+ fill: "none",
65
+ stroke: `url(#${gradientId})`,
66
+ strokeWidth: "var(--spinner-strokeWidth)",
67
+ pathLength: "100",
68
+ strokeDasharray: "50 50",
69
+ strokeDashoffset: "75"
70
+ }
71
+ )
90
72
  ]
91
73
  }
92
74
  );
@@ -1 +1 @@
1
- {"version":3,"file":"SpinnerSVG.js","sources":["../src/spinner/svgSpinners/SpinnerSVG.tsx"],"sourcesContent":["import type { SVGAttributes } from \"react\";\nimport type { Density } from \"../../theme\";\nimport { makePrefixer } from \"../../utils\";\nimport type { SpinnerSVGSize } from \"../Spinner\";\n\nconst withBaseName = makePrefixer(\"saltSpinner\");\n\ninterface SpinnerProps {\n id?: string;\n rest?: Omit<SVGAttributes<SVGSVGElement>, \"id\">;\n size: SpinnerSVGSize;\n density: Density;\n}\n\nconst sizeAndStrokeWidthMapping = {\n small: {\n high: { width: 12, strokeWidth: 2 },\n medium: { width: 12, strokeWidth: 2 },\n low: { width: 14, strokeWidth: 2 },\n touch: { width: 16, strokeWidth: 2 },\n mobile: { width: 16, strokeWidth: 2 },\n },\n medium: {\n high: { width: 20, strokeWidth: 2 },\n medium: { width: 28, strokeWidth: 4 },\n low: { width: 36, strokeWidth: 6 },\n touch: { width: 44, strokeWidth: 8 },\n mobile: { width: 44, strokeWidth: 8 },\n },\n large: {\n high: { width: 40, strokeWidth: 2 },\n medium: { width: 56, strokeWidth: 4 },\n low: { width: 72, strokeWidth: 6 },\n touch: { width: 88, strokeWidth: 8 },\n mobile: { width: 88, strokeWidth: 8 },\n },\n};\n\nexport const SpinnerSVG = ({\n id = \"svg-spinner\",\n rest,\n size,\n density,\n}: SpinnerProps) => {\n const { width, strokeWidth } = sizeAndStrokeWidthMapping[size][density];\n const radius = (width - strokeWidth) / 2;\n\n return (\n <svg\n className={withBaseName(\"spinner\")}\n viewBox={`0 0 ${width} ${width}`}\n id={id}\n {...rest}\n >\n <defs>\n <linearGradient id={`${id}-1`} x1=\"0\" y1=\"0\" x2=\"100%\" y2=\"0\">\n <stop\n className={withBaseName(\"gradientStop\")}\n offset=\"15%\"\n stopOpacity=\"1\"\n />\n <stop\n className={withBaseName(\"gradientStop\")}\n offset=\"100%\"\n stopOpacity=\"0\"\n />\n </linearGradient>\n </defs>\n <g fill=\"none\">\n {/*\n This first path draws the top half of the circle without a gradient.\n It starts from the right end, moves in a circular arc, and ends at the left end.\n */}\n <path\n d={`M${width - strokeWidth / 2},${\n width / 2\n } a${radius},${radius} 0 1,0 -${width - strokeWidth},0`}\n stroke=\"var(--saltSpinner-gradient-color, var(--salt-sentiment-accent-background)\"\n strokeWidth=\"var(--spinner-strokeWidth)\"\n fill=\"none\"\n />\n {/*\n This second path draws the left half of the circle with a gradient that transitions\n from opaque on the left to transparent on the right.\n It starts from the top-center, moves in a circular arc, and ends at the bottom-center.\n */}\n <path\n d={`M${width / 2},${strokeWidth / 2} a${radius},${radius} 0 1,0 0,${\n width - strokeWidth\n }`}\n stroke={`url(#${id}-1)`}\n strokeWidth=\"var(--spinner-strokeWidth)\"\n fill=\"none\"\n />\n </g>\n </svg>\n );\n};\n"],"names":["makePrefixer","jsxs","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"SpinnerSVG.js","sources":["../src/spinner/svgSpinners/SpinnerSVG.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from \"react\";\nimport { makePrefixer } from \"../../utils\";\n\nconst withBaseName = makePrefixer(\"saltSpinner\");\n\ntype SpinnerSVGProps = ComponentPropsWithoutRef<\"svg\">;\n\n/**\n * Draws the spinner as two overlapping circles. Each circle is half-stroked\n * (`stroke-dasharray=\"50 50\"` against a normalised `pathLength` of 100) and\n * rotated via `stroke-dashoffset`: the first draws the top half, the second\n * draws the left half with a fading gradient. Radius and stroke width come\n * from CSS custom properties set by the parent `.saltSpinner-*` size class.\n */\nexport const SpinnerSVG = ({\n id = \"svg-spinner\",\n ...rest\n}: SpinnerSVGProps) => {\n const gradientId = `${id}-1`;\n\n return (\n <svg\n className={withBaseName(\"spinner\")}\n preserveAspectRatio=\"xMidYMid meet\"\n id={id}\n {...rest}\n >\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"50%\" y2=\"0\">\n <stop\n className={withBaseName(\"gradientStop\")}\n offset=\"15%\"\n stopOpacity=\"1\"\n />\n <stop\n className={withBaseName(\"gradientStop\")}\n offset=\"100%\"\n stopOpacity=\"0\"\n />\n </linearGradient>\n </defs>\n <circle\n className={withBaseName(\"arc\")}\n cx=\"50%\"\n cy=\"50%\"\n fill=\"none\"\n stroke=\"var(--saltSpinner-gradient-color, var(--salt-sentiment-accent-background))\"\n strokeWidth=\"var(--spinner-strokeWidth)\"\n pathLength=\"100\"\n strokeDasharray=\"50 50\"\n strokeDashoffset=\"50\"\n />\n <circle\n className={withBaseName(\"arc\")}\n cx=\"50%\"\n cy=\"50%\"\n fill=\"none\"\n stroke={`url(#${gradientId})`}\n strokeWidth=\"var(--spinner-strokeWidth)\"\n pathLength=\"100\"\n strokeDasharray=\"50 50\"\n strokeDashoffset=\"75\"\n />\n </svg>\n );\n};\n"],"names":["makePrefixer","jsxs","jsx"],"mappings":";;;;;;;;;;;AAGA,MAAM,YAAA,GAAeA,0BAAa,aAAa,CAAA;AAWxC,MAAM,aAAa,CAAC;AAAA,EACzB,EAAA,GAAK,aAAA;AAAA,EACL,GAAG;AACL,CAAA,KAAuB;AACrB,EAAA,MAAM,UAAA,GAAa,GAAG,EAAE,CAAA,EAAA,CAAA;AAExB,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,aAAa,SAAS,CAAA;AAAA,MACjC,mBAAA,EAAoB,eAAA;AAAA,MACpB,EAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,MAAA,EAAA,EACC,QAAA,kBAAAD,eAAA,CAAC,gBAAA,EAAA,EAAe,EAAA,EAAI,UAAA,EAAY,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,KAAA,EAAM,EAAA,EAAG,GAAA,EACxD,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,aAAa,cAAc,CAAA;AAAA,cACtC,MAAA,EAAO,KAAA;AAAA,cACP,WAAA,EAAY;AAAA;AAAA,WACd;AAAA,0BACAA,cAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,aAAa,cAAc,CAAA;AAAA,cACtC,MAAA,EAAO,MAAA;AAAA,cACP,WAAA,EAAY;AAAA;AAAA;AACd,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBACAA,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,aAAa,KAAK,CAAA;AAAA,YAC7B,EAAA,EAAG,KAAA;AAAA,YACH,EAAA,EAAG,KAAA;AAAA,YACH,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,4EAAA;AAAA,YACP,WAAA,EAAY,4BAAA;AAAA,YACZ,UAAA,EAAW,KAAA;AAAA,YACX,eAAA,EAAgB,OAAA;AAAA,YAChB,gBAAA,EAAiB;AAAA;AAAA,SACnB;AAAA,wBACAA,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,aAAa,KAAK,CAAA;AAAA,YAC7B,EAAA,EAAG,KAAA;AAAA,YACH,EAAA,EAAG,KAAA;AAAA,YACH,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAQ,QAAQ,UAAU,CAAA,CAAA,CAAA;AAAA,YAC1B,WAAA,EAAY,4BAAA;AAAA,YACZ,UAAA,EAAW,KAAA;AAAA,YACX,eAAA,EAAgB,OAAA;AAAA,YAChB,gBAAA,EAAiB;AAAA;AAAA;AACnB;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltToolbar {\n box-sizing: border-box;\n inline-size: 100%;\n min-width: 0;\n position: relative;\n}\n\n.saltToolbar-layout {\n align-items: center;\n --saltToolbar-band-gap: var(--salt-spacing-100);\n}\n\n.saltToolbar-layout:not([data-centered]) {\n display: flex;\n column-gap: var(--saltToolbar-band-gap);\n}\n\n.saltToolbar-layout[data-centered] {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);\n}\n\n.saltToolbar-band {\n display: flex;\n align-items: center;\n gap: var(--saltToolbar-band-gap);\n min-width: 0;\n}\n\n.saltToolbar-layout:not([data-centered]) > .saltToolbar-band[data-band-position=\"end\"] {\n justify-content: flex-end;\n margin-inline-start: auto;\n}\n\n.saltToolbar-layout[data-centered] > .saltToolbar-band[data-band-position=\"start\"] {\n grid-column: 1;\n}\n\n.saltToolbar-layout[data-centered] > .saltToolbar-band[data-band-position=\"center\"] {\n grid-column: 2;\n justify-content: center;\n}\n\n.saltToolbar-layout[data-centered] > .saltToolbar-band[data-band-position=\"end\"] {\n grid-column: 3;\n justify-content: flex-end;\n}\n\n.saltToolbar-fallback {\n display: flex;\n align-items: center;\n gap: var(--salt-spacing-100);\n}\n\n.saltToolbar-layout > * {\n min-width: 0;\n}\n\n.saltToolbar-primary {\n --toolbar-background: var(--salt-container-primary-background);\n --toolbar-borderColor: var(--salt-container-primary-borderColor);\n}\n\n.saltToolbar-secondary {\n --toolbar-background: var(--salt-container-secondary-background);\n --toolbar-borderColor: var(--salt-container-secondary-borderColor);\n}\n\n.saltToolbar-tertiary {\n --toolbar-background: var(--salt-container-tertiary-background);\n --toolbar-borderColor: var(--salt-container-tertiary-borderColor);\n}\n\n.saltToolbar-bordered {\n background: var(--saltToolbar-background, var(--toolbar-background));\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--saltToolbar-borderColor, var(--toolbar-borderColor));\n border-radius: var(--salt-palette-corner, 0);\n padding: var(--salt-spacing-100);\n}\n\n.saltToolbar-transparent {\n background: transparent;\n border: none;\n padding: 0;\n}\n\n.saltToolbar-measurements {\n display: flex;\n gap: var(--salt-spacing-100);\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n inset: 0 auto auto 0;\n block-size: 0;\n overflow: hidden;\n}\n\n.saltToolbar-measureTrigger {\n white-space: nowrap;\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=Toolbar.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toolbar.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,401 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var styles = require('@salt-ds/styles');
5
+ var window = require('@salt-ds/window');
6
+ var clsx = require('clsx');
7
+ var React = require('react');
8
+ var Button = require('../button/Button.js');
9
+ var makePrefixer = require('../utils/makePrefixer.js');
10
+ var useIsomorphicLayoutEffect = require('../utils/useIsomorphicLayoutEffect.js');
11
+ require('../utils/useFloatingUI/useFloatingUI.js');
12
+ var useForkRef = require('../utils/useForkRef.js');
13
+ require('../utils/useId.js');
14
+ require('../salt-provider/SaltProvider.js');
15
+ require('../viewport/ViewportProvider.js');
16
+ var Toolbar$1 = require('./Toolbar.css.js');
17
+ var ToolbarOverflow = require('./ToolbarOverflow.js');
18
+ var ToolbarOverflowFloatingBoundary = require('./ToolbarOverflowFloatingBoundary.js');
19
+ var toolbarKeyboardUtils = require('./toolbarKeyboardUtils.js');
20
+ var toolbarUtils = require('./toolbarUtils.js');
21
+ var useToolbarKeyboardNavigation = require('./useToolbarKeyboardNavigation.js');
22
+ var useToolbarOverflow = require('./useToolbarOverflow.js');
23
+
24
+ const withBaseName = makePrefixer.makePrefixer("saltToolbar");
25
+ const withOverflowBaseName = makePrefixer.makePrefixer("saltToolbarOverflow");
26
+ const bandPositions = ["start", "center", "end"];
27
+ function cloneMeasureDecorations(itemId, slot, decorations) {
28
+ return decorations.map((decoration, index) => {
29
+ return React.cloneElement(decoration, {
30
+ key: `${itemId}-${slot}-measurement-${String(decoration.key ?? index)}`
31
+ });
32
+ });
33
+ }
34
+ const Toolbar = React.forwardRef(
35
+ function Toolbar2({
36
+ children,
37
+ className,
38
+ onBlurCapture,
39
+ onFocusCapture,
40
+ onKeyDownCapture,
41
+ onPointerDownCapture,
42
+ appearance = "bordered",
43
+ variant = "primary",
44
+ ...rest
45
+ }, ref) {
46
+ const targetWindow = window.useWindow();
47
+ styles.useComponentCssInjection({
48
+ testId: "salt-toolbar",
49
+ css: Toolbar$1,
50
+ window: targetWindow
51
+ });
52
+ const { mode, content } = toolbarUtils.normalizeToolbarChildren(children);
53
+ const overflowContent = React.useMemo(
54
+ () => toolbarUtils.normalizeToolbarChildren(children).content,
55
+ [children]
56
+ );
57
+ const allItems = React.useMemo(
58
+ () => content.flatMap((contentArea) => contentArea.items),
59
+ [content]
60
+ );
61
+ const {
62
+ containerRef,
63
+ getBandRef,
64
+ getItemRef,
65
+ getNamedTriggerMeasureRef,
66
+ getNamedTriggerRef,
67
+ getContentRef,
68
+ getTriggerMeasureRef,
69
+ overflowGroups,
70
+ overflowTriggerGroups,
71
+ overflowedIds
72
+ } = useToolbarOverflow.useToolbarOverflow({ content: overflowContent });
73
+ const handleRef = useForkRef.useForkRef(ref, containerRef);
74
+ const invalidCompositionWarnedRef = React.useRef(false);
75
+ const itemHostRefCallbacks = React.useRef(
76
+ /* @__PURE__ */ new Map()
77
+ );
78
+ const [itemHostNodes, setItemHostNodes] = React.useState({});
79
+ const sharedOverflowGroups = React.useMemo(
80
+ () => overflowGroups.filter((group) => !group.named),
81
+ [overflowGroups]
82
+ );
83
+ const namedOverflowGroups = React.useMemo(
84
+ () => overflowGroups.filter((group) => group.named),
85
+ [overflowGroups]
86
+ );
87
+ const overflowTriggerGroupByKey = React.useMemo(
88
+ () => new Map(
89
+ overflowTriggerGroups.map((group) => [group.key, group])
90
+ ),
91
+ [overflowTriggerGroups]
92
+ );
93
+ const namedTriggerMeasureItems = React.useMemo(
94
+ () => allItems.filter((item) => {
95
+ return item.overflowMode !== "none" && item.overflowGroup !== "shared";
96
+ }),
97
+ [allItems]
98
+ );
99
+ const bandsByPosition = React.useMemo(() => {
100
+ return bandPositions.reduce(
101
+ (bands, position) => {
102
+ bands[position] = content.filter(
103
+ (contentArea) => contentArea.position === position
104
+ );
105
+ return bands;
106
+ },
107
+ {
108
+ start: [],
109
+ center: [],
110
+ end: []
111
+ }
112
+ );
113
+ }, [content]);
114
+ const hasCenteredLayout = bandsByPosition.center.length > 0;
115
+ const keyboardNavigation = useToolbarKeyboardNavigation.useToolbarKeyboardNavigation({
116
+ items: allItems,
117
+ overflowedIds,
118
+ scopeRef: containerRef
119
+ });
120
+ const overflowedIdsKey = React.useMemo(
121
+ () => Array.from(overflowedIds).sort().join("\0"),
122
+ [overflowedIds]
123
+ );
124
+ const previousOverflowedIdsKeyRef = React.useRef(overflowedIdsKey);
125
+ const getItemHostRef = React.useCallback(
126
+ (id, kind) => {
127
+ const callbackKey = `${id}:${kind}`;
128
+ const existing = itemHostRefCallbacks.current.get(callbackKey);
129
+ if (existing) {
130
+ return existing;
131
+ }
132
+ const callback = (node) => {
133
+ setItemHostNodes((previous) => {
134
+ var _a;
135
+ if (((_a = previous[id]) == null ? void 0 : _a[kind]) === node) {
136
+ return previous;
137
+ }
138
+ return {
139
+ ...previous,
140
+ [id]: {
141
+ ...previous[id],
142
+ [kind]: node
143
+ }
144
+ };
145
+ });
146
+ };
147
+ itemHostRefCallbacks.current.set(callbackKey, callback);
148
+ return callback;
149
+ },
150
+ []
151
+ );
152
+ const itemOwnerHostNodes = React.useMemo(() => {
153
+ return allItems.reduce(
154
+ (hosts, item) => {
155
+ const nodes = itemHostNodes[item.id];
156
+ hosts[item.id] = (nodes == null ? void 0 : nodes.overflow) ?? (nodes == null ? void 0 : nodes.main) ?? (nodes == null ? void 0 : nodes.measurement) ?? null;
157
+ return hosts;
158
+ },
159
+ {}
160
+ );
161
+ }, [allItems, itemHostNodes]);
162
+ const overflowedMeasurementItems = React.useMemo(() => {
163
+ return allItems.filter((item) => {
164
+ var _a;
165
+ return overflowedIds.has(item.id) && !((_a = itemHostNodes[item.id]) == null ? void 0 : _a.overflow);
166
+ });
167
+ }, [allItems, itemHostNodes, overflowedIds]);
168
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
169
+ const overflowChanged = previousOverflowedIdsKeyRef.current !== overflowedIdsKey;
170
+ previousOverflowedIdsKeyRef.current = overflowedIdsKey;
171
+ if (!overflowChanged) {
172
+ return;
173
+ }
174
+ const doc = targetWindow == null ? void 0 : targetWindow.document;
175
+ const rememberedFocus = keyboardNavigation.rememberedFocusRef.current;
176
+ if (!doc || !rememberedFocus) {
177
+ return;
178
+ }
179
+ const activeElement = doc.activeElement;
180
+ const focusWasLost = !activeElement || activeElement === doc.body || activeElement === doc.documentElement || !activeElement.isConnected;
181
+ const target = keyboardNavigation.getEntryFocusable();
182
+ if (!focusWasLost) {
183
+ return;
184
+ }
185
+ if (!target) {
186
+ return;
187
+ }
188
+ const focusTarget = () => {
189
+ if (target.isConnected) {
190
+ target.focus({ preventScroll: true });
191
+ }
192
+ };
193
+ if (targetWindow == null ? void 0 : targetWindow.requestAnimationFrame) {
194
+ const frame = targetWindow.requestAnimationFrame(focusTarget);
195
+ return () => {
196
+ targetWindow.cancelAnimationFrame(frame);
197
+ };
198
+ }
199
+ queueMicrotask(focusTarget);
200
+ }, [
201
+ keyboardNavigation.getEntryFocusable,
202
+ keyboardNavigation.rememberedFocusRef,
203
+ overflowedIdsKey,
204
+ targetWindow
205
+ ]);
206
+ React.useEffect(() => {
207
+ if (process.env.NODE_ENV !== "production") {
208
+ if (mode === "invalid" && !invalidCompositionWarnedRef.current) {
209
+ console.warn(
210
+ "Toolbar children must be authored in one composition model: either Tooltray/Divider children directly in Toolbar, or ToolbarContent children containing Tooltray/Divider items."
211
+ );
212
+ invalidCompositionWarnedRef.current = true;
213
+ }
214
+ if (mode !== "invalid") {
215
+ invalidCompositionWarnedRef.current = false;
216
+ }
217
+ }
218
+ }, [mode]);
219
+ return /* @__PURE__ */ jsxRuntime.jsx(
220
+ "div",
221
+ {
222
+ className: clsx.clsx(
223
+ withBaseName(),
224
+ {
225
+ [withBaseName("fallback")]: mode === "invalid",
226
+ [withBaseName("layout")]: mode !== "invalid"
227
+ },
228
+ withBaseName(variant),
229
+ withBaseName(appearance),
230
+ className
231
+ ),
232
+ ...rest,
233
+ "data-centered": mode !== "invalid" && hasCenteredLayout ? "" : void 0,
234
+ "data-mode": mode,
235
+ ...{ [toolbarKeyboardUtils.TOOLBAR_SCOPE_ROOT_ATTR]: "main" },
236
+ ref: handleRef,
237
+ onBlurCapture: (event) => {
238
+ keyboardNavigation.handleBlurCapture(event);
239
+ onBlurCapture == null ? void 0 : onBlurCapture(event);
240
+ },
241
+ onFocusCapture: (event) => {
242
+ keyboardNavigation.handleFocusCapture(event);
243
+ onFocusCapture == null ? void 0 : onFocusCapture(event);
244
+ },
245
+ onKeyDownCapture: (event) => {
246
+ keyboardNavigation.handleKeyDownCapture(event);
247
+ onKeyDownCapture == null ? void 0 : onKeyDownCapture(event);
248
+ },
249
+ onPointerDownCapture: (event) => {
250
+ keyboardNavigation.handlePointerDownCapture(event);
251
+ onPointerDownCapture == null ? void 0 : onPointerDownCapture(event);
252
+ },
253
+ role: "toolbar",
254
+ "aria-orientation": "horizontal",
255
+ children: mode === "invalid" ? children : /* @__PURE__ */ jsxRuntime.jsxs(ToolbarOverflowFloatingBoundary.ToolbarOverflowFloatingBoundaryProvider, { children: [
256
+ /* @__PURE__ */ jsxRuntime.jsx(
257
+ ToolbarOverflow.ToolbarOverflowOwners,
258
+ {
259
+ hostNodes: itemOwnerHostNodes,
260
+ items: allItems
261
+ }
262
+ ),
263
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { "aria-hidden": true, className: withBaseName("measurements"), children: [
264
+ overflowTriggerGroups.filter((group) => !group.named).map((group) => /* @__PURE__ */ jsxRuntime.jsx(
265
+ Button.Button,
266
+ {
267
+ appearance: "transparent",
268
+ className: withBaseName("measureTrigger"),
269
+ ref: getTriggerMeasureRef(group.key),
270
+ sentiment: "neutral",
271
+ tabIndex: -1,
272
+ children: /* @__PURE__ */ jsxRuntime.jsx(
273
+ ToolbarOverflow.ToolbarOverflowTriggerContent,
274
+ {
275
+ label: group.label,
276
+ named: group.named
277
+ }
278
+ )
279
+ },
280
+ group.id
281
+ )),
282
+ namedTriggerMeasureItems.map((item) => {
283
+ const group = overflowTriggerGroupByKey.get(
284
+ item.overflowGroupKey
285
+ );
286
+ if (!group) {
287
+ return null;
288
+ }
289
+ return /* @__PURE__ */ jsxRuntime.jsxs(
290
+ "div",
291
+ {
292
+ className: withOverflowBaseName("slot"),
293
+ ref: getNamedTriggerMeasureRef(item.id),
294
+ children: [
295
+ cloneMeasureDecorations(
296
+ item.id,
297
+ "leading",
298
+ item.leadingDecorations
299
+ ),
300
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: withOverflowBaseName("item"), children: /* @__PURE__ */ jsxRuntime.jsx(
301
+ Button.Button,
302
+ {
303
+ appearance: "transparent",
304
+ className: withOverflowBaseName("trigger"),
305
+ sentiment: "neutral",
306
+ tabIndex: -1,
307
+ children: /* @__PURE__ */ jsxRuntime.jsx(
308
+ ToolbarOverflow.ToolbarOverflowTriggerContent,
309
+ {
310
+ label: group.label,
311
+ named: group.named
312
+ }
313
+ )
314
+ }
315
+ ) })
316
+ ]
317
+ },
318
+ `measure-${item.id}`
319
+ );
320
+ }),
321
+ overflowedMeasurementItems.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(
322
+ "div",
323
+ {
324
+ className: withOverflowBaseName("slot"),
325
+ ref: getItemRef(item.id),
326
+ children: [
327
+ cloneMeasureDecorations(
328
+ item.id,
329
+ "leading",
330
+ item.leadingDecorations
331
+ ),
332
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: withOverflowBaseName("item"), children: /* @__PURE__ */ jsxRuntime.jsx(
333
+ "div",
334
+ {
335
+ className: withOverflowBaseName("itemHost"),
336
+ ref: getItemHostRef(item.id, "measurement")
337
+ }
338
+ ) }),
339
+ cloneMeasureDecorations(
340
+ item.id,
341
+ "trailing",
342
+ item.trailingDecorations
343
+ )
344
+ ]
345
+ },
346
+ `measure-item-${item.id}`
347
+ ))
348
+ ] }),
349
+ bandPositions.map((position) => {
350
+ const bandContent = bandsByPosition[position];
351
+ const shouldRenderBand = hasCenteredLayout ? true : position === "end" ? bandContent.length > 0 || sharedOverflowGroups.length > 0 : bandContent.length > 0;
352
+ if (!shouldRenderBand) {
353
+ return null;
354
+ }
355
+ return /* @__PURE__ */ jsxRuntime.jsxs(
356
+ "div",
357
+ {
358
+ className: withBaseName("band"),
359
+ "data-band-position": position,
360
+ ref: getBandRef(position),
361
+ children: [
362
+ bandContent.map((contentArea) => /* @__PURE__ */ jsxRuntime.jsx(
363
+ ToolbarOverflow.ToolbarOverflowContent,
364
+ {
365
+ focusMemoryRef: keyboardNavigation.rememberedFocusRef,
366
+ getItemHostRef,
367
+ getItemRef,
368
+ getNamedTriggerRef,
369
+ getContentRef,
370
+ onItemFocus: keyboardNavigation.rememberItemFocus,
371
+ overflowGroups: namedOverflowGroups.filter(
372
+ (group) => group.contentKey === contentArea.key
373
+ ),
374
+ overflowedIds,
375
+ content: contentArea
376
+ },
377
+ contentArea.key
378
+ )),
379
+ position === "end" ? sharedOverflowGroups.map((group) => /* @__PURE__ */ jsxRuntime.jsx(
380
+ ToolbarOverflow.ToolbarOverflowMenu,
381
+ {
382
+ focusMemoryRef: keyboardNavigation.rememberedFocusRef,
383
+ getItemHostRef,
384
+ group,
385
+ onItemFocus: keyboardNavigation.rememberItemFocus
386
+ },
387
+ group.id
388
+ )) : null
389
+ ]
390
+ },
391
+ position
392
+ );
393
+ })
394
+ ] })
395
+ }
396
+ );
397
+ }
398
+ );
399
+
400
+ exports.Toolbar = Toolbar;
401
+ //# sourceMappingURL=Toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toolbar.js","sources":["../src/toolbar/Toolbar.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n cloneElement,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Button } from \"../button\";\nimport { makePrefixer, useForkRef, useIsomorphicLayoutEffect } from \"../utils\";\nimport toolbarCss from \"./Toolbar.css\";\nimport type { ToolbarContentProps } from \"./ToolbarContent\";\nimport {\n type ToolbarItemHostKind,\n ToolbarOverflowContent,\n ToolbarOverflowMenu,\n ToolbarOverflowOwners,\n ToolbarOverflowTriggerContent,\n} from \"./ToolbarOverflow\";\nimport { ToolbarOverflowFloatingBoundaryProvider } from \"./ToolbarOverflowFloatingBoundary\";\nimport { TOOLBAR_SCOPE_ROOT_ATTR } from \"./toolbarKeyboardUtils\";\nimport {\n normalizeToolbarChildren,\n type ToolbarOverflowItem,\n} from \"./toolbarUtils\";\nimport { useToolbarKeyboardNavigation } from \"./useToolbarKeyboardNavigation\";\nimport { useToolbarOverflow } from \"./useToolbarOverflow\";\n\nexport interface ToolbarProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Visual treatment of the toolbar. Defaults to `\"bordered\"`.\n */\n appearance?: \"bordered\" | \"transparent\";\n /**\n * Styling variant. Defaults to `\"primary\"`.\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n}\n\ntype ToolbarContentPosition = ToolbarContentProps[\"position\"];\n\nconst withBaseName = makePrefixer(\"saltToolbar\");\nconst withOverflowBaseName = makePrefixer(\"saltToolbarOverflow\");\nconst bandPositions: ToolbarContentPosition[] = [\"start\", \"center\", \"end\"];\n\ntype ToolbarItemHostNodes = Partial<\n Record<ToolbarItemHostKind, HTMLDivElement | null>\n>;\n\nfunction cloneMeasureDecorations(\n itemId: string,\n slot: \"leading\" | \"trailing\",\n decorations: ToolbarOverflowItem[\"leadingDecorations\"],\n) {\n return decorations.map((decoration, index) => {\n return cloneElement(decoration, {\n key: `${itemId}-${slot}-measurement-${String(decoration.key ?? index)}`,\n });\n });\n}\n\nexport const Toolbar = forwardRef<HTMLDivElement, ToolbarProps>(\n function Toolbar(\n {\n children,\n className,\n onBlurCapture,\n onFocusCapture,\n onKeyDownCapture,\n onPointerDownCapture,\n appearance = \"bordered\",\n variant = \"primary\",\n ...rest\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-toolbar\",\n css: toolbarCss,\n window: targetWindow,\n });\n\n const { mode, content } = normalizeToolbarChildren(children);\n const overflowContent = useMemo(\n () => normalizeToolbarChildren(children).content,\n [children],\n );\n\n const allItems = useMemo(\n () => content.flatMap((contentArea) => contentArea.items),\n [content],\n );\n\n const {\n containerRef,\n getBandRef,\n getItemRef,\n getNamedTriggerMeasureRef,\n getNamedTriggerRef,\n getContentRef,\n getTriggerMeasureRef,\n overflowGroups,\n overflowTriggerGroups,\n overflowedIds,\n } = useToolbarOverflow({ content: overflowContent });\n\n const handleRef = useForkRef(ref, containerRef);\n const invalidCompositionWarnedRef = useRef(false);\n const itemHostRefCallbacks = useRef(\n new Map<string, (node: HTMLDivElement | null) => void>(),\n );\n const [itemHostNodes, setItemHostNodes] = useState<\n Record<string, ToolbarItemHostNodes>\n >({});\n\n const sharedOverflowGroups = useMemo(\n () => overflowGroups.filter((group) => !group.named),\n [overflowGroups],\n );\n\n const namedOverflowGroups = useMemo(\n () => overflowGroups.filter((group) => group.named),\n [overflowGroups],\n );\n\n const overflowTriggerGroupByKey = useMemo(\n () =>\n new Map(\n overflowTriggerGroups.map((group) => [group.key, group] as const),\n ),\n [overflowTriggerGroups],\n );\n\n const namedTriggerMeasureItems = useMemo(\n () =>\n allItems.filter((item) => {\n return (\n item.overflowMode !== \"none\" && item.overflowGroup !== \"shared\"\n );\n }),\n [allItems],\n );\n\n const bandsByPosition = useMemo(() => {\n return bandPositions.reduce<\n Record<ToolbarContentPosition, typeof content>\n >(\n (bands, position) => {\n bands[position] = content.filter(\n (contentArea) => contentArea.position === position,\n );\n return bands;\n },\n {\n start: [],\n center: [],\n end: [],\n },\n );\n }, [content]);\n const hasCenteredLayout = bandsByPosition.center.length > 0;\n const keyboardNavigation = useToolbarKeyboardNavigation({\n items: allItems,\n overflowedIds,\n scopeRef: containerRef,\n });\n const overflowedIdsKey = useMemo(\n () => Array.from(overflowedIds).sort().join(\"\\0\"),\n [overflowedIds],\n );\n const previousOverflowedIdsKeyRef = useRef(overflowedIdsKey);\n\n const getItemHostRef = useCallback(\n (id: string, kind: ToolbarItemHostKind) => {\n const callbackKey = `${id}:${kind}`;\n const existing = itemHostRefCallbacks.current.get(callbackKey);\n\n if (existing) {\n return existing;\n }\n\n const callback = (node: HTMLDivElement | null) => {\n setItemHostNodes((previous) => {\n if (previous[id]?.[kind] === node) {\n return previous;\n }\n\n return {\n ...previous,\n [id]: {\n ...previous[id],\n [kind]: node,\n },\n };\n });\n };\n\n itemHostRefCallbacks.current.set(callbackKey, callback);\n return callback;\n },\n [],\n );\n\n const itemOwnerHostNodes = useMemo(() => {\n return allItems.reduce<Record<string, HTMLDivElement | null>>(\n (hosts, item) => {\n const nodes = itemHostNodes[item.id];\n\n hosts[item.id] =\n nodes?.overflow ?? nodes?.main ?? nodes?.measurement ?? null;\n return hosts;\n },\n {},\n );\n }, [allItems, itemHostNodes]);\n\n const overflowedMeasurementItems = useMemo(() => {\n return allItems.filter((item) => {\n return overflowedIds.has(item.id) && !itemHostNodes[item.id]?.overflow;\n });\n }, [allItems, itemHostNodes, overflowedIds]);\n\n useIsomorphicLayoutEffect(() => {\n const overflowChanged =\n previousOverflowedIdsKeyRef.current !== overflowedIdsKey;\n previousOverflowedIdsKeyRef.current = overflowedIdsKey;\n\n if (!overflowChanged) {\n return;\n }\n\n const doc = targetWindow?.document;\n const rememberedFocus = keyboardNavigation.rememberedFocusRef.current;\n\n if (!doc || !rememberedFocus) {\n return;\n }\n\n const activeElement = doc.activeElement;\n const focusWasLost =\n !activeElement ||\n activeElement === doc.body ||\n activeElement === doc.documentElement ||\n !activeElement.isConnected;\n const target = keyboardNavigation.getEntryFocusable();\n\n if (!focusWasLost) {\n return;\n }\n\n if (!target) {\n return;\n }\n\n const focusTarget = () => {\n if (target.isConnected) {\n target.focus({ preventScroll: true });\n }\n };\n\n if (targetWindow?.requestAnimationFrame) {\n const frame = targetWindow.requestAnimationFrame(focusTarget);\n\n return () => {\n targetWindow.cancelAnimationFrame(frame);\n };\n }\n\n queueMicrotask(focusTarget);\n }, [\n keyboardNavigation.getEntryFocusable,\n keyboardNavigation.rememberedFocusRef,\n overflowedIdsKey,\n targetWindow,\n ]);\n\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n if (mode === \"invalid\" && !invalidCompositionWarnedRef.current) {\n console.warn(\n \"Toolbar children must be authored in one composition model: either Tooltray/Divider children directly in Toolbar, or ToolbarContent children containing Tooltray/Divider items.\",\n );\n invalidCompositionWarnedRef.current = true;\n }\n\n if (mode !== \"invalid\") {\n invalidCompositionWarnedRef.current = false;\n }\n }\n }, [mode]);\n\n return (\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"fallback\")]: mode === \"invalid\",\n [withBaseName(\"layout\")]: mode !== \"invalid\",\n },\n withBaseName(variant),\n withBaseName(appearance),\n className,\n )}\n {...rest}\n data-centered={mode !== \"invalid\" && hasCenteredLayout ? \"\" : undefined}\n data-mode={mode}\n {...{ [TOOLBAR_SCOPE_ROOT_ATTR]: \"main\" }}\n ref={handleRef}\n onBlurCapture={(event) => {\n keyboardNavigation.handleBlurCapture(event);\n onBlurCapture?.(event);\n }}\n onFocusCapture={(event) => {\n keyboardNavigation.handleFocusCapture(event);\n onFocusCapture?.(event);\n }}\n onKeyDownCapture={(event) => {\n keyboardNavigation.handleKeyDownCapture(event);\n onKeyDownCapture?.(event);\n }}\n onPointerDownCapture={(event) => {\n keyboardNavigation.handlePointerDownCapture(event);\n onPointerDownCapture?.(event);\n }}\n role=\"toolbar\"\n aria-orientation=\"horizontal\"\n >\n {mode === \"invalid\" ? (\n children\n ) : (\n <ToolbarOverflowFloatingBoundaryProvider>\n <ToolbarOverflowOwners\n hostNodes={itemOwnerHostNodes}\n items={allItems}\n />\n <div aria-hidden className={withBaseName(\"measurements\")}>\n {overflowTriggerGroups\n .filter((group) => !group.named)\n .map((group) => (\n <Button\n appearance=\"transparent\"\n className={withBaseName(\"measureTrigger\")}\n key={group.id}\n ref={getTriggerMeasureRef(group.key)}\n sentiment=\"neutral\"\n tabIndex={-1}\n >\n <ToolbarOverflowTriggerContent\n label={group.label}\n named={group.named}\n />\n </Button>\n ))}\n {namedTriggerMeasureItems.map((item) => {\n const group = overflowTriggerGroupByKey.get(\n item.overflowGroupKey,\n );\n\n if (!group) {\n return null;\n }\n\n return (\n <div\n className={withOverflowBaseName(\"slot\")}\n key={`measure-${item.id}`}\n ref={getNamedTriggerMeasureRef(item.id)}\n >\n {cloneMeasureDecorations(\n item.id,\n \"leading\",\n item.leadingDecorations,\n )}\n <div className={withOverflowBaseName(\"item\")}>\n <Button\n appearance=\"transparent\"\n className={withOverflowBaseName(\"trigger\")}\n sentiment=\"neutral\"\n tabIndex={-1}\n >\n <ToolbarOverflowTriggerContent\n label={group.label}\n named={group.named}\n />\n </Button>\n </div>\n </div>\n );\n })}\n {overflowedMeasurementItems.map((item) => (\n <div\n className={withOverflowBaseName(\"slot\")}\n key={`measure-item-${item.id}`}\n ref={getItemRef(item.id)}\n >\n {cloneMeasureDecorations(\n item.id,\n \"leading\",\n item.leadingDecorations,\n )}\n <div className={withOverflowBaseName(\"item\")}>\n <div\n className={withOverflowBaseName(\"itemHost\")}\n ref={getItemHostRef(item.id, \"measurement\")}\n />\n </div>\n {cloneMeasureDecorations(\n item.id,\n \"trailing\",\n item.trailingDecorations,\n )}\n </div>\n ))}\n </div>\n {bandPositions.map((position) => {\n const bandContent = bandsByPosition[position];\n const shouldRenderBand = hasCenteredLayout\n ? true\n : position === \"end\"\n ? bandContent.length > 0 || sharedOverflowGroups.length > 0\n : bandContent.length > 0;\n\n if (!shouldRenderBand) {\n return null;\n }\n\n return (\n <div\n className={withBaseName(\"band\")}\n data-band-position={position}\n key={position}\n ref={getBandRef(position)}\n >\n {bandContent.map((contentArea) => (\n <ToolbarOverflowContent\n focusMemoryRef={keyboardNavigation.rememberedFocusRef}\n getItemHostRef={getItemHostRef}\n getItemRef={getItemRef}\n getNamedTriggerRef={getNamedTriggerRef}\n getContentRef={getContentRef}\n key={contentArea.key}\n onItemFocus={keyboardNavigation.rememberItemFocus}\n overflowGroups={namedOverflowGroups.filter(\n (group) => group.contentKey === contentArea.key,\n )}\n overflowedIds={overflowedIds}\n content={contentArea}\n />\n ))}\n {position === \"end\"\n ? sharedOverflowGroups.map((group) => (\n <ToolbarOverflowMenu\n focusMemoryRef={keyboardNavigation.rememberedFocusRef}\n getItemHostRef={getItemHostRef}\n group={group}\n key={group.id}\n onItemFocus={keyboardNavigation.rememberItemFocus}\n />\n ))\n : null}\n </div>\n );\n })}\n </ToolbarOverflowFloatingBoundaryProvider>\n )}\n </div>\n );\n },\n);\n"],"names":["makePrefixer","cloneElement","forwardRef","Toolbar","useWindow","useComponentCssInjection","toolbarCss","normalizeToolbarChildren","useMemo","useToolbarOverflow","useForkRef","useRef","useState","useToolbarKeyboardNavigation","useCallback","useIsomorphicLayoutEffect","useEffect","jsx","clsx","TOOLBAR_SCOPE_ROOT_ATTR","jsxs","ToolbarOverflowFloatingBoundaryProvider","ToolbarOverflowOwners","Button","ToolbarOverflowTriggerContent","ToolbarOverflowContent","ToolbarOverflowMenu"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltToolbarContent {\n display: flex;\n align-items: center;\n gap: var(--salt-spacing-100);\n min-width: 0;\n flex-shrink: 0;\n}\n\n.saltToolbarContent[data-position=\"start\"] {\n justify-content: flex-start;\n}\n\n.saltToolbarContent[data-position=\"center\"] {\n justify-content: center;\n}\n\n.saltToolbarContent[data-position=\"end\"] {\n justify-content: flex-end;\n}\n\n.saltToolbarContent[data-implicit] > .saltTooltray[data-align=\"center\"],\n.saltToolbarContent[data-implicit] > .saltTooltray[data-align=\"end\"] {\n margin-inline-start: 0;\n margin-inline-end: 0;\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=ToolbarContent.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolbarContent.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}