@reopt-ai/opt-ui 1.12.2 → 1.12.4

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.
@@ -254,7 +254,7 @@ function CommandPaletteTrigger({ commands, onSelect, labels }) {
254
254
  }
255
255
  //#endregion
256
256
  //#region src/shells/dashboard-grid.tsx
257
- const defaultLabels$21 = { ariaLabel: "대시보드 통계" };
257
+ const defaultLabels$23 = { ariaLabel: "대시보드 통계" };
258
258
  const MIN_DASHBOARD_COLUMNS = 1;
259
259
  const MAX_DASHBOARD_COLUMNS = 12;
260
260
  function normalizeDashboardColumns(columns) {
@@ -263,7 +263,7 @@ function normalizeDashboardColumns(columns) {
263
263
  }
264
264
  /** Renders the dashboard grid component. */
265
265
  function DashboardGrid({ stats, columns = 3, labels: customLabels }) {
266
- const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$21), customLabels);
266
+ const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$23), customLabels);
267
267
  const columnCount = normalizeDashboardColumns(columns);
268
268
  const rowStyle = { "--opt-dashboard-grid-columns": `repeat(${columnCount}, minmax(0, 1fr))` };
269
269
  const rows = [];
@@ -291,13 +291,13 @@ function DashboardGrid({ stats, columns = 3, labels: customLabels }) {
291
291
  }
292
292
  //#endregion
293
293
  //#region src/shells/search-combobox.tsx
294
- const defaultLabels$20 = {
294
+ const defaultLabels$22 = {
295
295
  noResults: "결과가 없습니다.",
296
296
  loading: "Loading…"
297
297
  };
298
298
  /** Renders the search combobox component. */
299
299
  function SearchCombobox({ items, placeholder = "검색...", label = "검색", onSelect, labels: customLabels, async: isAsync = false, onSearch, debounceMs = 300 }) {
300
- const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$20), customLabels);
300
+ const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$22), customLabels);
301
301
  const inputId = (0, react.useId)();
302
302
  const [query, setQuery] = (0, react.useState)("");
303
303
  const [asyncResults, setAsyncResults] = (0, react.useState)([]);
@@ -395,14 +395,14 @@ function SearchCombobox({ items, placeholder = "검색...", label = "검색", on
395
395
  }
396
396
  //#endregion
397
397
  //#region src/shells/status-select.tsx
398
- const defaultLabels$19 = {
398
+ const defaultLabels$21 = {
399
399
  selectLabel: "상태",
400
400
  emptyMessage: "사용 가능한 상태 옵션이 없습니다."
401
401
  };
402
402
  /** Renders the status select component. */
403
403
  function StatusSelect({ options, value: controlledValue, onChange, label, labels: customLabels }) {
404
404
  var _options$0$value, _options$;
405
- const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$19), customLabels);
405
+ const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$21), customLabels);
406
406
  const resolvedLabel = label !== null && label !== void 0 ? label : labels.selectLabel;
407
407
  const [internalValue, setInternalValue] = (0, react.useState)((_options$0$value = (_options$ = options[0]) === null || _options$ === void 0 ? void 0 : _options$.value) !== null && _options$0$value !== void 0 ? _options$0$value : "");
408
408
  const value = controlledValue !== null && controlledValue !== void 0 ? controlledValue : internalValue;
@@ -469,7 +469,7 @@ function StatusSelect({ options, value: controlledValue, onChange, label, labels
469
469
  }
470
470
  //#endregion
471
471
  //#region src/shells/app-menubar.tsx
472
- const defaultLabels$18 = { ariaLabel: "Application menu" };
472
+ const defaultLabels$20 = { ariaLabel: "Application menu" };
473
473
  function MenuSection({ menu }) {
474
474
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_text_truncate.MenuRoot, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_text_truncate.MenuTrigger, { children: [menu.label, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.MenuButtonArrow, {})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.MenuPopover, { children: menu.items.map((item, i) => {
475
475
  if (item.type === "separator") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.MenuSeparator, {}, `sep-${i}`);
@@ -513,7 +513,7 @@ function MenuSection({ menu }) {
513
513
  }
514
514
  /** Renders the app menubar component. */
515
515
  function AppMenubar({ menus, labels: customLabels }) {
516
- const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$18), customLabels);
516
+ const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$20), customLabels);
517
517
  if (menus.length === 0) return null;
518
518
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.MenubarRoot, {
519
519
  "data-opt-id": "BGKHW",
@@ -552,10 +552,10 @@ const sectionStyles = {
552
552
  Templates: "text-text-tertiary"
553
553
  };
554
554
  const defaultSectionStyle = "text-text-secondary";
555
- const defaultLabels$17 = { ariaLabel: "문서 네비게이션" };
555
+ const defaultLabels$19 = { ariaLabel: "문서 네비게이션" };
556
556
  /** Renders the sidebar nav component. */
557
557
  function SidebarNav({ items, labels: customLabels }) {
558
- const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$17), customLabels);
558
+ const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$19), customLabels);
559
559
  const pathname = (0, next_navigation.usePathname)();
560
560
  const activeItem = items.find((item) => item.href === pathname);
561
561
  const [activeId, setActiveId] = (0, react.useState)(activeItem ? domId(activeItem.id) : void 0);
@@ -603,7 +603,7 @@ function SidebarNav({ items, labels: customLabels }) {
603
603
  }
604
604
  //#endregion
605
605
  //#region src/shells/editor-toolbar.tsx
606
- const defaultLabels$16 = { ariaLabel: "텍스트 편집기 툴바" };
606
+ const defaultLabels$18 = { ariaLabel: "텍스트 편집기 툴바" };
607
607
  function ToolbarButtonWithTooltip({ button, active, onAction }) {
608
608
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_text_truncate.TooltipProvider, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.TooltipAnchor, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.ToolbarButton, {
609
609
  className: `text-text-primary data-[active-item]:bg-bg-subtle data-[focus-visible]:ring-ring rounded-md p-2 transition-colors outline-none data-[focus-visible]:ring-2 ${active ? "bg-bg-muted" : "hover:bg-bg-subtle"}`,
@@ -613,7 +613,7 @@ function ToolbarButtonWithTooltip({ button, active, onAction }) {
613
613
  }
614
614
  /** Renders the editor toolbar component. */
615
615
  function EditorToolbar({ buttons, onAction, activeButtons = [], labels: customLabels }) {
616
- const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$16), customLabels);
616
+ const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$18), customLabels);
617
617
  const groups = [];
618
618
  let current = [];
619
619
  for (const btn of buttons) {
@@ -646,14 +646,14 @@ function EditorToolbar({ buttons, onAction, activeButtons = [], labels: customLa
646
646
  }
647
647
  //#endregion
648
648
  //#region src/shells/content-tabs.tsx
649
- const defaultLabels$15 = {
649
+ const defaultLabels$17 = {
650
650
  ariaLabel: "콘텐츠 탭",
651
651
  emptyMessage: "표시할 탭이 없습니다."
652
652
  };
653
653
  /** Renders the content tabs component. */
654
654
  function ContentTabs({ tabs, defaultTabId, labels: customLabels }) {
655
655
  var _tabs$, _tabs$find;
656
- const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$15), customLabels);
656
+ const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$17), customLabels);
657
657
  const [selectedTabId, setSelectedTabId] = (0, react.useState)(defaultTabId !== null && defaultTabId !== void 0 ? defaultTabId : (_tabs$ = tabs[0]) === null || _tabs$ === void 0 ? void 0 : _tabs$.id);
658
658
  if (tabs.length === 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
659
659
  className: "text-text-secondary text-sm",
@@ -685,13 +685,13 @@ function ContentTabs({ tabs, defaultTabId, labels: customLabels }) {
685
685
  }
686
686
  //#endregion
687
687
  //#region src/shells/faq-accordion.tsx
688
- const defaultLabels$14 = {
688
+ const defaultLabels$16 = {
689
689
  ariaLabel: "자주 묻는 질문",
690
690
  emptyMessage: "등록된 FAQ가 없습니다."
691
691
  };
692
692
  /** Renders the faq accordion component. */
693
693
  function FaqAccordion({ items, labels: customLabels }) {
694
- const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$14), customLabels);
694
+ const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$16), customLabels);
695
695
  if (items.length === 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
696
696
  className: "text-text-secondary text-sm",
697
697
  "data-opt-id": "QRBHV",
@@ -731,14 +731,14 @@ function FaqAccordion({ items, labels: customLabels }) {
731
731
  }
732
732
  //#endregion
733
733
  //#region src/shells/settings-form.tsx
734
- const defaultLabels$13 = {
734
+ const defaultLabels$15 = {
735
735
  formAriaLabel: "설정 폼",
736
736
  submitButton: "저장",
737
737
  successMessage: "설정이 저장되었습니다."
738
738
  };
739
739
  /** Renders the settings form component. */
740
740
  function SettingsForm({ fields, onSubmit, labels: customLabels }) {
741
- const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$13), customLabels);
741
+ const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$15), customLabels);
742
742
  const [submitted, setSubmitted] = (0, react.useState)(false);
743
743
  const defaultValues = {};
744
744
  for (const field of fields) {
@@ -1064,7 +1064,7 @@ function ProjectSwitcher({ projects, value, onChange, placeholder = "프로젝
1064
1064
  ProjectSwitcher.displayName = "ProjectSwitcher";
1065
1065
  //#endregion
1066
1066
  //#region src/shells/env-panel.tsx
1067
- const defaultLabels$12 = {
1067
+ const defaultLabels$14 = {
1068
1068
  varCount: (count) => `${count}개 변수`,
1069
1069
  envVarsLabel: (env) => `${env} 환경 변수`,
1070
1070
  secretBadge: "secret"
@@ -1076,7 +1076,7 @@ const envDot = {
1076
1076
  };
1077
1077
  /** Renders the env panel component. */
1078
1078
  function EnvPanel({ groups, labels: customLabels }) {
1079
- const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$12), customLabels);
1079
+ const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$14), customLabels);
1080
1080
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1081
1081
  className: `rounded-lg ${require_text_truncate.OPT_BORDER} divide-y ${require_text_truncate.OPT_DIVIDER} bg-surface`,
1082
1082
  "data-opt-id": "ZBDWK",
@@ -1149,7 +1149,7 @@ function EnvPanel({ groups, labels: customLabels }) {
1149
1149
  }
1150
1150
  //#endregion
1151
1151
  //#region src/shells/branch-select.tsx
1152
- const defaultLabels$11 = {
1152
+ const defaultLabels$13 = {
1153
1153
  selectLabel: "브랜치",
1154
1154
  emptySelectionLabel: "선택...",
1155
1155
  emptyMessage: "사용 가능한 브랜치가 없습니다.",
@@ -1158,7 +1158,7 @@ const defaultLabels$11 = {
1158
1158
  /** Renders the branch select component. */
1159
1159
  function BranchSelect({ branches, value: controlledValue, onChange, label, labels: customLabels }) {
1160
1160
  var _ref, _defaultBranch$name, _branches$, _selected$name;
1161
- const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$11), customLabels);
1161
+ const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$13), customLabels);
1162
1162
  const resolvedLabel = label !== null && label !== void 0 ? label : labels.selectLabel;
1163
1163
  const defaultBranch = branches.find((b) => b.isDefault);
1164
1164
  const [internalValue, setInternalValue] = (0, react.useState)((_ref = (_defaultBranch$name = defaultBranch === null || defaultBranch === void 0 ? void 0 : defaultBranch.name) !== null && _defaultBranch$name !== void 0 ? _defaultBranch$name : (_branches$ = branches[0]) === null || _branches$ === void 0 ? void 0 : _branches$.name) !== null && _ref !== void 0 ? _ref : "");
@@ -1267,7 +1267,7 @@ function BranchSelect({ branches, value: controlledValue, onChange, label, label
1267
1267
  BranchSelect.displayName = "BranchSelect";
1268
1268
  //#endregion
1269
1269
  //#region src/shells/domain-table.tsx
1270
- const defaultLabels$10 = {
1270
+ const defaultLabels$12 = {
1271
1271
  domain: "Domain",
1272
1272
  status: "Status",
1273
1273
  ssl: "SSL",
@@ -1297,7 +1297,7 @@ const sslLabel = {
1297
1297
  };
1298
1298
  /** Renders the domain table component. */
1299
1299
  function DomainTable({ domains, title = "도메인", labels: customLabels }) {
1300
- const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$10), customLabels);
1300
+ const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$12), customLabels);
1301
1301
  if (domains.length === 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1302
1302
  className: "gap-group flex flex-col",
1303
1303
  "data-opt-id": "A7SRM",
@@ -1415,6 +1415,13 @@ function DomainTable({ domains, title = "도메인", labels: customLabels }) {
1415
1415
  }
1416
1416
  //#endregion
1417
1417
  //#region src/shells/data-table.tsx
1418
+ const defaultLabels$11 = {
1419
+ selectAll: "Select all",
1420
+ selectRow: (key) => `Select row ${key}`,
1421
+ resizeColumn: (header) => `Resize ${header}`,
1422
+ expandRow: (key) => `Expand row ${key}`,
1423
+ collapseRow: (key) => `Collapse row ${key}`
1424
+ };
1418
1425
  const MIN_COLUMN_WIDTH = 40;
1419
1426
  const DEFAULT_COLUMN_RESIZE_MAX = 1200;
1420
1427
  const alignmentClass = {
@@ -1475,7 +1482,8 @@ function DataTableProgressBar({ value, barColor, label }) {
1475
1482
  });
1476
1483
  }
1477
1484
  /** Renders the data table component. */
1478
- function DataTable({ data, columns, keyExtractor, title, ariaLabel, onRowClick, emptyMessage = "No data available", activeRowId, sortable = false, selectable = false, selectedKeys, onSelectionChange, expandable = false, renderExpanded, pageSize, stickyHeader = false, resizableColumns = false, onSort: onSortExternal, className }) {
1485
+ function DataTable({ data, columns, keyExtractor, title, ariaLabel, onRowClick, emptyMessage = "No data available", activeRowId, sortable = false, selectable = false, selectedKeys, onSelectionChange, expandable = false, renderExpanded, pageSize, stickyHeader = false, resizableColumns = false, onSort: onSortExternal, labels: customLabels, className }) {
1486
+ const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$11), customLabels);
1479
1487
  const [sortCol, setSortCol] = (0, react.useState)(null);
1480
1488
  const [sortDir, setSortDir] = (0, react.useState)(null);
1481
1489
  const [expandedKeys, setExpandedKeys] = (0, react.useState)(/* @__PURE__ */ new Set());
@@ -1580,7 +1588,7 @@ function DataTable({ data, columns, keyExtractor, title, ariaLabel, onRowClick,
1580
1588
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.Checkbox, {
1581
1589
  checked: allSelected,
1582
1590
  onChange: toggleSelectAll,
1583
- "aria-label": "Select all"
1591
+ "aria-label": labels.selectAll
1584
1592
  })
1585
1593
  }),
1586
1594
  expandable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { className: require_text_truncate.cn("px-3 py-2.5 text-left text-xs font-semibold uppercase tracking-wider text-text-tertiary", "w-10") }),
@@ -1602,11 +1610,14 @@ function DataTable({ data, columns, keyExtractor, title, ariaLabel, onRowClick,
1602
1610
  "aria-sort": sortCol === col.id && sortDir ? sortDir === "asc" ? "ascending" : "descending" : void 0,
1603
1611
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
1604
1612
  className: "flex items-center whitespace-nowrap",
1605
- children: [col.header, sortIndicator(col.id)]
1613
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1614
+ className: require_text_truncate.cn(col.headerHidden && "sr-only"),
1615
+ children: col.header
1616
+ }), sortIndicator(col.id)]
1606
1617
  }), resizableColumns && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1607
1618
  role: "separator",
1608
1619
  "aria-orientation": "vertical",
1609
- "aria-label": `Resize ${col.header}`,
1620
+ "aria-label": labels.resizeColumn(col.header),
1610
1621
  "aria-valuemin": MIN_COLUMN_WIDTH,
1611
1622
  "aria-valuemax": resizeMax,
1612
1623
  "aria-valuenow": resizeValue,
@@ -1669,7 +1680,7 @@ function DataTable({ data, columns, keyExtractor, title, ariaLabel, onRowClick,
1669
1680
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.Checkbox, {
1670
1681
  checked: isSelected,
1671
1682
  onChange: () => toggleSelectRow(key),
1672
- "aria-label": `Select row ${key}`
1683
+ "aria-label": labels.selectRow(key)
1673
1684
  })
1674
1685
  }),
1675
1686
  expandable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.CompositeItem, {
@@ -1686,7 +1697,7 @@ function DataTable({ data, columns, keyExtractor, title, ariaLabel, onRowClick,
1686
1697
  },
1687
1698
  className: require_text_truncate.cn("rounded p-0.5 text-sm transition-transform", "text-text-secondary", "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-ring-offset", isExpanded && "rotate-90"),
1688
1699
  "aria-expanded": isExpanded,
1689
- "aria-label": `${isExpanded ? "Collapse" : "Expand"} row ${key}`,
1700
+ "aria-label": isExpanded ? labels.collapseRow(key) : labels.expandRow(key),
1690
1701
  children: "▶"
1691
1702
  })
1692
1703
  }),
@@ -1792,6 +1803,7 @@ const toast = Object.assign((options) => toastStore.add(options), {
1792
1803
  clear: () => toastStore.clear()
1793
1804
  });
1794
1805
  const ToastContext = (0, react.createContext)(null);
1806
+ const defaultLabels$10 = { regionLabel: "Notifications" };
1795
1807
  const positionStyles = {
1796
1808
  "top-right": "top-4 right-4",
1797
1809
  "top-left": "top-4 left-4",
@@ -1799,7 +1811,8 @@ const positionStyles = {
1799
1811
  "bottom-left": "bottom-4 left-4"
1800
1812
  };
1801
1813
  /** Renders the toast provider component. */
1802
- function ToastProvider({ children, position = "top-right", defaultDuration = 5e3, stackLimit = 5 }) {
1814
+ function ToastProvider({ children, position = "top-right", defaultDuration = 5e3, stackLimit = 5, labels: customLabels }) {
1815
+ const labels = require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, defaultLabels$10), customLabels);
1803
1816
  const allToasts = (0, react.useSyncExternalStore)(toastStore.subscribe, toastStore.getSnapshot, toastStore.getSnapshot);
1804
1817
  const visibleToasts = allToasts.length > stackLimit ? allToasts.slice(-stackLimit) : allToasts;
1805
1818
  const addToast = (0, react.useCallback)((t) => toastStore.add(t), []);
@@ -1813,7 +1826,7 @@ function ToastProvider({ children, position = "top-right", defaultDuration = 5e3
1813
1826
  children: [children, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1814
1827
  className: require_text_truncate.cn("gap-element fixed z-50 flex flex-col", positionStyles[position]),
1815
1828
  role: "region",
1816
- "aria-label": "Notifications",
1829
+ "aria-label": labels.regionLabel,
1817
1830
  "data-opt-id": "M0KTS",
1818
1831
  "data-opt-slug": "notification-toast.ToastProvider",
1819
1832
  children: visibleToasts.map((t) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(NotificationToast, {
@@ -282,6 +282,30 @@ interface ColumnDef<T> {
282
282
  bar?: (row: T) => number;
283
283
  /** Bar color class (default: "bg-accent") */
284
284
  barColor?: string;
285
+ /**
286
+ * Name the column without drawing the name.
287
+ *
288
+ * A column of row actions or icons needs no visible heading, but a `<th>`
289
+ * with an empty string leaves the column unnamed to anyone navigating the
290
+ * grid by header. `header` stays required so there is always a name to say.
291
+ */
292
+ headerHidden?: boolean;
293
+ }
294
+ /**
295
+ * Localized labels for the data table component.
296
+ *
297
+ * These were hard-coded English. Everything a caller can see was already
298
+ * theirs to write — headers, empty message, title — but the strings only a
299
+ * screen reader hears were not, so a fully translated table still announced
300
+ * "Select row purchase_completed" in the middle of a Korean page.
301
+ */
302
+ interface DataTableLabels {
303
+ selectAll?: string;
304
+ /** Named per row, because "select row" alone does not say which. */
305
+ selectRow?: (key: string) => string;
306
+ resizeColumn?: (header: string) => string;
307
+ expandRow?: (key: string) => string;
308
+ collapseRow?: (key: string) => string;
285
309
  }
286
310
  /** Props for the data table component. */
287
311
  interface DataTableProps<T> {
@@ -321,10 +345,11 @@ interface DataTableProps<T> {
321
345
  resizableColumns?: boolean;
322
346
  /** External (server-side) sort callback */
323
347
  onSort?: (columnId: string, direction: "asc" | "desc" | null) => void;
348
+ labels?: DataTableLabels;
324
349
  className?: string;
325
350
  }
326
351
  /** Renders the data table component. */
327
- declare function DataTable<T>({ data, columns, keyExtractor, title, ariaLabel, onRowClick, emptyMessage, activeRowId, sortable, selectable, selectedKeys, onSelectionChange, expandable, renderExpanded, pageSize, stickyHeader, resizableColumns, onSort: onSortExternal, className }: DataTableProps<T>): import("react").JSX.Element;
352
+ declare function DataTable<T>({ data, columns, keyExtractor, title, ariaLabel, onRowClick, emptyMessage, activeRowId, sortable, selectable, selectedKeys, onSelectionChange, expandable, renderExpanded, pageSize, stickyHeader, resizableColumns, onSort: onSortExternal, labels: customLabels, className }: DataTableProps<T>): import("react").JSX.Element;
328
353
  //#endregion
329
354
  //#region src/shells/notification-toast.d.ts
330
355
  /** Defines the toast action shape. */
@@ -370,15 +395,26 @@ declare const toast: ((options: ToastOptions) => string) & {
370
395
  dismiss: (id: string) => void;
371
396
  clear: () => void;
372
397
  };
398
+ /**
399
+ * Localized labels for the notification toast component.
400
+ *
401
+ * The region's name is the only string here that is not the caller's own text —
402
+ * every toast carries a message they wrote — so it was the one word a fully
403
+ * translated app still announced in English.
404
+ */
405
+ interface NotificationToastLabels {
406
+ regionLabel?: string;
407
+ }
373
408
  /** Props for the toast provider component. */
374
409
  interface ToastProviderProps {
375
410
  children: ReactNode;
376
411
  position?: "top-right" | "top-left" | "bottom-right" | "bottom-left";
377
412
  defaultDuration?: number;
378
413
  stackLimit?: number;
414
+ labels?: NotificationToastLabels;
379
415
  }
380
416
  /** Renders the toast provider component. */
381
- declare function ToastProvider({ children, position, defaultDuration, stackLimit }: ToastProviderProps): import("react").JSX.Element;
417
+ declare function ToastProvider({ children, position, defaultDuration, stackLimit, labels: customLabels }: ToastProviderProps): import("react").JSX.Element;
382
418
  /** Provides toast. */
383
419
  declare function useToast(): ToastContextValue;
384
420
  interface NotificationToastProps {
package/dist/index.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const require_text_truncate = require("./text-truncate-DsG5UAOY.cjs");
4
4
  const require_key_pad_menu = require("./key-pad-menu-1YN221Oi.cjs");
5
- const require_field_sidebar = require("./field-sidebar-D0ITbhfJ.cjs");
5
+ const require_field_sidebar = require("./field-sidebar-DX5wP0qn.cjs");
6
6
  let react_jsx_runtime = require("react/jsx-runtime");
7
7
  let react = require("react");
8
8
  react = require_text_truncate.__toESM(react, 1);
@@ -79,7 +79,10 @@ function Callout(_ref) {
79
79
  let { tone = "info", title, icon, action, size = "md", className, children } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$2);
80
80
  const DefaultIcon = defaultIcons[tone];
81
81
  const glyph = icon === void 0 ? DefaultIcon ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DefaultIcon, { "aria-hidden": "true" }) : null : icon;
82
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({ className: require_text_truncate.cn("flex items-start rounded-lg border", toneStyles[tone], sizeStyles$3[size], className) }, props), {}, {
82
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
83
+ role: "status",
84
+ className: require_text_truncate.cn("flex items-start rounded-lg border", toneStyles[tone], sizeStyles$3[size], className)
85
+ }, props), {}, {
83
86
  "data-opt-id": "AT7TX",
84
87
  "data-opt-slug": "callout.Callout",
85
88
  "data-tone": tone,
@@ -342,7 +345,7 @@ function SegmentedControl({ options, value, onChange, size = "md", fullWidth = f
342
345
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.Radio, {
343
346
  value: option.value,
344
347
  disabled: itemDisabled,
345
- className: "sr-only"
348
+ className: "absolute inset-0 m-0 h-full w-full cursor-pointer opacity-0"
346
349
  }),
347
350
  option.icon,
348
351
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: option.label }),
@@ -2075,7 +2078,7 @@ function EventIcon({ icon, color, size = "md", className, labels: customLabels }
2075
2078
  const resolvedColor = (color === null || color === void 0 ? void 0 : color.trim()) ? color : void 0;
2076
2079
  const iconEntry = typeof icon === "string" ? require_text_truncate.getIconRegistryEntry(icon) : void 0;
2077
2080
  const iconElement = react.isValidElement(icon) ? icon : null;
2078
- const ariaLabel = typeof icon === "string" ? `${labels.eventLabelPrefix}: ${(_iconEntry$label = iconEntry === null || iconEntry === void 0 ? void 0 : iconEntry.label) !== null && _iconEntry$label !== void 0 ? _iconEntry$label : icon}` : labels.defaultAriaLabel;
2081
+ const ariaLabel = typeof icon === "string" && icon !== "" ? `${labels.eventLabelPrefix}: ${(_iconEntry$label = iconEntry === null || iconEntry === void 0 ? void 0 : iconEntry.label) !== null && _iconEntry$label !== void 0 ? _iconEntry$label : icon}` : labels.defaultAriaLabel;
2079
2082
  let iconContent;
2080
2083
  if (iconEntry) iconContent = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(iconEntry.Icon, {
2081
2084
  "aria-hidden": true,
@@ -2991,6 +2994,9 @@ const defaultLabels$21 = {
2991
2994
  displayNamePlaceholder: "Page View",
2992
2995
  descriptionPlaceholder: "Triggered when a user views a page",
2993
2996
  tagsPlaceholder: "Add tag...",
2997
+ iconPlaceholder: "Select icon",
2998
+ iconLabelPrefix: "Event",
2999
+ iconAriaLabel: "Event icon",
2994
3000
  emptyTagsMessage: "No tags added yet."
2995
3001
  };
2996
3002
  /** Renders the event meta editor component. */
@@ -3005,7 +3011,7 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3005
3011
  onChange(require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, value), partial));
3006
3012
  };
3007
3013
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3008
- className: require_text_truncate.cn("gap-group flex flex-col", className),
3014
+ className: require_text_truncate.cn("@container gap-group flex flex-col", className),
3009
3015
  "data-opt-id": "EZR35",
3010
3016
  "data-opt-slug": "event-meta-editor.EventMetaEditor",
3011
3017
  children: [
@@ -3019,6 +3025,7 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3019
3025
  value: value.icon,
3020
3026
  onChange: (icon) => update({ icon }),
3021
3027
  icons,
3028
+ placeholder: labels.iconPlaceholder,
3022
3029
  "aria-label": labels.icon
3023
3030
  })] }),
3024
3031
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -3034,13 +3041,17 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3034
3041
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EventIcon, {
3035
3042
  icon: value.icon,
3036
3043
  color: value.color,
3037
- size: "lg"
3044
+ size: "lg",
3045
+ labels: {
3046
+ eventLabelPrefix: labels.iconLabelPrefix,
3047
+ defaultAriaLabel: labels.iconAriaLabel
3048
+ }
3038
3049
  })
3039
3050
  })
3040
3051
  ]
3041
3052
  }),
3042
3053
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3043
- className: "gap-group grid grid-cols-2",
3054
+ className: "gap-group grid grid-cols-1 @sm:grid-cols-2",
3044
3055
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
3045
3056
  htmlFor: nameId,
3046
3057
  className: "text-text-tertiary mb-1 block text-xs font-medium",
@@ -3050,7 +3061,8 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3050
3061
  value: value.name,
3051
3062
  onChange: (e) => update({ name: e.target.value }),
3052
3063
  placeholder: labels.namePlaceholder,
3053
- className: "font-mono"
3064
+ className: "font-mono",
3065
+ fullWidth: true
3054
3066
  })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
3055
3067
  htmlFor: displayNameId,
3056
3068
  className: "text-text-tertiary mb-1 block text-xs font-medium",
@@ -3059,7 +3071,8 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3059
3071
  id: displayNameId,
3060
3072
  value: value.displayName,
3061
3073
  onChange: (e) => update({ displayName: e.target.value }),
3062
- placeholder: labels.displayNamePlaceholder
3074
+ placeholder: labels.displayNamePlaceholder,
3075
+ fullWidth: true
3063
3076
  })] })]
3064
3077
  }),
3065
3078
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
@@ -3070,7 +3083,8 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3070
3083
  id: descriptionId,
3071
3084
  value: value.description,
3072
3085
  onChange: (e) => update({ description: e.target.value }),
3073
- placeholder: labels.descriptionPlaceholder
3086
+ placeholder: labels.descriptionPlaceholder,
3087
+ fullWidth: true
3074
3088
  })] }),
3075
3089
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
3076
3090
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -4871,6 +4885,7 @@ function CatalogCellControls({ children }) {
4871
4885
  });
4872
4886
  }
4873
4887
  const defaultLabels$13 = {
4888
+ closeInspector: "Close panel",
4874
4889
  emptyTitle: "아직 아무것도 없습니다",
4875
4890
  emptyDescription: "데이터가 도착하면 여기에 나타납니다.",
4876
4891
  filteredEmptyTitle: "조건에 맞는 항목이 없습니다",
@@ -4970,6 +4985,7 @@ function CatalogFrame({ children, isEmpty, query, onQueryChange, filters, stats,
4970
4985
  actions: inspectorActions,
4971
4986
  footer: inspectorFooter,
4972
4987
  width: inspectorWidth,
4988
+ labels: { close: labels.closeInspector },
4973
4989
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4974
4990
  className: "gap-group flex flex-col",
4975
4991
  children: [body, onPageChange && totalCount != null && totalCount > pageSize && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.Pagination, {
package/dist/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  import { $ as DrawerSize, $i as CardTitle, $n as StarRating, $r as TabPanelProps, $t as FormColorPickerProps, A as ShaderSurfaceHandle, Aa as SeparatorProps, Ai as SkeletonText, An as FormSwitch, Ar as AlertDialogPanelProps, At as CheckboxGroupProps, B as ShaderPresetCategory, Ba as Kbd, Bi as BadgeProps, Bn as DEFAULT_PRESETS, Br as DialogHeading, Bt as PopoverRoot, C as Facet, Ca as Toggle, Ci as Textarea, Cn as FormSelectPopover, Cr as ComboboxGroup, Ct as BlockLayoutProps, D as FacetItem, Da as OtpField, Di as SkeletonCard, Dn as FormStarRating, Dr as ComboboxPopover, Dt as RadioProps, E as FacetGroupProps, Ea as ToggleProps, Ei as SkeletonAvatar, En as FormSliderProps, Er as ComboboxItem, Et as RadioGroupProps, F as SHADER_PRESETS, Fa as Text, Fi as Alert, Fn as FormTextareaProps, Fr as DialogDismiss, Ft as DropdownSeparator, G as VirtualListProps, Gi as CardContentProps, Gn as DateRangePreset, Gr as SelectLabel, Gt as ConditionGroup, H as getShaderFragment, Hi as ButtonProps, Hn as DateRange, Hr as DialogRoot, Ht as ConditionBuilder, I as SHADER_PRESET_IDS, Ia as TextElement, Ii as AlertProps, In as useFieldValue, Ir as DialogFooter, It as DropdownTrigger, J as DrawerClose, Ji as CardFooter, Jn as IconDef, Jr as SelectTrigger, Jt as StepBuilder, K as Pagination, Ki as CardDescription, Kn as TagInput, Kr as SelectPopover, Kt as ConditionOperator, L as ShaderParamKey, La as TextProps, Li as Spinner, Ln as useFormContext, Lr as DialogFooterProps, Lt as PopoverClose, M as SHADER_OVERLAY_PARAM_KEYS, Ma as HeadingLevel, Mi as SwitchProps, Mn as FormTagInput, Mr as DialogBodyProps, Mt as DropdownContent, N as SHADER_PARAM_FALLBACK, Na as HeadingProps, Ni as Input, Nn as FormTagInputProps, Nr as DialogDescription, Nt as DropdownItem, O as FacetProps, Oa as OtpFieldProps, Oi as SkeletonProps, On as FormStarRatingProps, Or as ComboboxRoot, Ot as Checkbox, P as SHADER_PARAM_KEYS, Pa as HeadingRole, Pi as InputProps, Pn as FormTextarea, Pr as DialogDisclosure, Pt as DropdownMenu, Q as DrawerSide, Qi as CardProps, Qn as ColorPickerProps, Qr as TabPanel, Qt as FormColorPicker, R as ShaderParamSpec, Ra as TextRole, Ri as SpinnerProps, Rn as useFormStore, Rr as DialogHeader, Rt as PopoverContent, S as ExpressionTone, Sa as PrimAccordionTriggerProps, Si as AvatarProps, Sn as FormSelectItem, Sr as ComboboxEmpty, St as BlockLayout, T as FacetGroupLabels, Ta as ToggleGroupProps, Ti as Skeleton, Tn as FormSlider, Tr as ComboboxInput, Tt as RadioGroup, U as getShaderPreset, Ui as Card, Un as DateRangePicker, Ur as DialogSize, Ut as ConditionBuilderProps, V as ShaderPresetId, Va as KbdProps, Vi as Button, Vn as DateGranularity, Vr as DialogPanel, Vt as PopoverTrigger, W as VirtualList, Wi as CardContent, Wn as DateRangePickerProps, Wr as SelectItem, Wt as ConditionDef, X as DrawerPanelProps, Xi as CardHeader, Xn as IconPickerProps, Xr as TabList, Xt as StepDef, Y as DrawerPanel, Yi as CardFooterProps, Yn as IconPicker, Yr as Tab, Yt as StepBuilderProps, Z as DrawerRoot, Zi as CardHeaderProps, Zn as ColorPicker, Zr as TabListProps, Zt as FormCheckbox, _ as HighlightProps, _a as AccordionRoot, _i as Progress, _n as FormRadioGroup, _r as MenuRoot, _t as ScrollAreaProps, a as InlineEditLabels, aa as DescriptionListLabels, ai as DisclosureContent, an as FormField, ar as ToolbarButton, at as PanelSize, b as ExpressionGroupProps, ba as PrimAccordionContentProps, bi as AvatarGroup, bn as FormRoot, br as MenubarContainer, bt as BlockBaseProps, c as ColorPaletteDisplay, ca as EmptyStateAction, ci as Composite, cn as FormIconPicker, cr as ToolbarSeparator, ct as ResizablePanel, d as ColorPalettePickerProps, da as BreadcrumbItem, di as CompositeRow, dn as FormLabel, dr as TooltipProvider, dt as ResizablePanelProps, ea as CardTitleProps, ei as TabProps, en as FormControl, er as StarRatingProps, et as Logo, f as PaletteKind, fa as BreadcrumbProps, fi as CompositeZone, fn as FormNumberInput, fr as MenuButtonArrow, ft as Section, g as Highlight, ga as AccordionItem, gi as CircularProgressProps, gn as FormRadio, gr as MenuPopover, gt as ScrollArea, h as LiveRegionProps, ha as AccordionContent, hi as CircularProgress, hn as FormPush, hr as MenuItemRadio, ht as ContainerProps, i as InlineEdit, ia as DescriptionListItem, ii as TabsVariant, in as FormError, ir as NumberInputProps, it as PanelImperativeHandle, j as ShaderSurfaceProps, ja as Heading, ji as Switch, jn as FormSwitchProps, jr as DialogBody, jt as CheckboxProps, k as ShaderSurface, ka as Separator, ki as SkeletonTable, kn as FormSubmit, kr as AlertDialogPanel, kt as CheckboxGroup, l as ColorPaletteDisplayProps, la as EmptyStateProps, li as CompositeItem, ln as FormIconPickerProps, lr as Tooltip, lt as ResizablePanelGroup, m as LiveRegion, ma as StatCardProps, mi as MeterProps, mn as FormProvider, mr as MenuItemCheckbox, mt as Container, n as KeyPadMenu, na as IdentityProps, ni as TabsRoot, nn as FormDateRangePickerProps, nr as SliderProps, nt as GroupImperativeHandle, o as InlineEditProps, oa as DescriptionListProps, oi as DisclosureRoot, on as FormGroup, or as ToolbarContainer, ot as ResizableHandle, p as THEME_PALETTES, pa as StatCard, pi as Meter, pn as FormNumberInputProps, pr as MenuItem, pt as SectionProps, q as PaginationProps, qi as CardDescriptionProps, qn as TagInputProps, qr as SelectRoot, qt as ConditionTypeRenderer, r as KeyPadMenuProps, ra as DescriptionList, ri as TabsRootProps, rn as FormDescription, rr as NumberInput, rt as Layout, s as ColorPalette, sa as EmptyState, si as DisclosureTrigger, sn as FormGroupLabel, sr as ToolbarRoot, st as ResizableHandleProps, t as KeyPadItem, ta as Identity, ti as TabStatus, tn as FormDateRangePicker, tr as Slider, tt as LogoProps, u as ColorPalettePicker, ua as Breadcrumb, ui as CompositeProvider, un as FormInput, ur as TooltipAnchor, ut as ResizablePanelGroupProps, v as Expression, va as AccordionRootProps, vi as ProgressProps, vn as FormRemove, vr as MenuSeparator, vt as PageHeader, w as FacetGroup, wa as ToggleGroup, wi as TextareaProps, wn as FormSelectProps, wr as ComboboxGroupLabel, wt as Radio, x as ExpressionProps, xa as PrimAccordionItemProps, xi as AvatarGroupProps, xn as FormSelect, xr as MenubarRoot, xt as createBlock, y as ExpressionGroup, ya as AccordionTrigger, yi as Avatar, yn as FormReset, yr as MenuTrigger, yt as PageHeaderProps, z as ShaderPreset, za as TextTone, zi as Badge, zn as ComparisonMode, zr as DialogHeaderProps, zt as PopoverContentProps } from "./key-pad-menu-CwcY_Vps.cjs";
3
3
  import { A as FilterGroupDef, B as StatCard$1, C as DomainDef, D as ExportFormat, E as ExportColumn, F as NavItem, G as TimePreset, H as TableColumn, I as NavItemDef, K as ToastOptions, L as ProjectDef, M as FormFieldDef, N as MenuDef, O as FailureItem, P as MenuItemDef, R as QuickActionDef, S as DeploymentStep, T as EnvVarDef, U as TaskDef, V as TabDef, W as TeamMemberDef, _ as ChatConversationDef, a as FieldDataType, b as ChatStylePresetDef, c as FieldTokenLegendProps, d as ActivityDef, f as BranchDef, g as ChartSeriesDef, h as ChartMargin, i as FIELD_TYPE_TOKENS, j as FilterOption, k as FaqItem, l as FieldTokenProps, m as ChartDataPoint, n as TextTruncateProps, o as FieldToken, p as ChartConfig, q as ToolbarButtonDef, r as TruncationSide, s as FieldTokenLegend, t as TextTruncate, u as resolveFieldType, v as ChatMessageDef, w as EnvGroupDef, x as CommandDef, y as ChatModelDef, z as SelectOption } from "./text-truncate-CQyfUZvq.cjs";
4
- import { $ as EventTimelineItem, $t as DashboardGridProps, A as QueryCellAction, At as EnvPanel, B as removeClause, Bt as ContentTabs, C as TimeRangePreset, Ct as ColumnDef, D as QueryField, Dt as DomainTableProps, E as QueryBarProps, Et as DomainTable, F as addClause, Ft as DeploymentTimelineProps, G as FlyoutProps, Gt as SidebarNavProps, H as withoutField, Ht as EditorToolbar, I as applyCellAction, It as SettingsForm, J as ScoreBreakdown, Jt as StatusSelect, K as ScoreAxis, Kt as AppMenubar, L as fieldValues, Lt as SettingsFormProps, M as QueryFieldClause, Mt as ProjectSwitcher, N as QueryOperator, Nt as ProjectSwitcherProps, O as EMPTY_QUERY, Ot as BranchSelect, P as QueryTermClause, Pt as DeploymentTimeline, Q as EventTimelineGroup, Qt as DashboardGrid, R as isEmptyQuery, Rt as FaqAccordion, S as TimeRangeControlProps, St as useToast, T as QueryBarLabels, Tt as DataTableProps, U as Flyout, Ut as EditorToolbarProps, V as withFieldValue, Vt as ContentTabsProps, W as FlyoutLabels, Wt as SidebarNav, X as ScoreBreakdownProps, Xt as SearchCombobox, Y as ScoreBreakdownLabels, Yt as StatusSelectProps, Z as EventTimeline, Zt as SearchComboboxProps, _ as TimeSeriesPanelProps, _t as ToastMessage, a as FieldValueCount, at as WorkflowCanvasProps, b as TimeRangeControl, bt as ToastVariant, c as LogColumnPriority, ct as KeyValueEditorLabels, d as LogTable, dt as FailureList, en as CommandPaletteTrigger, et as EventTimelineLabels, f as LogTableHandle, ft as FailureListLabels, g as TimeSeriesPanelLabels, gt as ToastContextValue, h as TimeSeriesPanel, ht as ToastAction, i as FieldSummary, it as WorkflowCanvasConnection, j as QueryClause, jt as EnvPanelProps, k as Query, kt as BranchSelectProps, l as LogDensity, lt as KeyValueEditorProps, m as LogTableProps, mt as NotificationToast, n as FieldSidebarLabels, nn as CommandPalette, nt as EventTimelineTone, o as LogCellAction, ot as WorkflowCanvasStep, p as LogTableLabels, pt as FailureListProps, q as ScoreBand, qt as AppMenubarProps, r as FieldSidebarProps, rn as CommandPaletteProps, rt as WorkflowCanvas, s as LogColumn, st as KeyValueEditor, t as FieldSidebar, tn as CommandPaletteTriggerProps, tt as EventTimelineProps, u as LogSort, ut as KeyValueEntry, v as DEFAULT_TIME_PRESETS, vt as ToastProvider, w as QueryBar, wt as DataTable, x as TimeRangeControlLabels, xt as toast, y as RefreshSetting, yt as ToastProviderProps, z as queryFields, zt as FaqAccordionProps } from "./field-sidebar-uXmoyvd7.cjs";
4
+ import { $ as EventTimelineItem, $t as DashboardGridProps, A as QueryCellAction, At as EnvPanel, B as removeClause, Bt as ContentTabs, C as TimeRangePreset, Ct as ColumnDef, D as QueryField, Dt as DomainTableProps, E as QueryBarProps, Et as DomainTable, F as addClause, Ft as DeploymentTimelineProps, G as FlyoutProps, Gt as SidebarNavProps, H as withoutField, Ht as EditorToolbar, I as applyCellAction, It as SettingsForm, J as ScoreBreakdown, Jt as StatusSelect, K as ScoreAxis, Kt as AppMenubar, L as fieldValues, Lt as SettingsFormProps, M as QueryFieldClause, Mt as ProjectSwitcher, N as QueryOperator, Nt as ProjectSwitcherProps, O as EMPTY_QUERY, Ot as BranchSelect, P as QueryTermClause, Pt as DeploymentTimeline, Q as EventTimelineGroup, Qt as DashboardGrid, R as isEmptyQuery, Rt as FaqAccordion, S as TimeRangeControlProps, St as useToast, T as QueryBarLabels, Tt as DataTableProps, U as Flyout, Ut as EditorToolbarProps, V as withFieldValue, Vt as ContentTabsProps, W as FlyoutLabels, Wt as SidebarNav, X as ScoreBreakdownProps, Xt as SearchCombobox, Y as ScoreBreakdownLabels, Yt as StatusSelectProps, Z as EventTimeline, Zt as SearchComboboxProps, _ as TimeSeriesPanelProps, _t as ToastMessage, a as FieldValueCount, at as WorkflowCanvasProps, b as TimeRangeControl, bt as ToastVariant, c as LogColumnPriority, ct as KeyValueEditorLabels, d as LogTable, dt as FailureList, en as CommandPaletteTrigger, et as EventTimelineLabels, f as LogTableHandle, ft as FailureListLabels, g as TimeSeriesPanelLabels, gt as ToastContextValue, h as TimeSeriesPanel, ht as ToastAction, i as FieldSummary, it as WorkflowCanvasConnection, j as QueryClause, jt as EnvPanelProps, k as Query, kt as BranchSelectProps, l as LogDensity, lt as KeyValueEditorProps, m as LogTableProps, mt as NotificationToast, n as FieldSidebarLabels, nn as CommandPalette, nt as EventTimelineTone, o as LogCellAction, ot as WorkflowCanvasStep, p as LogTableLabels, pt as FailureListProps, q as ScoreBand, qt as AppMenubarProps, r as FieldSidebarProps, rn as CommandPaletteProps, rt as WorkflowCanvas, s as LogColumn, st as KeyValueEditor, t as FieldSidebar, tn as CommandPaletteTriggerProps, tt as EventTimelineProps, u as LogSort, ut as KeyValueEntry, v as DEFAULT_TIME_PRESETS, vt as ToastProvider, w as QueryBar, wt as DataTable, x as TimeRangeControlLabels, xt as toast, y as RefreshSetting, yt as ToastProviderProps, z as queryFields, zt as FaqAccordionProps } from "./field-sidebar-Ct8c9L4V.cjs";
5
5
  import * as React$1 from "react";
6
6
  import { Component, ComponentPropsWithoutRef, ErrorInfo, ReactNode } from "react";
7
7
  import { CommandEmptyProps, CommandGroupProps, CommandInputProps as CommandInputProps$1, CommandItemProps, CommandListProps, CommandRootProps, CommandSeparatorProps, FormErrors, FormErrors as FormErrors$1, FormStoreInstance, FormStoreOptions, ValidateOn } from "@reopt-ai/opt-ui-primitives";
@@ -1029,6 +1029,17 @@ interface EventMetaEditorLabels {
1029
1029
  displayNamePlaceholder?: string;
1030
1030
  descriptionPlaceholder?: string;
1031
1031
  tagsPlaceholder?: string;
1032
+ /** The icon picker's own empty text. Forwarded, so one `labels` covers the pane. */
1033
+ iconPlaceholder?: string;
1034
+ /**
1035
+ * The preview glyph's accessible name, forwarded to `EventIcon`.
1036
+ *
1037
+ * `iconLabelPrefix` names a chosen icon ("이벤트: 장바구니"); `iconAriaLabel`
1038
+ * is what it reads as when nothing is chosen, which is the common case in a
1039
+ * catalogue nobody has decorated yet.
1040
+ */
1041
+ iconLabelPrefix?: string;
1042
+ iconAriaLabel?: string;
1032
1043
  emptyTagsMessage?: string;
1033
1044
  }
1034
1045
  /** Renders the event meta editor component. */
@@ -1624,6 +1635,14 @@ declare function CatalogCellControls({ children }: {
1624
1635
  }): import("react").JSX.Element;
1625
1636
  /** Localized strings for the catalog frame. */
1626
1637
  interface CatalogFrameLabels {
1638
+ /**
1639
+ * The inspector's close button.
1640
+ *
1641
+ * The frame renders the inspector, so a caller who localizes this frame has
1642
+ * no other way to reach it — it was the one English word left in a
1643
+ * translated catalogue.
1644
+ */
1645
+ closeInspector?: string;
1627
1646
  emptyTitle?: string;
1628
1647
  emptyDescription?: string;
1629
1648
  filteredEmptyTitle?: string;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  import { $ as DrawerSize, $i as CardTitle, $n as StarRating, $r as TabPanelProps, $t as FormColorPickerProps, A as ShaderSurfaceHandle, Aa as SeparatorProps, Ai as SkeletonText, An as FormSwitch, Ar as AlertDialogPanelProps, At as CheckboxGroupProps, B as ShaderPresetCategory, Ba as Kbd, Bi as BadgeProps, Bn as DEFAULT_PRESETS, Br as DialogHeading, Bt as PopoverRoot, C as Facet, Ca as Toggle, Ci as Textarea, Cn as FormSelectPopover, Cr as ComboboxGroup, Ct as BlockLayoutProps, D as FacetItem, Da as OtpField, Di as SkeletonCard, Dn as FormStarRating, Dr as ComboboxPopover, Dt as RadioProps, E as FacetGroupProps, Ea as ToggleProps, Ei as SkeletonAvatar, En as FormSliderProps, Er as ComboboxItem, Et as RadioGroupProps, F as SHADER_PRESETS, Fa as Text, Fi as Alert, Fn as FormTextareaProps, Fr as DialogDismiss, Ft as DropdownSeparator, G as VirtualListProps, Gi as CardContentProps, Gn as DateRangePreset, Gr as SelectLabel, Gt as ConditionGroup, H as getShaderFragment, Hi as ButtonProps, Hn as DateRange, Hr as DialogRoot, Ht as ConditionBuilder, I as SHADER_PRESET_IDS, Ia as TextElement, Ii as AlertProps, In as useFieldValue, Ir as DialogFooter, It as DropdownTrigger, J as DrawerClose, Ji as CardFooter, Jn as IconDef, Jr as SelectTrigger, Jt as StepBuilder, K as Pagination, Ki as CardDescription, Kn as TagInput, Kr as SelectPopover, Kt as ConditionOperator, L as ShaderParamKey, La as TextProps, Li as Spinner, Ln as useFormContext, Lr as DialogFooterProps, Lt as PopoverClose, M as SHADER_OVERLAY_PARAM_KEYS, Ma as HeadingLevel, Mi as SwitchProps, Mn as FormTagInput, Mr as DialogBodyProps, Mt as DropdownContent, N as SHADER_PARAM_FALLBACK, Na as HeadingProps, Ni as Input, Nn as FormTagInputProps, Nr as DialogDescription, Nt as DropdownItem, O as FacetProps, Oa as OtpFieldProps, Oi as SkeletonProps, On as FormStarRatingProps, Or as ComboboxRoot, Ot as Checkbox, P as SHADER_PARAM_KEYS, Pa as HeadingRole, Pi as InputProps, Pn as FormTextarea, Pr as DialogDisclosure, Pt as DropdownMenu, Q as DrawerSide, Qi as CardProps, Qn as ColorPickerProps, Qr as TabPanel, Qt as FormColorPicker, R as ShaderParamSpec, Ra as TextRole, Ri as SpinnerProps, Rn as useFormStore, Rr as DialogHeader, Rt as PopoverContent, S as ExpressionTone, Sa as PrimAccordionTriggerProps, Si as AvatarProps, Sn as FormSelectItem, Sr as ComboboxEmpty, St as BlockLayout, T as FacetGroupLabels, Ta as ToggleGroupProps, Ti as Skeleton, Tn as FormSlider, Tr as ComboboxInput, Tt as RadioGroup, U as getShaderPreset, Ui as Card, Un as DateRangePicker, Ur as DialogSize, Ut as ConditionBuilderProps, V as ShaderPresetId, Va as KbdProps, Vi as Button, Vn as DateGranularity, Vr as DialogPanel, Vt as PopoverTrigger, W as VirtualList, Wi as CardContent, Wn as DateRangePickerProps, Wr as SelectItem, Wt as ConditionDef, X as DrawerPanelProps, Xi as CardHeader, Xn as IconPickerProps, Xr as TabList, Xt as StepDef, Y as DrawerPanel, Yi as CardFooterProps, Yn as IconPicker, Yr as Tab, Yt as StepBuilderProps, Z as DrawerRoot, Zi as CardHeaderProps, Zn as ColorPicker, Zr as TabListProps, Zt as FormCheckbox, _ as HighlightProps, _a as AccordionRoot, _i as Progress, _n as FormRadioGroup, _r as MenuRoot, _t as ScrollAreaProps, a as InlineEditLabels, aa as DescriptionListLabels, ai as DisclosureContent, an as FormField, ar as ToolbarButton, at as PanelSize, b as ExpressionGroupProps, ba as PrimAccordionContentProps, bi as AvatarGroup, bn as FormRoot, br as MenubarContainer, bt as BlockBaseProps, c as ColorPaletteDisplay, ca as EmptyStateAction, ci as Composite, cn as FormIconPicker, cr as ToolbarSeparator, ct as ResizablePanel, d as ColorPalettePickerProps, da as BreadcrumbItem, di as CompositeRow, dn as FormLabel, dr as TooltipProvider, dt as ResizablePanelProps, ea as CardTitleProps, ei as TabProps, en as FormControl, er as StarRatingProps, et as Logo, f as PaletteKind, fa as BreadcrumbProps, fi as CompositeZone, fn as FormNumberInput, fr as MenuButtonArrow, ft as Section, g as Highlight, ga as AccordionItem, gi as CircularProgressProps, gn as FormRadio, gr as MenuPopover, gt as ScrollArea, h as LiveRegionProps, ha as AccordionContent, hi as CircularProgress, hn as FormPush, hr as MenuItemRadio, ht as ContainerProps, i as InlineEdit, ia as DescriptionListItem, ii as TabsVariant, in as FormError, ir as NumberInputProps, it as PanelImperativeHandle, j as ShaderSurfaceProps, ja as Heading, ji as Switch, jn as FormSwitchProps, jr as DialogBody, jt as CheckboxProps, k as ShaderSurface, ka as Separator, ki as SkeletonTable, kn as FormSubmit, kr as AlertDialogPanel, kt as CheckboxGroup, l as ColorPaletteDisplayProps, la as EmptyStateProps, li as CompositeItem, ln as FormIconPickerProps, lr as Tooltip, lt as ResizablePanelGroup, m as LiveRegion, ma as StatCardProps, mi as MeterProps, mn as FormProvider, mr as MenuItemCheckbox, mt as Container, n as KeyPadMenu, na as IdentityProps, ni as TabsRoot, nn as FormDateRangePickerProps, nr as SliderProps, nt as GroupImperativeHandle, o as InlineEditProps, oa as DescriptionListProps, oi as DisclosureRoot, on as FormGroup, or as ToolbarContainer, ot as ResizableHandle, p as THEME_PALETTES, pa as StatCard, pi as Meter, pn as FormNumberInputProps, pr as MenuItem, pt as SectionProps, q as PaginationProps, qi as CardDescriptionProps, qn as TagInputProps, qr as SelectRoot, qt as ConditionTypeRenderer, r as KeyPadMenuProps, ra as DescriptionList, ri as TabsRootProps, rn as FormDescription, rr as NumberInput, rt as Layout, s as ColorPalette, sa as EmptyState, si as DisclosureTrigger, sn as FormGroupLabel, sr as ToolbarRoot, st as ResizableHandleProps, t as KeyPadItem, ta as Identity, ti as TabStatus, tn as FormDateRangePicker, tr as Slider, tt as LogoProps, u as ColorPalettePicker, ua as Breadcrumb, ui as CompositeProvider, un as FormInput, ur as TooltipAnchor, ut as ResizablePanelGroupProps, v as Expression, va as AccordionRootProps, vi as ProgressProps, vn as FormRemove, vr as MenuSeparator, vt as PageHeader, w as FacetGroup, wa as ToggleGroup, wi as TextareaProps, wn as FormSelectProps, wr as ComboboxGroupLabel, wt as Radio, x as ExpressionProps, xa as PrimAccordionItemProps, xi as AvatarGroupProps, xn as FormSelect, xr as MenubarRoot, xt as createBlock, y as ExpressionGroup, ya as AccordionTrigger, yi as Avatar, yn as FormReset, yr as MenuTrigger, yt as PageHeaderProps, z as ShaderPreset, za as TextTone, zi as Badge, zn as ComparisonMode, zr as DialogHeaderProps, zt as PopoverContentProps } from "./key-pad-menu-WBJShCJn.js";
3
3
  import { A as FilterGroupDef, B as StatCard$1, C as DomainDef, D as ExportFormat, E as ExportColumn, F as NavItem, G as TimePreset, H as TableColumn, I as NavItemDef, K as ToastOptions, L as ProjectDef, M as FormFieldDef, N as MenuDef, O as FailureItem, P as MenuItemDef, R as QuickActionDef, S as DeploymentStep, T as EnvVarDef, U as TaskDef, V as TabDef, W as TeamMemberDef, _ as ChatConversationDef, a as FieldDataType, b as ChatStylePresetDef, c as FieldTokenLegendProps, d as ActivityDef, f as BranchDef, g as ChartSeriesDef, h as ChartMargin, i as FIELD_TYPE_TOKENS, j as FilterOption, k as FaqItem, l as FieldTokenProps, m as ChartDataPoint, n as TextTruncateProps, o as FieldToken, p as ChartConfig, q as ToolbarButtonDef, r as TruncationSide, s as FieldTokenLegend, t as TextTruncate, u as resolveFieldType, v as ChatMessageDef, w as EnvGroupDef, x as CommandDef, y as ChatModelDef, z as SelectOption } from "./text-truncate-CQyfUZvq.js";
4
- import { $ as EventTimelineItem, $t as DashboardGridProps, A as QueryCellAction, At as EnvPanel, B as removeClause, Bt as ContentTabs, C as TimeRangePreset, Ct as ColumnDef, D as QueryField, Dt as DomainTableProps, E as QueryBarProps, Et as DomainTable, F as addClause, Ft as DeploymentTimelineProps, G as FlyoutProps, Gt as SidebarNavProps, H as withoutField, Ht as EditorToolbar, I as applyCellAction, It as SettingsForm, J as ScoreBreakdown, Jt as StatusSelect, K as ScoreAxis, Kt as AppMenubar, L as fieldValues, Lt as SettingsFormProps, M as QueryFieldClause, Mt as ProjectSwitcher, N as QueryOperator, Nt as ProjectSwitcherProps, O as EMPTY_QUERY, Ot as BranchSelect, P as QueryTermClause, Pt as DeploymentTimeline, Q as EventTimelineGroup, Qt as DashboardGrid, R as isEmptyQuery, Rt as FaqAccordion, S as TimeRangeControlProps, St as useToast, T as QueryBarLabels, Tt as DataTableProps, U as Flyout, Ut as EditorToolbarProps, V as withFieldValue, Vt as ContentTabsProps, W as FlyoutLabels, Wt as SidebarNav, X as ScoreBreakdownProps, Xt as SearchCombobox, Y as ScoreBreakdownLabels, Yt as StatusSelectProps, Z as EventTimeline, Zt as SearchComboboxProps, _ as TimeSeriesPanelProps, _t as ToastMessage, a as FieldValueCount, at as WorkflowCanvasProps, b as TimeRangeControl, bt as ToastVariant, c as LogColumnPriority, ct as KeyValueEditorLabels, d as LogTable, dt as FailureList, en as CommandPaletteTrigger, et as EventTimelineLabels, f as LogTableHandle, ft as FailureListLabels, g as TimeSeriesPanelLabels, gt as ToastContextValue, h as TimeSeriesPanel, ht as ToastAction, i as FieldSummary, it as WorkflowCanvasConnection, j as QueryClause, jt as EnvPanelProps, k as Query, kt as BranchSelectProps, l as LogDensity, lt as KeyValueEditorProps, m as LogTableProps, mt as NotificationToast, n as FieldSidebarLabels, nn as CommandPalette, nt as EventTimelineTone, o as LogCellAction, ot as WorkflowCanvasStep, p as LogTableLabels, pt as FailureListProps, q as ScoreBand, qt as AppMenubarProps, r as FieldSidebarProps, rn as CommandPaletteProps, rt as WorkflowCanvas, s as LogColumn, st as KeyValueEditor, t as FieldSidebar, tn as CommandPaletteTriggerProps, tt as EventTimelineProps, u as LogSort, ut as KeyValueEntry, v as DEFAULT_TIME_PRESETS, vt as ToastProvider, w as QueryBar, wt as DataTable, x as TimeRangeControlLabels, xt as toast, y as RefreshSetting, yt as ToastProviderProps, z as queryFields, zt as FaqAccordionProps } from "./field-sidebar-CrYlRZew.js";
4
+ import { $ as EventTimelineItem, $t as DashboardGridProps, A as QueryCellAction, At as EnvPanel, B as removeClause, Bt as ContentTabs, C as TimeRangePreset, Ct as ColumnDef, D as QueryField, Dt as DomainTableProps, E as QueryBarProps, Et as DomainTable, F as addClause, Ft as DeploymentTimelineProps, G as FlyoutProps, Gt as SidebarNavProps, H as withoutField, Ht as EditorToolbar, I as applyCellAction, It as SettingsForm, J as ScoreBreakdown, Jt as StatusSelect, K as ScoreAxis, Kt as AppMenubar, L as fieldValues, Lt as SettingsFormProps, M as QueryFieldClause, Mt as ProjectSwitcher, N as QueryOperator, Nt as ProjectSwitcherProps, O as EMPTY_QUERY, Ot as BranchSelect, P as QueryTermClause, Pt as DeploymentTimeline, Q as EventTimelineGroup, Qt as DashboardGrid, R as isEmptyQuery, Rt as FaqAccordion, S as TimeRangeControlProps, St as useToast, T as QueryBarLabels, Tt as DataTableProps, U as Flyout, Ut as EditorToolbarProps, V as withFieldValue, Vt as ContentTabsProps, W as FlyoutLabels, Wt as SidebarNav, X as ScoreBreakdownProps, Xt as SearchCombobox, Y as ScoreBreakdownLabels, Yt as StatusSelectProps, Z as EventTimeline, Zt as SearchComboboxProps, _ as TimeSeriesPanelProps, _t as ToastMessage, a as FieldValueCount, at as WorkflowCanvasProps, b as TimeRangeControl, bt as ToastVariant, c as LogColumnPriority, ct as KeyValueEditorLabels, d as LogTable, dt as FailureList, en as CommandPaletteTrigger, et as EventTimelineLabels, f as LogTableHandle, ft as FailureListLabels, g as TimeSeriesPanelLabels, gt as ToastContextValue, h as TimeSeriesPanel, ht as ToastAction, i as FieldSummary, it as WorkflowCanvasConnection, j as QueryClause, jt as EnvPanelProps, k as Query, kt as BranchSelectProps, l as LogDensity, lt as KeyValueEditorProps, m as LogTableProps, mt as NotificationToast, n as FieldSidebarLabels, nn as CommandPalette, nt as EventTimelineTone, o as LogCellAction, ot as WorkflowCanvasStep, p as LogTableLabels, pt as FailureListProps, q as ScoreBand, qt as AppMenubarProps, r as FieldSidebarProps, rn as CommandPaletteProps, rt as WorkflowCanvas, s as LogColumn, st as KeyValueEditor, t as FieldSidebar, tn as CommandPaletteTriggerProps, tt as EventTimelineProps, u as LogSort, ut as KeyValueEntry, v as DEFAULT_TIME_PRESETS, vt as ToastProvider, w as QueryBar, wt as DataTable, x as TimeRangeControlLabels, xt as toast, y as RefreshSetting, yt as ToastProviderProps, z as queryFields, zt as FaqAccordionProps } from "./field-sidebar-YaWHfLLW.js";
5
5
  import { ClassValue } from "clsx";
6
6
  import * as React$1 from "react";
7
7
  import { Component, ComponentPropsWithoutRef, ErrorInfo, ReactNode } from "react";
@@ -1029,6 +1029,17 @@ interface EventMetaEditorLabels {
1029
1029
  displayNamePlaceholder?: string;
1030
1030
  descriptionPlaceholder?: string;
1031
1031
  tagsPlaceholder?: string;
1032
+ /** The icon picker's own empty text. Forwarded, so one `labels` covers the pane. */
1033
+ iconPlaceholder?: string;
1034
+ /**
1035
+ * The preview glyph's accessible name, forwarded to `EventIcon`.
1036
+ *
1037
+ * `iconLabelPrefix` names a chosen icon ("이벤트: 장바구니"); `iconAriaLabel`
1038
+ * is what it reads as when nothing is chosen, which is the common case in a
1039
+ * catalogue nobody has decorated yet.
1040
+ */
1041
+ iconLabelPrefix?: string;
1042
+ iconAriaLabel?: string;
1032
1043
  emptyTagsMessage?: string;
1033
1044
  }
1034
1045
  /** Renders the event meta editor component. */
@@ -1624,6 +1635,14 @@ declare function CatalogCellControls({ children }: {
1624
1635
  }): import("react").JSX.Element;
1625
1636
  /** Localized strings for the catalog frame. */
1626
1637
  interface CatalogFrameLabels {
1638
+ /**
1639
+ * The inspector's close button.
1640
+ *
1641
+ * The frame renders the inspector, so a caller who localizes this frame has
1642
+ * no other way to reach it — it was the one English word left in a
1643
+ * translated catalogue.
1644
+ */
1645
+ closeInspector?: string;
1627
1646
  emptyTitle?: string;
1628
1647
  emptyDescription?: string;
1629
1648
  filteredEmptyTitle?: string;