@weasel-js/ui 1.0.0 → 1.0.2

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 (119) hide show
  1. package/dist/chunks/ActionsBar-9aR5N3lU.js +41 -0
  2. package/dist/chunks/ActionsBar-9aR5N3lU.js.map +1 -0
  3. package/dist/chunks/{Callout-CxxrEcSb.js → Callout-CFqG5xho.js} +1 -1
  4. package/dist/chunks/{Callout-CxxrEcSb.js.map → Callout-CFqG5xho.js.map} +1 -1
  5. package/dist/chunks/{Checkbox-Cf6YHVWV.js → Checkbox-KQ5L8APP.js} +1 -1
  6. package/dist/chunks/{Checkbox-Cf6YHVWV.js.map → Checkbox-KQ5L8APP.js.map} +1 -1
  7. package/dist/chunks/{ColorField-sGLnThpB.js → ColorField-ykpiD3XU.js} +1 -1
  8. package/dist/chunks/{ColorField-sGLnThpB.js.map → ColorField-ykpiD3XU.js.map} +1 -1
  9. package/dist/chunks/{ComboBox-EnV1IytN.js → ComboBox-DpxsFVBy.js} +2 -2
  10. package/dist/chunks/{ComboBox-EnV1IytN.js.map → ComboBox-DpxsFVBy.js.map} +1 -1
  11. package/dist/chunks/{CurveEditor-DAb2EMyR.js → CurveEditor-fRctbmoV.js} +1 -1
  12. package/dist/chunks/{CurveEditor-DAb2EMyR.js.map → CurveEditor-fRctbmoV.js.map} +1 -1
  13. package/dist/chunks/{Dialog-CQymDCAl.js → Dialog-3FCd_gYi.js} +1 -1
  14. package/dist/chunks/{Dialog-CQymDCAl.js.map → Dialog-3FCd_gYi.js.map} +1 -1
  15. package/dist/chunks/{Field-BHSu2F3E.js → Field-VQwmrIna.js} +1 -1
  16. package/dist/chunks/{Field-BHSu2F3E.js.map → Field-VQwmrIna.js.map} +1 -1
  17. package/dist/chunks/{GradientEditor-Co9aGyRe.js → GradientEditor-BL5kg7a_.js} +3 -3
  18. package/dist/chunks/{GradientEditor-Co9aGyRe.js.map → GradientEditor-BL5kg7a_.js.map} +1 -1
  19. package/dist/chunks/{Input-qk44ESKC.js → Input-DpkwYtUY.js} +2 -2
  20. package/dist/chunks/{Input-qk44ESKC.js.map → Input-DpkwYtUY.js.map} +1 -1
  21. package/dist/chunks/{NumberField-CYhQeWoM.js → NumberField-BbzI0GtU.js} +2 -2
  22. package/dist/chunks/{NumberField-CYhQeWoM.js.map → NumberField-BbzI0GtU.js.map} +1 -1
  23. package/dist/chunks/OptionsBar-CHvH4n4u.js +45 -0
  24. package/dist/chunks/OptionsBar-CHvH4n4u.js.map +1 -0
  25. package/dist/chunks/{PointPlotter-EkbCBK9j.js → PointPlotter-R8hguJPq.js} +2 -2
  26. package/dist/chunks/{PointPlotter-EkbCBK9j.js.map → PointPlotter-R8hguJPq.js.map} +1 -1
  27. package/dist/chunks/{Powerline-Bg9M5oBK.js → Powerline-Dd9Ukhcl.js} +1 -1
  28. package/dist/chunks/{Powerline-Bg9M5oBK.js.map → Powerline-Dd9Ukhcl.js.map} +1 -1
  29. package/dist/chunks/{Prefs-DZjXp2Ln.js → Prefs-lgI4x4jF.js} +10 -10
  30. package/dist/chunks/{Prefs-DZjXp2Ln.js.map → Prefs-lgI4x4jF.js.map} +1 -1
  31. package/dist/chunks/{RadioGroup-rL2i3afr.js → RadioGroup-CIpHr3g6.js} +2 -2
  32. package/dist/chunks/{RadioGroup-rL2i3afr.js.map → RadioGroup-CIpHr3g6.js.map} +1 -1
  33. package/dist/chunks/{RangeSlider-DPldYd4O.js → RangeSlider-CaDogGTj.js} +1 -1
  34. package/dist/chunks/{RangeSlider-DPldYd4O.js.map → RangeSlider-CaDogGTj.js.map} +1 -1
  35. package/dist/chunks/{ResizeHandle-DR8X229y.js → ResizeHandle-CCQ2y87y.js} +1 -1
  36. package/dist/chunks/{ResizeHandle-DR8X229y.js.map → ResizeHandle-CCQ2y87y.js.map} +1 -1
  37. package/dist/chunks/{Select-vSeAbspK.js → Select-BE3Y1NrH.js} +2 -2
  38. package/dist/chunks/{Select-vSeAbspK.js.map → Select-BE3Y1NrH.js.map} +1 -1
  39. package/dist/chunks/{SelectionPanel-1mmALQba.js → SelectionPanel-Zaw8tYQH.js} +6 -6
  40. package/dist/chunks/{SelectionPanel-1mmALQba.js.map → SelectionPanel-Zaw8tYQH.js.map} +1 -1
  41. package/dist/chunks/{Sidebar-CigrFvpL.js → Sidebar-DP_nyJze.js} +1 -1
  42. package/dist/chunks/{Sidebar-CigrFvpL.js.map → Sidebar-DP_nyJze.js.map} +1 -1
  43. package/dist/chunks/{SidebarPanel-C0w16BrF.js → SidebarPanel-BpD0ptyg.js} +1 -1
  44. package/dist/chunks/{SidebarPanel-C0w16BrF.js.map → SidebarPanel-BpD0ptyg.js.map} +1 -1
  45. package/dist/chunks/{StatusBar-lt_Ok6WK.js → StatusBar-DBO0E0Yd.js} +1 -1
  46. package/dist/chunks/{StatusBar-lt_Ok6WK.js.map → StatusBar-DBO0E0Yd.js.map} +1 -1
  47. package/dist/chunks/{Switch-BYj762hm.js → Switch-JyVSSAzC.js} +1 -1
  48. package/dist/chunks/{Switch-BYj762hm.js.map → Switch-JyVSSAzC.js.map} +1 -1
  49. package/dist/chunks/{Tabs-DOW5jtnq.js → Tabs-Df0sDomx.js} +1 -1
  50. package/dist/chunks/{Tabs-DOW5jtnq.js.map → Tabs-Df0sDomx.js.map} +1 -1
  51. package/dist/chunks/{Toast-DLM2AsTz.js → Toast-DFw4IrD_.js} +1 -1
  52. package/dist/chunks/{Toast-DLM2AsTz.js.map → Toast-DFw4IrD_.js.map} +1 -1
  53. package/dist/chunks/ToggleBar-BP1zFcvg.js +74 -0
  54. package/dist/chunks/ToggleBar-BP1zFcvg.js.map +1 -0
  55. package/dist/chunks/{ToolButton-5L1sAlJC.js → ToolButton-DpT-mukU.js} +6 -5
  56. package/dist/chunks/ToolButton-DpT-mukU.js.map +1 -0
  57. package/dist/chunks/{ToolGroup-BAthcF5H.js → ToolGroup-BTIwd4U4.js} +1 -1
  58. package/dist/chunks/{ToolGroup-BAthcF5H.js.map → ToolGroup-BTIwd4U4.js.map} +1 -1
  59. package/dist/chunks/{ToolOptionsBar-D4xmXa_a.js → ToolOptionsBar-JvmY7iNe.js} +1 -1
  60. package/dist/chunks/{ToolOptionsBar-D4xmXa_a.js.map → ToolOptionsBar-JvmY7iNe.js.map} +1 -1
  61. package/dist/chunks/{ToolPalette-BDkvV3pJ.js → ToolPalette-DPn0owno.js} +27 -47
  62. package/dist/chunks/ToolPalette-DPn0owno.js.map +1 -0
  63. package/dist/chunks/segmentedControl.module-DCyuDbj1.js +11 -0
  64. package/dist/chunks/segmentedControl.module-DCyuDbj1.js.map +1 -0
  65. package/dist/chunks/useRovingTabIndex-DBZtq4IH.js +65 -0
  66. package/dist/chunks/useRovingTabIndex-DBZtq4IH.js.map +1 -0
  67. package/dist/components/ActionsBar/ActionsBar.d.ts.map +1 -1
  68. package/dist/components/ActionsBar/index.js +1 -1
  69. package/dist/components/Callout/index.js +1 -1
  70. package/dist/components/Checkbox/index.js +1 -1
  71. package/dist/components/ColorField/index.js +1 -1
  72. package/dist/components/ComboBox/index.js +1 -1
  73. package/dist/components/CurveEditor/index.js +1 -1
  74. package/dist/components/Dialog/index.js +1 -1
  75. package/dist/components/Field/index.js +1 -1
  76. package/dist/components/GradientEditor/index.js +1 -1
  77. package/dist/components/Input/index.js +1 -1
  78. package/dist/components/NumberField/index.js +1 -1
  79. package/dist/components/OptionsBar/OptionsBar.d.ts.map +1 -1
  80. package/dist/components/OptionsBar/index.js +1 -1
  81. package/dist/components/PointPlotter/index.js +1 -1
  82. package/dist/components/Powerline/index.js +1 -1
  83. package/dist/components/Prefs/index.js +1 -1
  84. package/dist/components/RadioGroup/index.js +1 -1
  85. package/dist/components/RangeSlider/index.js +1 -1
  86. package/dist/components/ResizeHandle/index.js +1 -1
  87. package/dist/components/Select/index.js +1 -1
  88. package/dist/components/SelectionPanel/index.js +1 -1
  89. package/dist/components/Sidebar/index.js +1 -1
  90. package/dist/components/SidebarPanel/index.js +1 -1
  91. package/dist/components/StatusBar/index.js +1 -1
  92. package/dist/components/Switch/index.js +1 -1
  93. package/dist/components/Tabs/index.js +1 -1
  94. package/dist/components/Toast/index.js +1 -1
  95. package/dist/components/ToggleBar/ToggleBar.d.ts.map +1 -1
  96. package/dist/components/ToggleBar/index.js +1 -1
  97. package/dist/components/ToolButton/ToolButton.d.ts +4 -1
  98. package/dist/components/ToolButton/ToolButton.d.ts.map +1 -1
  99. package/dist/components/ToolButton/index.js +1 -1
  100. package/dist/components/ToolGroup/index.js +1 -1
  101. package/dist/components/ToolOptionsBar/index.js +1 -1
  102. package/dist/components/ToolPalette/ToolPalette.d.ts.map +1 -1
  103. package/dist/components/ToolPalette/index.js +1 -1
  104. package/dist/index.d.ts +2 -0
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +38 -37
  107. package/dist/index.js.map +1 -1
  108. package/dist/style.css +1 -1
  109. package/dist/useRovingTabIndex.d.ts +52 -0
  110. package/dist/useRovingTabIndex.d.ts.map +1 -0
  111. package/package.json +2 -2
  112. package/dist/chunks/ActionsBar-CzU6Of3B.js +0 -94
  113. package/dist/chunks/ActionsBar-CzU6Of3B.js.map +0 -1
  114. package/dist/chunks/OptionsBar-CHOP_CiW.js +0 -98
  115. package/dist/chunks/OptionsBar-CHOP_CiW.js.map +0 -1
  116. package/dist/chunks/ToggleBar-Defj6Asn.js +0 -129
  117. package/dist/chunks/ToggleBar-Defj6Asn.js.map +0 -1
  118. package/dist/chunks/ToolButton-5L1sAlJC.js.map +0 -1
  119. package/dist/chunks/ToolPalette-BDkvV3pJ.js.map +0 -1
@@ -1,15 +1,17 @@
1
1
  import { t as e } from "./keyGlyph-BDH5fqkO.js";
2
- import { t } from "./ToolButton-5L1sAlJC.js";
3
- import { t as n } from "./ToolGroup-BAthcF5H.js";
4
- import { Fragment as r, useRef as i } from "react";
2
+ import { t } from "./useRovingTabIndex-DBZtq4IH.js";
3
+ import { t as n } from "./ToolButton-DpT-mukU.js";
4
+ import { t as r } from "./ToolGroup-BTIwd4U4.js";
5
+ import { Fragment as i } from "react";
5
6
  import { UnknownIcon as a } from "@weasel-js/core";
6
7
  import { jsx as o, jsxs as s } from "react/jsx-runtime";
7
8
  import { eligibleContribution as c } from "@weasel-js/modes";
8
9
  var l = {
9
- palette: "_palette_1ntz3_1",
10
- horizontal: "_horizontal_1ntz3_11",
11
- ineligibleBtn: "_ineligibleBtn_1ntz3_16",
12
- separator: "_separator_1ntz3_21"
10
+ palette: "_palette_1mz1c_1",
11
+ horizontal: "_horizontal_1mz1c_11",
12
+ paletteBtn: "_paletteBtn_1mz1c_17",
13
+ ineligibleBtn: "_ineligibleBtn_1mz1c_20",
14
+ separator: "_separator_1mz1c_25"
13
15
  };
14
16
  //#endregion
15
17
  //#region src/components/ToolPalette/formatShortcut.ts
@@ -54,58 +56,36 @@ function _(e) {
54
56
  l.palette,
55
57
  u === "horizontal" && l.horizontal,
56
58
  p
57
- ].filter(Boolean).join(" "), C = x.flatMap((e) => b.get(e).map((e) => e.id)), w = a.active && C.includes(a.active) ? a.active : C[0], T = i(null);
58
- function E(e) {
59
- let t = e.target;
60
- if (t.tagName !== "BUTTON") return;
61
- let n = T.current;
62
- if (!n) return;
63
- let r = Array.from(n.querySelectorAll("button")), i = r.indexOf(t);
64
- if (i < 0) return;
65
- let a = -1;
66
- switch (e.key) {
67
- case "ArrowDown":
68
- case "ArrowRight":
69
- a = (i + 1) % r.length;
70
- break;
71
- case "ArrowUp":
72
- case "ArrowLeft":
73
- a = (i - 1 + r.length) % r.length;
74
- break;
75
- case "Home":
76
- a = 0;
77
- break;
78
- case "End":
79
- a = r.length - 1;
80
- break;
81
- }
82
- a >= 0 && (e.preventDefault(), r[a].focus());
83
- }
59
+ ].filter(Boolean).join(" "), C = x.flatMap((e) => b.get(e)), w = C.map((e) => v ? c(v, e) : !0), T = C.findIndex((e) => e.id === a.active), E = t({
60
+ items: w.map((e) => ({ disabled: !e })),
61
+ itemClassName: l.paletteBtn,
62
+ ...T >= 0 && w[T] ? { tabStopIndex: T } : {}
63
+ }), D = -1;
84
64
  return /* @__PURE__ */ o("div", {
85
- ref: T,
65
+ ref: E.rootRef,
86
66
  className: S,
87
67
  role: "toolbar",
88
68
  "aria-label": "Tools",
89
- onKeyDown: E,
90
- children: x.map((e, i) => /* @__PURE__ */ s(r, { children: [i > 0 && /* @__PURE__ */ o("div", {
69
+ children: x.map((e, t) => /* @__PURE__ */ s(i, { children: [t > 0 && /* @__PURE__ */ o("div", {
91
70
  className: l.separator,
92
71
  role: "separator",
93
72
  "aria-orientation": u === "horizontal" ? "vertical" : "horizontal"
94
- }), /* @__PURE__ */ o(n, {
73
+ }), /* @__PURE__ */ o(r, {
95
74
  orientation: u,
96
75
  groupKey: e,
97
76
  children: b.get(e).map((e) => {
98
- let n = e.presentation?.label ?? e.id, r = e.presentation?.shortcut ?? d(_ ? _(e.id) : e.keybinding), i = v ? c(v, e) : !0, s = v ? v.current().id : void 0, u = !i && s ? `${n}${r ? ` (${r})` : ""} — disabled in ${s} mode` : void 0;
99
- return /* @__PURE__ */ o(t, {
77
+ let t = ++D, r = e.presentation?.label ?? e.id, i = e.presentation?.shortcut ?? d(_ ? _(e.id) : e.keybinding), s = w[t], c = v ? v.current().id : void 0, u = !s && c ? `${r}${i ? ` (${i})` : ""} — disabled in ${c} mode` : void 0;
78
+ return /* @__PURE__ */ o(n, {
100
79
  icon: g(e),
101
- label: n,
102
- shortcut: r,
80
+ label: r,
81
+ shortcut: i,
103
82
  active: a.active === e.id,
104
- tabbable: e.id === w,
105
- ariaDisabled: !i,
106
- className: i ? void 0 : l.ineligibleBtn,
83
+ tabbable: E.tabIndexFor(t) === 0,
84
+ ariaDisabled: !s,
85
+ className: [l.paletteBtn, !s && l.ineligibleBtn].filter(Boolean).join(" "),
107
86
  title: u,
108
- onClick: i ? () => a.setActive(e.id) : () => {}
87
+ onClick: s ? () => a.setActive(e.id) : () => {},
88
+ onKeyDown: E.onKeyDown(t)
109
89
  }, e.id);
110
90
  })
111
91
  })] }, e))
@@ -114,4 +94,4 @@ function _(e) {
114
94
  //#endregion
115
95
  export { d as n, u as r, _ as t };
116
96
 
117
- //# sourceMappingURL=ToolPalette-BDkvV3pJ.js.map
97
+ //# sourceMappingURL=ToolPalette-DPn0owno.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolPalette-DPn0owno.js","names":[],"sources":["../../src/components/ToolPalette/ToolPalette.module.css","../../src/components/ToolPalette/formatShortcut.ts","../../src/components/ToolPalette/ToolPalette.tsx"],"sourcesContent":[".palette {\n display: flex;\n flex-direction: column;\n gap: 4px;\n background: var(--wzl-surface);\n border: 1px solid var(--wzl-border);\n border-radius: 4px;\n padding: 4px;\n user-select: none;\n}\n.palette.horizontal {\n flex-direction: row;\n}\n\n/* Marker only — `useRovingTabIndex` finds the palette's buttons by this class.\n Carries no styles; deleting it breaks keyboard navigation. */\n.paletteBtn {}\n\n/* Applied to ineligible tool buttons in the active mode. */\n.ineligibleBtn {\n opacity: 0.35;\n cursor: not-allowed;\n}\n\n.separator {\n background: var(--wzl-border);\n}\n.palette:not(.horizontal) .separator {\n height: 1px;\n margin: 2px 0;\n}\n.palette.horizontal .separator {\n width: 1px;\n margin: 0 2px;\n}\n","import { keyGlyph } from '../Keycaps/keyGlyph';\n\nexport interface ShortcutInput {\n key: string | readonly string[];\n mod?: boolean;\n alt?: boolean;\n shift?: boolean | 'optional';\n}\n\n/** Format a shortcut as an array of display chips, one per key — modifier\n * icons (⌘, ↑, ⌥) followed by the key glyph. UIs that want a boxed\n * per-key look render each chip in its own element. `shift: 'optional'` is\n * treated as falsy. */\nexport function formatShortcutParts(b: ShortcutInput | undefined): readonly string[] | undefined {\n if (!b) return undefined;\n const rawKey = Array.isArray(b.key) ? b.key[0] : (b.key as string);\n const parts: string[] = [];\n if (b.mod) parts.push('⌘');\n if (b.shift === true) parts.push('⇧');\n if (b.alt) parts.push('⌥');\n parts.push(keyGlyph(rawKey));\n return parts;\n}\n\n/** Format a shortcut as a single display string. Order: mod, shift, alt,\n * key. Returns `undefined` for `undefined` input so callers can `??` a\n * fallback. When `key` is an array, the first element is used. `shift: 'optional'`\n * is treated as falsy. */\nexport function formatShortcut(b: ShortcutInput | undefined): string | undefined {\n const parts = formatShortcutParts(b);\n return parts ? parts.join('') : undefined;\n}\n","import { Fragment, type ReactNode } from 'react';\nimport { UnknownIcon } from '@weasel-js/core';\nimport type { AnyTool, ToolsApi } from '@weasel-js/core';\nimport { eligibleContribution, type ModeRegistry } from '@weasel-js/modes';\nimport { ToolButton } from '../ToolButton';\nimport { ToolGroup } from '../ToolGroup';\nimport { useRovingTabIndex } from '../../useRovingTabIndex';\nimport s from './ToolPalette.module.css';\nimport { formatShortcut, type ShortcutInput } from './formatShortcut';\n\nconst DEFAULT_GROUP_ORDER = ['select', 'shape', 'draw', 'type', 'view'] as const;\nconst MISC = 'misc';\n\nfunction partitionByGroup(list: AnyTool[]): Map<string, AnyTool[]> {\n const groups = new Map<string, AnyTool[]>();\n for (const tool of list) {\n const g = tool.presentation?.group ?? MISC;\n const bucket = groups.get(g) ?? [];\n bucket.push(tool);\n groups.set(g, bucket);\n }\n return groups;\n}\n\nfunction orderedGroupKeys(\n groups: Map<string, AnyTool[]>,\n groupOrder: readonly string[],\n): string[] {\n const seen = new Set(groups.keys());\n const ordered: string[] = [];\n for (const known of groupOrder) {\n if (seen.has(known)) {\n ordered.push(known);\n seen.delete(known);\n }\n }\n // Unknown groups in insertion order (Map preserves it), misc last.\n for (const key of groups.keys()) {\n if (seen.has(key) && key !== MISC) {\n ordered.push(key);\n seen.delete(key);\n }\n }\n if (seen.has(MISC)) ordered.push(MISC);\n return ordered;\n}\n\nfunction resolveIcon(tool: AnyTool): ReactNode {\n const rawIcon = tool.presentation?.icon;\n if (rawIcon == null) return <UnknownIcon />;\n if (typeof rawIcon === 'function') return rawIcon(undefined);\n return rawIcon;\n}\n\nexport interface ToolPaletteProps {\n tools: ToolsApi;\n orientation?: 'vertical' | 'horizontal';\n className?: string;\n /** Derive the keyboard shortcut for a tool button from the action registry.\n * Called with the tool's id; return `undefined` to suppress a chip. When\n * omitted, falls back to `tool.keybinding` (legacy path). */\n lookupShortcut?: (toolId: string) => ShortcutInput | undefined;\n /**\n * Optional mode registry. When provided, tools whose `capabilities` do not\n * match the current mode are rendered greyed-out, aria-disabled, and their\n * onClick is suppressed. When omitted, all tools are treated as eligible\n * (preserves existing behaviour in consumers that haven't wired a registry).\n */\n modeRegistry?: ModeRegistry;\n /**\n * Presentation-group display order. Groups not listed keep their registry\n * insertion order after the listed ones; `misc` always renders last.\n * Defaults to `['select', 'shape', 'draw', 'type', 'view']`.\n */\n groupOrder?: readonly string[];\n}\n\nexport function ToolPalette(props: ToolPaletteProps) {\n const {\n tools, orientation = 'vertical', className, lookupShortcut, modeRegistry,\n groupOrder = DEFAULT_GROUP_ORDER,\n } = props;\n const list = Object.values(tools.registry);\n const groups = partitionByGroup(list);\n const groupKeys = orderedGroupKeys(groups, groupOrder);\n const cls = [s.palette, orientation === 'horizontal' && s.horizontal, className]\n .filter(Boolean).join(' ');\n\n // Flat, in DOM order — the roving-tabindex hook indexes by this order.\n const ordered = groupKeys.flatMap((k) => groups.get(k)!);\n const eligibility = ordered.map(\n (tool) => (modeRegistry ? eligibleContribution(modeRegistry, tool) : true),\n );\n const activeIndex = ordered.findIndex((t) => t.id === tools.active);\n const roving = useRovingTabIndex({\n items: eligibility.map((enabled) => ({ disabled: !enabled })),\n itemClassName: s.paletteBtn,\n // An ineligible active tool can't hold the tab stop; fall back to the\n // hook's first-enabled default.\n ...(activeIndex >= 0 && eligibility[activeIndex] ? { tabStopIndex: activeIndex } : {}),\n });\n let index = -1;\n\n return (\n <div\n ref={roving.rootRef}\n className={cls}\n role=\"toolbar\"\n aria-label=\"Tools\"\n >\n {groupKeys.map((key, i) => (\n <Fragment key={key}>\n {i > 0 && (\n <div\n className={s.separator}\n role=\"separator\"\n aria-orientation={orientation === 'horizontal' ? 'vertical' : 'horizontal'}\n />\n )}\n <ToolGroup orientation={orientation} groupKey={key}>\n {groups.get(key)!.map((tool) => {\n const i = ++index;\n const label = tool.presentation?.label ?? tool.id;\n const shortcut = tool.presentation?.shortcut\n ?? formatShortcut(lookupShortcut ? lookupShortcut(tool.id) : tool.keybinding);\n const enabled = eligibility[i];\n const modeName = modeRegistry ? modeRegistry.current().id : undefined;\n const resolvedTitle = !enabled && modeName\n ? `${label}${shortcut ? ` (${shortcut})` : ''} — disabled in ${modeName} mode`\n : undefined;\n return (\n <ToolButton\n key={tool.id}\n icon={resolveIcon(tool)}\n label={label}\n shortcut={shortcut}\n active={tools.active === tool.id}\n tabbable={roving.tabIndexFor(i) === 0}\n ariaDisabled={!enabled}\n className={[s.paletteBtn, !enabled && s.ineligibleBtn].filter(Boolean).join(' ')}\n title={resolvedTitle}\n onClick={enabled ? () => tools.setActive(tool.id) : () => {}}\n onKeyDown={roving.onKeyDown(i)}\n />\n );\n })}\n </ToolGroup>\n </Fragment>\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;ACaA,SAAgB,EAAoB,GAA6D;AAC/F,KAAI,CAAC,EAAG;CACR,IAAM,IAAS,MAAM,QAAQ,EAAE,IAAI,GAAG,EAAE,IAAI,KAAM,EAAE,KAC9C,IAAkB,EAAE;AAK1B,QAJI,EAAE,OAAK,EAAM,KAAK,IAAI,EACtB,EAAE,UAAU,MAAM,EAAM,KAAK,IAAI,EACjC,EAAE,OAAK,EAAM,KAAK,IAAI,EAC1B,EAAM,KAAK,EAAS,EAAO,CAAC,EACrB;;AAOT,SAAgB,EAAe,GAAkD;CAC/E,IAAM,IAAQ,EAAoB,EAAE;AACpC,QAAO,IAAQ,EAAM,KAAK,GAAG,GAAG,KAAA;;;;ACpBlC,IAAM,IAAsB;CAAC;CAAU;CAAS;CAAQ;CAAQ;CAAO,EACjE,IAAO;AAEb,SAAS,EAAiB,GAAyC;CACjE,IAAM,oBAAS,IAAI,KAAwB;AAC3C,MAAK,IAAM,KAAQ,GAAM;EACvB,IAAM,IAAI,EAAK,cAAc,SAAS,GAChC,IAAS,EAAO,IAAI,EAAE,IAAI,EAAE;AAElC,EADA,EAAO,KAAK,EAAK,EACjB,EAAO,IAAI,GAAG,EAAO;;AAEvB,QAAO;;AAGT,SAAS,EACP,GACA,GACU;CACV,IAAM,IAAO,IAAI,IAAI,EAAO,MAAM,CAAC,EAC7B,IAAoB,EAAE;AAC5B,MAAK,IAAM,KAAS,EAClB,CAAI,EAAK,IAAI,EAAM,KACjB,EAAQ,KAAK,EAAM,EACnB,EAAK,OAAO,EAAM;AAItB,MAAK,IAAM,KAAO,EAAO,MAAM,CAC7B,CAAI,EAAK,IAAI,EAAI,IAAI,MAAQ,MAC3B,EAAQ,KAAK,EAAI,EACjB,EAAK,OAAO,EAAI;AAIpB,QADI,EAAK,IAAI,EAAK,IAAE,EAAQ,KAAK,EAAK,EAC/B;;AAGT,SAAS,EAAY,GAA0B;CAC7C,IAAM,IAAU,EAAK,cAAc;AAGnC,QAFI,KAAW,OAAa,kBAAC,GAAD,EAAe,CAAA,GACvC,OAAO,KAAY,aAAmB,EAAQ,KAAA,EAAU,GACrD;;AA0BT,SAAgB,EAAY,GAAyB;CACnD,IAAM,EACJ,UAAO,iBAAc,YAAY,cAAW,mBAAgB,iBAC5D,gBAAa,MACX,GAEE,IAAS,EADF,OAAO,OAAO,EAAM,SACD,CAAK,EAC/B,IAAY,EAAiB,GAAQ,EAAW,EAChD,IAAM;EAAC,EAAE;EAAS,MAAgB,gBAAgB,EAAE;EAAY;EAAU,CAC7E,OAAO,QAAQ,CAAC,KAAK,IAAI,EAGtB,IAAU,EAAU,SAAS,MAAM,EAAO,IAAI,EAAE,CAAE,EAClD,IAAc,EAAQ,KACzB,MAAU,IAAe,EAAqB,GAAc,EAAK,GAAG,GACtE,EACK,IAAc,EAAQ,WAAW,MAAM,EAAE,OAAO,EAAM,OAAO,EAC7D,IAAS,EAAkB;EAC/B,OAAO,EAAY,KAAK,OAAa,EAAE,UAAU,CAAC,GAAS,EAAE;EAC7D,eAAe,EAAE;EAGjB,GAAI,KAAe,KAAK,EAAY,KAAe,EAAE,cAAc,GAAa,GAAG,EAAE;EACtF,CAAC,EACE,IAAQ;AAEZ,QACE,kBAAC,OAAD;EACE,KAAK,EAAO;EACZ,WAAW;EACX,MAAK;EACL,cAAW;YAEV,EAAU,KAAK,GAAK,MACnB,kBAAC,GAAD,EAAA,UAAA,CACG,IAAI,KACH,kBAAC,OAAD;GACE,WAAW,EAAE;GACb,MAAK;GACL,oBAAkB,MAAgB,eAAe,aAAa;GAC9D,CAAA,EAEJ,kBAAC,GAAD;GAAwB;GAAa,UAAU;aAC5C,EAAO,IAAI,EAAI,CAAE,KAAK,MAAS;IAC9B,IAAM,IAAI,EAAE,GACN,IAAQ,EAAK,cAAc,SAAS,EAAK,IACzC,IAAW,EAAK,cAAc,YAC/B,EAAe,IAAiB,EAAe,EAAK,GAAG,GAAG,EAAK,WAAW,EACzE,IAAU,EAAY,IACtB,IAAW,IAAe,EAAa,SAAS,CAAC,KAAK,KAAA,GACtD,IAAgB,CAAC,KAAW,IAC9B,GAAG,IAAQ,IAAW,KAAK,EAAS,KAAK,GAAG,iBAAiB,EAAS,SACtE,KAAA;AACJ,WACE,kBAAC,GAAD;KAEE,MAAM,EAAY,EAAK;KAChB;KACG;KACV,QAAQ,EAAM,WAAW,EAAK;KAC9B,UAAU,EAAO,YAAY,EAAE,KAAK;KACpC,cAAc,CAAC;KACf,WAAW,CAAC,EAAE,YAAY,CAAC,KAAW,EAAE,cAAc,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;KAChF,OAAO;KACP,SAAS,UAAgB,EAAM,UAAU,EAAK,GAAG,SAAS;KAC1D,WAAW,EAAO,UAAU,EAAE;KAC9B,EAXK,EAAK,GAWV;KAEJ;GACQ,CAAA,CACH,EAAA,EApCI,EAoCJ,CACX;EACE,CAAA"}
@@ -0,0 +1,11 @@
1
+ var e = {
2
+ root: "_root_1hmjs_10",
3
+ segment: "_segment_1hmjs_32",
4
+ segmentSelected: "_segmentSelected_1hmjs_79",
5
+ size_sm: "_size_sm_1hmjs_137",
6
+ variant_minimal: "_variant_minimal_1hmjs_150"
7
+ };
8
+ //#endregion
9
+ export { e as t };
10
+
11
+ //# sourceMappingURL=segmentedControl.module-DCyuDbj1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segmentedControl.module-DCyuDbj1.js","names":[],"sources":["../../src/components/segmentedControl.module.css"],"sourcesContent":["/* Shared by ActionsBar and OptionsBar, which look identical and differ only\n in what a segment does. Lives here rather than in either component so\n neither owns the other's styling.\n\n Aqua-glass segmented control. The track is a pill-shaped well; the\n selected segment becomes a tinted glass cylinder that reads as the same\n \"lozenge\" family as the standalone Button. Visual params come from the\n `--btn-*` custom properties (see Button.module.css) so the Button Lab\n can tune both surfaces with one set of sliders. */\n.root {\n display: inline-flex;\n height: var(--wzl-tb-height, 28px);\n padding: 2px;\n background: linear-gradient(\n 180deg,\n rgba(0, 0, 0, 0.18) 0%,\n rgba(0, 0, 0, 0.05) 100%\n );\n border-radius: 999px;\n /* Clip segments to the track outline so interior corners read crisp and\n the selected segment's glass treatment doesn't paint over the rounded\n outer pixels. */\n overflow: hidden;\n box-shadow:\n inset 0 1px 2px rgba(0, 0, 0, 0.4),\n 0 1px 0 rgba(255, 255, 255, 0.06);\n user-select: none;\n -webkit-user-select: none;\n touch-action: none;\n}\n\n.segment {\n position: relative;\n flex: 1 1 0;\n min-width: 0;\n padding: 0 12px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n margin: 0;\n font-family: var(--wzl-font-ui);\n font-weight: 300;\n font-size: var(--btn-fontsize, 14px);\n line-height: 1;\n color: var(--wzl-fg-muted);\n cursor: pointer;\n /* Only round the outer corners of the bar — middle segments stay square\n so the seams between them don't render as facing parentheses. */\n border-radius: 0;\n isolation: isolate;\n overflow: hidden;\n transition: color var(--wzl-motion-fast);\n}\n\n.segment:first-child {\n border-radius: 999px 0 0 999px;\n}\n\n.segment:last-child {\n border-radius: 0 999px 999px 0;\n}\n\n.segment:only-child {\n border-radius: 999px;\n}\n\n.segment:focus-visible {\n outline: 2px solid var(--wzl-accent);\n outline-offset: -2px;\n}\n\n.segment:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.segment:hover:not(:disabled):not(.segmentSelected) {\n color: var(--wzl-fg);\n}\n\n/* Selected segment — full Aqua glass cylinder. Mirrors Button.variant_primary. */\n.segmentSelected {\n background: linear-gradient(\n 180deg,\n color-mix(in srgb, var(--wzl-accent) var(--btn-top-alpha, 45%), transparent) 0%,\n color-mix(in srgb, var(--wzl-accent) var(--btn-upper-alpha, 70%), transparent) calc(var(--btn-equator, 52%) - var(--btn-equator-spread, 12%)),\n color-mix(in srgb, var(--wzl-accent) var(--btn-equator-tint, 95%), white) var(--btn-equator, 52%),\n var(--wzl-accent) calc(var(--btn-equator, 52%) + var(--btn-equator-spread, 12%) * 1.6),\n color-mix(in srgb, var(--wzl-accent) var(--btn-base-tint, 70%), black) 100%\n );\n backdrop-filter: blur(var(--btn-blur, 6px)) saturate(var(--btn-saturate, 1.3));\n -webkit-backdrop-filter: blur(var(--btn-blur, 6px)) saturate(var(--btn-saturate, 1.3));\n color: var(--wzl-fg-on-accent);\n text-shadow:\n 0 1px 0 rgba(0, 0, 0, var(--btn-text-shadow, 0.35)),\n var(--btn-text-inset-x, 0px) var(--btn-text-inset-y, 1px) 0 rgba(0, 0, 0, var(--btn-text-inset, 0.55)),\n 0 0 6px rgba(0, 0, 0, calc(var(--btn-text-shadow, 0.35) * 0.5));\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, var(--btn-inset-hi, 0.42)),\n inset 0 -1px 2px rgba(0, 0, 0, var(--btn-inset-lo, 0.3)),\n 0 0 0 1px rgba(0, 0, 0, var(--btn-rim, 0.22)),\n 0 1px 2px rgba(0, 0, 0, var(--btn-drop-near, 0.3)),\n 0 2px 4px rgba(0, 0, 0, calc(var(--btn-drop-far, 0.18) * 0.8));\n}\n\n/* Specular gloss on the selected segment. Top corners inherit the\n segment's radius so they hug the upper edge cleanly; bottom corners\n are flattened so the gloss ends in a straight line at the equator\n instead of two little curves that read as `)(` brackets. */\n.segmentSelected::before {\n content: '';\n position: absolute;\n inset: 1px 1px var(--btn-gloss-bottom, 50%) 1px;\n border-radius: inherit;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n background: linear-gradient(\n 180deg,\n rgba(255, 255, 255, var(--btn-gloss-top, 0.42)) 0%,\n rgba(255, 255, 255, var(--btn-gloss-mid, 0.12)) 60%,\n rgba(255, 255, 255, 0) 100%\n );\n pointer-events: none;\n z-index: 1;\n}\n\n.segmentSelected > * {\n position: relative;\n z-index: 2;\n}\n\n/* Small variant — ~60% of the default height, with proportionally reduced\n padding and font. Sized for dense surfaces (lab control panels, inline\n filters, etc.). */\n.size_sm {\n height: 17px;\n padding: 1px;\n}\n\n.size_sm .segment {\n padding: 0 8px;\n font-size: 11px;\n}\n\n/* Minimal variant — strips the pill track, glass selected state, inset\n shadows, and outer padding. Used in dense diagnostic surfaces (dispatch\n trace, lab inspectors) where the bar must read as plain text controls. */\n.variant_minimal {\n height: auto;\n padding: 0;\n background: none;\n border-radius: 0;\n box-shadow: none;\n gap: 2px;\n}\n\n.variant_minimal .segment {\n padding: 0 4px;\n font-size: 11px;\n font-weight: 400;\n line-height: 1.4;\n border-radius: 2px;\n color: var(--wzl-fg-muted);\n transition: none;\n}\n\n.variant_minimal .segment:first-child,\n.variant_minimal .segment:last-child,\n.variant_minimal .segment:only-child {\n border-radius: 2px;\n}\n\n.variant_minimal .segment:hover:not(:disabled):not(.segmentSelected) {\n color: var(--wzl-fg);\n background: rgba(255, 255, 255, 0.06);\n}\n\n.variant_minimal .segmentSelected {\n background: none;\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n color: var(--wzl-accent-fg, var(--wzl-accent));\n text-shadow: none;\n box-shadow: none;\n font-weight: 500;\n}\n\n.variant_minimal .segmentSelected::before {\n content: none;\n}\n"],"mappings":""}
@@ -0,0 +1,65 @@
1
+ import { useRef as e } from "react";
2
+ //#region src/useRovingTabIndex.ts
3
+ function t(e) {
4
+ for (let t = 0; t < e.length; t++) if (!e[t].disabled) return t;
5
+ return -1;
6
+ }
7
+ function n(e) {
8
+ for (let t = e.length - 1; t >= 0; t--) if (!e[t].disabled) return t;
9
+ return -1;
10
+ }
11
+ function r(e, t) {
12
+ let n = e.length;
13
+ for (let r = 1; r <= n; r++) {
14
+ let i = (t + r + n) % n;
15
+ if (!e[i].disabled) return i;
16
+ }
17
+ return t;
18
+ }
19
+ function i(e, t) {
20
+ let n = e.length;
21
+ for (let r = 1; r <= n; r++) {
22
+ let i = (t - r + n) % n;
23
+ if (!e[i].disabled) return i;
24
+ }
25
+ return t;
26
+ }
27
+ function a(a) {
28
+ let { items: o, itemClassName: s, onNavigate: c, onActivate: l } = a, u = e(null), d = a.tabStopIndex ?? t(o), f = (e) => {
29
+ let t = u.current;
30
+ t && t.querySelectorAll(`.${s}`)[e]?.focus();
31
+ };
32
+ return {
33
+ rootRef: u,
34
+ tabIndexFor: (e) => e === d ? 0 : -1,
35
+ onKeyDown: (e) => (a) => {
36
+ let s = -1;
37
+ switch (a.key) {
38
+ case "ArrowLeft":
39
+ case "ArrowUp":
40
+ s = i(o, e);
41
+ break;
42
+ case "ArrowRight":
43
+ case "ArrowDown":
44
+ s = r(o, e);
45
+ break;
46
+ case "Home":
47
+ s = t(o);
48
+ break;
49
+ case "End":
50
+ s = n(o);
51
+ break;
52
+ case " ":
53
+ case "Enter":
54
+ l && (a.preventDefault(), l(e));
55
+ return;
56
+ default: return;
57
+ }
58
+ s < 0 || s === e || (a.preventDefault(), c?.(s), f(s));
59
+ }
60
+ };
61
+ }
62
+ //#endregion
63
+ export { a as t };
64
+
65
+ //# sourceMappingURL=useRovingTabIndex-DBZtq4IH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRovingTabIndex-DBZtq4IH.js","names":[],"sources":["../../src/useRovingTabIndex.ts"],"sourcesContent":["import { useRef, type KeyboardEvent as ReactKeyboardEvent, type RefObject } from 'react';\n\n/** The only thing the hook needs to know about a bar's items: which are\n * skipped by arrow navigation. */\nexport type RovingItem = { disabled?: boolean };\n\nexport type UseRovingTabIndexOptions = {\n /** In the same order as the elements carrying `itemClassName`. */\n items: readonly RovingItem[];\n /** Class on the focusable element of each item, inside the container the\n * returned `rootRef` is attached to. Their DOM order must match `items`. */\n itemClassName: string;\n /** Index that carries `tabIndex=0`. Defaults to the first enabled item; a\n * radiogroup-style bar passes its selected index so Tab lands on the\n * current value. */\n tabStopIndex?: number;\n /** Called with the new index as arrow/Home/End focus moves, before focus\n * moves. This is where a selection-follows-focus bar commits the value. */\n onNavigate?: (index: number) => void;\n /** Space/Enter on the item at `index`. When omitted the keypress is left\n * alone, which on a native `<button>` produces an ordinary click. */\n onActivate?: (index: number) => void;\n};\n\nexport type RovingTabIndex<T extends HTMLElement = HTMLDivElement> = {\n /** Attach to the container element that holds the items. */\n rootRef: RefObject<T | null>;\n /** `tabIndex` value for the item at `index`. */\n tabIndexFor: (index: number) => 0 | -1;\n /** `onKeyDown` for the item at `index`. */\n onKeyDown: (index: number) => (e: ReactKeyboardEvent<HTMLElement>) => void;\n};\n\nfunction firstEnabledIndex(items: readonly RovingItem[]): number {\n for (let i = 0; i < items.length; i++) if (!items[i].disabled) return i;\n return -1;\n}\n\nfunction lastEnabledIndex(items: readonly RovingItem[]): number {\n for (let i = items.length - 1; i >= 0; i--) if (!items[i].disabled) return i;\n return -1;\n}\n\nfunction nextEnabledIndex(items: readonly RovingItem[], from: number): number {\n const n = items.length;\n for (let k = 1; k <= n; k++) {\n const i = (from + k + n) % n;\n if (!items[i].disabled) return i;\n }\n return from;\n}\n\nfunction prevEnabledIndex(items: readonly RovingItem[], from: number): number {\n const n = items.length;\n for (let k = 1; k <= n; k++) {\n const i = (from - k + n) % n;\n if (!items[i].disabled) return i;\n }\n return from;\n}\n\n/**\n * Roving tabindex for a bar of items: one item is in the tab order, and the\n * arrow keys move focus among the rest, skipping disabled ones and wrapping\n * at both ends. Home and End go to the first and last enabled item. Both axes\n * navigate, so the same bar works laid out either way.\n *\n * Backs `ActionsBar`, `OptionsBar`, and `ToggleBar`.\n *\n * **When a bar should not use this.** Only when the bar owns its items. A\n * container of arbitrary compound controls — a number field, a select, a\n * color field — must leave the arrow keys alone, because those controls edit\n * their own value with them; taking the arrows over would break the control\n * to navigate between controls. `ToolOptionsBar` is that case and keeps plain\n * DOM tab order. A bar whose items are all simple buttons is the case this\n * hook is for.\n *\n * With every item disabled there is no tab stop and the bar drops out of the\n * tab order entirely.\n */\nexport function useRovingTabIndex<T extends HTMLElement = HTMLDivElement>(\n options: UseRovingTabIndexOptions,\n): RovingTabIndex<T> {\n const { items, itemClassName, onNavigate, onActivate } = options;\n const rootRef = useRef<T | null>(null);\n\n const tabStopIndex = options.tabStopIndex ?? firstEnabledIndex(items);\n\n const focusItem = (index: number): void => {\n const root = rootRef.current;\n if (!root) return;\n const elements = root.querySelectorAll<HTMLElement>(`.${itemClassName}`);\n elements[index]?.focus();\n };\n\n const onKeyDown = (index: number) => (e: ReactKeyboardEvent<HTMLElement>): void => {\n let nextIndex = -1;\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n nextIndex = prevEnabledIndex(items, index);\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n nextIndex = nextEnabledIndex(items, index);\n break;\n case 'Home':\n nextIndex = firstEnabledIndex(items);\n break;\n case 'End':\n nextIndex = lastEnabledIndex(items);\n break;\n case ' ':\n case 'Enter':\n if (onActivate) {\n e.preventDefault();\n onActivate(index);\n }\n return;\n default:\n return;\n }\n if (nextIndex < 0 || nextIndex === index) return;\n e.preventDefault();\n onNavigate?.(nextIndex);\n focusItem(nextIndex);\n };\n\n return {\n rootRef,\n tabIndexFor: (index: number) => (index === tabStopIndex ? 0 : -1),\n onKeyDown,\n };\n}\n"],"mappings":";;AAiCA,SAAS,EAAkB,GAAsC;AAC/D,MAAK,IAAI,IAAI,GAAG,IAAI,EAAM,QAAQ,IAAK,KAAI,CAAC,EAAM,GAAG,SAAU,QAAO;AACtE,QAAO;;AAGT,SAAS,EAAiB,GAAsC;AAC9D,MAAK,IAAI,IAAI,EAAM,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,CAAC,EAAM,GAAG,SAAU,QAAO;AAC3E,QAAO;;AAGT,SAAS,EAAiB,GAA8B,GAAsB;CAC5E,IAAM,IAAI,EAAM;AAChB,MAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;EAC3B,IAAM,KAAK,IAAO,IAAI,KAAK;AAC3B,MAAI,CAAC,EAAM,GAAG,SAAU,QAAO;;AAEjC,QAAO;;AAGT,SAAS,EAAiB,GAA8B,GAAsB;CAC5E,IAAM,IAAI,EAAM;AAChB,MAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;EAC3B,IAAM,KAAK,IAAO,IAAI,KAAK;AAC3B,MAAI,CAAC,EAAM,GAAG,SAAU,QAAO;;AAEjC,QAAO;;AAsBT,SAAgB,EACd,GACmB;CACnB,IAAM,EAAE,UAAO,kBAAe,eAAY,kBAAe,GACnD,IAAU,EAAiB,KAAK,EAEhC,IAAe,EAAQ,gBAAgB,EAAkB,EAAM,EAE/D,KAAa,MAAwB;EACzC,IAAM,IAAO,EAAQ;AAChB,OACY,EAAK,iBAA8B,IAAI,IACxD,CAAS,IAAQ,OAAO;;AAoC1B,QAAO;EACL;EACA,cAAc,MAAmB,MAAU,IAAe,IAAI;EAC9D,YApCiB,OAAmB,MAA6C;GACjF,IAAI,IAAY;AAChB,WAAQ,EAAE,KAAV;IACE,KAAK;IACL,KAAK;AACH,SAAY,EAAiB,GAAO,EAAM;AAC1C;IACF,KAAK;IACL,KAAK;AACH,SAAY,EAAiB,GAAO,EAAM;AAC1C;IACF,KAAK;AACH,SAAY,EAAkB,EAAM;AACpC;IACF,KAAK;AACH,SAAY,EAAiB,EAAM;AACnC;IACF,KAAK;IACL,KAAK;AACH,KAAI,MACF,EAAE,gBAAgB,EAClB,EAAW,EAAM;AAEnB;IACF,QACE;;AAEA,OAAY,KAAK,MAAc,MACnC,EAAE,gBAAgB,EAClB,IAAa,EAAU,EACvB,EAAU,EAAU;;EAOrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsBar.d.ts","sourceRoot":"","sources":["../../../src/components/ActionsBar/ActionsBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGhI,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAC/D,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;AACzC,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtD,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAChE,KAAK,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,CAAC;AA8BF,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,YAAY,CAoFtG"}
1
+ {"version":3,"file":"ActionsBar.d.ts","sourceRoot":"","sources":["../../../src/components/ActionsBar/ActionsBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI9E,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAC/D,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;AACzC,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtD,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAChE,KAAK,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,CAAC;AAEF,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,YAAY,CA8CtG"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/ActionsBar-CzU6Of3B.js";
1
+ import { t as e } from "../../chunks/ActionsBar-9aR5N3lU.js";
2
2
  export { e as ActionsBar };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../../chunks/Callout-CxxrEcSb.js";
1
+ import { n as e, t } from "../../chunks/Callout-CFqG5xho.js";
2
2
  export { t as Callout, e as CalloutTrigger };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/Checkbox-Cf6YHVWV.js";
1
+ import { t as e } from "../../chunks/Checkbox-KQ5L8APP.js";
2
2
  export { e as Checkbox };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/ColorField-sGLnThpB.js";
1
+ import { t as e } from "../../chunks/ColorField-ykpiD3XU.js";
2
2
  export { e as ColorField };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../../chunks/ComboBox-EnV1IytN.js";
1
+ import { n as e, t } from "../../chunks/ComboBox-DpxsFVBy.js";
2
2
  export { t as ComboBox, e as ComboBoxItem };
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, o as r, r as i, t as a } from "../../chunks/CurveEditor-DAb2EMyR.js";
1
+ import { a as e, i as t, n, o as r, r as i, t as a } from "../../chunks/CurveEditor-fRctbmoV.js";
2
2
  export { n as CurveEditor, i as LayeredCurveEditor, t as createFunctionLayer, a as createSetCurveOp, e as functionLayerState, r as sampleByInterpolation };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/Dialog-CQymDCAl.js";
1
+ import { t as e } from "../../chunks/Dialog-3FCd_gYi.js";
2
2
  export { e as Dialog };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../../chunks/Field-BHSu2F3E.js";
1
+ import { n as e, t } from "../../chunks/Field-VQwmrIna.js";
2
2
  export { t as Field, e as fieldClasses };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../../chunks/GradientEditor-Co9aGyRe.js";
1
+ import { n as e, t } from "../../chunks/GradientEditor-BL5kg7a_.js";
2
2
  export { e as GradientEditor, t as GradientHandles };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/Input-qk44ESKC.js";
1
+ import { t as e } from "../../chunks/Input-DpkwYtUY.js";
2
2
  export { e as Input };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/NumberField-CYhQeWoM.js";
1
+ import { t as e } from "../../chunks/NumberField-BbzI0GtU.js";
2
2
  export { e as NumberField };
@@ -1 +1 @@
1
- {"version":3,"file":"OptionsBar.d.ts","sourceRoot":"","sources":["../../../src/components/OptionsBar/OptionsBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGhI,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAC/D,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;AACzC,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtD,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAChE,KAAK,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;4EACwE;IACxE,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;0EACsE;IACtE,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,CAAC;AA8BF,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,YAAY,CAwFtG"}
1
+ {"version":3,"file":"OptionsBar.d.ts","sourceRoot":"","sources":["../../../src/components/OptionsBar/OptionsBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI9E,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAC/D,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;AACzC,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtD,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAChE,KAAK,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;4EACwE;IACxE,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;0EACsE;IACtE,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,CAAC;AAEF,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,YAAY,CAkDtG"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/OptionsBar-CHOP_CiW.js";
1
+ import { t as e } from "../../chunks/OptionsBar-CHvH4n4u.js";
2
2
  export { e as OptionsBar };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/PointPlotter-EkbCBK9j.js";
1
+ import { t as e } from "../../chunks/PointPlotter-R8hguJPq.js";
2
2
  export { e as PointPlotter };
@@ -1,3 +1,3 @@
1
1
  import { n as e } from "../../chunks/Badge-DZQqAV4d.js";
2
- import { t } from "../../chunks/Powerline-Bg9M5oBK.js";
2
+ import { t } from "../../chunks/Powerline-Dd9Ukhcl.js";
3
3
  export { e as EDGE_PROFILES, t as Powerline };
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, r, t as i } from "../../chunks/Prefs-DZjXp2Ln.js";
1
+ import { a as e, i as t, n, r, t as i } from "../../chunks/Prefs-lgI4x4jF.js";
2
2
  export { i as PrefsDialog, n as PrefsForm, r as isPrefLeaf, t as prefValueAtPath, e as visiblePrefSubtree };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../../chunks/RadioGroup-rL2i3afr.js";
1
+ import { n as e, t } from "../../chunks/RadioGroup-CIpHr3g6.js";
2
2
  export { t as Radio, e as RadioGroup };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/RangeSlider-DPldYd4O.js";
1
+ import { t as e } from "../../chunks/RangeSlider-CaDogGTj.js";
2
2
  export { e as RangeSlider };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/ResizeHandle-DR8X229y.js";
1
+ import { t as e } from "../../chunks/ResizeHandle-CCQ2y87y.js";
2
2
  export { e as ResizeHandle };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "../../chunks/Select-vSeAbspK.js";
1
+ import { n as e, t } from "../../chunks/Select-BE3Y1NrH.js";
2
2
  export { t as Select, e as SelectItem };
@@ -1,2 +1,2 @@
1
- import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "../../chunks/SelectionPanel-1mmALQba.js";
1
+ import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "../../chunks/SelectionPanel-Zaw8tYQH.js";
2
2
  export { r as MIXED, s as SelectionPanel, a as aggregateValue, n as classifyKind, e as effectiveSections, i as kindBreakdown, o as nodeValueAt, t as setAtPath };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/Sidebar-CigrFvpL.js";
1
+ import { t as e } from "../../chunks/Sidebar-DP_nyJze.js";
2
2
  export { e as Sidebar };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/SidebarPanel-C0w16BrF.js";
1
+ import { t as e } from "../../chunks/SidebarPanel-BpD0ptyg.js";
2
2
  export { e as SidebarPanel };
@@ -1,2 +1,2 @@
1
- import { n as e, r as t, t as n } from "../../chunks/StatusBar-lt_Ok6WK.js";
1
+ import { n as e, r as t, t as n } from "../../chunks/StatusBar-DBO0E0Yd.js";
2
2
  export { n as StatusBar, e as StatusBarItem, t as StatusBarSpacer };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/Switch-BYj762hm.js";
1
+ import { t as e } from "../../chunks/Switch-JyVSSAzC.js";
2
2
  export { e as Switch };
@@ -1,2 +1,2 @@
1
- import { i as e, n as t, r as n, t as r } from "../../chunks/Tabs-DOW5jtnq.js";
1
+ import { i as e, n as t, r as n, t as r } from "../../chunks/Tabs-Df0sDomx.js";
2
2
  export { r as Tab, t as TabList, n as TabPanel, e as Tabs };
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, r, t as i } from "../../chunks/Toast-DLM2AsTz.js";
1
+ import { a as e, i as t, n, r, t as i } from "../../chunks/Toast-DFw4IrD_.js";
2
2
  export { n as ToastQueue, i as ToastRegion, r as createToastQueue, t as defaultToastQueue, e as toast };
@@ -1 +1 @@
1
- {"version":3,"file":"ToggleBar.d.ts","sourceRoot":"","sources":["../../../src/components/ToggleBar/ToggleBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGhI,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAC9D,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;AACxC,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;AAErD,KAAK,WAAW,GAAG;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;4EACwE;IACxE,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;0EACsE;IACtE,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IACzD,CAAC,WAAW,GAAG;IACb,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC,GACF,CAAC,WAAW,GAAG;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IACpB;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;IAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;CAC/B,CAAC,CAAC;AA8BP,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,YAAY,CAwIpG"}
1
+ {"version":3,"file":"ToggleBar.d.ts","sourceRoot":"","sources":["../../../src/components/ToggleBar/ToggleBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI9E,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAC9D,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;AACxC,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;AAErD,KAAK,WAAW,GAAG;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;4EACwE;IACxE,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;0EACsE;IACtE,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IACzD,CAAC,WAAW,GAAG;IACb,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC,GACF,CAAC,WAAW,GAAG;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IACpB;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;IAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;CAC/B,CAAC,CAAC;AAEP,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,YAAY,CAqGpG"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/ToggleBar-Defj6Asn.js";
1
+ import { t as e } from "../../chunks/ToggleBar-BP1zFcvg.js";
2
2
  export { e as ToggleBar };
@@ -1,4 +1,4 @@
1
- import type { ReactNode } from 'react';
1
+ import type { KeyboardEvent, ReactNode } from 'react';
2
2
  export interface ToolButtonProps {
3
3
  /** Icon node (typically an SVG component). */
4
4
  icon: ReactNode;
@@ -25,6 +25,9 @@ export interface ToolButtonProps {
25
25
  tabbable?: boolean;
26
26
  /** Click handler. */
27
27
  onClick(): void;
28
+ /** Key handler for the underlying button — a toolbar's roving-tabindex
29
+ * navigation attaches here. */
30
+ onKeyDown?(e: KeyboardEvent<HTMLElement>): void;
28
31
  /**
29
32
  * Tooltip content. Defaults to `label` (plus `shortcut` if provided).
30
33
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ToolButton.d.ts","sourceRoot":"","sources":["../../../src/components/ToolButton/ToolButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,IAAI,EAAE,SAAS,CAAC;IAChB,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,OAAO,IAAI,IAAI,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CAwBhD"}
1
+ {"version":3,"file":"ToolButton.d.ts","sourceRoot":"","sources":["../../../src/components/ToolButton/ToolButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKtD,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,IAAI,EAAE,SAAS,CAAC;IAChB,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,OAAO,IAAI,IAAI,CAAC;IAChB;oCACgC;IAChC,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAChD;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,2CA4BhD"}
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/ToolButton-5L1sAlJC.js";
1
+ import { t as e } from "../../chunks/ToolButton-DpT-mukU.js";
2
2
  export { e as ToolButton };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/ToolGroup-BAthcF5H.js";
1
+ import { t as e } from "../../chunks/ToolGroup-BTIwd4U4.js";
2
2
  export { e as ToolGroup };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../chunks/ToolOptionsBar-D4xmXa_a.js";
1
+ import { t as e } from "../../chunks/ToolOptionsBar-JvmY7iNe.js";
2
2
  export { e as ToolOptionsBar };
@@ -1 +1 @@
1
- {"version":3,"file":"ToolPalette.d.ts","sourceRoot":"","sources":["../../../src/components/ToolPalette/ToolPalette.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAI3E,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA8CtE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,QAAQ,CAAC;IAChB,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;kEAE8D;IAC9D,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAC;IAC/D;;;;;OAKG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;OAIG;IACH,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CAgGlD"}
1
+ {"version":3,"file":"ToolPalette.d.ts","sourceRoot":"","sources":["../../../src/components/ToolPalette/ToolPalette.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAK3E,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA8CtE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,QAAQ,CAAC;IAChB,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;kEAE8D;IAC9D,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAC;IAC/D;;;;;OAKG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;OAIG;IACH,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CA0ElD"}
@@ -1,2 +1,2 @@
1
- import { n as e, r as t, t as n } from "../../chunks/ToolPalette-BDkvV3pJ.js";
1
+ import { n as e, r as t, t as n } from "../../chunks/ToolPalette-DPn0owno.js";
2
2
  export { n as ToolPalette, e as formatShortcut, t as formatShortcutParts };
package/dist/index.d.ts CHANGED
@@ -43,6 +43,8 @@ export type { GradientTrackOpts } from './paintGradientTrack';
43
43
  export { oklchToHex, chromaAt } from './color/oklch';
44
44
  export type { ChromaCurve, ChromaCurvePoint } from './color/oklch';
45
45
  export { useReorderDragList } from './useReorderDragList';
46
+ export { useRovingTabIndex } from './useRovingTabIndex';
47
+ export type { RovingItem, RovingTabIndex, UseRovingTabIndexOptions } from './useRovingTabIndex';
46
48
  export { formatNumber, MINUS_SIGN } from './format/number';
47
49
  export type { LayerListItem, UseReorderDragListOptions, ReorderDragState, ReorderDragHandlers, } from './useReorderDragList';
48
50
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EACV,aAAa,EACb,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EACV,aAAa,EACb,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -8,53 +8,54 @@ import { n as u, t as d } from "./chunks/DataGrid-BQklXGRl.js";
8
8
  import { a as f, i as p, n as m, o as h, r as g, t as _ } from "./chunks/Keycaps-CFX7UAj8.js";
9
9
  import { t as v } from "./chunks/keyGlyph-BDH5fqkO.js";
10
10
  import { n as y, r as b, t as x } from "./chunks/Slider-Di2kNqVy.js";
11
- import { t as S } from "./chunks/ToggleBar-Defj6Asn.js";
12
- import { t as C } from "./chunks/OptionsBar-CHOP_CiW.js";
13
- import { t as w } from "./chunks/ActionsBar-CzU6Of3B.js";
14
- import { t as T } from "./chunks/ToolOptionsBar-D4xmXa_a.js";
15
- import { t as E } from "./chunks/Powerline-Bg9M5oBK.js";
16
- import { t as D } from "./chunks/Checkbox-Cf6YHVWV.js";
17
- import { t as O } from "./chunks/ColorField-sGLnThpB.js";
18
- import { n as k, t as A } from "./chunks/Field-BHSu2F3E.js";
19
- import { t as j } from "./chunks/Input-qk44ESKC.js";
20
- import { t as M } from "./chunks/NumberField-CYhQeWoM.js";
21
- import { n as N, t as P } from "./chunks/RadioGroup-rL2i3afr.js";
22
- import { t as F } from "./chunks/RangeSlider-DPldYd4O.js";
23
- import { n as I, t as L } from "./chunks/Select-vSeAbspK.js";
24
- import { t as R } from "./chunks/Switch-BYj762hm.js";
25
- import { a as z, i as B, n as V, r as H, t as U } from "./chunks/Prefs-DZjXp2Ln.js";
26
- import { t as W } from "./chunks/Dialog-CQymDCAl.js";
27
- import { a as G, c as K, i as q, n as J, o as Y, r as X, s as Z, t as Q } from "./chunks/SelectionPanel-1mmALQba.js";
28
- import { t as te } from "./chunks/ResizeHandle-DR8X229y.js";
29
- import { t as ne } from "./chunks/Sidebar-CigrFvpL.js";
30
- import { t as re } from "./chunks/SidebarPanel-C0w16BrF.js";
31
- import { n as ie, r as ae, t as oe } from "./chunks/StatusBar-lt_Ok6WK.js";
32
- import { t as se } from "./chunks/ToolButton-5L1sAlJC.js";
33
- import { t as ce } from "./chunks/ToolGroup-BAthcF5H.js";
34
- import { n as le, r as ue, t as de } from "./chunks/ToolPalette-BDkvV3pJ.js";
11
+ import { t as S } from "./chunks/ToggleBar-BP1zFcvg.js";
12
+ import { t as C } from "./chunks/useRovingTabIndex-DBZtq4IH.js";
13
+ import { t as w } from "./chunks/OptionsBar-CHvH4n4u.js";
14
+ import { t as T } from "./chunks/ActionsBar-9aR5N3lU.js";
15
+ import { t as E } from "./chunks/ToolOptionsBar-JvmY7iNe.js";
16
+ import { t as D } from "./chunks/Powerline-Dd9Ukhcl.js";
17
+ import { t as O } from "./chunks/Checkbox-KQ5L8APP.js";
18
+ import { t as k } from "./chunks/ColorField-ykpiD3XU.js";
19
+ import { n as A, t as j } from "./chunks/Field-VQwmrIna.js";
20
+ import { t as M } from "./chunks/Input-DpkwYtUY.js";
21
+ import { t as N } from "./chunks/NumberField-BbzI0GtU.js";
22
+ import { n as P, t as F } from "./chunks/RadioGroup-CIpHr3g6.js";
23
+ import { t as I } from "./chunks/RangeSlider-CaDogGTj.js";
24
+ import { n as L, t as R } from "./chunks/Select-BE3Y1NrH.js";
25
+ import { t as z } from "./chunks/Switch-JyVSSAzC.js";
26
+ import { a as B, i as V, n as H, r as U, t as W } from "./chunks/Prefs-lgI4x4jF.js";
27
+ import { t as G } from "./chunks/Dialog-3FCd_gYi.js";
28
+ import { a as K, c as q, i as J, n as Y, o as X, r as Z, s as Q, t as te } from "./chunks/SelectionPanel-Zaw8tYQH.js";
29
+ import { t as ne } from "./chunks/ResizeHandle-CCQ2y87y.js";
30
+ import { t as re } from "./chunks/Sidebar-DP_nyJze.js";
31
+ import { t as ie } from "./chunks/SidebarPanel-BpD0ptyg.js";
32
+ import { n as ae, r as oe, t as se } from "./chunks/StatusBar-DBO0E0Yd.js";
33
+ import { t as ce } from "./chunks/ToolButton-DpT-mukU.js";
34
+ import { t as le } from "./chunks/ToolGroup-BTIwd4U4.js";
35
+ import { n as ue, r as de, t as fe } from "./chunks/ToolPalette-DPn0owno.js";
35
36
  import "./components/Field/index.js";
36
- import { i as fe, n as pe, r as me, t as he } from "./chunks/Tabs-DOW5jtnq.js";
37
- import { n as ge, t as _e } from "./chunks/ComboBox-EnV1IytN.js";
38
- import { n as ve, t as ye } from "./chunks/Callout-CxxrEcSb.js";
39
- import { a as be, i as xe, n as Se, r as Ce, t as we } from "./chunks/Toast-DLM2AsTz.js";
40
- import { a as Te, i as Ee, n as De, o as $, r as Oe, t as ke } from "./chunks/CurveEditor-DAb2EMyR.js";
41
- import { t as Ae } from "./chunks/PointPlotter-EkbCBK9j.js";
42
- import { n as je, r as Me, t as Ne } from "./chunks/GradientEditor-Co9aGyRe.js";
43
- import { oklabToSrgbU8 as Pe, oklchToOklab as Fe, rgbaToHex as Ie } from "@weasel-js/core";
37
+ import { i as pe, n as me, r as he, t as ge } from "./chunks/Tabs-Df0sDomx.js";
38
+ import { n as _e, t as ve } from "./chunks/ComboBox-DpxsFVBy.js";
39
+ import { n as ye, t as be } from "./chunks/Callout-CFqG5xho.js";
40
+ import { a as xe, i as Se, n as Ce, r as we, t as Te } from "./chunks/Toast-DFw4IrD_.js";
41
+ import { a as Ee, i as De, n as $, o as Oe, r as ke, t as Ae } from "./chunks/CurveEditor-fRctbmoV.js";
42
+ import { t as je } from "./chunks/PointPlotter-R8hguJPq.js";
43
+ import { n as Me, r as Ne, t as Pe } from "./chunks/GradientEditor-BL5kg7a_.js";
44
+ import { oklabToSrgbU8 as Fe, oklchToOklab as Ie, rgbaToHex as Le } from "@weasel-js/core";
44
45
  //#region src/color/oklch.ts
45
- function Le(e, t, n) {
46
- let [r, i, a] = Fe(e, t, n * Math.PI / 180), [o, s, c] = Pe(r, i, a);
47
- return Ie([
46
+ function Re(e, t, n) {
47
+ let [r, i, a] = Ie(e, t, n * Math.PI / 180), [o, s, c] = Fe(r, i, a);
48
+ return Le([
48
49
  o / 255,
49
50
  s / 255,
50
51
  c / 255
51
52
  ]);
52
53
  }
53
- function Re(e, t) {
54
+ function ze(e, t) {
54
55
  let [n, r] = t.lRange;
55
56
  return e <= n ? t.cBot : e >= r ? t.cTop : e <= t.midL ? t.cBot + (t.cPeak - t.cBot) * ((e - n) / (t.midL - n)) : t.cPeak + (t.cTop - t.cPeak) * ((e - t.midL) / (r - t.midL));
56
57
  }
57
58
  //#endregion
58
- export { s as ActionBar, w as ActionsBar, ee as Badge, l as Button, ye as Callout, ve as CalloutTrigger, D as Checkbox, O as ColorField, _e as ComboBox, ge as ComboBoxItem, De as CurveEditor, d as DataGrid, W as Dialog, c as EDGE_PROFILES, A as Field, je as GradientEditor, Ne as GradientHandles, j as Input, f as KeyCap, p as KeySequence, Oe as LayeredCurveEditor, y as MINUS_SIGN, J as MIXED, M as NumberField, C as OptionsBar, i as Plot2D, Ae as PointPlotter, E as Powerline, U as PrefsDialog, V as PrefsForm, P as Radio, N as RadioGroup, F as RangeSlider, te as ResizeHandle, L as Select, I as SelectItem, Q as SelectionPanel, ne as Sidebar, re as SidebarPanel, x as Slider, oe as StatusBar, ie as StatusBarItem, ae as StatusBarSpacer, R as Switch, he as Tab, pe as TabList, me as TabPanel, fe as Tabs, Se as ToastQueue, we as ToastRegion, S as ToggleBar, se as ToolButton, ce as ToolGroup, T as ToolOptionsBar, de as ToolPalette, o as Tooltip, a as TooltipTrigger, X as aggregateValue, Re as chromaAt, q as classifyKind, Ee as createFunctionLayer, ke as createSetCurveOp, Ce as createToastQueue, xe as defaultToastQueue, _ as detectPlatform, t as dlog, G as effectiveSections, k as fieldClasses, b as formatNumber, le as formatShortcut, ue as formatShortcutParts, Te as functionLayerState, h as inferKeycapKind, e as isDebugEnabled, H as isPrefLeaf, v as keyGlyph, m as keySpecFromKey, g as keySpecsFromMods, Y as kindBreakdown, n as modelToPlot, Z as nodeValueAt, Le as oklchToHex, Me as paintGradientTrack, r as plotToModel, B as prefValueAtPath, $ as sampleByInterpolation, K as setAtPath, be as toast, u as useReorderDragList, z as visiblePrefSubtree };
59
+ export { s as ActionBar, T as ActionsBar, ee as Badge, l as Button, be as Callout, ye as CalloutTrigger, O as Checkbox, k as ColorField, ve as ComboBox, _e as ComboBoxItem, $ as CurveEditor, d as DataGrid, G as Dialog, c as EDGE_PROFILES, j as Field, Me as GradientEditor, Pe as GradientHandles, M as Input, f as KeyCap, p as KeySequence, ke as LayeredCurveEditor, y as MINUS_SIGN, Y as MIXED, N as NumberField, w as OptionsBar, i as Plot2D, je as PointPlotter, D as Powerline, W as PrefsDialog, H as PrefsForm, F as Radio, P as RadioGroup, I as RangeSlider, ne as ResizeHandle, R as Select, L as SelectItem, te as SelectionPanel, re as Sidebar, ie as SidebarPanel, x as Slider, se as StatusBar, ae as StatusBarItem, oe as StatusBarSpacer, z as Switch, ge as Tab, me as TabList, he as TabPanel, pe as Tabs, Ce as ToastQueue, Te as ToastRegion, S as ToggleBar, ce as ToolButton, le as ToolGroup, E as ToolOptionsBar, fe as ToolPalette, o as Tooltip, a as TooltipTrigger, Z as aggregateValue, ze as chromaAt, J as classifyKind, De as createFunctionLayer, Ae as createSetCurveOp, we as createToastQueue, Se as defaultToastQueue, _ as detectPlatform, t as dlog, K as effectiveSections, A as fieldClasses, b as formatNumber, ue as formatShortcut, de as formatShortcutParts, Ee as functionLayerState, h as inferKeycapKind, e as isDebugEnabled, U as isPrefLeaf, v as keyGlyph, m as keySpecFromKey, g as keySpecsFromMods, X as kindBreakdown, n as modelToPlot, Q as nodeValueAt, Re as oklchToHex, Ne as paintGradientTrack, r as plotToModel, V as prefValueAtPath, Oe as sampleByInterpolation, q as setAtPath, xe as toast, u as useReorderDragList, C as useRovingTabIndex, B as visiblePrefSubtree };
59
60
 
60
61
  //# sourceMappingURL=index.js.map