@reopt-ai/opt-ui 1.9.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/COMPONENT_CATALOG.md +1 -1
  2. package/dist/core/index.cjs +98 -98
  3. package/dist/core/index.d.cts +2 -2
  4. package/dist/core/index.d.ts +2 -2
  5. package/dist/core/index.js +2 -2
  6. package/dist/docs/02-components/01-core.md +1 -1
  7. package/dist/docs/02-components/02-visuals.md +1 -1
  8. package/dist/docs/02-components/03-shells.md +1 -1
  9. package/dist/docs/02-components/04-surfaces.md +1 -1
  10. package/dist/docs/02-components/index.md +1 -1
  11. package/dist/{field-sidebar-mFHemxBz.cjs → field-sidebar-B6Ndr8HE.cjs} +292 -285
  12. package/dist/{field-sidebar-B7QkWvMG.js → field-sidebar-BXjvV7Cz.js} +12 -5
  13. package/dist/{field-sidebar-B7QkWvMG.js.map → field-sidebar-BXjvV7Cz.js.map} +1 -1
  14. package/dist/{field-sidebar-B5vk3luQ.d.cts → field-sidebar-DWfJAJlx.d.ts} +14 -2
  15. package/dist/{field-sidebar-Dk9gJGA_.d.ts.map → field-sidebar-DWfJAJlx.d.ts.map} +1 -1
  16. package/dist/{field-sidebar-Dk9gJGA_.d.ts → field-sidebar-nwcE9LC4.d.cts} +14 -2
  17. package/dist/{field-sidebar-B5vk3luQ.d.cts.map → field-sidebar-nwcE9LC4.d.cts.map} +1 -1
  18. package/dist/index.cjs +558 -558
  19. package/dist/index.d.cts +3 -3
  20. package/dist/index.d.cts.map +1 -1
  21. package/dist/index.d.ts +3 -3
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +3 -3
  24. package/dist/{key-pad-menu-BFd79JoS.js → key-pad-menu-BQunU20e.js} +6 -134
  25. package/dist/key-pad-menu-BQunU20e.js.map +1 -0
  26. package/dist/{key-pad-menu-EEb6Ho5h.d.ts → key-pad-menu-BsgJMjD4.d.ts} +3 -47
  27. package/dist/key-pad-menu-BsgJMjD4.d.ts.map +1 -0
  28. package/dist/{key-pad-menu-DoGskWbp.cjs → key-pad-menu-D5mQcS5v.cjs} +228 -362
  29. package/dist/{key-pad-menu-D8OS_VCT.d.cts → key-pad-menu-DfZbeXhG.d.cts} +3 -47
  30. package/dist/key-pad-menu-DfZbeXhG.d.cts.map +1 -0
  31. package/dist/shells/index.cjs +1 -1
  32. package/dist/shells/index.d.cts +1 -1
  33. package/dist/shells/index.d.ts +1 -1
  34. package/dist/shells/index.js +1 -1
  35. package/dist/{field-token-CSOrU5gl.d.ts → text-truncate-BGr7bB_8.d.cts} +46 -2
  36. package/dist/text-truncate-BGr7bB_8.d.cts.map +1 -0
  37. package/dist/{field-token-CSOrU5gl.d.cts → text-truncate-BGr7bB_8.d.ts} +46 -2
  38. package/dist/text-truncate-BGr7bB_8.d.ts.map +1 -0
  39. package/dist/{highlight-CGcrYGMC.cjs → text-truncate-CxdzAnhS.cjs} +134 -0
  40. package/dist/{highlight-C2sfnJN8.js → text-truncate-j6X3z7Pv.js} +131 -3
  41. package/dist/text-truncate-j6X3z7Pv.js.map +1 -0
  42. package/package.json +2 -2
  43. package/dist/field-token-CSOrU5gl.d.cts.map +0 -1
  44. package/dist/field-token-CSOrU5gl.d.ts.map +0 -1
  45. package/dist/highlight-C2sfnJN8.js.map +0 -1
  46. package/dist/key-pad-menu-BFd79JoS.js.map +0 -1
  47. package/dist/key-pad-menu-D8OS_VCT.d.cts.map +0 -1
  48. package/dist/key-pad-menu-EEb6Ho5h.d.ts.map +0 -1
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- const require_highlight = require("./highlight-CGcrYGMC.cjs");
2
+ const require_text_truncate = require("./text-truncate-CxdzAnhS.cjs");
3
3
  let react_jsx_runtime = require("react/jsx-runtime");
4
4
  let react = require("react");
5
- react = require_highlight.__toESM(react, 1);
5
+ react = require_text_truncate.__toESM(react, 1);
6
6
  let _reopt_ai_opt_ui_primitives = require("@reopt-ai/opt-ui-primitives");
7
7
  let lucide_react = require("lucide-react");
8
8
  let react_resizable_panels = require("react-resizable-panels");
@@ -25,10 +25,10 @@ const toneStyles$1 = {
25
25
  };
26
26
  /** Semantic body text whose visual role is controlled by foundation tokens. */
27
27
  function Text(_ref) {
28
- let { as, variant = "body", tone = "primary", truncate = false, className, children } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$17);
28
+ let { as, variant = "body", tone = "primary", truncate = false, className, children } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$17);
29
29
  const Component = as !== null && as !== void 0 ? as : "span";
30
- const elementProps = require_highlight._objectSpread2(require_highlight._objectSpread2({}, props), {}, {
31
- className: require_highlight.cn(`opt-type-${variant}`, toneStyles$1[tone], truncate && "truncate", className),
30
+ const elementProps = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, props), {}, {
31
+ className: require_text_truncate.cn(`opt-type-${variant}`, toneStyles$1[tone], truncate && "truncate", className),
32
32
  "data-opt-component": "text",
33
33
  "data-opt-part": "root",
34
34
  "data-opt-id": "NFKP2",
@@ -48,7 +48,7 @@ const _excluded$16 = [
48
48
  ];
49
49
  /** Semantic heading with independently selectable visual hierarchy. */
50
50
  function Heading(_ref) {
51
- let { level = 2, variant = `heading-${level}`, className, children } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$16);
51
+ let { level = 2, variant = `heading-${level}`, className, children } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$16);
52
52
  const Component = {
53
53
  1: "h1",
54
54
  2: "h2",
@@ -57,7 +57,7 @@ function Heading(_ref) {
57
57
  5: "h5",
58
58
  6: "h6"
59
59
  }[level];
60
- return (0, react.createElement)(Component, require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn(`opt-type-${variant}`, "text-text-primary", className) }, props), {}, {
60
+ return (0, react.createElement)(Component, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn(`opt-type-${variant}`, "text-text-primary", className) }, props), {}, {
61
61
  "data-opt-component": "heading",
62
62
  "data-opt-part": "root",
63
63
  "data-opt-id": "NF0BT",
@@ -74,7 +74,7 @@ function Heading(_ref) {
74
74
  */
75
75
  function Separator$1({ orientation = "horizontal", decorative = false, children, className }) {
76
76
  if (orientation === "horizontal" && children != null) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
77
- className: require_highlight.cn("gap-element flex items-center", className),
77
+ className: require_text_truncate.cn("gap-element flex items-center", className),
78
78
  "data-opt-id": "7PWJS",
79
79
  "data-opt-slug": "separator.Separator",
80
80
  children: [
@@ -97,7 +97,7 @@ function Separator$1({ orientation = "horizontal", decorative = false, children,
97
97
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.Separator, {
98
98
  orientation,
99
99
  decorative,
100
- className: require_highlight.cn("bg-border shrink-0", orientation === "horizontal" ? "h-px w-full" : "h-full w-px self-stretch", className),
100
+ className: require_text_truncate.cn("bg-border shrink-0", orientation === "horizontal" ? "h-px w-full" : "h-full w-px self-stretch", className),
101
101
  "data-opt-id": "7PWJS",
102
102
  "data-opt-slug": "separator.Separator"
103
103
  });
@@ -122,7 +122,7 @@ function OtpField({ length = 6, value: controlledValue, defaultValue = "", onCha
122
122
  const labelId = label ? `${fieldId}-label` : void 0;
123
123
  const groupLabelledBy = ariaLabel ? void 0 : labelId;
124
124
  const groupAriaLabel = ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : groupLabelledBy ? void 0 : "One-time code";
125
- const [value, setRawValue] = require_highlight.useControlledState(defaultValue, controlledValue, onChange);
125
+ const [value, setRawValue] = require_text_truncate.useControlledState(defaultValue, controlledValue, onChange);
126
126
  const completedRef = react.useRef(false);
127
127
  const setValue = react.useCallback((next) => {
128
128
  const clipped = next.slice(0, length);
@@ -215,20 +215,20 @@ function OtpField({ length = 6, value: controlledValue, defaultValue = "", onCha
215
215
  focusCell
216
216
  ]);
217
217
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
218
- className: require_highlight.cn("flex flex-col gap-1.5", className),
218
+ className: require_text_truncate.cn("flex flex-col gap-1.5", className),
219
219
  "data-opt-id": "0083Q",
220
220
  "data-opt-slug": "otp-field.OtpField",
221
221
  children: [
222
222
  label && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
223
223
  className: "text-sm font-medium text-text-primary",
224
224
  id: labelId,
225
- children: [label, required && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.RequiredMark, {})]
225
+ children: [label, required && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.RequiredMark, {})]
226
226
  }),
227
227
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
228
228
  role: "group",
229
229
  "aria-label": groupAriaLabel,
230
230
  "aria-labelledby": groupLabelledBy,
231
- "aria-describedby": require_highlight.getDescribedBy(fieldId, error, hint),
231
+ "aria-describedby": require_text_truncate.getDescribedBy(fieldId, error, hint),
232
232
  className: "gap-element flex items-center",
233
233
  children: cells.map((cell, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
234
234
  ref: (node) => {
@@ -247,7 +247,7 @@ function OtpField({ length = 6, value: controlledValue, defaultValue = "", onCha
247
247
  onKeyDown: handleKeyDown(i),
248
248
  onPaste: handlePaste(i),
249
249
  onFocus: (e) => e.target.select(),
250
- className: require_highlight.cn(require_highlight.OPT_INPUT, "h-12 w-10 text-center text-lg font-medium", hasError && "border-danger focus-visible:outline-danger")
250
+ className: require_text_truncate.cn(require_text_truncate.OPT_INPUT, "h-12 w-10 text-center text-lg font-medium", hasError && "border-danger focus-visible:outline-danger")
251
251
  }, i))
252
252
  }),
253
253
  name && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
@@ -256,7 +256,7 @@ function OtpField({ length = 6, value: controlledValue, defaultValue = "", onCha
256
256
  value,
257
257
  disabled
258
258
  }),
259
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.FieldMessages, {
259
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.FieldMessages, {
260
260
  id: fieldId,
261
261
  error,
262
262
  hint
@@ -281,11 +281,11 @@ const sizeStyles$8 = {
281
281
  sm: "h-8 min-w-8 px-2 text-xs gap-1.5",
282
282
  md: "h-10 min-w-10 px-3 text-sm gap-2"
283
283
  };
284
- const toggleBase = require_highlight.cn("inline-flex cursor-pointer items-center justify-center rounded-md border border-border bg-surface font-medium text-text-secondary", "hover:bg-bg-subtle hover:text-text-primary", "data-[pressed]:border-accent data-[pressed]:bg-accent-subtle data-[pressed]:text-accent", "disabled:pointer-events-none disabled:opacity-40", require_highlight.OPT_FOCUS_VISIBLE);
284
+ const toggleBase = require_text_truncate.cn("inline-flex cursor-pointer items-center justify-center rounded-md border border-border bg-surface font-medium text-text-secondary", "hover:bg-bg-subtle hover:text-text-primary", "data-[pressed]:border-accent data-[pressed]:bg-accent-subtle data-[pressed]:text-accent", "disabled:pointer-events-none disabled:opacity-40", require_text_truncate.OPT_FOCUS_VISIBLE);
285
285
  /** A two-state (pressed) button. Use standalone or inside `ToggleGroup`. */
286
286
  function Toggle(_ref) {
287
- let { size = "md", className, children } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$15);
288
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.Toggle, require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn(toggleBase, sizeStyles$8[size], className) }, props), {}, {
287
+ let { size = "md", className, children } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$15);
288
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.Toggle, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn(toggleBase, sizeStyles$8[size], className) }, props), {}, {
289
289
  "data-opt-id": "GFCMY",
290
290
  "data-opt-slug": "toggle.Toggle",
291
291
  children
@@ -294,11 +294,11 @@ function Toggle(_ref) {
294
294
  Toggle.displayName = "Toggle";
295
295
  /** A set of related toggles with shared selection and keyboard navigation. */
296
296
  function ToggleGroup(_ref2) {
297
- let { className, children, orientation = "horizontal" } = _ref2, props = require_highlight._objectWithoutProperties(_ref2, _excluded2$8);
298
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.ToggleGroup, require_highlight._objectSpread2(require_highlight._objectSpread2({
297
+ let { className, children, orientation = "horizontal" } = _ref2, props = require_text_truncate._objectWithoutProperties(_ref2, _excluded2$8);
298
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.ToggleGroup, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
299
299
  orientation,
300
300
  "aria-orientation": orientation,
301
- className: require_highlight.cn("inline-flex gap-1", orientation === "vertical" ? "flex-col" : "flex-row", className)
301
+ className: require_text_truncate.cn("inline-flex gap-1", orientation === "vertical" ? "flex-col" : "flex-row", className)
302
302
  }, props), {}, {
303
303
  "data-opt-id": "47J37",
304
304
  "data-opt-slug": "toggle.ToggleGroup",
@@ -312,23 +312,23 @@ const _excluded$14 = ["className"];
312
312
  const _excluded2$7 = ["className"];
313
313
  const _excluded3$4 = ["className", "children"];
314
314
  const _excluded4$3 = ["className", "children"];
315
- const triggerClass = `group/acc-trigger flex w-full cursor-pointer items-center justify-between gap-2 py-4 text-left text-sm font-medium text-text-primary transition-colors hover:text-text-secondary ${require_highlight.OPT_FOCUS} disabled:cursor-not-allowed disabled:opacity-50`;
316
- const contentClass = `overflow-hidden text-sm text-text-secondary ${require_highlight.OPT_ANIMATE_ENTER_EXIT}`;
315
+ const triggerClass = `group/acc-trigger flex w-full cursor-pointer items-center justify-between gap-2 py-4 text-left text-sm font-medium text-text-primary transition-colors hover:text-text-secondary ${require_text_truncate.OPT_FOCUS} disabled:cursor-not-allowed disabled:opacity-50`;
316
+ const contentClass = `overflow-hidden text-sm text-text-secondary ${require_text_truncate.OPT_ANIMATE_ENTER_EXIT}`;
317
317
  /** A vertically stacked set of expandable panels (single or multiple open). */
318
318
  function AccordionRoot(_ref) {
319
- let { className } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$14);
319
+ let { className } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$14);
320
320
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
321
- className: require_highlight.cn("border-border border-y", className),
321
+ className: require_text_truncate.cn("border-border border-y", className),
322
322
  "data-opt-id": "CSBA9",
323
323
  "data-opt-slug": "accordion.AccordionRoot",
324
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.AccordionRoot, require_highlight._objectSpread2({}, props))
324
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.AccordionRoot, require_text_truncate._objectSpread2({}, props))
325
325
  });
326
326
  }
327
327
  AccordionRoot.displayName = "AccordionRoot";
328
328
  /** A single accordion entry, identified by its `value`. */
329
329
  function AccordionItem(_ref2) {
330
- let { className } = _ref2, props = require_highlight._objectWithoutProperties(_ref2, _excluded2$7);
331
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.AccordionItem, require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn("border-border border-b last:border-b-0", className) }, props), {}, {
330
+ let { className } = _ref2, props = require_text_truncate._objectWithoutProperties(_ref2, _excluded2$7);
331
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.AccordionItem, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn("border-border border-b last:border-b-0", className) }, props), {}, {
332
332
  "data-opt-id": "JTY9M",
333
333
  "data-opt-slug": "accordion.AccordionItem"
334
334
  }));
@@ -336,8 +336,8 @@ function AccordionItem(_ref2) {
336
336
  AccordionItem.displayName = "AccordionItem";
337
337
  /** The clickable header that expands/collapses its panel. */
338
338
  function AccordionTrigger(_ref3) {
339
- let { className, children } = _ref3, props = require_highlight._objectWithoutProperties(_ref3, _excluded3$4);
340
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_reopt_ai_opt_ui_primitives.AccordionTrigger, require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn(triggerClass, className) }, props), {}, {
339
+ let { className, children } = _ref3, props = require_text_truncate._objectWithoutProperties(_ref3, _excluded3$4);
340
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_reopt_ai_opt_ui_primitives.AccordionTrigger, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn(triggerClass, className) }, props), {}, {
341
341
  "data-opt-id": "CWJZZ",
342
342
  "data-opt-slug": "accordion.AccordionTrigger",
343
343
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -352,8 +352,8 @@ function AccordionTrigger(_ref3) {
352
352
  AccordionTrigger.displayName = "AccordionTrigger";
353
353
  /** The collapsible panel body associated with a trigger. */
354
354
  function AccordionContent(_ref4) {
355
- let { className, children } = _ref4, props = require_highlight._objectWithoutProperties(_ref4, _excluded4$3);
356
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.AccordionContent, require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn(contentClass, className) }, props), {}, {
355
+ let { className, children } = _ref4, props = require_text_truncate._objectWithoutProperties(_ref4, _excluded4$3);
356
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.AccordionContent, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn(contentClass, className) }, props), {}, {
357
357
  "data-opt-id": "J98AG",
358
358
  "data-opt-slug": "accordion.AccordionContent",
359
359
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
@@ -372,19 +372,19 @@ function interpolate(template, values) {
372
372
  function Breadcrumb({ items, separator = "/", className, onNavigate, "aria-label": ariaLabel = "Breadcrumb" }) {
373
373
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("nav", {
374
374
  "aria-label": ariaLabel,
375
- className: require_highlight.cn("flex items-center gap-1 px-1.5 text-sm", className),
375
+ className: require_text_truncate.cn("flex items-center gap-1 px-1.5 text-sm", className),
376
376
  "data-opt-id": "3FR0Y",
377
377
  "data-opt-slug": "breadcrumb.Breadcrumb",
378
378
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ol", {
379
379
  className: "flex items-center gap-1",
380
380
  children: items.map((item, index) => {
381
381
  const isLast = index === items.length - 1;
382
- const linkClassName = require_highlight.cn(`flex items-center gap-1.5 rounded-sm ${require_highlight.OPT_FOCUS} transition-colors`, item.disabled ? `${require_highlight.OPT_TEXT_TERTIARY} cursor-not-allowed` : `${require_highlight.OPT_TEXT_SECONDARY} hover:text-text-primary cursor-pointer`);
382
+ const linkClassName = require_text_truncate.cn(`flex items-center gap-1.5 rounded-sm ${require_text_truncate.OPT_FOCUS} transition-colors`, item.disabled ? `${require_text_truncate.OPT_TEXT_TERTIARY} cursor-not-allowed` : `${require_text_truncate.OPT_TEXT_SECONDARY} hover:text-text-primary cursor-pointer`);
383
383
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
384
384
  className: "flex items-center gap-1",
385
385
  children: isLast ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
386
386
  "aria-current": "page",
387
- className: `flex items-center gap-1.5 font-medium ${require_highlight.OPT_TEXT_PRIMARY}`,
387
+ className: `flex items-center gap-1.5 font-medium ${require_text_truncate.OPT_TEXT_PRIMARY}`,
388
388
  children: [item.icon, item.label]
389
389
  }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [item.href ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
390
390
  href: item.disabled ? void 0 : item.href,
@@ -395,13 +395,13 @@ function Breadcrumb({ items, separator = "/", className, onNavigate, "aria-label
395
395
  }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
396
396
  type: "button",
397
397
  disabled: item.disabled,
398
- "aria-label": interpolate(require_highlight.koBreadcrumbLabels.navAriaLabel, { label: item.label }),
398
+ "aria-label": interpolate(require_text_truncate.koBreadcrumbLabels.navAriaLabel, { label: item.label }),
399
399
  className: linkClassName,
400
400
  onClick: () => !item.disabled && (onNavigate === null || onNavigate === void 0 ? void 0 : onNavigate(item)),
401
401
  children: [item.icon, item.label]
402
402
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
403
403
  "aria-hidden": "true",
404
- className: require_highlight.OPT_TEXT_TERTIARY,
404
+ className: require_text_truncate.OPT_TEXT_TERTIARY,
405
405
  children: separator
406
406
  })] })
407
407
  }, item.id);
@@ -448,7 +448,7 @@ const _excluded6 = [
448
448
  ];
449
449
  /** Renders the card component. */
450
450
  function Card(_ref) {
451
- let { variant = "default", padding = "md", shadow = true, selectable = false, selected = false, onSelectedChange, className, children, onClick, onKeyDown, role, tabIndex } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$13);
451
+ let { variant = "default", padding = "md", shadow = true, selectable = false, selected = false, onSelectedChange, className, children, onClick, onKeyDown, role, tabIndex } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$13);
452
452
  const isInteractive = selectable || !!onClick;
453
453
  const handleClick = selectable ? (e) => {
454
454
  onSelectedChange === null || onSelectedChange === void 0 || onSelectedChange(!selected);
@@ -467,7 +467,7 @@ function Card(_ref) {
467
467
  }
468
468
  onKeyDown === null || onKeyDown === void 0 || onKeyDown(e);
469
469
  } : onKeyDown;
470
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", require_highlight._objectSpread2(require_highlight._objectSpread2(require_highlight._objectSpread2({}, props), {}, { className: require_highlight.cn("rounded-xl", variant === "default" && require_highlight.cn(`border border-border bg-surface`, shadow && "shadow-sm"), variant === "outline" && "border-border border-2 bg-transparent", variant === "ghost" && "bg-bg-subtle", padding === "none" && "p-0", padding === "sm" && "p-3", padding === "md" && "p-5", padding === "lg" && "p-8", selectable && "cursor-pointer transition-colors", selectable && selected && "ring-accent border-accent ring-2 ring-offset-1", selectable && !selected && "hover:border-accent/50", className) }, isInteractive ? {
470
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, props), {}, { className: require_text_truncate.cn("rounded-xl", variant === "default" && require_text_truncate.cn(`border border-border bg-surface`, shadow && "shadow-sm"), variant === "outline" && "border-border border-2 bg-transparent", variant === "ghost" && "bg-bg-subtle", padding === "none" && "p-0", padding === "sm" && "p-3", padding === "md" && "p-5", padding === "lg" && "p-8", selectable && "cursor-pointer transition-colors", selectable && selected && "ring-accent border-accent ring-2 ring-offset-1", selectable && !selected && "hover:border-accent/50", className) }, isInteractive ? {
471
471
  role: selectable ? "option" : "button",
472
472
  tabIndex: 0,
473
473
  "aria-selected": selectable ? selected : void 0,
@@ -491,8 +491,8 @@ const headerGapClasses = {
491
491
  };
492
492
  /** Renders the card header component. */
493
493
  function CardHeader(_ref2) {
494
- let { gap = "sm", className, children } = _ref2, props = require_highlight._objectWithoutProperties(_ref2, _excluded2$6);
495
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn("flex flex-col", headerGapClasses[gap], className) }, props), {}, {
494
+ let { gap = "sm", className, children } = _ref2, props = require_text_truncate._objectWithoutProperties(_ref2, _excluded2$6);
495
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn("flex flex-col", headerGapClasses[gap], className) }, props), {}, {
496
496
  "data-opt-id": "JST3J",
497
497
  "data-opt-slug": "card.CardHeader",
498
498
  children
@@ -500,8 +500,8 @@ function CardHeader(_ref2) {
500
500
  }
501
501
  /** Renders the card title component. */
502
502
  function CardTitle(_ref3) {
503
- let { as: Tag = "h3", className, children } = _ref3, props = require_highlight._objectWithoutProperties(_ref3, _excluded3$3);
504
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Tag, require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn(`text-lg font-semibold ${require_highlight.OPT_TEXT_PRIMARY}`, className) }, props), {}, {
503
+ let { as: Tag = "h3", className, children } = _ref3, props = require_text_truncate._objectWithoutProperties(_ref3, _excluded3$3);
504
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Tag, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn(`text-lg font-semibold ${require_text_truncate.OPT_TEXT_PRIMARY}`, className) }, props), {}, {
505
505
  "data-opt-id": "V15TX",
506
506
  "data-opt-slug": "card.CardTitle",
507
507
  children
@@ -509,8 +509,8 @@ function CardTitle(_ref3) {
509
509
  }
510
510
  /** Renders the card description component. */
511
511
  function CardDescription(_ref4) {
512
- let { className, children } = _ref4, props = require_highlight._objectWithoutProperties(_ref4, _excluded4$2);
513
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn(`text-sm ${require_highlight.OPT_TEXT_SECONDARY}`, className) }, props), {}, {
512
+ let { className, children } = _ref4, props = require_text_truncate._objectWithoutProperties(_ref4, _excluded4$2);
513
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn(`text-sm ${require_text_truncate.OPT_TEXT_SECONDARY}`, className) }, props), {}, {
514
514
  "data-opt-id": "YB1RN",
515
515
  "data-opt-slug": "card.CardDescription",
516
516
  children
@@ -524,8 +524,8 @@ const contentSpacingClasses = {
524
524
  };
525
525
  /** Renders the card content component. */
526
526
  function CardContent(_ref5) {
527
- let { spacing = "md", className, children } = _ref5, props = require_highlight._objectWithoutProperties(_ref5, _excluded5);
528
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn(contentSpacingClasses[spacing], className) }, props), {}, {
527
+ let { spacing = "md", className, children } = _ref5, props = require_text_truncate._objectWithoutProperties(_ref5, _excluded5);
528
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn(contentSpacingClasses[spacing], className) }, props), {}, {
529
529
  "data-opt-id": "9Y68R",
530
530
  "data-opt-slug": "card.CardContent",
531
531
  children
@@ -533,8 +533,8 @@ function CardContent(_ref5) {
533
533
  }
534
534
  /** Renders the card footer component. */
535
535
  function CardFooter(_ref6) {
536
- let { divider = true, className, children } = _ref6, props = require_highlight._objectWithoutProperties(_ref6, _excluded6);
537
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn("mt-4 flex items-center justify-end gap-2 pt-4", divider && `border-t border border-border`, className) }, props), {}, {
536
+ let { divider = true, className, children } = _ref6, props = require_text_truncate._objectWithoutProperties(_ref6, _excluded6);
537
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn("mt-4 flex items-center justify-end gap-2 pt-4", divider && `border-t border border-border`, className) }, props), {}, {
538
538
  "data-opt-id": "GRNTR",
539
539
  "data-opt-slug": "card.CardFooter",
540
540
  children
@@ -578,9 +578,9 @@ const sizeStyles$7 = {
578
578
  };
579
579
  const Switch = (0, react.forwardRef)((_ref, ref) => {
580
580
  var _useInputId;
581
- let { label, required, error, hint, description, checked: controlledChecked, defaultChecked = false, onChange, size = "md", disabled, className, id, onClick, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$12);
581
+ let { label, required, error, hint, description, checked: controlledChecked, defaultChecked = false, onChange, size = "md", disabled, className, id, onClick, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$12);
582
582
  const fallbackId = (0, react.useId)();
583
- const switchId = (_useInputId = require_highlight.useInputId(id, label, "switch")) !== null && _useInputId !== void 0 ? _useInputId : `switch-${fallbackId}`;
583
+ const switchId = (_useInputId = require_text_truncate.useInputId(id, label, "switch")) !== null && _useInputId !== void 0 ? _useInputId : `switch-${fallbackId}`;
584
584
  const hintText = hint !== null && hint !== void 0 ? hint : description;
585
585
  const hasError = Boolean(error);
586
586
  const styles = sizeStyles$7[size];
@@ -602,12 +602,12 @@ const Switch = (0, react.forwardRef)((_ref, ref) => {
602
602
  onClick
603
603
  ]);
604
604
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
605
- className: require_highlight.cn("flex flex-col gap-1.5", className),
605
+ className: require_text_truncate.cn("flex flex-col gap-1.5", className),
606
606
  "data-opt-id": "51Z9R",
607
607
  "data-opt-slug": "switch.Switch",
608
608
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
609
609
  className: "flex items-start gap-3",
610
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", require_highlight._objectSpread2(require_highlight._objectSpread2({
610
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
611
611
  ref,
612
612
  type: "button",
613
613
  role: "switch",
@@ -616,24 +616,24 @@ const Switch = (0, react.forwardRef)((_ref, ref) => {
616
616
  "aria-label": switchAriaLabel,
617
617
  "aria-labelledby": switchLabelledBy,
618
618
  disabled,
619
- className: require_highlight.cn("group relative inline-flex shrink-0 cursor-pointer rounded-full p-0.5 transition-colors", styles.track, "bg-bg-muted", "aria-[checked=true]:bg-accent", "disabled:cursor-not-allowed disabled:opacity-50", require_highlight.OPT_FOCUS_VISIBLE),
619
+ className: require_text_truncate.cn("group relative inline-flex shrink-0 cursor-pointer rounded-full p-0.5 transition-colors", styles.track, "bg-bg-muted", "aria-[checked=true]:bg-accent", "disabled:cursor-not-allowed disabled:opacity-50", require_text_truncate.OPT_FOCUS_VISIBLE),
620
620
  "aria-invalid": hasError,
621
621
  "aria-required": required,
622
- "aria-describedby": require_highlight.getDescribedBy(switchId, error, hintText),
622
+ "aria-describedby": require_text_truncate.getDescribedBy(switchId, error, hintText),
623
623
  onClick: handleClick
624
- }, props), {}, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: require_highlight.cn("pointer-events-none inline-block transform rounded-full bg-white shadow-sm ring-0 transition-transform", styles.thumb, "translate-x-0", size === "sm" && "group-aria-[checked=true]:translate-x-4", size === "md" && "group-aria-[checked=true]:translate-x-5", size === "lg" && "group-aria-[checked=true]:translate-x-7") }) })), (label || hintText) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
624
+ }, props), {}, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: require_text_truncate.cn("pointer-events-none inline-block transform rounded-full bg-white shadow-sm ring-0 transition-transform", styles.thumb, "translate-x-0", size === "sm" && "group-aria-[checked=true]:translate-x-4", size === "md" && "group-aria-[checked=true]:translate-x-5", size === "lg" && "group-aria-[checked=true]:translate-x-7") }) })), (label || hintText) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
625
625
  className: "flex flex-col",
626
626
  children: [label && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
627
627
  id: labelId,
628
- className: require_highlight.cn("text-text-primary text-sm font-medium", disabled && "opacity-50"),
629
- children: [label, required && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.RequiredMark, {})]
628
+ className: require_text_truncate.cn("text-text-primary text-sm font-medium", disabled && "opacity-50"),
629
+ children: [label, required && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.RequiredMark, {})]
630
630
  }), hintText && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
631
631
  id: `${switchId}-hint`,
632
- className: require_highlight.cn("text-text-tertiary text-sm", disabled && "opacity-50"),
632
+ className: require_text_truncate.cn("text-text-tertiary text-sm", disabled && "opacity-50"),
633
633
  children: hintText
634
634
  })]
635
635
  })]
636
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.FieldMessages, {
636
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.FieldMessages, {
637
637
  id: switchId,
638
638
  error
639
639
  })]
@@ -661,9 +661,9 @@ const variantStyles$2 = {
661
661
  };
662
662
  /** Renders the skeleton component. */
663
663
  function Skeleton(_ref) {
664
- let { variant = "text", width, height, lines = 1, animated = true, className, style } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$11);
665
- const baseClass = require_highlight.cn("bg-bg-subtle", animated && "animate-pulse", variantStyles$2[variant], className);
666
- const computedStyle = require_highlight._objectSpread2({
664
+ let { variant = "text", width, height, lines = 1, animated = true, className, style } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$11);
665
+ const baseClass = require_text_truncate.cn("bg-bg-subtle", animated && "animate-pulse", variantStyles$2[variant], className);
666
+ const computedStyle = require_text_truncate._objectSpread2({
667
667
  width: typeof width === "number" ? `${width}px` : width,
668
668
  height: typeof height === "number" ? `${height}px` : height
669
669
  }, style);
@@ -673,15 +673,15 @@ function Skeleton(_ref) {
673
673
  "aria-label": "Loading",
674
674
  "data-opt-id": "EJT87",
675
675
  "data-opt-slug": "skeleton.Skeleton",
676
- children: [Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", require_highlight._objectSpread2({
677
- className: require_highlight.cn(baseClass, i === lines - 1 && "w-4/5"),
676
+ children: [Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", require_text_truncate._objectSpread2({
677
+ className: require_text_truncate.cn(baseClass, i === lines - 1 && "w-4/5"),
678
678
  style: i === lines - 1 ? void 0 : computedStyle
679
679
  }, props), i)), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
680
680
  className: "sr-only",
681
681
  children: "Loading..."
682
682
  })]
683
683
  });
684
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", require_highlight._objectSpread2(require_highlight._objectSpread2({
684
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
685
685
  className: baseClass,
686
686
  style: computedStyle,
687
687
  role: "status",
@@ -697,8 +697,8 @@ function Skeleton(_ref) {
697
697
  }
698
698
  /** Renders the skeleton text component. */
699
699
  function SkeletonText(_ref2) {
700
- let { lines = 3, className } = _ref2, props = require_highlight._objectWithoutProperties(_ref2, _excluded2$5);
701
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, require_highlight._objectSpread2(require_highlight._objectSpread2({
700
+ let { lines = 3, className } = _ref2, props = require_text_truncate._objectWithoutProperties(_ref2, _excluded2$5);
701
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
702
702
  variant: "text",
703
703
  lines,
704
704
  className
@@ -709,8 +709,8 @@ function SkeletonText(_ref2) {
709
709
  }
710
710
  /** Renders the skeleton avatar component. */
711
711
  function SkeletonAvatar(_ref3) {
712
- let { size = 40, className } = _ref3, props = require_highlight._objectWithoutProperties(_ref3, _excluded3$2);
713
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, require_highlight._objectSpread2(require_highlight._objectSpread2({
712
+ let { size = 40, className } = _ref3, props = require_text_truncate._objectWithoutProperties(_ref3, _excluded3$2);
713
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Skeleton, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
714
714
  variant: "circular",
715
715
  width: size,
716
716
  height: size,
@@ -722,8 +722,8 @@ function SkeletonAvatar(_ref3) {
722
722
  }
723
723
  /** Renders the skeleton card component. */
724
724
  function SkeletonCard(_ref4) {
725
- let { className } = _ref4, props = require_highlight._objectWithoutProperties(_ref4, _excluded4$1);
726
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn("gap-group flex flex-col", className) }, props), {}, {
725
+ let { className } = _ref4, props = require_text_truncate._objectWithoutProperties(_ref4, _excluded4$1);
726
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn("gap-group flex flex-col", className) }, props), {}, {
727
727
  "data-opt-id": "34V5D",
728
728
  "data-opt-slug": "skeleton.SkeletonCard",
729
729
  children: [
@@ -745,7 +745,7 @@ function SkeletonCard(_ref4) {
745
745
  /** Renders the skeleton table component. */
746
746
  function SkeletonTable({ rows = 5, columns = 4, className }) {
747
747
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
748
- className: require_highlight.cn("gap-element flex flex-col", className),
748
+ className: require_text_truncate.cn("gap-element flex flex-col", className),
749
749
  role: "status",
750
750
  "aria-label": "Loading table",
751
751
  "data-opt-id": "3KEDN",
@@ -788,7 +788,7 @@ const _excluded$10 = [
788
788
  "id",
789
789
  "rows"
790
790
  ];
791
- const textareaSizeStyles = require_highlight.OPT_TEXTAREA_SIZE;
791
+ const textareaSizeStyles = require_text_truncate.OPT_TEXTAREA_SIZE;
792
792
  const resizeStyles = {
793
793
  none: "resize-none",
794
794
  vertical: "resize-y",
@@ -797,29 +797,29 @@ const resizeStyles = {
797
797
  };
798
798
  const Textarea = (0, react.forwardRef)((_ref, ref) => {
799
799
  var _useInputId;
800
- let { label, error, hint, fullWidth = false, required, resize = "vertical", size = "md", className, id, rows = 4 } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$10);
800
+ let { label, error, hint, fullWidth = false, required, resize = "vertical", size = "md", className, id, rows = 4 } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$10);
801
801
  const fallbackId = (0, react.useId)().replace(/:/g, "");
802
- const textareaId = (_useInputId = require_highlight.useInputId(id, label, "textarea")) !== null && _useInputId !== void 0 ? _useInputId : `textarea-${fallbackId}`;
802
+ const textareaId = (_useInputId = require_text_truncate.useInputId(id, label, "textarea")) !== null && _useInputId !== void 0 ? _useInputId : `textarea-${fallbackId}`;
803
803
  const hasError = Boolean(error);
804
804
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
805
- className: require_highlight.cn("flex flex-col gap-1.5", fullWidth && "w-full"),
805
+ className: require_text_truncate.cn("flex flex-col gap-1.5", fullWidth && "w-full"),
806
806
  "data-opt-id": "6T58H",
807
807
  "data-opt-slug": "textarea.Textarea",
808
808
  children: [
809
809
  label && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
810
810
  htmlFor: textareaId,
811
811
  className: "text-text-primary text-sm font-medium",
812
- children: [label, required && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.RequiredMark, {})]
812
+ children: [label, required && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.RequiredMark, {})]
813
813
  }),
814
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", require_highlight._objectSpread2({
814
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", require_text_truncate._objectSpread2({
815
815
  ref,
816
816
  id: textareaId,
817
817
  rows,
818
- className: require_highlight.cn("border-border bg-surface text-text-primary placeholder:text-text-tertiary w-full rounded-lg border px-4 py-3 text-sm outline-transparent", require_highlight.OPT_FOCUS_VISIBLE, textareaSizeStyles[size], resizeStyles[resize], hasError && "border-danger focus-visible:outline-danger", !fullWidth && "w-auto", className),
818
+ className: require_text_truncate.cn("border-border bg-surface text-text-primary placeholder:text-text-tertiary w-full rounded-lg border px-4 py-3 text-sm outline-transparent", require_text_truncate.OPT_FOCUS_VISIBLE, textareaSizeStyles[size], resizeStyles[resize], hasError && "border-danger focus-visible:outline-danger", !fullWidth && "w-auto", className),
819
819
  "aria-invalid": hasError,
820
- "aria-describedby": require_highlight.getDescribedBy(textareaId, error, hint)
820
+ "aria-describedby": require_text_truncate.getDescribedBy(textareaId, error, hint)
821
821
  }, props)),
822
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.FieldMessages, {
822
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.FieldMessages, {
823
823
  id: textareaId,
824
824
  error,
825
825
  hint
@@ -932,7 +932,7 @@ function getColorFromName(name) {
932
932
  /** Renders the avatar component. */
933
933
  function Avatar(_ref) {
934
934
  var _ref2, _ref3;
935
- let { src, srcSet, sizes, crossOrigin, referrerPolicy, alt, name, size = "md", fallback, status, className, onLoadingStatusChange } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$9);
935
+ let { src, srcSet, sizes, crossOrigin, referrerPolicy, alt, name, size = "md", fallback, status, className, onLoadingStatusChange } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$9);
936
936
  const loadingStatus = useImageLoadingStatus(src, {
937
937
  srcSet,
938
938
  sizes,
@@ -970,33 +970,33 @@ function Avatar(_ref) {
970
970
  "aria-hidden": "true",
971
971
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" })
972
972
  });
973
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", require_highlight._objectSpread2(require_highlight._objectSpread2({
973
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
974
974
  role: "img",
975
975
  "aria-label": avatarLabel,
976
- className: require_highlight.cn("relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full", sizeStyles$6[size], !showImage && bgColor, className)
976
+ className: require_text_truncate.cn("relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full", sizeStyles$6[size], !showImage && bgColor, className)
977
977
  }, props), {}, {
978
978
  "data-opt-id": "SCMM0",
979
979
  "data-opt-slug": "avatar.Avatar",
980
980
  children: [avatarContent, status && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
981
- className: require_highlight.cn("border-surface absolute right-0 bottom-0 rounded-full", statusStyles[status], statusSizeStyles[size]),
981
+ className: require_text_truncate.cn("border-surface absolute right-0 bottom-0 rounded-full", statusStyles[status], statusSizeStyles[size]),
982
982
  "aria-hidden": "true"
983
983
  })]
984
984
  }));
985
985
  }
986
986
  /** Renders the avatar group component. */
987
987
  function AvatarGroup(_ref5) {
988
- let { max = 4, size = "md", children, className } = _ref5, props = require_highlight._objectWithoutProperties(_ref5, _excluded2$4);
988
+ let { max = 4, size = "md", children, className } = _ref5, props = require_text_truncate._objectWithoutProperties(_ref5, _excluded2$4);
989
989
  const avatars = Array.isArray(children) ? children : [children];
990
990
  const visibleAvatars = avatars.slice(0, max);
991
991
  const remainingCount = avatars.length - max;
992
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn("flex", className) }, props), {}, {
992
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn("flex", className) }, props), {}, {
993
993
  "data-opt-id": "MVB53",
994
994
  "data-opt-slug": "avatar.AvatarGroup",
995
995
  children: [visibleAvatars.map((child, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
996
996
  className: "ring-surface relative -ml-2 inline-block rounded-full ring-2 first:ml-0",
997
997
  children: child
998
998
  }, index)), remainingCount > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
999
- className: require_highlight.cn("bg-bg-subtle text-text-secondary ring-surface relative inline-flex items-center justify-center rounded-full font-medium ring-2", sizeStyles$6[size]),
999
+ className: require_text_truncate.cn("bg-bg-subtle text-text-secondary ring-surface relative inline-flex items-center justify-center rounded-full font-medium ring-2", sizeStyles$6[size]),
1000
1000
  children: ["+", remainingCount]
1001
1001
  })]
1002
1002
  }));
@@ -1049,10 +1049,10 @@ function getProgressValue(value, max) {
1049
1049
  }
1050
1050
  /** Renders the progress component. */
1051
1051
  function Progress(_ref) {
1052
- let { value, max = 100, size = "md", variant = "default", showLabel = false, label, animated = true, indeterminate = false, className } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$8);
1052
+ let { value, max = 100, size = "md", variant = "default", showLabel = false, label, animated = true, indeterminate = false, className } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$8);
1053
1053
  const progress = indeterminate || value === void 0 ? null : getProgressValue(value, max);
1054
1054
  const shouldRenderHeader = Boolean(label) || showLabel && progress;
1055
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn("w-full", className) }, props), {}, {
1055
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn("w-full", className) }, props), {}, {
1056
1056
  "data-opt-id": "Y5N8R",
1057
1057
  "data-opt-slug": "progress.Progress",
1058
1058
  children: [shouldRenderHeader && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -1065,7 +1065,7 @@ function Progress(_ref) {
1065
1065
  children: progress.valueText
1066
1066
  })]
1067
1067
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1068
- className: require_highlight.cn("bg-bg-subtle w-full overflow-hidden rounded-full", sizeStyles$5[size]),
1068
+ className: require_text_truncate.cn("bg-bg-subtle w-full overflow-hidden rounded-full", sizeStyles$5[size]),
1069
1069
  role: "progressbar",
1070
1070
  "aria-valuenow": progress === null || progress === void 0 ? void 0 : progress.clampedValue,
1071
1071
  "aria-valuemin": progress ? 0 : void 0,
@@ -1073,7 +1073,7 @@ function Progress(_ref) {
1073
1073
  "aria-valuetext": progress === null || progress === void 0 ? void 0 : progress.valueText,
1074
1074
  "aria-label": label !== null && label !== void 0 ? label : progress ? `${progress.valueText} complete` : "Loading",
1075
1075
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1076
- className: require_highlight.cn("h-full rounded-full", variantStyles$1[variant], !progress && "w-1/3 animate-pulse", animated && (progress ? "transition-all duration-300 ease-out" : "transition-opacity duration-700 ease-in-out")),
1076
+ className: require_text_truncate.cn("h-full rounded-full", variantStyles$1[variant], !progress && "w-1/3 animate-pulse", animated && (progress ? "transition-all duration-300 ease-out" : "transition-opacity duration-700 ease-in-out")),
1077
1077
  style: progress ? { width: `${progress.percentage}%` } : void 0
1078
1078
  })
1079
1079
  })]
@@ -1088,7 +1088,7 @@ const circularVariantStyles = {
1088
1088
  /** Renders the circular progress component. */
1089
1089
  function CircularProgress(_ref2) {
1090
1090
  var _progress$percentage;
1091
- let { value, max = 100, size = 48, strokeWidth = 4, variant = "default", showLabel = false, label, indeterminate = false, className } = _ref2, props = require_highlight._objectWithoutProperties(_ref2, _excluded2$3);
1091
+ let { value, max = 100, size = 48, strokeWidth = 4, variant = "default", showLabel = false, label, indeterminate = false, className } = _ref2, props = require_text_truncate._objectWithoutProperties(_ref2, _excluded2$3);
1092
1092
  const labelId = (0, react.useId)();
1093
1093
  const isIndeterminate = indeterminate || value === void 0;
1094
1094
  const progress = isIndeterminate ? null : getProgressValue(value, max);
@@ -1106,10 +1106,10 @@ function CircularProgress(_ref2) {
1106
1106
  className: "sr-only",
1107
1107
  children: label
1108
1108
  }),
1109
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", require_highlight._objectSpread2(require_highlight._objectSpread2({
1109
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
1110
1110
  width: size,
1111
1111
  height: size,
1112
- className: require_highlight.cn(isIndeterminate ? "animate-spin" : "-rotate-90", className),
1112
+ className: require_text_truncate.cn(isIndeterminate ? "animate-spin" : "-rotate-90", className),
1113
1113
  role: isIndeterminate ? "progressbar" : "meter",
1114
1114
  "aria-labelledby": label ? labelId : void 0,
1115
1115
  "aria-valuenow": progress === null || progress === void 0 ? void 0 : progress.clampedValue,
@@ -1131,7 +1131,7 @@ function CircularProgress(_ref2) {
1131
1131
  fill: "none",
1132
1132
  strokeWidth,
1133
1133
  strokeLinecap: "round",
1134
- className: require_highlight.cn("transition-all duration-300 ease-out", circularVariantStyles[variant]),
1134
+ className: require_text_truncate.cn("transition-all duration-300 ease-out", circularVariantStyles[variant]),
1135
1135
  style: {
1136
1136
  strokeDasharray: isIndeterminate ? `${circumference * .28} ${circumference}` : circumference,
1137
1137
  strokeDashoffset: isIndeterminate ? 0 : strokeDashoffset,
@@ -1175,10 +1175,10 @@ const variantStyles = {
1175
1175
  * opt-ui-primitives Meter primitive, which owns the role/aria/valuetext.
1176
1176
  */
1177
1177
  function Meter(_ref) {
1178
- let { value, min = 0, max = 100, size = "md", variant = "default", showValue = false, label, getValueLabel, className } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$7);
1178
+ let { value, min = 0, max = 100, size = "md", variant = "default", showValue = false, label, getValueLabel, className } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$7);
1179
1179
  const clamped = Math.min(Math.max(value, min), max);
1180
1180
  const percentage = max === min ? 0 : (clamped - min) / (max - min) * 100;
1181
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn("w-full", className) }, props), {}, {
1181
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn("w-full", className) }, props), {}, {
1182
1182
  "data-opt-id": "G01TE",
1183
1183
  "data-opt-slug": "meter.Meter",
1184
1184
  children: [(showValue || label) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -1196,9 +1196,9 @@ function Meter(_ref) {
1196
1196
  max,
1197
1197
  getValueLabel,
1198
1198
  "aria-label": label !== null && label !== void 0 ? label : `${Math.round(percentage)}%`,
1199
- className: require_highlight.cn("bg-bg-subtle w-full overflow-hidden rounded-full", sizeStyles$4[size]),
1199
+ className: require_text_truncate.cn("bg-bg-subtle w-full overflow-hidden rounded-full", sizeStyles$4[size]),
1200
1200
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1201
- className: require_highlight.cn("h-full rounded-full transition-all duration-300 ease-out", variantStyles[variant]),
1201
+ className: require_text_truncate.cn("h-full rounded-full transition-all duration-300 ease-out", variantStyles[variant]),
1202
1202
  style: { width: `${percentage}%` }
1203
1203
  })
1204
1204
  })]
@@ -1242,7 +1242,7 @@ function StepBuilder({ steps, onChange, label, addLabel = "Add step", maxSteps,
1242
1242
  editingId
1243
1243
  ]);
1244
1244
  const updateStep = (0, react.useCallback)((id, updates) => {
1245
- onChange(steps.map((s) => s.id === id ? require_highlight._objectSpread2(require_highlight._objectSpread2({}, s), updates) : s));
1245
+ onChange(steps.map((s) => s.id === id ? require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, s), updates) : s));
1246
1246
  }, [steps, onChange]);
1247
1247
  const moveStep = (0, react.useCallback)((index, direction) => {
1248
1248
  const target = index + direction;
@@ -1253,7 +1253,7 @@ function StepBuilder({ steps, onChange, label, addLabel = "Add step", maxSteps,
1253
1253
  }, [steps, onChange]);
1254
1254
  const atLimit = Boolean(maxSteps && steps.length >= maxSteps);
1255
1255
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1256
- className: require_highlight.cn("flex flex-col gap-3", className),
1256
+ className: require_text_truncate.cn("flex flex-col gap-3", className),
1257
1257
  role: "list",
1258
1258
  "aria-label": (_ref = ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : label) !== null && _ref !== void 0 ? _ref : "Step builder",
1259
1259
  "data-opt-id": "7BQDT",
@@ -1266,7 +1266,7 @@ function StepBuilder({ steps, onChange, label, addLabel = "Add step", maxSteps,
1266
1266
  steps.map((step, index) => {
1267
1267
  var _step$description;
1268
1268
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1269
- className: require_highlight.cn(require_highlight.OPT_SURFACE, require_highlight.OPT_BORDER, "flex items-start gap-3 p-3"),
1269
+ className: require_text_truncate.cn(require_text_truncate.OPT_SURFACE, require_text_truncate.OPT_BORDER, "flex items-start gap-3 p-3"),
1270
1270
  role: "listitem",
1271
1271
  children: [
1272
1272
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -1286,7 +1286,7 @@ function StepBuilder({ steps, onChange, label, addLabel = "Add step", maxSteps,
1286
1286
  onKeyDown: (e) => {
1287
1287
  if (e.key === "Enter") setEditingId(null);
1288
1288
  },
1289
- className: require_highlight.cn("border-border bg-surface focus-visible:ring-ring focus-visible:ring-offset-ring-offset w-full rounded-md border px-2 py-1 text-sm outline-none focus-visible:ring-2 focus-visible:ring-offset-1", require_highlight.OPT_TEXT_PRIMARY, require_highlight.OPT_FOCUS_VISIBLE),
1289
+ className: require_text_truncate.cn("border-border bg-surface focus-visible:ring-ring focus-visible:ring-offset-ring-offset w-full rounded-md border px-2 py-1 text-sm outline-none focus-visible:ring-2 focus-visible:ring-offset-1", require_text_truncate.OPT_TEXT_PRIMARY, require_text_truncate.OPT_FOCUS_VISIBLE),
1290
1290
  "aria-label": "Step label",
1291
1291
  autoFocus: true
1292
1292
  }),
@@ -1295,10 +1295,10 @@ function StepBuilder({ steps, onChange, label, addLabel = "Add step", maxSteps,
1295
1295
  value: (_step$description = step.description) !== null && _step$description !== void 0 ? _step$description : "",
1296
1296
  onChange: (e) => updateStep(step.id, { description: e.target.value }),
1297
1297
  placeholder: "Description (optional)",
1298
- className: require_highlight.cn("border-border bg-surface focus-visible:ring-ring focus-visible:ring-offset-ring-offset w-full rounded-md border px-2 py-1 text-sm outline-none focus-visible:ring-2 focus-visible:ring-offset-1", require_highlight.OPT_TEXT_PRIMARY, "placeholder:text-text-tertiary", require_highlight.OPT_FOCUS_VISIBLE),
1298
+ className: require_text_truncate.cn("border-border bg-surface focus-visible:ring-ring focus-visible:ring-offset-ring-offset w-full rounded-md border px-2 py-1 text-sm outline-none focus-visible:ring-2 focus-visible:ring-offset-1", require_text_truncate.OPT_TEXT_PRIMARY, "placeholder:text-text-tertiary", require_text_truncate.OPT_FOCUS_VISIBLE),
1299
1299
  "aria-label": "Step description"
1300
1300
  }),
1301
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.Button, {
1301
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.Button, {
1302
1302
  variant: "ghost",
1303
1303
  size: "sm",
1304
1304
  onClick: () => setEditingId(null),
@@ -1311,10 +1311,10 @@ function StepBuilder({ steps, onChange, label, addLabel = "Add step", maxSteps,
1311
1311
  onClick: () => setEditingId(step.id),
1312
1312
  "aria-label": `Edit ${step.label}`,
1313
1313
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1314
- className: require_highlight.cn(require_highlight.OPT_TEXT_PRIMARY, "text-sm font-medium"),
1314
+ className: require_text_truncate.cn(require_text_truncate.OPT_TEXT_PRIMARY, "text-sm font-medium"),
1315
1315
  children: step.label
1316
1316
  }), step.description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1317
- className: require_highlight.cn("text-text-secondary", "mt-0.5 block text-xs"),
1317
+ className: require_text_truncate.cn("text-text-secondary", "mt-0.5 block text-xs"),
1318
1318
  children: step.description
1319
1319
  })]
1320
1320
  })
@@ -1326,7 +1326,7 @@ function StepBuilder({ steps, onChange, label, addLabel = "Add step", maxSteps,
1326
1326
  type: "button",
1327
1327
  onClick: () => moveStep(index, -1),
1328
1328
  disabled: index === 0,
1329
- className: require_highlight.cn("rounded p-1 text-sm", require_highlight.OPT_TEXT_TERTIARY, "hover:bg-bg-subtle", "disabled:opacity-30", require_highlight.OPT_FOCUS_VISIBLE),
1329
+ className: require_text_truncate.cn("rounded p-1 text-sm", require_text_truncate.OPT_TEXT_TERTIARY, "hover:bg-bg-subtle", "disabled:opacity-30", require_text_truncate.OPT_FOCUS_VISIBLE),
1330
1330
  "aria-label": "Move up",
1331
1331
  children: "▲"
1332
1332
  }),
@@ -1334,14 +1334,14 @@ function StepBuilder({ steps, onChange, label, addLabel = "Add step", maxSteps,
1334
1334
  type: "button",
1335
1335
  onClick: () => moveStep(index, 1),
1336
1336
  disabled: index === steps.length - 1,
1337
- className: require_highlight.cn("rounded p-1 text-sm", require_highlight.OPT_TEXT_TERTIARY, "hover:bg-bg-subtle", "disabled:opacity-30", require_highlight.OPT_FOCUS_VISIBLE),
1337
+ className: require_text_truncate.cn("rounded p-1 text-sm", require_text_truncate.OPT_TEXT_TERTIARY, "hover:bg-bg-subtle", "disabled:opacity-30", require_text_truncate.OPT_FOCUS_VISIBLE),
1338
1338
  "aria-label": "Move down",
1339
1339
  children: "▼"
1340
1340
  }),
1341
1341
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1342
1342
  type: "button",
1343
1343
  onClick: () => removeStep(step.id),
1344
- className: require_highlight.cn("text-danger-fg hover:bg-danger-subtle rounded p-1 text-sm", require_highlight.OPT_FOCUS_VISIBLE),
1344
+ className: require_text_truncate.cn("text-danger-fg hover:bg-danger-subtle rounded p-1 text-sm", require_text_truncate.OPT_FOCUS_VISIBLE),
1345
1345
  "aria-label": `Remove ${step.label}`,
1346
1346
  children: "✕"
1347
1347
  })
@@ -1350,7 +1350,7 @@ function StepBuilder({ steps, onChange, label, addLabel = "Add step", maxSteps,
1350
1350
  ]
1351
1351
  }, step.id);
1352
1352
  }),
1353
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_highlight.Button, {
1353
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_text_truncate.Button, {
1354
1354
  variant: "secondary",
1355
1355
  size: "sm",
1356
1356
  onClick: addStep,
@@ -1526,12 +1526,12 @@ function ConditionBuilder({ groups, onChange, properties = DEFAULT_PROPERTIES, l
1526
1526
  onChange(groups.filter((g) => g.id !== groupId));
1527
1527
  }, [groups, onChange]);
1528
1528
  const updateGroupLogic = (0, react.useCallback)((groupId, logic) => {
1529
- onChange(groups.map((g) => g.id === groupId ? require_highlight._objectSpread2(require_highlight._objectSpread2({}, g), {}, { logic }) : g));
1529
+ onChange(groups.map((g) => g.id === groupId ? require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, g), {}, { logic }) : g));
1530
1530
  }, [groups, onChange]);
1531
1531
  const addCondition = (0, react.useCallback)((groupId) => {
1532
1532
  onChange(groups.map((g) => {
1533
1533
  var _properties$2;
1534
- return g.id === groupId ? require_highlight._objectSpread2(require_highlight._objectSpread2({}, g), {}, { conditions: [...g.conditions, {
1534
+ return g.id === groupId ? require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, g), {}, { conditions: [...g.conditions, {
1535
1535
  id: createConditionId(),
1536
1536
  property: (_properties$2 = properties[0]) !== null && _properties$2 !== void 0 ? _properties$2 : "",
1537
1537
  operator: "equals",
@@ -1545,15 +1545,15 @@ function ConditionBuilder({ groups, onChange, properties = DEFAULT_PROPERTIES, l
1545
1545
  createConditionId
1546
1546
  ]);
1547
1547
  const removeCondition = (0, react.useCallback)((groupId, condId) => {
1548
- onChange(groups.map((g) => g.id === groupId ? require_highlight._objectSpread2(require_highlight._objectSpread2({}, g), {}, { conditions: g.conditions.filter((c) => c.id !== condId) }) : g));
1548
+ onChange(groups.map((g) => g.id === groupId ? require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, g), {}, { conditions: g.conditions.filter((c) => c.id !== condId) }) : g));
1549
1549
  }, [groups, onChange]);
1550
1550
  const updateCondition = (0, react.useCallback)((groupId, condId, updates) => {
1551
- onChange(groups.map((g) => g.id === groupId ? require_highlight._objectSpread2(require_highlight._objectSpread2({}, g), {}, { conditions: g.conditions.map((c) => c.id === condId ? require_highlight._objectSpread2(require_highlight._objectSpread2({}, c), updates) : c) }) : g));
1551
+ onChange(groups.map((g) => g.id === groupId ? require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, g), {}, { conditions: g.conditions.map((c) => c.id === condId ? require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, c), updates) : c) }) : g));
1552
1552
  }, [groups, onChange]);
1553
1553
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ConditionBuilderIdScopeContext.Provider, {
1554
1554
  value: idScope,
1555
1555
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1556
- className: require_highlight.cn("flex flex-col gap-3", className),
1556
+ className: require_text_truncate.cn("flex flex-col gap-3", className),
1557
1557
  "aria-label": (_ref = ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : label) !== null && _ref !== void 0 ? _ref : "Condition builder",
1558
1558
  "data-opt-id": "SXXKJ",
1559
1559
  "data-opt-slug": "condition-builder.ConditionBuilder",
@@ -1573,7 +1573,7 @@ function ConditionBuilder({ groups, onChange, properties = DEFAULT_PROPERTIES, l
1573
1573
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "bg-border-subtle h-px flex-1" })
1574
1574
  ]
1575
1575
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1576
- className: require_highlight.cn(require_highlight.OPT_SURFACE, require_highlight.OPT_BORDER, "p-3"),
1576
+ className: require_text_truncate.cn(require_text_truncate.OPT_SURFACE, require_text_truncate.OPT_BORDER, "p-3"),
1577
1577
  role: "group",
1578
1578
  "aria-label": `Condition group ${groupIndex + 1}`,
1579
1579
  children: [
@@ -1583,7 +1583,7 @@ function ConditionBuilder({ groups, onChange, properties = DEFAULT_PROPERTIES, l
1583
1583
  className: "flex items-center gap-2",
1584
1584
  children: [
1585
1585
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1586
- className: require_highlight.cn(require_highlight.OPT_TEXT_SECONDARY, "text-xs font-medium"),
1586
+ className: require_text_truncate.cn(require_text_truncate.OPT_TEXT_SECONDARY, "text-xs font-medium"),
1587
1587
  children: "Match"
1588
1588
  }),
1589
1589
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
@@ -1592,7 +1592,7 @@ function ConditionBuilder({ groups, onChange, properties = DEFAULT_PROPERTIES, l
1592
1592
  const v = e.target.value;
1593
1593
  if (v === "and" || v === "or") updateGroupLogic(group.id, v);
1594
1594
  },
1595
- className: require_highlight.cn("border-border bg-surface focus-visible:ring-ring focus-visible:ring-offset-ring-offset rounded border px-2 py-0.5 text-xs font-semibold outline-none focus-visible:ring-2 focus-visible:ring-offset-1", require_highlight.OPT_TEXT_PRIMARY, require_highlight.OPT_FOCUS_VISIBLE),
1595
+ className: require_text_truncate.cn("border-border bg-surface focus-visible:ring-ring focus-visible:ring-offset-ring-offset rounded border px-2 py-0.5 text-xs font-semibold outline-none focus-visible:ring-2 focus-visible:ring-offset-1", require_text_truncate.OPT_TEXT_PRIMARY, require_text_truncate.OPT_FOCUS_VISIBLE),
1596
1596
  "aria-label": "Group logic",
1597
1597
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
1598
1598
  value: "and",
@@ -1603,14 +1603,14 @@ function ConditionBuilder({ groups, onChange, properties = DEFAULT_PROPERTIES, l
1603
1603
  })]
1604
1604
  }),
1605
1605
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1606
- className: require_highlight.cn(require_highlight.OPT_TEXT_SECONDARY, "text-xs"),
1606
+ className: require_text_truncate.cn(require_text_truncate.OPT_TEXT_SECONDARY, "text-xs"),
1607
1607
  children: "of the following"
1608
1608
  })
1609
1609
  ]
1610
1610
  }), groups.length > 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1611
1611
  type: "button",
1612
1612
  onClick: () => removeGroup(group.id),
1613
- className: require_highlight.cn("text-danger-fg hover:bg-danger-subtle rounded p-1 text-xs", "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-ring-offset"),
1613
+ className: require_text_truncate.cn("text-danger-fg hover:bg-danger-subtle rounded p-1 text-xs", "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-ring-offset"),
1614
1614
  "aria-label": "Remove group",
1615
1615
  children: "✕"
1616
1616
  })]
@@ -1623,7 +1623,7 @@ function ConditionBuilder({ groups, onChange, properties = DEFAULT_PROPERTIES, l
1623
1623
  className: "flex items-center gap-2",
1624
1624
  children: [
1625
1625
  condIndex > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1626
- className: require_highlight.cn("w-8 text-center text-[10px] font-semibold uppercase", group.logic === "and" ? "text-info-fg" : "text-warning-fg"),
1626
+ className: require_text_truncate.cn("w-8 text-center text-[10px] font-semibold uppercase", group.logic === "and" ? "text-info-fg" : "text-warning-fg"),
1627
1627
  children: group.logic
1628
1628
  }),
1629
1629
  condIndex === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "w-8" }),
@@ -1636,7 +1636,7 @@ function ConditionBuilder({ groups, onChange, properties = DEFAULT_PROPERTIES, l
1636
1636
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
1637
1637
  value: cond.property,
1638
1638
  onChange: (e) => updateCondition(group.id, cond.id, { property: e.target.value }),
1639
- className: require_highlight.cn("border-border bg-surface focus-visible:ring-ring focus-visible:ring-offset-ring-offset min-w-[120px] rounded border px-2 py-1.5 text-sm outline-none focus-visible:ring-2 focus-visible:ring-offset-1", require_highlight.OPT_TEXT_PRIMARY, require_highlight.OPT_FOCUS_VISIBLE),
1639
+ className: require_text_truncate.cn("border-border bg-surface focus-visible:ring-ring focus-visible:ring-offset-ring-offset min-w-[120px] rounded border px-2 py-1.5 text-sm outline-none focus-visible:ring-2 focus-visible:ring-offset-1", require_text_truncate.OPT_TEXT_PRIMARY, require_text_truncate.OPT_FOCUS_VISIBLE),
1640
1640
  "aria-label": "Property",
1641
1641
  children: properties.map((p) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
1642
1642
  value: p,
@@ -1649,7 +1649,7 @@ function ConditionBuilder({ groups, onChange, properties = DEFAULT_PROPERTIES, l
1649
1649
  const v = e.target.value;
1650
1650
  if (isConditionOperator(v)) updateCondition(group.id, cond.id, { operator: v });
1651
1651
  },
1652
- className: require_highlight.cn("border-border bg-surface focus-visible:ring-ring focus-visible:ring-offset-ring-offset min-w-[130px] rounded border px-2 py-1.5 text-sm outline-none focus-visible:ring-2 focus-visible:ring-offset-1", require_highlight.OPT_TEXT_PRIMARY, require_highlight.OPT_FOCUS_VISIBLE),
1652
+ className: require_text_truncate.cn("border-border bg-surface focus-visible:ring-ring focus-visible:ring-offset-ring-offset min-w-[130px] rounded border px-2 py-1.5 text-sm outline-none focus-visible:ring-2 focus-visible:ring-offset-1", require_text_truncate.OPT_TEXT_PRIMARY, require_text_truncate.OPT_FOCUS_VISIBLE),
1653
1653
  "aria-label": "Operator",
1654
1654
  children: Object.entries(OPERATOR_LABELS).map(([key, lbl]) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
1655
1655
  value: key,
@@ -1661,14 +1661,14 @@ function ConditionBuilder({ groups, onChange, properties = DEFAULT_PROPERTIES, l
1661
1661
  value: cond.value,
1662
1662
  onChange: (e) => updateCondition(group.id, cond.id, { value: e.target.value }),
1663
1663
  placeholder: "Value",
1664
- className: require_highlight.cn("border-border bg-surface focus-visible:ring-ring focus-visible:ring-offset-ring-offset min-w-[100px] flex-1 rounded border px-2 py-1.5 text-sm outline-none focus-visible:ring-2 focus-visible:ring-offset-1", "text-text-primary", "placeholder:text-text-tertiary", "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-ring-offset"),
1664
+ className: require_text_truncate.cn("border-border bg-surface focus-visible:ring-ring focus-visible:ring-offset-ring-offset min-w-[100px] flex-1 rounded border px-2 py-1.5 text-sm outline-none focus-visible:ring-2 focus-visible:ring-offset-1", "text-text-primary", "placeholder:text-text-tertiary", "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-ring-offset"),
1665
1665
  "aria-label": "Value"
1666
1666
  })
1667
1667
  ] }),
1668
1668
  group.conditions.length > 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1669
1669
  type: "button",
1670
1670
  onClick: () => removeCondition(group.id, cond.id),
1671
- className: require_highlight.cn("text-danger-fg hover:bg-danger-subtle rounded p-1 text-sm", "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-ring-offset"),
1671
+ className: require_text_truncate.cn("text-danger-fg hover:bg-danger-subtle rounded p-1 text-sm", "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-ring-offset"),
1672
1672
  "aria-label": "Remove condition",
1673
1673
  children: "✕"
1674
1674
  })
@@ -1681,7 +1681,7 @@ function ConditionBuilder({ groups, onChange, properties = DEFAULT_PROPERTIES, l
1681
1681
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ConditionBuilder, {
1682
1682
  groups: group.children,
1683
1683
  onChange: (newChildren) => {
1684
- onChange(groups.map((g) => g.id === group.id ? require_highlight._objectSpread2(require_highlight._objectSpread2({}, g), {}, { children: newChildren }) : g));
1684
+ onChange(groups.map((g) => g.id === group.id ? require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, g), {}, { children: newChildren }) : g));
1685
1685
  },
1686
1686
  properties,
1687
1687
  addConditionLabel,
@@ -1694,12 +1694,12 @@ function ConditionBuilder({ groups, onChange, properties = DEFAULT_PROPERTIES, l
1694
1694
  }),
1695
1695
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1696
1696
  className: "mt-2 flex items-center gap-2",
1697
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_highlight.Button, {
1697
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_text_truncate.Button, {
1698
1698
  variant: "ghost",
1699
1699
  size: "sm",
1700
1700
  onClick: () => addCondition(group.id),
1701
1701
  children: ["+ ", addConditionLabel]
1702
- }), nested && maxDepth > 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_highlight.Button, {
1702
+ }), nested && maxDepth > 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_text_truncate.Button, {
1703
1703
  variant: "ghost",
1704
1704
  size: "sm",
1705
1705
  onClick: () => {
@@ -1716,7 +1716,7 @@ function ConditionBuilder({ groups, onChange, properties = DEFAULT_PROPERTIES, l
1716
1716
  };
1717
1717
  onChange(groups.map((g) => {
1718
1718
  var _g$children;
1719
- return g.id === group.id ? require_highlight._objectSpread2(require_highlight._objectSpread2({}, g), {}, { children: [...(_g$children = g.children) !== null && _g$children !== void 0 ? _g$children : [], nestedGroup] }) : g;
1719
+ return g.id === group.id ? require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, g), {}, { children: [...(_g$children = g.children) !== null && _g$children !== void 0 ? _g$children : [], nestedGroup] }) : g;
1720
1720
  }));
1721
1721
  },
1722
1722
  children: ["+ ", addNestedGroupLabel]
@@ -1726,14 +1726,14 @@ function ConditionBuilder({ groups, onChange, properties = DEFAULT_PROPERTIES, l
1726
1726
  })] }, group.id)),
1727
1727
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1728
1728
  className: "flex items-center gap-3",
1729
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_highlight.Button, {
1729
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_text_truncate.Button, {
1730
1730
  variant: "secondary",
1731
1731
  size: "sm",
1732
1732
  onClick: addGroup,
1733
1733
  className: "self-start",
1734
1734
  children: ["+ ", addGroupLabel]
1735
1735
  }), previewCount != null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1736
- className: require_highlight.cn("text-text-secondary", "text-sm"),
1736
+ className: require_text_truncate.cn("text-text-secondary", "text-sm"),
1737
1737
  children: [formatOptNumber(previewCount), " matches"]
1738
1738
  })]
1739
1739
  })
@@ -1748,35 +1748,35 @@ const _excluded$6 = ["className"];
1748
1748
  const _excluded2$2 = ["className"];
1749
1749
  const _excluded3$1 = ["className", "variant"];
1750
1750
  const _excluded4 = ["className"];
1751
- const DropdownMenu = require_highlight.MenuRoot;
1751
+ const DropdownMenu = require_text_truncate.MenuRoot;
1752
1752
  /** Renders the dropdown trigger component. */
1753
1753
  function DropdownTrigger(_ref) {
1754
- let { className } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$6);
1755
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.MenuTrigger, require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn("cursor-pointer gap-2", className) }, props), {}, {
1754
+ let { className } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$6);
1755
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.MenuTrigger, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn("cursor-pointer gap-2", className) }, props), {}, {
1756
1756
  "data-opt-id": "C4BSS",
1757
1757
  "data-opt-slug": "dropdown-menu.DropdownTrigger"
1758
1758
  }));
1759
1759
  }
1760
1760
  /** Renders the dropdown content component. */
1761
1761
  function DropdownContent(_ref2) {
1762
- let { className } = _ref2, props = require_highlight._objectWithoutProperties(_ref2, _excluded2$2);
1763
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.MenuPopover, require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn(className) }, props), {}, {
1762
+ let { className } = _ref2, props = require_text_truncate._objectWithoutProperties(_ref2, _excluded2$2);
1763
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.MenuPopover, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn(className) }, props), {}, {
1764
1764
  "data-opt-id": "J6NF7",
1765
1765
  "data-opt-slug": "dropdown-menu.DropdownContent"
1766
1766
  }));
1767
1767
  }
1768
1768
  /** Renders the dropdown item component. */
1769
1769
  function DropdownItem(_ref3) {
1770
- let { className, variant = "default" } = _ref3, props = require_highlight._objectWithoutProperties(_ref3, _excluded3$1);
1771
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.MenuItem, require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn("cursor-pointer data-[disabled]:cursor-not-allowed", variant === "destructive" && "text-danger-fg data-[active-item]:bg-danger-subtle data-[active-item]:text-danger-fg", className) }, props), {}, {
1770
+ let { className, variant = "default" } = _ref3, props = require_text_truncate._objectWithoutProperties(_ref3, _excluded3$1);
1771
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.MenuItem, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn("cursor-pointer data-[disabled]:cursor-not-allowed", variant === "destructive" && "text-danger-fg data-[active-item]:bg-danger-subtle data-[active-item]:text-danger-fg", className) }, props), {}, {
1772
1772
  "data-opt-id": "5M6GA",
1773
1773
  "data-opt-slug": "dropdown-menu.DropdownItem"
1774
1774
  }));
1775
1775
  }
1776
1776
  /** Renders the dropdown separator component. */
1777
1777
  function DropdownSeparator(_ref4) {
1778
- let { className } = _ref4, props = require_highlight._objectWithoutProperties(_ref4, _excluded4);
1779
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.MenuSeparator, require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn(className) }, props), {}, {
1778
+ let { className } = _ref4, props = require_text_truncate._objectWithoutProperties(_ref4, _excluded4);
1779
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.MenuSeparator, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn(className) }, props), {}, {
1780
1780
  "data-opt-id": "K9Y54",
1781
1781
  "data-opt-slug": "dropdown-menu.DropdownSeparator"
1782
1782
  }));
@@ -1824,7 +1824,7 @@ function RadioGroup({ children, value, defaultValue = "", onChange, disabled, si
1824
1824
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RadioGroupContext.Provider, {
1825
1825
  value: ctxValue,
1826
1826
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1827
- className: require_highlight.cn("flex flex-col gap-1.5", className),
1827
+ className: require_text_truncate.cn("flex flex-col gap-1.5", className),
1828
1828
  "data-opt-id": "2F20H",
1829
1829
  "data-opt-slug": "radio-group.RadioGroup",
1830
1830
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_reopt_ai_opt_ui_primitives.RadioGroupRoot, {
@@ -1839,14 +1839,14 @@ function RadioGroup({ children, value, defaultValue = "", onChange, disabled, si
1839
1839
  "aria-labelledby": labelId,
1840
1840
  "aria-required": required,
1841
1841
  "aria-invalid": hasError,
1842
- "aria-describedby": require_highlight.getDescribedBy(groupId, error, void 0),
1843
- className: require_highlight.cn("flex", orientation === "vertical" ? "flex-col gap-3" : "flex-row gap-6"),
1842
+ "aria-describedby": require_text_truncate.getDescribedBy(groupId, error, void 0),
1843
+ className: require_text_truncate.cn("flex", orientation === "vertical" ? "flex-col gap-3" : "flex-row gap-6"),
1844
1844
  children: [label && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1845
1845
  id: labelId,
1846
1846
  className: "text-text-secondary mb-1 text-sm font-medium",
1847
- children: [label, required && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.RequiredMark, {})]
1847
+ children: [label, required && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.RequiredMark, {})]
1848
1848
  }), children]
1849
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.FieldMessages, {
1849
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.FieldMessages, {
1850
1850
  id: groupId,
1851
1851
  error
1852
1852
  })]
@@ -1855,7 +1855,7 @@ function RadioGroup({ children, value, defaultValue = "", onChange, disabled, si
1855
1855
  }
1856
1856
  const Radio = (0, react.forwardRef)((_ref, ref) => {
1857
1857
  var _ref2;
1858
- let { label, hint, description, value, name: _name, size: sizeProp, disabled: disabledProp, className } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$5);
1858
+ let { label, hint, description, value, name: _name, size: sizeProp, disabled: disabledProp, className } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$5);
1859
1859
  const groupContext = (0, react.useContext)(RadioGroupContext);
1860
1860
  const primContext = (0, _reopt_ai_opt_ui_primitives.useRadioGroupContext)();
1861
1861
  const size = sizeProp !== null && sizeProp !== void 0 ? sizeProp : groupContext.size;
@@ -1873,10 +1873,10 @@ const Radio = (0, react.forwardRef)((_ref, ref) => {
1873
1873
  value,
1874
1874
  primContext
1875
1875
  ]);
1876
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", require_highlight._objectSpread2(require_highlight._objectSpread2({
1876
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
1877
1877
  ref,
1878
1878
  "aria-checked": isChecked,
1879
- className: require_highlight.cn("group flex items-start gap-3", disabled && "cursor-not-allowed opacity-50", !disabled && "cursor-pointer", className)
1879
+ className: require_text_truncate.cn("group flex items-start gap-3", disabled && "cursor-not-allowed opacity-50", !disabled && "cursor-pointer", className)
1880
1880
  }, props), {}, {
1881
1881
  "data-opt-id": "HY7YG",
1882
1882
  "data-opt-slug": "radio-group.Radio",
@@ -1895,15 +1895,15 @@ const Radio = (0, react.forwardRef)((_ref, ref) => {
1895
1895
  className: "sr-only"
1896
1896
  }),
1897
1897
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1898
- className: require_highlight.cn("relative mt-0.5 inline-flex shrink-0 items-center justify-center rounded-full", styles.radio, "border-border border-2", "bg-surface", "group-aria-checked:border-accent", "transition-colors", "group-has-[:focus-visible]:outline-ring outline-transparent group-has-[:focus-visible]:outline-2 group-has-[:focus-visible]:-outline-offset-1"),
1898
+ className: require_text_truncate.cn("relative mt-0.5 inline-flex shrink-0 items-center justify-center rounded-full", styles.radio, "border-border border-2", "bg-surface", "group-aria-checked:border-accent", "transition-colors", "group-has-[:focus-visible]:outline-ring outline-transparent group-has-[:focus-visible]:outline-2 group-has-[:focus-visible]:-outline-offset-1"),
1899
1899
  "aria-hidden": "true",
1900
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: require_highlight.cn(styles.dot, "bg-accent rounded-full", "scale-0 opacity-0 transition-all", "group-aria-checked:scale-100 group-aria-checked:opacity-100") })
1900
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: require_text_truncate.cn(styles.dot, "bg-accent rounded-full", "scale-0 opacity-0 transition-all", "group-aria-checked:scale-100 group-aria-checked:opacity-100") })
1901
1901
  }),
1902
1902
  (label || hintText) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1903
1903
  className: "flex flex-col",
1904
1904
  children: [label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1905
1905
  id: labelId,
1906
- className: require_highlight.cn("text-text-primary font-medium", styles.text),
1906
+ className: require_text_truncate.cn("text-text-primary font-medium", styles.text),
1907
1907
  children: label
1908
1908
  }), hintText && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1909
1909
  id: hintId,
@@ -1925,12 +1925,12 @@ const _excluded$4 = [
1925
1925
  ];
1926
1926
  /** Renders the loading overlay component. */
1927
1927
  function LoadingOverlay(_ref) {
1928
- let { loading, children, label = "Loading…", className } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$4);
1929
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", require_highlight._objectSpread2(require_highlight._objectSpread2({
1928
+ let { loading, children, label = "Loading…", className } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$4);
1929
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
1930
1930
  "data-opt-id": "380ZR",
1931
1931
  "data-opt-slug": "loading-overlay.LoadingOverlay"
1932
1932
  }, props), {}, {
1933
- className: require_highlight.cn("relative", className),
1933
+ className: require_text_truncate.cn("relative", className),
1934
1934
  children: [children, loading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1935
1935
  className: "bg-surface/60 absolute inset-0 z-10 flex items-center justify-center rounded-lg backdrop-blur-[1px]",
1936
1936
  role: "status",
@@ -1938,7 +1938,7 @@ function LoadingOverlay(_ref) {
1938
1938
  "aria-label": label,
1939
1939
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1940
1940
  className: "flex flex-col items-center gap-2",
1941
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.Spinner, {
1941
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.Spinner, {
1942
1942
  size: "md",
1943
1943
  "aria-hidden": "true"
1944
1944
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -1974,9 +1974,9 @@ const insetClass = {
1974
1974
  };
1975
1975
  /** Renders the block layout component. */
1976
1976
  function BlockLayout(_ref) {
1977
- let { children, className, spacing = "section", inset, loading, loadingLabel } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$3);
1978
- const layoutClassName = require_highlight.cn("flex flex-col", spacingClass[spacing], inset ? insetClass[inset] : void 0, className);
1979
- if (loading) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LoadingOverlay, require_highlight._objectSpread2(require_highlight._objectSpread2({
1977
+ let { children, className, spacing = "section", inset, loading, loadingLabel } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$3);
1978
+ const layoutClassName = require_text_truncate.cn("flex flex-col", spacingClass[spacing], inset ? insetClass[inset] : void 0, className);
1979
+ if (loading) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LoadingOverlay, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
1980
1980
  "data-opt-id": "9D8QR",
1981
1981
  "data-opt-slug": "block-layout.BlockLayout"
1982
1982
  }, props), {}, {
@@ -1985,7 +1985,7 @@ function BlockLayout(_ref) {
1985
1985
  label: loadingLabel,
1986
1986
  children
1987
1987
  }));
1988
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", require_highlight._objectSpread2(require_highlight._objectSpread2({
1988
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
1989
1989
  "data-opt-id": "9D8QR",
1990
1990
  "data-opt-slug": "block-layout.BlockLayout"
1991
1991
  }, props), {}, {
@@ -2006,7 +2006,7 @@ const _excluded$2 = ["loading", "className"];
2006
2006
  */
2007
2007
  function createBlock(name, render, options) {
2008
2008
  const Component = (props) => {
2009
- const { loading, className } = props, rest = require_highlight._objectWithoutProperties(props, _excluded$2);
2009
+ const { loading, className } = props, rest = require_text_truncate._objectWithoutProperties(props, _excluded$2);
2010
2010
  const layoutCn = (options === null || options === void 0 ? void 0 : options.layoutClassName) ? `${options.layoutClassName}${className ? ` ${className}` : ""}` : className;
2011
2011
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BlockLayout, {
2012
2012
  loading,
@@ -2022,7 +2022,7 @@ function createBlock(name, render, options) {
2022
2022
  /** Renders the page header component. */
2023
2023
  function PageHeader({ title, description, actions, className }) {
2024
2024
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2025
- className: require_highlight.cn("gap-group flex flex-col items-stretch sm:flex-row sm:items-center sm:justify-between", className),
2025
+ className: require_text_truncate.cn("gap-group flex flex-col items-stretch sm:flex-row sm:items-center sm:justify-between", className),
2026
2026
  "data-opt-id": "7AK8Z",
2027
2027
  "data-opt-slug": "page-header.PageHeader",
2028
2028
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -2051,7 +2051,7 @@ const overflowMap = {
2051
2051
  /** Renders the scroll area component. */
2052
2052
  function ScrollArea({ children, className, orientation = "vertical" }) {
2053
2053
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2054
- className: require_highlight.cn(overflowMap[orientation], "scrollbar-thin scrollbar-track-transparent scrollbar-thumb-border hover:scrollbar-thumb-border-hover", className),
2054
+ className: require_text_truncate.cn(overflowMap[orientation], "scrollbar-thin scrollbar-track-transparent scrollbar-thumb-border hover:scrollbar-thumb-border-hover", className),
2055
2055
  "data-opt-id": "A9X4K",
2056
2056
  "data-opt-slug": "scroll-area.ScrollArea",
2057
2057
  children
@@ -2071,7 +2071,7 @@ const maxWidthMap = {
2071
2071
  /** Renders the container component. */
2072
2072
  function Container({ children, maxWidth = "xl", center = true, className }) {
2073
2073
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2074
- className: require_highlight.cn(maxWidthMap[maxWidth], center && "mx-auto", "px-4", className),
2074
+ className: require_text_truncate.cn(maxWidthMap[maxWidth], center && "mx-auto", "px-4", className),
2075
2075
  "data-opt-id": "H3G96",
2076
2076
  "data-opt-slug": "container.Container",
2077
2077
  children
@@ -2084,7 +2084,7 @@ Container.displayName = "Container";
2084
2084
  function Section({ children, title, description, className }) {
2085
2085
  const titleId = `${(0, react.useId)()}-title`;
2086
2086
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
2087
- className: require_highlight.cn("gap-group flex flex-col", className),
2087
+ className: require_text_truncate.cn("gap-group flex flex-col", className),
2088
2088
  "aria-labelledby": title ? titleId : void 0,
2089
2089
  "data-opt-id": "M3QXW",
2090
2090
  "data-opt-slug": "section.Section",
@@ -2125,11 +2125,11 @@ function toPanelSize(size) {
2125
2125
  }
2126
2126
  /** Renders the resizable panel group component. */
2127
2127
  function ResizablePanelGroup(_ref) {
2128
- let { direction, children, className, id, autoSaveId } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded$1);
2129
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_resizable_panels.Group, require_highlight._objectSpread2(require_highlight._objectSpread2({
2128
+ let { direction, children, className, id, autoSaveId } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$1);
2129
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_resizable_panels.Group, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
2130
2130
  orientation: direction,
2131
2131
  id: id !== null && id !== void 0 ? id : autoSaveId,
2132
- className: require_highlight.cn("flex h-full w-full", className)
2132
+ className: require_text_truncate.cn("flex h-full w-full", className)
2133
2133
  }, props), {}, {
2134
2134
  "data-opt-id": "BM5RR",
2135
2135
  "data-opt-slug": "resizable.ResizablePanelGroup",
@@ -2139,13 +2139,13 @@ function ResizablePanelGroup(_ref) {
2139
2139
  ResizablePanelGroup.displayName = "ResizablePanelGroup";
2140
2140
  /** Renders the resizable panel component. */
2141
2141
  function ResizablePanel(_ref2) {
2142
- let { collapsedSize, defaultSize, minSize, maxSize, children, className } = _ref2, props = require_highlight._objectWithoutProperties(_ref2, _excluded2$1);
2143
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_resizable_panels.Panel, require_highlight._objectSpread2(require_highlight._objectSpread2({
2142
+ let { collapsedSize, defaultSize, minSize, maxSize, children, className } = _ref2, props = require_text_truncate._objectWithoutProperties(_ref2, _excluded2$1);
2143
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_resizable_panels.Panel, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
2144
2144
  collapsedSize: toPanelSize(collapsedSize),
2145
2145
  defaultSize: toPanelSize(defaultSize),
2146
2146
  minSize: toPanelSize(minSize),
2147
2147
  maxSize: toPanelSize(maxSize),
2148
- className: require_highlight.cn("overflow-auto", className)
2148
+ className: require_text_truncate.cn("overflow-auto", className)
2149
2149
  }, props), {}, {
2150
2150
  "data-opt-id": "88X4V",
2151
2151
  "data-opt-slug": "resizable.ResizablePanel",
@@ -2155,8 +2155,8 @@ function ResizablePanel(_ref2) {
2155
2155
  ResizablePanel.displayName = "ResizablePanel";
2156
2156
  /** Renders the resizable handle component. */
2157
2157
  function ResizableHandle(_ref3) {
2158
- let { className, withHandle = false } = _ref3, props = require_highlight._objectWithoutProperties(_ref3, _excluded3);
2159
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_resizable_panels.Separator, require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn("bg-border relative flex items-center justify-center", "after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2", "data-[resize-handle-active]:bg-accent", "[&[data-orientation=vertical]]:h-px [&[data-orientation=vertical]]:w-full", "[&[data-orientation=horizontal]]:h-full [&[data-orientation=horizontal]]:w-px", className) }, props), {}, {
2158
+ let { className, withHandle = false } = _ref3, props = require_text_truncate._objectWithoutProperties(_ref3, _excluded3);
2159
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_resizable_panels.Separator, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn("bg-border relative flex items-center justify-center", "after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2", "data-[resize-handle-active]:bg-accent", "[&[data-orientation=vertical]]:h-px [&[data-orientation=vertical]]:w-full", "[&[data-orientation=horizontal]]:h-full [&[data-orientation=horizontal]]:w-px", className) }, props), {}, {
2160
2160
  "data-opt-id": "6Z22W",
2161
2161
  "data-opt-slug": "resizable.ResizableHandle",
2162
2162
  children: withHandle && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
@@ -2190,28 +2190,28 @@ function Logo({ src, icon, text, alt = "Logo", size = "md", href, onClick, class
2190
2190
  if (showImage) mark = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
2191
2191
  src,
2192
2192
  alt,
2193
- className: require_highlight.cn("object-contain", markSizeStyles[size]),
2193
+ className: require_text_truncate.cn("object-contain", markSizeStyles[size]),
2194
2194
  onError: () => setImageError(true)
2195
2195
  });
2196
2196
  else if (icon) mark = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2197
- className: require_highlight.cn("flex shrink-0 items-center justify-center", markSizeStyles[size]),
2197
+ className: require_text_truncate.cn("flex shrink-0 items-center justify-center", markSizeStyles[size]),
2198
2198
  "aria-hidden": "true",
2199
2199
  children: icon
2200
2200
  });
2201
2201
  else if (fallbackLetter) mark = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2202
- className: require_highlight.cn("bg-accent text-on-accent flex shrink-0 items-center justify-center rounded-lg font-bold", markSizeStyles[size], textSizeStyles[size]),
2202
+ className: require_text_truncate.cn("bg-accent text-on-accent flex shrink-0 items-center justify-center rounded-lg font-bold", markSizeStyles[size], textSizeStyles[size]),
2203
2203
  "aria-hidden": "true",
2204
2204
  children: fallbackLetter
2205
2205
  });
2206
2206
  const content = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [mark, text && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2207
- className: require_highlight.cn("text-text-primary font-semibold", textSizeStyles[size]),
2207
+ className: require_text_truncate.cn("text-text-primary font-semibold", textSizeStyles[size]),
2208
2208
  children: text
2209
2209
  })] });
2210
- const sharedClassName = require_highlight.cn("inline-flex items-center gap-element", className);
2210
+ const sharedClassName = require_text_truncate.cn("inline-flex items-center gap-element", className);
2211
2211
  if (href) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
2212
2212
  href,
2213
2213
  onClick,
2214
- className: require_highlight.cn(sharedClassName, "no-underline"),
2214
+ className: require_text_truncate.cn(sharedClassName, "no-underline"),
2215
2215
  "aria-label": text !== null && text !== void 0 ? text : alt,
2216
2216
  "data-opt-id": "R906A",
2217
2217
  "data-opt-slug": "logo.Logo",
@@ -2264,7 +2264,7 @@ const positionClass = {
2264
2264
  };
2265
2265
  /** Renders the drawer root component. */
2266
2266
  function DrawerRoot(props) {
2267
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.DialogRoot, require_highlight._objectSpread2(require_highlight._objectSpread2({ animated: true }, props), {}, {
2267
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.DialogRoot, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ animated: true }, props), {}, {
2268
2268
  "data-opt-id": "YGJ0M",
2269
2269
  "data-opt-slug": "drawer.DrawerRoot"
2270
2270
  }));
@@ -2280,7 +2280,7 @@ function dismissOffset(side, dx, dy) {
2280
2280
  }
2281
2281
  /** Renders the drawer panel component. */
2282
2282
  function DrawerPanel(_ref) {
2283
- let { className, side = "right", size = "md", swipeToDismiss = true, swipeDismissThreshold = 80, style, onPointerDown } = _ref, props = require_highlight._objectWithoutProperties(_ref, _excluded);
2283
+ let { className, side = "right", size = "md", swipeToDismiss = true, swipeDismissThreshold = 80, style, onPointerDown } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded);
2284
2284
  const isHorizontal = side === "left" || side === "right";
2285
2285
  const close = (0, _reopt_ai_opt_ui_primitives.useDialogClose)();
2286
2286
  const dragStart = (0, react.useRef)(null);
@@ -2342,9 +2342,9 @@ function DrawerPanel(_ref) {
2342
2342
  };
2343
2343
  }, [side]);
2344
2344
  const dragStyle = offset !== 0 ? { transform: `translate${axis}(${offset}px)` } : void 0;
2345
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.DialogPanel, require_highlight._objectSpread2(require_highlight._objectSpread2({
2346
- className: require_highlight.cn("border-border bg-surface z-50 m-0 flex flex-col border p-0 shadow-2xl", "data-[enter]:fade-in data-[leave]:fade-out", dragging ? "touch-none" : require_highlight.OPT_ANIMATE_DRAWER[side], positionClass[side], isHorizontal ? ["h-full w-full", sizeMap[size]] : ["w-full", heightMap[size]], className),
2347
- style: require_highlight._objectSpread2(require_highlight._objectSpread2(require_highlight._objectSpread2(require_highlight._objectSpread2({}, style), dragStyle), keyboardInset > 0 ? { marginBottom: keyboardInset } : null), dragging ? { transition: "none" } : null),
2345
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.DialogPanel, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
2346
+ className: require_text_truncate.cn("border-border bg-surface z-50 m-0 flex flex-col border p-0 shadow-2xl", "data-[enter]:fade-in data-[leave]:fade-out", dragging ? "touch-none" : require_text_truncate.OPT_ANIMATE_DRAWER[side], positionClass[side], isHorizontal ? ["h-full w-full", sizeMap[size]] : ["w-full", heightMap[size]], className),
2347
+ style: require_text_truncate._objectSpread2(require_text_truncate._objectSpread2(require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, style), dragStyle), keyboardInset > 0 ? { marginBottom: keyboardInset } : null), dragging ? { transition: "none" } : null),
2348
2348
  onPointerDown: handlePointerDown,
2349
2349
  onPointerMove: swipeToDismiss ? handlePointerMove : void 0,
2350
2350
  onPointerUp: swipeToDismiss ? endDrag : void 0,
@@ -2356,8 +2356,8 @@ function DrawerPanel(_ref) {
2356
2356
  }
2357
2357
  /** Renders the drawer close component. */
2358
2358
  function DrawerClose(_ref2) {
2359
- let { className } = _ref2, props = require_highlight._objectWithoutProperties(_ref2, _excluded2);
2360
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.DialogDismiss, require_highlight._objectSpread2(require_highlight._objectSpread2({ className: require_highlight.cn("hover:bg-bg-subtle rounded-md p-1.5 transition-colors", "cursor-pointer data-[disabled]:cursor-not-allowed", require_highlight.OPT_FOCUS, className) }, props), {}, {
2359
+ let { className } = _ref2, props = require_text_truncate._objectWithoutProperties(_ref2, _excluded2);
2360
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.DialogDismiss, require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn("hover:bg-bg-subtle rounded-md p-1.5 transition-colors", "cursor-pointer data-[disabled]:cursor-not-allowed", require_text_truncate.OPT_FOCUS, className) }, props), {}, {
2361
2361
  "data-opt-id": "M6D6D",
2362
2362
  "data-opt-slug": "drawer.DrawerClose"
2363
2363
  }));
@@ -2464,8 +2464,8 @@ function VirtualList({ items, renderItem, itemHeight, overscan = 3, className, s
2464
2464
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2465
2465
  ref: handleRef,
2466
2466
  onScroll: handleScroll,
2467
- className: require_highlight.cn("overflow-auto", className),
2468
- style: require_highlight._objectSpread2({ position: "relative" }, style),
2467
+ className: require_text_truncate.cn("overflow-auto", className),
2468
+ style: require_text_truncate._objectSpread2({ position: "relative" }, style),
2469
2469
  role: "list",
2470
2470
  "data-opt-id": "VT2NP",
2471
2471
  "data-opt-slug": "virtual-list.VirtualList",
@@ -3638,8 +3638,8 @@ const ShaderSurfaceComponent = (0, react.forwardRef)(function ShaderSurface({ pr
3638
3638
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3639
3639
  ref: containerRef,
3640
3640
  "aria-hidden": ariaHidden,
3641
- className: require_highlight.cn("relative overflow-hidden", className),
3642
- style: require_highlight._objectSpread2({ background: fallbackBackground }, style),
3641
+ className: require_text_truncate.cn("relative overflow-hidden", className),
3642
+ style: require_text_truncate._objectSpread2({ background: fallbackBackground }, style),
3643
3643
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("canvas", {
3644
3644
  ref: canvasRef,
3645
3645
  className: "absolute inset-0 block h-full w-full"
@@ -3673,7 +3673,7 @@ function formatShare(share) {
3673
3673
  */
3674
3674
  function Facet({ item, selected = false, onSelect, showShare = true, share, countFormatter = defaultCountFormat, layout = "vertical", labels, className }) {
3675
3675
  var _ref;
3676
- const text = require_highlight._objectSpread2(require_highlight._objectSpread2({}, defaultLabels$1), labels);
3676
+ const text = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$1), labels);
3677
3677
  const resolvedShare = (_ref = share !== null && share !== void 0 ? share : item.share) !== null && _ref !== void 0 ? _ref : 0;
3678
3678
  const interactive = onSelect !== void 0 && !item.disabled;
3679
3679
  const countText = item.count === void 0 ? "" : countFormatter(item.count);
@@ -3681,7 +3681,7 @@ function Facet({ item, selected = false, onSelect, showShare = true, share, coun
3681
3681
  const content = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
3682
3682
  showShare && layout === "vertical" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3683
3683
  "aria-hidden": "true",
3684
- className: require_highlight.cn("absolute inset-y-0 left-0 rounded-[inherit] transition-[width] duration-300", selected ? "bg-accent/25" : "bg-accent/10"),
3684
+ className: require_text_truncate.cn("absolute inset-y-0 left-0 rounded-[inherit] transition-[width] duration-300", selected ? "bg-accent/25" : "bg-accent/10"),
3685
3685
  style: {
3686
3686
  width: `${Math.max(resolvedShare * 100, resolvedShare > 0 ? 1.5 : 0)}%`,
3687
3687
  backgroundColor: item.color ? `color-mix(in oklab, ${item.color} ${selected ? 30 : 16}%, transparent)` : void 0
@@ -3715,7 +3715,7 @@ function Facet({ item, selected = false, onSelect, showShare = true, share, coun
3715
3715
  children: shareText
3716
3716
  })
3717
3717
  ] });
3718
- const shellClass = require_highlight.cn("relative flex w-full items-center gap-element overflow-hidden rounded-md px-2 py-1.5 text-left text-sm", layout === "horizontal" && "w-auto", selected ? "text-text-primary font-medium" : "text-text-secondary", interactive && "hover:bg-accent-subtle hover:text-text-primary cursor-pointer transition-colors", item.disabled && "cursor-not-allowed opacity-50", className);
3718
+ const shellClass = require_text_truncate.cn("relative flex w-full items-center gap-element overflow-hidden rounded-md px-2 py-1.5 text-left text-sm", layout === "horizontal" && "w-auto", selected ? "text-text-primary font-medium" : "text-text-secondary", interactive && "hover:bg-accent-subtle hover:text-text-primary cursor-pointer transition-colors", item.disabled && "cursor-not-allowed opacity-50", className);
3719
3719
  if (!interactive) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3720
3720
  className: shellClass,
3721
3721
  "data-selected": selected || void 0,
@@ -3725,7 +3725,7 @@ function Facet({ item, selected = false, onSelect, showShare = true, share, coun
3725
3725
  });
3726
3726
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3727
3727
  type: "button",
3728
- className: require_highlight.cn(shellClass, require_highlight.OPT_FOCUS_VISIBLE),
3728
+ className: require_text_truncate.cn(shellClass, require_text_truncate.OPT_FOCUS_VISIBLE),
3729
3729
  "aria-pressed": selected,
3730
3730
  "aria-label": text.selectHint(typeof item.label === "string" ? item.label : item.id, countText, shareText),
3731
3731
  disabled: item.disabled,
@@ -3756,7 +3756,7 @@ function Facet({ item, selected = false, onSelect, showShare = true, share, coun
3756
3756
  * ```
3757
3757
  */
3758
3758
  function FacetGroup({ items, selected, onSelectedChange, selection = "multiple", layout = "vertical", showShare = true, countFormatter = defaultCountFormat, max, total, loading = false, emptyState, labels, className, "aria-label": ariaLabel }) {
3759
- const text = require_highlight._objectSpread2(require_highlight._objectSpread2({}, defaultLabels$1), labels);
3759
+ const text = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$1), labels);
3760
3760
  const [uncontrolled, setUncontrolled] = (0, react.useState)([]);
3761
3761
  const [expanded, setExpanded] = (0, react.useState)(false);
3762
3762
  const current = selected !== null && selected !== void 0 ? selected : uncontrolled;
@@ -3777,7 +3777,7 @@ function FacetGroup({ items, selected, onSelectedChange, selection = "multiple",
3777
3777
  onSelectedChange === null || onSelectedChange === void 0 || onSelectedChange(next);
3778
3778
  };
3779
3779
  if (loading) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3780
- className: require_highlight.cn("flex flex-col gap-element", className),
3780
+ className: require_text_truncate.cn("flex flex-col gap-element", className),
3781
3781
  "aria-busy": "true",
3782
3782
  "aria-label": ariaLabel,
3783
3783
  "data-opt-id": "G1RNN",
@@ -3791,14 +3791,14 @@ function FacetGroup({ items, selected, onSelectedChange, selection = "multiple",
3791
3791
  }, index))]
3792
3792
  });
3793
3793
  if (items.length === 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3794
- className: require_highlight.cn("text-text-tertiary px-2 py-1.5 text-sm", className),
3794
+ className: require_text_truncate.cn("text-text-tertiary px-2 py-1.5 text-sm", className),
3795
3795
  "aria-label": ariaLabel,
3796
3796
  "data-opt-id": "G1RNN",
3797
3797
  "data-opt-slug": "facet.FacetGroup",
3798
3798
  children: emptyState !== null && emptyState !== void 0 ? emptyState : text.empty
3799
3799
  });
3800
3800
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3801
- className: require_highlight.cn(layout === "vertical" ? "flex flex-col gap-0.5" : "flex flex-wrap items-center gap-element", className),
3801
+ className: require_text_truncate.cn(layout === "vertical" ? "flex flex-col gap-0.5" : "flex flex-wrap items-center gap-element", className),
3802
3802
  role: selection === "none" ? "list" : "group",
3803
3803
  "aria-label": ariaLabel,
3804
3804
  "data-opt-id": "G1RNN",
@@ -3817,7 +3817,7 @@ function FacetGroup({ items, selected, onSelectedChange, selection = "multiple",
3817
3817
  }, item.id);
3818
3818
  }), (remaining > 0 || expanded) && max !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3819
3819
  type: "button",
3820
- className: require_highlight.cn("text-text-tertiary hover:text-text-primary rounded-md px-2 py-1 text-left text-xs", "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-ring-offset"),
3820
+ className: require_text_truncate.cn("text-text-tertiary hover:text-text-primary rounded-md px-2 py-1 text-left text-xs", "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-ring-offset"),
3821
3821
  onClick: () => setExpanded((value) => !value),
3822
3822
  children: expanded ? text.showLess : text.showMore(remaining)
3823
3823
  })]
@@ -3873,13 +3873,13 @@ function Expression({ description, value, tone = "accent", active = false, inval
3873
3873
  const palette = invalid ? toneStyles.danger : toneStyles[tone];
3874
3874
  const interactive = onClick !== void 0 && !disabled;
3875
3875
  const body = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3876
- className: require_highlight.cn("text-text-secondary text-xs font-semibold tracking-wide uppercase", disabled && "opacity-60"),
3876
+ className: require_text_truncate.cn("text-text-secondary text-xs font-semibold tracking-wide uppercase", disabled && "opacity-60"),
3877
3877
  children: description
3878
3878
  }), value !== void 0 && value !== null && value !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3879
- className: require_highlight.cn("text-sm font-semibold", palette.text, interactive && require_highlight.cn("underline decoration-2 underline-offset-4", palette.rule, active ? "decoration-solid" : "decoration-dotted"), disabled && "opacity-60"),
3879
+ className: require_text_truncate.cn("text-sm font-semibold", palette.text, interactive && require_text_truncate.cn("underline decoration-2 underline-offset-4", palette.rule, active ? "decoration-solid" : "decoration-dotted"), disabled && "opacity-60"),
3880
3880
  children: value
3881
3881
  })] });
3882
- const shell = require_highlight.cn(display === "stacked" ? "flex flex-col items-start gap-0.5" : "inline-flex items-baseline gap-1.5", "rounded-md px-1.5 py-1 text-left", interactive && "hover:bg-accent-subtle cursor-pointer transition-colors", active && "bg-accent-subtle", disabled && "cursor-not-allowed", className);
3882
+ const shell = require_text_truncate.cn(display === "stacked" ? "flex flex-col items-start gap-0.5" : "inline-flex items-baseline gap-1.5", "rounded-md px-1.5 py-1 text-left", interactive && "hover:bg-accent-subtle cursor-pointer transition-colors", active && "bg-accent-subtle", disabled && "cursor-not-allowed", className);
3883
3883
  if (!interactive) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3884
3884
  className: shell,
3885
3885
  "data-invalid": invalid || void 0,
@@ -3889,7 +3889,7 @@ function Expression({ description, value, tone = "accent", active = false, inval
3889
3889
  });
3890
3890
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3891
3891
  type: "button",
3892
- className: require_highlight.cn(shell, require_highlight.OPT_FOCUS_VISIBLE),
3892
+ className: require_text_truncate.cn(shell, require_text_truncate.OPT_FOCUS_VISIBLE),
3893
3893
  onClick,
3894
3894
  disabled,
3895
3895
  "aria-expanded": active,
@@ -3906,7 +3906,7 @@ function Expression({ description, value, tone = "accent", active = false, inval
3906
3906
  */
3907
3907
  function ExpressionGroup({ children, display = "sentence", className, "aria-label": ariaLabel }) {
3908
3908
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3909
- className: require_highlight.cn(display === "sentence" ? "flex flex-wrap items-baseline gap-x-1 gap-y-1" : "grid grid-flow-col auto-cols-fr items-start gap-group", className),
3909
+ className: require_text_truncate.cn(display === "sentence" ? "flex flex-wrap items-baseline gap-x-1 gap-y-1" : "grid grid-flow-col auto-cols-fr items-start gap-group", className),
3910
3910
  role: "group",
3911
3911
  "aria-label": ariaLabel,
3912
3912
  "data-opt-id": "F78CE",
@@ -3915,134 +3915,6 @@ function ExpressionGroup({ children, display = "sentence", className, "aria-labe
3915
3915
  });
3916
3916
  }
3917
3917
  //#endregion
3918
- //#region src/core/text-truncate.tsx
3919
- const useIsomorphicLayoutEffect = typeof window === "undefined" ? react.useEffect : react.useLayoutEffect;
3920
- /** Measures text in the element's own resolved font, not an assumed one. */
3921
- function createMeasurer(element) {
3922
- const context = document.createElement("canvas").getContext("2d");
3923
- if (!context) return null;
3924
- const computed = window.getComputedStyle(element);
3925
- context.font = [
3926
- computed.fontStyle,
3927
- computed.fontVariant,
3928
- computed.fontWeight,
3929
- `${computed.fontSize}/${computed.lineHeight}`,
3930
- computed.fontFamily
3931
- ].join(" ");
3932
- const spacing = Number.parseFloat(computed.letterSpacing) || 0;
3933
- return (value) => context.measureText(value).width + spacing * value.length;
3934
- }
3935
- /** Largest `n` in `[0, max]` for which `fits(n)` holds. */
3936
- function largestFitting(max, fits) {
3937
- let low = 0;
3938
- let high = max;
3939
- while (low < high) {
3940
- const mid = Math.ceil((low + high) / 2);
3941
- if (fits(mid)) low = mid;
3942
- else high = mid - 1;
3943
- }
3944
- return low;
3945
- }
3946
- function truncateToWidth(text, side, ellipsis, available, measure) {
3947
- if (measure(text) <= available) return text;
3948
- const chars = Array.from(text);
3949
- if (side === "end") {
3950
- const keep = largestFitting(chars.length, (n) => measure(chars.slice(0, n).join("") + ellipsis) <= available);
3951
- return chars.slice(0, keep).join("") + ellipsis;
3952
- }
3953
- if (side === "start") {
3954
- const keep = largestFitting(chars.length, (n) => measure(ellipsis + chars.slice(chars.length - n).join("")) <= available);
3955
- return ellipsis + chars.slice(chars.length - keep).join("");
3956
- }
3957
- if (side === "startEnd") {
3958
- const keep = largestFitting(Math.floor(chars.length / 2), (n) => {
3959
- const head = chars.slice(0, n).join("");
3960
- const tail = chars.slice(chars.length - n).join("");
3961
- return measure(head + ellipsis + tail) <= available;
3962
- });
3963
- if (keep === 0) return ellipsis;
3964
- return chars.slice(0, keep).join("") + ellipsis + chars.slice(chars.length - keep).join("");
3965
- }
3966
- const span = largestFitting(chars.length, (n) => {
3967
- const start = Math.floor((chars.length - n) / 2);
3968
- return measure(ellipsis + chars.slice(start, start + n).join("") + ellipsis) <= available;
3969
- });
3970
- if (span === 0) return ellipsis;
3971
- const start = Math.floor((chars.length - span) / 2);
3972
- return ellipsis + chars.slice(start, start + span).join("") + ellipsis;
3973
- }
3974
- /**
3975
- * TextTruncate — drops characters from the part of a string that identifies it
3976
- * least.
3977
- *
3978
- * CSS can only cut the end. That is the wrong end for the strings analytics
3979
- * shows most: two URLs that differ in their query string, two ids that share a
3980
- * prefix, a stack frame whose filename is at the tail. This measures the real
3981
- * text in the real font against the real available width and cuts where the
3982
- * caller says.
3983
- *
3984
- * The full string stays in the accessibility tree and in `title`, so
3985
- * truncation never costs the reader information — only space.
3986
- *
3987
- * @example
3988
- * ```tsx
3989
- * <TextTruncate text={event.url} truncation="startEnd" />
3990
- * ```
3991
- */
3992
- function TextTruncate({ text, truncation = "startEnd", ellipsis = "…", width, children, className }) {
3993
- const ref = (0, react.useRef)(null);
3994
- const [available, setAvailable] = (0, react.useState)(width !== null && width !== void 0 ? width : null);
3995
- useIsomorphicLayoutEffect(() => {
3996
- if (width !== void 0) {
3997
- setAvailable(width);
3998
- return;
3999
- }
4000
- const element = ref.current;
4001
- if (!element || typeof ResizeObserver === "undefined") return;
4002
- const observer = new ResizeObserver((entries) => {
4003
- const entry = entries[0];
4004
- if (entry) setAvailable(entry.contentRect.width);
4005
- });
4006
- observer.observe(element);
4007
- setAvailable(element.getBoundingClientRect().width);
4008
- return () => observer.disconnect();
4009
- }, [width]);
4010
- const [rendered, setRendered] = (0, react.useState)(text);
4011
- useIsomorphicLayoutEffect(() => {
4012
- const element = ref.current;
4013
- if (!element || available === null || available <= 0) {
4014
- setRendered(text);
4015
- return;
4016
- }
4017
- const measure = createMeasurer(element);
4018
- if (!measure) {
4019
- setRendered(text);
4020
- return;
4021
- }
4022
- setRendered(truncateToWidth(text, truncation, ellipsis, available, measure));
4023
- }, [
4024
- text,
4025
- truncation,
4026
- ellipsis,
4027
- available
4028
- ]);
4029
- const truncated = rendered !== text;
4030
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4031
- ref,
4032
- className: require_highlight.cn("block w-full overflow-hidden whitespace-nowrap", className),
4033
- title: truncated ? text : void 0,
4034
- "data-opt-id": "Y6BGX",
4035
- "data-opt-slug": "text-truncate.TextTruncate",
4036
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4037
- "aria-hidden": truncated ? "true" : void 0,
4038
- children: children ? children(rendered) : rendered
4039
- }), truncated && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4040
- className: "sr-only",
4041
- children: text
4042
- })]
4043
- });
4044
- }
4045
- //#endregion
4046
3918
  //#region src/core/live-region.tsx
4047
3919
  /**
4048
3920
  * LiveRegion — says out loud what a live view changed.
@@ -4167,7 +4039,7 @@ function ColorPaletteDisplay({ palette, render, size = "sm", "aria-label": ariaL
4167
4039
  const mode = render !== null && render !== void 0 ? render : palette.kind === "categorical" ? "stops" : "gradient";
4168
4040
  const colors = palette.colors.length > 0 ? palette.colors : ["transparent"];
4169
4041
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4170
- className: require_highlight.cn("flex w-full overflow-hidden rounded-sm", sizeStyles$2[size], className),
4042
+ className: require_text_truncate.cn("flex w-full overflow-hidden rounded-sm", sizeStyles$2[size], className),
4171
4043
  role: "img",
4172
4044
  "aria-label": ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : palette.label,
4173
4045
  style: mode === "gradient" ? { backgroundImage: `linear-gradient(to right, ${colors.join(", ")})` } : void 0,
@@ -4200,22 +4072,22 @@ function ColorPalettePicker({ palettes, value, onValueChange, label = "Colour pa
4200
4072
  const labelId = (0, react.useId)();
4201
4073
  const selected = (_palettes$find = palettes.find((palette) => palette.id === value)) !== null && _palettes$find !== void 0 ? _palettes$find : palettes[0];
4202
4074
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4203
- className: require_highlight.cn("flex flex-col gap-element", className),
4075
+ className: require_text_truncate.cn("flex flex-col gap-element", className),
4204
4076
  "data-opt-id": "5R0PG",
4205
4077
  "data-opt-slug": "color-palette.ColorPalettePicker",
4206
4078
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4207
4079
  id: labelId,
4208
- className: require_highlight.cn("text-text-primary text-sm font-medium", hideLabel && "sr-only"),
4080
+ className: require_text_truncate.cn("text-text-primary text-sm font-medium", hideLabel && "sr-only"),
4209
4081
  children: label
4210
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_highlight.SelectRoot, {
4082
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_text_truncate.SelectRoot, {
4211
4083
  value: (_ref = value !== null && value !== void 0 ? value : selected === null || selected === void 0 ? void 0 : selected.id) !== null && _ref !== void 0 ? _ref : "",
4212
4084
  setValue: (next) => {
4213
4085
  if (typeof next === "string") onValueChange === null || onValueChange === void 0 || onValueChange(next);
4214
4086
  },
4215
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.SelectTrigger, {
4087
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.SelectTrigger, {
4216
4088
  "aria-labelledby": labelId,
4217
4089
  disabled,
4218
- className: require_highlight.cn("gap-group", require_highlight.OPT_FOCUS_VISIBLE),
4090
+ className: require_text_truncate.cn("gap-group", require_text_truncate.OPT_FOCUS_VISIBLE),
4219
4091
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4220
4092
  className: "gap-group flex min-w-0 flex-1 items-center",
4221
4093
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -4224,11 +4096,11 @@ function ColorPalettePicker({ palettes, value, onValueChange, label = "Colour pa
4224
4096
  }), selected && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ColorPaletteDisplay, {
4225
4097
  palette: selected,
4226
4098
  size,
4227
- className: require_highlight.cn("min-w-16 flex-1", "border border-border"),
4099
+ className: require_text_truncate.cn("min-w-16 flex-1", "border border-border"),
4228
4100
  "aria-label": ""
4229
4101
  })]
4230
4102
  })
4231
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.SelectPopover, { children: palettes.map((palette) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_highlight.SelectItem, {
4103
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.SelectPopover, { children: palettes.map((palette) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.SelectItem, {
4232
4104
  value: palette.id,
4233
4105
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4234
4106
  className: "gap-group flex w-full min-w-40 items-center",
@@ -4278,7 +4150,7 @@ const sizeStyles$1 = {
4278
4150
  * ```
4279
4151
  */
4280
4152
  function InlineEdit({ value, onSave, as: Tag = "span", size = "md", placeholder, emptyText = "Untitled", disabled = false, maxLength, suffix, labels, className }) {
4281
- const text = require_highlight._objectSpread2(require_highlight._objectSpread2({}, defaultLabels), labels);
4153
+ const text = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels), labels);
4282
4154
  const [editing, setEditing] = (0, react.useState)(false);
4283
4155
  const [draft, setDraft] = (0, react.useState)(value);
4284
4156
  const [rejected, setRejected] = (0, react.useState)(false);
@@ -4329,7 +4201,7 @@ function InlineEdit({ value, onSave, as: Tag = "span", size = "md", placeholder,
4329
4201
  }
4330
4202
  };
4331
4203
  if (editing) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4332
- className: require_highlight.cn("inline-flex items-center gap-element", className),
4204
+ className: require_text_truncate.cn("inline-flex min-w-0 items-center gap-element", className),
4333
4205
  "data-opt-id": "RQ0H2",
4334
4206
  "data-opt-slug": "inline-edit.InlineEdit",
4335
4207
  children: [
@@ -4347,7 +4219,7 @@ function InlineEdit({ value, onSave, as: Tag = "span", size = "md", placeholder,
4347
4219
  disabled: saving,
4348
4220
  "aria-invalid": rejected || void 0,
4349
4221
  "aria-errormessage": rejected ? "inline-edit-error" : void 0,
4350
- className: require_highlight.cn(require_highlight.OPT_INPUT, sizeStyles$1[size], "min-w-0 flex-1")
4222
+ className: require_text_truncate.cn(require_text_truncate.OPT_INPUT, sizeStyles$1[size], "min-w-0 flex-1")
4351
4223
  }),
4352
4224
  rejected && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4353
4225
  id: "inline-edit-error",
@@ -4361,7 +4233,7 @@ function InlineEdit({ value, onSave, as: Tag = "span", size = "md", placeholder,
4361
4233
  disabled: saving,
4362
4234
  onMouseDown: (event) => event.preventDefault(),
4363
4235
  onClick: () => void commit(),
4364
- className: require_highlight.cn("text-success hover:bg-success-subtle rounded-md p-1", require_highlight.OPT_FOCUS_VISIBLE),
4236
+ className: require_text_truncate.cn("text-success hover:bg-success-subtle rounded-md p-1", require_text_truncate.OPT_FOCUS_VISIBLE),
4365
4237
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Check, {
4366
4238
  className: "size-4",
4367
4239
  "aria-hidden": "true"
@@ -4372,7 +4244,7 @@ function InlineEdit({ value, onSave, as: Tag = "span", size = "md", placeholder,
4372
4244
  "aria-label": text.cancel,
4373
4245
  onMouseDown: (event) => event.preventDefault(),
4374
4246
  onClick: cancel,
4375
- className: require_highlight.cn("text-text-tertiary hover:bg-bg-subtle rounded-md p-1", require_highlight.OPT_FOCUS_VISIBLE),
4247
+ className: require_text_truncate.cn("text-text-tertiary hover:bg-bg-subtle rounded-md p-1", require_text_truncate.OPT_FOCUS_VISIBLE),
4376
4248
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.X, {
4377
4249
  className: "size-4",
4378
4250
  "aria-hidden": "true"
@@ -4381,7 +4253,7 @@ function InlineEdit({ value, onSave, as: Tag = "span", size = "md", placeholder,
4381
4253
  ]
4382
4254
  });
4383
4255
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4384
- className: require_highlight.cn("inline-flex items-center gap-element", className),
4256
+ className: require_text_truncate.cn("inline-flex min-w-0 items-center gap-element", className),
4385
4257
  "data-opt-id": "RQ0H2",
4386
4258
  "data-opt-slug": "inline-edit.InlineEdit",
4387
4259
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
@@ -4389,13 +4261,13 @@ function InlineEdit({ value, onSave, as: Tag = "span", size = "md", placeholder,
4389
4261
  disabled,
4390
4262
  onClick: () => setEditing(true),
4391
4263
  "aria-label": text.edit(value || emptyText),
4392
- className: require_highlight.cn("group -mx-1.5 -my-0.5 inline-flex max-w-full items-center gap-element rounded-md px-1.5 py-0.5 text-left", !disabled && "hover:bg-bg-subtle cursor-pointer", disabled && "cursor-default", require_highlight.OPT_FOCUS_VISIBLE),
4264
+ className: require_text_truncate.cn("group -mx-1.5 -my-0.5 inline-flex min-w-0 items-center gap-element rounded-md px-1.5 py-0.5 text-left", !disabled && "hover:bg-bg-subtle cursor-pointer", disabled && "cursor-default", require_text_truncate.OPT_FOCUS_VISIBLE),
4393
4265
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Tag, {
4394
- className: require_highlight.cn("truncate", sizeStyles$1[size], value ? "text-text-primary" : "text-text-tertiary italic"),
4266
+ className: require_text_truncate.cn("truncate", sizeStyles$1[size], value ? "text-text-primary" : "text-text-tertiary italic"),
4395
4267
  children: value || emptyText
4396
4268
  }), !disabled && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Pencil, {
4397
4269
  "aria-hidden": "true",
4398
- className: require_highlight.cn("text-text-tertiary size-3.5 shrink-0 opacity-0 transition-opacity", "group-hover:opacity-100 group-focus-visible:opacity-100")
4270
+ className: require_text_truncate.cn("text-text-tertiary size-3.5 shrink-0 opacity-0 transition-opacity", "group-hover:opacity-100 group-focus-visible:opacity-100")
4399
4271
  })]
4400
4272
  }), suffix]
4401
4273
  });
@@ -4437,11 +4309,11 @@ function KeyPadMenu({ items, label, selection = "single", value, onValueChange,
4437
4309
  onValueChange === null || onValueChange === void 0 || onValueChange(id);
4438
4310
  };
4439
4311
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
4440
- className: require_highlight.cn("min-w-0", className),
4312
+ className: require_text_truncate.cn("min-w-0", className),
4441
4313
  "data-opt-id": "ZZG2R",
4442
4314
  "data-opt-slug": "key-pad-menu.KeyPadMenu",
4443
4315
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", {
4444
- className: require_highlight.cn("text-text-primary mb-element text-sm font-medium", hideLabel && "sr-only"),
4316
+ className: require_text_truncate.cn("text-text-primary mb-element text-sm font-medium", hideLabel && "sr-only"),
4445
4317
  children: label
4446
4318
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4447
4319
  className: "gap-element grid",
@@ -4449,7 +4321,7 @@ function KeyPadMenu({ items, label, selection = "single", value, onValueChange,
4449
4321
  children: items.map((item) => {
4450
4322
  const isSelected = selected.has(item.id);
4451
4323
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
4452
- className: require_highlight.cn("relative flex cursor-pointer flex-col items-center justify-center gap-1.5 rounded-lg text-center transition-colors", require_highlight.OPT_BORDER, sizeStyles[size], isSelected ? "border-accent bg-accent-subtle text-text-primary" : "text-text-secondary hover:border-border-hover hover:bg-bg-subtle", item.disabled && "cursor-not-allowed opacity-50", "has-[:focus-visible]:outline-ring has-[:focus-visible]:outline-2"),
4324
+ className: require_text_truncate.cn("relative flex cursor-pointer flex-col items-center justify-center gap-1.5 rounded-lg text-center transition-colors", require_text_truncate.OPT_BORDER, sizeStyles[size], isSelected ? "border-accent bg-accent-subtle text-text-primary" : "text-text-secondary hover:border-border-hover hover:bg-bg-subtle", item.disabled && "cursor-not-allowed opacity-50", "has-[:focus-visible]:outline-ring has-[:focus-visible]:outline-2"),
4453
4325
  children: [
4454
4326
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
4455
4327
  type: selection === "single" ? "radio" : "checkbox",
@@ -4458,12 +4330,12 @@ function KeyPadMenu({ items, label, selection = "single", value, onValueChange,
4458
4330
  checked: isSelected,
4459
4331
  disabled: item.disabled,
4460
4332
  onChange: () => handleChange(item.id),
4461
- className: require_highlight.cn("sr-only", require_highlight.OPT_FOCUS_VISIBLE)
4333
+ className: require_text_truncate.cn("sr-only", require_text_truncate.OPT_FOCUS_VISIBLE)
4462
4334
  }),
4463
4335
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4464
4336
  "data-keypad-icon": "",
4465
4337
  "aria-hidden": "true",
4466
- className: require_highlight.cn("flex items-center justify-center", isSelected ? "text-accent" : "text-text-tertiary"),
4338
+ className: require_text_truncate.cn("flex items-center justify-center", isSelected ? "text-accent" : "text-text-tertiary"),
4467
4339
  children: item.icon
4468
4340
  }),
4469
4341
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -4869,12 +4741,6 @@ Object.defineProperty(exports, "Text", {
4869
4741
  return Text;
4870
4742
  }
4871
4743
  });
4872
- Object.defineProperty(exports, "TextTruncate", {
4873
- enumerable: true,
4874
- get: function() {
4875
- return TextTruncate;
4876
- }
4877
- });
4878
4744
  Object.defineProperty(exports, "Textarea", {
4879
4745
  enumerable: true,
4880
4746
  get: function() {