@reopt-ai/opt-ui 1.12.1 → 1.12.3

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.
package/dist/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const require_text_truncate = require("./text-truncate-I1XLWmRa.cjs");
4
- const require_key_pad_menu = require("./key-pad-menu-SItoHPLu.cjs");
5
- const require_field_sidebar = require("./field-sidebar-oa6zOmcd.cjs");
3
+ const require_text_truncate = require("./text-truncate-DsG5UAOY.cjs");
4
+ const require_key_pad_menu = require("./key-pad-menu-1YN221Oi.cjs");
5
+ const require_field_sidebar = require("./field-sidebar-CQSlweP0.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,
@@ -149,6 +152,10 @@ const dotSize = {
149
152
  * The dot is decorative on purpose. It never carries meaning the text does not
150
153
  * also carry, so the component cannot be used to say something in colour alone.
151
154
  *
155
+ * Without a `hint` this renders one span and nothing else: a table repeats this
156
+ * on every row, and a tooltip's provider, listeners and floating context are
157
+ * not a cost worth paying hundreds of times for rows that have nothing to say.
158
+ *
152
159
  * @example
153
160
  * ```tsx
154
161
  * <StatusDot tone="warning" hint="7일 이상 수신되지 않음">비활성</StatusDot>
@@ -156,9 +163,9 @@ const dotSize = {
156
163
  */
157
164
  function StatusDot(_ref) {
158
165
  let { tone = "neutral", size = "md", hint, className, children } = _ref, props = require_text_truncate._objectWithoutProperties(_ref, _excluded$1);
159
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
160
- className: require_text_truncate.cn("inline-flex items-center whitespace-nowrap", sizeStyles$2[size], textTone[tone], className),
161
- title: hint
166
+ const dot = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({
167
+ className: require_text_truncate.cn("inline-flex items-center whitespace-nowrap", sizeStyles$2[size], textTone[tone], hint && "focus-visible:ring-ring rounded-sm outline-none focus-visible:ring-2", className),
168
+ tabIndex: hint ? 0 : void 0
162
169
  }, props), {}, {
163
170
  "data-opt-id": "N51AT",
164
171
  "data-opt-slug": "status-dot.StatusDot",
@@ -168,6 +175,8 @@ function StatusDot(_ref) {
168
175
  "aria-hidden": "true"
169
176
  }), children]
170
177
  }));
178
+ if (!hint) return dot;
179
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_text_truncate.TooltipProvider, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.TooltipAnchor, { render: dot }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_text_truncate.Tooltip, { children: hint })] });
171
180
  }
172
181
  //#endregion
173
182
  //#region src/core/copy-button.tsx
@@ -336,7 +345,7 @@ function SegmentedControl({ options, value, onChange, size = "md", fullWidth = f
336
345
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_reopt_ai_opt_ui_primitives.Radio, {
337
346
  value: option.value,
338
347
  disabled: itemDisabled,
339
- className: "sr-only"
348
+ className: "absolute inset-0 m-0 h-full w-full cursor-pointer opacity-0"
340
349
  }),
341
350
  option.icon,
342
351
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: option.label }),
@@ -2069,7 +2078,7 @@ function EventIcon({ icon, color, size = "md", className, labels: customLabels }
2069
2078
  const resolvedColor = (color === null || color === void 0 ? void 0 : color.trim()) ? color : void 0;
2070
2079
  const iconEntry = typeof icon === "string" ? require_text_truncate.getIconRegistryEntry(icon) : void 0;
2071
2080
  const iconElement = react.isValidElement(icon) ? icon : null;
2072
- 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;
2073
2082
  let iconContent;
2074
2083
  if (iconEntry) iconContent = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(iconEntry.Icon, {
2075
2084
  "aria-hidden": true,
@@ -2985,6 +2994,7 @@ const defaultLabels$21 = {
2985
2994
  displayNamePlaceholder: "Page View",
2986
2995
  descriptionPlaceholder: "Triggered when a user views a page",
2987
2996
  tagsPlaceholder: "Add tag...",
2997
+ iconPlaceholder: "Select icon",
2988
2998
  emptyTagsMessage: "No tags added yet."
2989
2999
  };
2990
3000
  /** Renders the event meta editor component. */
@@ -2999,7 +3009,7 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
2999
3009
  onChange(require_text_truncate._objectSpread2(require_text_truncate._objectSpread2({}, value), partial));
3000
3010
  };
3001
3011
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3002
- className: require_text_truncate.cn("gap-group flex flex-col", className),
3012
+ className: require_text_truncate.cn("@container gap-group flex flex-col", className),
3003
3013
  "data-opt-id": "EZR35",
3004
3014
  "data-opt-slug": "event-meta-editor.EventMetaEditor",
3005
3015
  children: [
@@ -3013,6 +3023,7 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3013
3023
  value: value.icon,
3014
3024
  onChange: (icon) => update({ icon }),
3015
3025
  icons,
3026
+ placeholder: labels.iconPlaceholder,
3016
3027
  "aria-label": labels.icon
3017
3028
  })] }),
3018
3029
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -3034,7 +3045,7 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3034
3045
  ]
3035
3046
  }),
3036
3047
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3037
- className: "gap-group grid grid-cols-2",
3048
+ className: "gap-group grid grid-cols-1 @sm:grid-cols-2",
3038
3049
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
3039
3050
  htmlFor: nameId,
3040
3051
  className: "text-text-tertiary mb-1 block text-xs font-medium",
@@ -3044,7 +3055,8 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3044
3055
  value: value.name,
3045
3056
  onChange: (e) => update({ name: e.target.value }),
3046
3057
  placeholder: labels.namePlaceholder,
3047
- className: "font-mono"
3058
+ className: "font-mono",
3059
+ fullWidth: true
3048
3060
  })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
3049
3061
  htmlFor: displayNameId,
3050
3062
  className: "text-text-tertiary mb-1 block text-xs font-medium",
@@ -3053,7 +3065,8 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3053
3065
  id: displayNameId,
3054
3066
  value: value.displayName,
3055
3067
  onChange: (e) => update({ displayName: e.target.value }),
3056
- placeholder: labels.displayNamePlaceholder
3068
+ placeholder: labels.displayNamePlaceholder,
3069
+ fullWidth: true
3057
3070
  })] })]
3058
3071
  }),
3059
3072
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
@@ -3064,7 +3077,8 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3064
3077
  id: descriptionId,
3065
3078
  value: value.description,
3066
3079
  onChange: (e) => update({ description: e.target.value }),
3067
- placeholder: labels.descriptionPlaceholder
3080
+ placeholder: labels.descriptionPlaceholder,
3081
+ fullWidth: true
3068
3082
  })] }),
3069
3083
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
3070
3084
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -4478,6 +4492,19 @@ function toText(value) {
4478
4492
  if (typeof value === "number" || typeof value === "boolean") return String(value);
4479
4493
  return JSON.stringify(value);
4480
4494
  }
4495
+ /**
4496
+ * The values one field holds, as a list.
4497
+ *
4498
+ * A clause names a single value, so an array field has to be read element by
4499
+ * element: `tag:pay` asks whether *any* tag is `pay`, not whether the whole
4500
+ * list stringifies to it — and `toText` on an array produces `["pay","cart"]`,
4501
+ * which no user ever types. Scalars read as a list of one so both shapes take
4502
+ * the same path, and negation stays where it already is: `matchesQuery` flips
4503
+ * the result, so `-tag:pay` correctly means "no element matches".
4504
+ */
4505
+ function readValues(value) {
4506
+ return Array.isArray(value) ? value : [value];
4507
+ }
4481
4508
  function compare(left, right) {
4482
4509
  const leftNumber = typeof left === "number" ? left : Number(toText(left));
4483
4510
  const rightNumber = Number(right);
@@ -4488,9 +4515,9 @@ function matchesClause(clause, read, searchable) {
4488
4515
  if (clause.type === "term") return searchable().toLowerCase().includes(clause.value.toLowerCase());
4489
4516
  const value = read(clause.field);
4490
4517
  switch (clause.operator) {
4491
- case "exists": return value !== void 0 && value !== null && value !== "";
4492
- case "eq": return clause.values.some((candidate) => toText(value).toLowerCase() === candidate.toLowerCase());
4493
- case "contains": return clause.values.some((candidate) => toText(value).toLowerCase().includes(candidate.toLowerCase()));
4518
+ case "exists": return readValues(value).some((item) => item !== void 0 && item !== null && item !== "");
4519
+ case "eq": return clause.values.some((candidate) => readValues(value).some((item) => toText(item).toLowerCase() === candidate.toLowerCase()));
4520
+ case "contains": return clause.values.some((candidate) => readValues(value).some((item) => toText(item).toLowerCase().includes(candidate.toLowerCase())));
4494
4521
  case "gt":
4495
4522
  var _clause$values$;
4496
4523
  return compare(value, (_clause$values$ = clause.values[0]) !== null && _clause$values$ !== void 0 ? _clause$values$ : "") > 0;
@@ -4526,7 +4553,7 @@ function matchesQueryObject(query, row, options = {}) {
4526
4553
  let cached = null;
4527
4554
  const searchable = () => {
4528
4555
  var _cached;
4529
- (_cached = cached) !== null && _cached !== void 0 || (cached = [...Object.values(row).filter((value) => typeof value !== "object"), ...Object.values(nested !== null && nested !== void 0 ? nested : {})].map(toText).join(" "));
4556
+ (_cached = cached) !== null && _cached !== void 0 || (cached = [...Object.values(row).flatMap((value) => Array.isArray(value) ? value.filter((item) => typeof item !== "object") : typeof value === "object" ? [] : [value]), ...Object.values(nested !== null && nested !== void 0 ? nested : {})].map(toText).join(" "));
4530
4557
  return cached;
4531
4558
  };
4532
4559
  return matchesQuery(query, read, searchable);
@@ -4852,6 +4879,7 @@ function CatalogCellControls({ children }) {
4852
4879
  });
4853
4880
  }
4854
4881
  const defaultLabels$13 = {
4882
+ closeInspector: "Close panel",
4855
4883
  emptyTitle: "아직 아무것도 없습니다",
4856
4884
  emptyDescription: "데이터가 도착하면 여기에 나타납니다.",
4857
4885
  filteredEmptyTitle: "조건에 맞는 항목이 없습니다",
@@ -4951,6 +4979,7 @@ function CatalogFrame({ children, isEmpty, query, onQueryChange, filters, stats,
4951
4979
  actions: inspectorActions,
4952
4980
  footer: inspectorFooter,
4953
4981
  width: inspectorWidth,
4982
+ labels: { close: labels.closeInspector },
4954
4983
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4955
4984
  className: "gap-group flex flex-col",
4956
4985
  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-BdP0-TMs.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";
@@ -64,12 +64,13 @@ interface StatusDotProps extends Omit<ComponentPropsWithoutRef<"span">, "childre
64
64
  */
65
65
  children: ReactNode;
66
66
  /**
67
- * How the state was decided, as a `title`.
67
+ * How the state was decided.
68
68
  *
69
- * Mouse-only: a `title` does not open on keyboard focus and is unreachable on
70
- * touch. It is a bonus for the reader who hovers, never the only place a rule
71
- * lives if knowing the rule is required to act, put it in text beside the
72
- * status instead.
69
+ * Shown in a tooltip that opens on hover and on keyboard focus, so the rule
70
+ * is reachable without a pointer. Giving a hint makes the dot a tab stop
71
+ * the only way a keyboard reader can reach it so it is still a bonus for
72
+ * the curious rather than the only place a rule lives: if knowing the rule is
73
+ * required to act, put it in text beside the status instead.
73
74
  */
74
75
  hint?: string;
75
76
  }
@@ -84,6 +85,10 @@ interface StatusDotProps extends Omit<ComponentPropsWithoutRef<"span">, "childre
84
85
  * The dot is decorative on purpose. It never carries meaning the text does not
85
86
  * also carry, so the component cannot be used to say something in colour alone.
86
87
  *
88
+ * Without a `hint` this renders one span and nothing else: a table repeats this
89
+ * on every row, and a tooltip's provider, listeners and floating context are
90
+ * not a cost worth paying hundreds of times for rows that have nothing to say.
91
+ *
87
92
  * @example
88
93
  * ```tsx
89
94
  * <StatusDot tone="warning" hint="7일 이상 수신되지 않음">비활성</StatusDot>
@@ -1024,6 +1029,8 @@ interface EventMetaEditorLabels {
1024
1029
  displayNamePlaceholder?: string;
1025
1030
  descriptionPlaceholder?: string;
1026
1031
  tagsPlaceholder?: string;
1032
+ /** The icon picker's own empty text. Forwarded, so one `labels` covers the pane. */
1033
+ iconPlaceholder?: string;
1027
1034
  emptyTagsMessage?: string;
1028
1035
  }
1029
1036
  /** Renders the event meta editor component. */
@@ -1619,6 +1626,14 @@ declare function CatalogCellControls({ children }: {
1619
1626
  }): import("react").JSX.Element;
1620
1627
  /** Localized strings for the catalog frame. */
1621
1628
  interface CatalogFrameLabels {
1629
+ /**
1630
+ * The inspector's close button.
1631
+ *
1632
+ * The frame renders the inspector, so a caller who localizes this frame has
1633
+ * no other way to reach it — it was the one English word left in a
1634
+ * translated catalogue.
1635
+ */
1636
+ closeInspector?: string;
1622
1637
  emptyTitle?: string;
1623
1638
  emptyDescription?: string;
1624
1639
  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-CHs8eEzs.js";
5
5
  import { ClassValue } from "clsx";
6
6
  import * as React$1 from "react";
7
7
  import { Component, ComponentPropsWithoutRef, ErrorInfo, ReactNode } from "react";
@@ -64,12 +64,13 @@ interface StatusDotProps extends Omit<ComponentPropsWithoutRef<"span">, "childre
64
64
  */
65
65
  children: ReactNode;
66
66
  /**
67
- * How the state was decided, as a `title`.
67
+ * How the state was decided.
68
68
  *
69
- * Mouse-only: a `title` does not open on keyboard focus and is unreachable on
70
- * touch. It is a bonus for the reader who hovers, never the only place a rule
71
- * lives if knowing the rule is required to act, put it in text beside the
72
- * status instead.
69
+ * Shown in a tooltip that opens on hover and on keyboard focus, so the rule
70
+ * is reachable without a pointer. Giving a hint makes the dot a tab stop
71
+ * the only way a keyboard reader can reach it so it is still a bonus for
72
+ * the curious rather than the only place a rule lives: if knowing the rule is
73
+ * required to act, put it in text beside the status instead.
73
74
  */
74
75
  hint?: string;
75
76
  }
@@ -84,6 +85,10 @@ interface StatusDotProps extends Omit<ComponentPropsWithoutRef<"span">, "childre
84
85
  * The dot is decorative on purpose. It never carries meaning the text does not
85
86
  * also carry, so the component cannot be used to say something in colour alone.
86
87
  *
88
+ * Without a `hint` this renders one span and nothing else: a table repeats this
89
+ * on every row, and a tooltip's provider, listeners and floating context are
90
+ * not a cost worth paying hundreds of times for rows that have nothing to say.
91
+ *
87
92
  * @example
88
93
  * ```tsx
89
94
  * <StatusDot tone="warning" hint="7일 이상 수신되지 않음">비활성</StatusDot>
@@ -1024,6 +1029,8 @@ interface EventMetaEditorLabels {
1024
1029
  displayNamePlaceholder?: string;
1025
1030
  descriptionPlaceholder?: string;
1026
1031
  tagsPlaceholder?: string;
1032
+ /** The icon picker's own empty text. Forwarded, so one `labels` covers the pane. */
1033
+ iconPlaceholder?: string;
1027
1034
  emptyTagsMessage?: string;
1028
1035
  }
1029
1036
  /** Renders the event meta editor component. */
@@ -1619,6 +1626,14 @@ declare function CatalogCellControls({ children }: {
1619
1626
  }): import("react").JSX.Element;
1620
1627
  /** Localized strings for the catalog frame. */
1621
1628
  interface CatalogFrameLabels {
1629
+ /**
1630
+ * The inspector's close button.
1631
+ *
1632
+ * The frame renders the inspector, so a caller who localizes this frame has
1633
+ * no other way to reach it — it was the one English word left in a
1634
+ * translated catalogue.
1635
+ */
1636
+ closeInspector?: string;
1622
1637
  emptyTitle?: string;
1623
1638
  emptyDescription?: string;
1624
1639
  filteredEmptyTitle?: string;
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { $ as PopoverClose, $t as CompositeProvider, A as FormRadio, An as OPT_BADGE_RED, At as DialogBody, B as FormSubmit, Bn as OPT_FOCUS, Bt as SelectLabel, C as FormGroupLabel, Ct as ComboboxGroup, D as FormNumberInput, Dn as OPT_BADGE_BLUE, Dt as ComboboxPopover, E as FormLabel, Et as ComboboxItem, F as FormSelect, Ft as DialogHeader, G as useFormContext, Gt as TabList, H as FormTagInput, Hn as OPT_HOVER_ITEM, Ht as SelectRoot, I as FormSelectItem, In as OPT_DOT_GRAY, It as DialogHeading, J as DateRangePicker, Jt as DisclosureContent, K as useFormStore, Kt as TabPanel, L as FormSelectPopover, Ln as OPT_DOT_GREEN, Lt as DialogPanel, M as FormRemove, Mn as OPT_BORDER, Mt as DialogDisclosure, N as FormReset, Nt as DialogDismiss, O as FormProvider, On as OPT_BADGE_GREEN, Ot as ComboboxRoot, P as FormRoot, Pt as DialogFooter, Q as ColorPicker, Qt as CompositeItem, R as FormSlider, Rn as OPT_DOT_RED, Rt as DialogRoot, S as FormGroup, St as ComboboxEmpty, T as FormInput, Tt as ComboboxInput, U as FormTextarea, Un as OPT_INPUT, Ut as SelectTrigger, V as FormSwitch, Vn as OPT_FOCUS_VISIBLE, Vt as SelectPopover, W as useFieldValue, Wt as Tab, X as IconPicker, Xn as OPT_TD, Xt as DisclosureTrigger, Y as TagInput, Yt as DisclosureRoot, Z as getIconRegistryEntry, Zt as Composite, _ as FormControl, _n as SkeletonCard, _t as MenuRoot, a as FieldTokenLegend, an as useInputId, ar as _objectWithoutProperties, at as ToolbarButton, b as FormError, bn as useControlledState, bt as MenubarContainer, c as Checkbox, cn as Badge, ct as ToolbarSeparator, d as formatOptDateTime, dn as koBreadcrumbLabels, dt as TooltipProvider, en as CompositeRow, er as OPT_TEXT_PRIMARY, et as PopoverContent, f as formatOptNumber, fn as koComboboxLabels, ft as MenuButtonArrow, g as FormColorPicker, gn as SkeletonAvatar, gt as MenuPopover, h as FormCheckbox, hn as Skeleton, ht as MenuItemRadio, i as FieldToken, in as Input, ir as _objectSpread2, it as NumberInput, j as FormRadioGroup, jn as OPT_BADGE_YELLOW, jt as DialogDescription, k as FormPush, kn as OPT_BADGE_NEUTRAL, kt as AlertDialogPanel, l as CheckboxGroup, ln as EmptyState, lt as Tooltip, m as formatOptTime, mn as StatCard, mt as MenuItemCheckbox, n as Highlight, nn as Meter, nr as OPT_TEXT_TERTIARY, nt as PopoverTrigger, o as resolveFieldType, on as Alert, or as Kbd, ot as ToolbarContainer, p as formatOptShortDate, pn as koStarRatingLabels, pt as MenuItem, q as DEFAULT_PRESETS, qt as TabsRoot, r as FIELD_TYPE_TOKENS, rn as StarRating, rr as OPT_TH, rt as Slider, s as Pagination, sn as Spinner, sr as cn, st as ToolbarRoot, t as TextTruncate, tn as CompositeZone, tr as OPT_TEXT_SECONDARY, tt as PopoverRoot, un as Button, ut as TooltipAnchor, v as FormDateRangePicker, vn as SkeletonTable, vt as MenuSeparator, w as FormIconPicker, wt as ComboboxGroupLabel, x as FormField, xt as MenubarRoot, y as FormDescription, yn as SkeletonText, yt as MenuTrigger, z as FormStarRating, zn as OPT_DOT_YELLOW, zt as SelectItem } from "./text-truncate-DSuZECy0.js";
3
- import { $ as Identity, A as PageHeader, B as DropdownTrigger, C as Logo, D as Section, E as ResizablePanelGroup, F as RadioGroup, G as Textarea, H as StepBuilder, I as DropdownContent, J as CardContent, K as Switch, L as DropdownItem, M as BlockLayout, N as LoadingOverlay, O as Container, P as Radio, Q as CardTitle, R as DropdownMenu, S as DrawerRoot, T as ResizablePanel, U as CircularProgress, V as ConditionBuilder, W as Progress, X as CardFooter, Y as CardDescription, Z as CardHeader, _ as getShaderFragment, a as THEME_PALETTES, at as AccordionItem, b as DrawerClose, c as ExpressionGroup, ct as Toggle, d as ShaderSurface, dt as Separator, et as Avatar, f as SHADER_OVERLAY_PARAM_KEYS, ft as Heading, g as SHADER_PRESET_IDS, h as SHADER_PRESETS, i as ColorPalettePicker, it as AccordionContent, j as createBlock, k as ScrollArea, l as Facet, lt as ToggleGroup, m as SHADER_PARAM_KEYS, n as InlineEdit, nt as DescriptionList, o as LiveRegion, ot as AccordionRoot, p as SHADER_PARAM_FALLBACK, pt as Text, q as Card, r as ColorPaletteDisplay, rt as Breadcrumb, s as Expression, st as AccordionTrigger, t as KeyPadMenu, tt as AvatarGroup, u as FacetGroup, ut as OtpField, v as getShaderPreset, w as ResizableHandle, x as DrawerPanel, y as VirtualList, z as DropdownSeparator } from "./key-pad-menu-Di2aRGbM.js";
4
- import { $ as CommandGroup, A as ToastProvider, B as FaqAccordion, C as Flyout, D as KeyValueEditor, E as WorkflowCanvas, F as BranchSelect, G as StatusSelect, H as EditorToolbar, I as EnvPanel, J as CommandPaletteTrigger, K as SearchCombobox, L as ProjectSwitcher, M as useToast, N as DataTable, O as FailureList, P as DomainTable, Q as CommandEmpty, R as DeploymentTimeline, S as withoutField, T as EventTimeline, U as SidebarNav, V as ContentTabs, W as AppMenubar, X as Command, Y as CommandPalette, Z as CommandDialog, _ as fieldValues, a as TimeRangeControl, b as removeClause, c as describeClause, d as quoteValue, et as CommandInput, f as parseQuery, g as applyCellAction, h as addClause, i as DEFAULT_TIME_PRESETS, it as CommandShortcut, j as toast, k as NotificationToast, l as formatClause, m as EMPTY_QUERY, n as LogTable, nt as CommandList, o as useAutoRefresh, p as parseQueryWithDiagnostics, q as DashboardGrid, r as TimeSeriesPanel, rt as CommandSeparator, s as QueryBar, t as FieldSidebar, tt as CommandItem, u as formatQuery, v as isEmptyQuery, w as ScoreBreakdown, x as withFieldValue, y as queryFields, z as SettingsForm } from "./field-sidebar-zkkqC7__.js";
2
+ import { $ as PopoverClose, $t as ToolbarButton, A as FormRadio, An as OPT_BADGE_RED, At as DialogPanel, B as FormSubmit, Bn as OPT_FOCUS, Bt as TabsRoot, C as FormGroupLabel, Ct as DialogBody, D as FormNumberInput, Dn as OPT_BADGE_BLUE, Dt as DialogFooter, E as FormLabel, Et as DialogDismiss, F as FormSelect, Ft as SelectRoot, G as useFormContext, Gt as CompositeItem, H as FormTagInput, Hn as OPT_HOVER_ITEM, Ht as DisclosureRoot, I as FormSelectItem, In as OPT_DOT_GRAY, It as SelectTrigger, J as DateRangePicker, Jt as CompositeZone, K as useFormStore, Kt as CompositeProvider, L as FormSelectPopover, Ln as OPT_DOT_GREEN, Lt as Tab, M as FormRemove, Mn as OPT_BORDER, Mt as SelectItem, N as FormReset, Nt as SelectLabel, O as FormProvider, On as OPT_BADGE_GREEN, Ot as DialogHeader, P as FormRoot, Pt as SelectPopover, Q as ColorPicker, Qt as useInputId, R as FormSlider, Rn as OPT_DOT_RED, Rt as TabList, S as FormGroup, St as AlertDialogPanel, T as FormInput, Tt as DialogDisclosure, U as FormTextarea, Un as OPT_INPUT, Ut as DisclosureTrigger, V as FormSwitch, Vn as OPT_FOCUS_VISIBLE, Vt as DisclosureContent, W as useFieldValue, Wt as Composite, X as IconPicker, Xn as OPT_TD, Xt as StarRating, Y as TagInput, Yt as Meter, Z as getIconRegistryEntry, Zt as Input, _ as FormControl, _n as SkeletonCard, _t as ComboboxGroupLabel, a as FieldTokenLegend, an as TooltipProvider, ar as _objectWithoutProperties, at as MenuButtonArrow, b as FormError, bn as useControlledState, bt as ComboboxPopover, c as Checkbox, cn as Badge, ct as MenuItemRadio, d as formatOptDateTime, dn as koBreadcrumbLabels, dt as MenuSeparator, en as ToolbarContainer, er as OPT_TEXT_PRIMARY, et as PopoverContent, f as formatOptNumber, fn as koComboboxLabels, ft as MenuTrigger, g as FormColorPicker, gn as SkeletonAvatar, gt as ComboboxGroup, h as FormCheckbox, hn as Skeleton, ht as ComboboxEmpty, i as FieldToken, in as TooltipAnchor, ir as _objectSpread2, it as NumberInput, j as FormRadioGroup, jn as OPT_BADGE_YELLOW, jt as DialogRoot, k as FormPush, kn as OPT_BADGE_NEUTRAL, kt as DialogHeading, l as CheckboxGroup, ln as EmptyState, lt as MenuPopover, m as formatOptTime, mn as StatCard, mt as MenubarRoot, n as Highlight, nn as ToolbarSeparator, nr as OPT_TEXT_TERTIARY, nt as PopoverTrigger, o as resolveFieldType, on as Alert, or as Kbd, ot as MenuItem, p as formatOptShortDate, pn as koStarRatingLabels, pt as MenubarContainer, q as DEFAULT_PRESETS, qt as CompositeRow, r as FIELD_TYPE_TOKENS, rn as Tooltip, rr as OPT_TH, rt as Slider, s as Pagination, sn as Spinner, sr as cn, st as MenuItemCheckbox, t as TextTruncate, tn as ToolbarRoot, tr as OPT_TEXT_SECONDARY, tt as PopoverRoot, un as Button, ut as MenuRoot, v as FormDateRangePicker, vn as SkeletonTable, vt as ComboboxInput, w as FormIconPicker, wt as DialogDescription, x as FormField, xt as ComboboxRoot, y as FormDescription, yn as SkeletonText, yt as ComboboxItem, z as FormStarRating, zn as OPT_DOT_YELLOW, zt as TabPanel } from "./text-truncate-BFWd2cE_.js";
3
+ import { $ as Identity, A as PageHeader, B as DropdownTrigger, C as Logo, D as Section, E as ResizablePanelGroup, F as RadioGroup, G as Textarea, H as StepBuilder, I as DropdownContent, J as CardContent, K as Switch, L as DropdownItem, M as BlockLayout, N as LoadingOverlay, O as Container, P as Radio, Q as CardTitle, R as DropdownMenu, S as DrawerRoot, T as ResizablePanel, U as CircularProgress, V as ConditionBuilder, W as Progress, X as CardFooter, Y as CardDescription, Z as CardHeader, _ as getShaderFragment, a as THEME_PALETTES, at as AccordionItem, b as DrawerClose, c as ExpressionGroup, ct as Toggle, d as ShaderSurface, dt as Separator, et as Avatar, f as SHADER_OVERLAY_PARAM_KEYS, ft as Heading, g as SHADER_PRESET_IDS, h as SHADER_PRESETS, i as ColorPalettePicker, it as AccordionContent, j as createBlock, k as ScrollArea, l as Facet, lt as ToggleGroup, m as SHADER_PARAM_KEYS, n as InlineEdit, nt as DescriptionList, o as LiveRegion, ot as AccordionRoot, p as SHADER_PARAM_FALLBACK, pt as Text, q as Card, r as ColorPaletteDisplay, rt as Breadcrumb, s as Expression, st as AccordionTrigger, t as KeyPadMenu, tt as AvatarGroup, u as FacetGroup, ut as OtpField, v as getShaderPreset, w as ResizableHandle, x as DrawerPanel, y as VirtualList, z as DropdownSeparator } from "./key-pad-menu-CUiQ-vKw.js";
4
+ import { $ as CommandGroup, A as ToastProvider, B as FaqAccordion, C as Flyout, D as KeyValueEditor, E as WorkflowCanvas, F as BranchSelect, G as StatusSelect, H as EditorToolbar, I as EnvPanel, J as CommandPaletteTrigger, K as SearchCombobox, L as ProjectSwitcher, M as useToast, N as DataTable, O as FailureList, P as DomainTable, Q as CommandEmpty, R as DeploymentTimeline, S as withoutField, T as EventTimeline, U as SidebarNav, V as ContentTabs, W as AppMenubar, X as Command, Y as CommandPalette, Z as CommandDialog, _ as fieldValues, a as TimeRangeControl, b as removeClause, c as describeClause, d as quoteValue, et as CommandInput, f as parseQuery, g as applyCellAction, h as addClause, i as DEFAULT_TIME_PRESETS, it as CommandShortcut, j as toast, k as NotificationToast, l as formatClause, m as EMPTY_QUERY, n as LogTable, nt as CommandList, o as useAutoRefresh, p as parseQueryWithDiagnostics, q as DashboardGrid, r as TimeSeriesPanel, rt as CommandSeparator, s as QueryBar, t as FieldSidebar, tt as CommandItem, u as formatQuery, v as isEmptyQuery, w as ScoreBreakdown, x as withFieldValue, y as queryFields, z as SettingsForm } from "./field-sidebar-DJKWQQeu.js";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
6
  import * as React from "react";
7
7
  import { Component, createContext, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
@@ -79,7 +79,10 @@ function Callout(_ref) {
79
79
  let { tone = "info", title, icon, action, size = "md", className, children } = _ref, props = _objectWithoutProperties(_ref, _excluded$2);
80
80
  const DefaultIcon = defaultIcons[tone];
81
81
  const glyph = icon === void 0 ? DefaultIcon ? /* @__PURE__ */ jsx(DefaultIcon, { "aria-hidden": "true" }) : null : icon;
82
- return /* @__PURE__ */ jsxs("div", _objectSpread2(_objectSpread2({ className: cn("flex items-start rounded-lg border", toneStyles[tone], sizeStyles$3[size], className) }, props), {}, {
82
+ return /* @__PURE__ */ jsxs("div", _objectSpread2(_objectSpread2({
83
+ role: "status",
84
+ className: 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,
@@ -149,6 +152,10 @@ const dotSize = {
149
152
  * The dot is decorative on purpose. It never carries meaning the text does not
150
153
  * also carry, so the component cannot be used to say something in colour alone.
151
154
  *
155
+ * Without a `hint` this renders one span and nothing else: a table repeats this
156
+ * on every row, and a tooltip's provider, listeners and floating context are
157
+ * not a cost worth paying hundreds of times for rows that have nothing to say.
158
+ *
152
159
  * @example
153
160
  * ```tsx
154
161
  * <StatusDot tone="warning" hint="7일 이상 수신되지 않음">비활성</StatusDot>
@@ -156,9 +163,9 @@ const dotSize = {
156
163
  */
157
164
  function StatusDot(_ref) {
158
165
  let { tone = "neutral", size = "md", hint, className, children } = _ref, props = _objectWithoutProperties(_ref, _excluded$1);
159
- return /* @__PURE__ */ jsxs("span", _objectSpread2(_objectSpread2({
160
- className: cn("inline-flex items-center whitespace-nowrap", sizeStyles$2[size], textTone[tone], className),
161
- title: hint
166
+ const dot = /* @__PURE__ */ jsxs("span", _objectSpread2(_objectSpread2({
167
+ className: cn("inline-flex items-center whitespace-nowrap", sizeStyles$2[size], textTone[tone], hint && "focus-visible:ring-ring rounded-sm outline-none focus-visible:ring-2", className),
168
+ tabIndex: hint ? 0 : void 0
162
169
  }, props), {}, {
163
170
  "data-opt-id": "N51AT",
164
171
  "data-opt-slug": "status-dot.StatusDot",
@@ -168,6 +175,8 @@ function StatusDot(_ref) {
168
175
  "aria-hidden": "true"
169
176
  }), children]
170
177
  }));
178
+ if (!hint) return dot;
179
+ return /* @__PURE__ */ jsxs(TooltipProvider, { children: [/* @__PURE__ */ jsx(TooltipAnchor, { render: dot }), /* @__PURE__ */ jsx(Tooltip, { children: hint })] });
171
180
  }
172
181
  //#endregion
173
182
  //#region src/core/copy-button.tsx
@@ -336,7 +345,7 @@ function SegmentedControl({ options, value, onChange, size = "md", fullWidth = f
336
345
  /* @__PURE__ */ jsx(Radio$1, {
337
346
  value: option.value,
338
347
  disabled: itemDisabled,
339
- className: "sr-only"
348
+ className: "absolute inset-0 m-0 h-full w-full cursor-pointer opacity-0"
340
349
  }),
341
350
  option.icon,
342
351
  /* @__PURE__ */ jsx("span", { children: option.label }),
@@ -2069,7 +2078,7 @@ function EventIcon({ icon, color, size = "md", className, labels: customLabels }
2069
2078
  const resolvedColor = (color === null || color === void 0 ? void 0 : color.trim()) ? color : void 0;
2070
2079
  const iconEntry = typeof icon === "string" ? getIconRegistryEntry(icon) : void 0;
2071
2080
  const iconElement = React.isValidElement(icon) ? icon : null;
2072
- 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;
2073
2082
  let iconContent;
2074
2083
  if (iconEntry) iconContent = /* @__PURE__ */ jsx(iconEntry.Icon, {
2075
2084
  "aria-hidden": true,
@@ -2985,6 +2994,7 @@ const defaultLabels$21 = {
2985
2994
  displayNamePlaceholder: "Page View",
2986
2995
  descriptionPlaceholder: "Triggered when a user views a page",
2987
2996
  tagsPlaceholder: "Add tag...",
2997
+ iconPlaceholder: "Select icon",
2988
2998
  emptyTagsMessage: "No tags added yet."
2989
2999
  };
2990
3000
  /** Renders the event meta editor component. */
@@ -2999,7 +3009,7 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
2999
3009
  onChange(_objectSpread2(_objectSpread2({}, value), partial));
3000
3010
  };
3001
3011
  return /* @__PURE__ */ jsxs("div", {
3002
- className: cn("gap-group flex flex-col", className),
3012
+ className: cn("@container gap-group flex flex-col", className),
3003
3013
  "data-opt-id": "EZR35",
3004
3014
  "data-opt-slug": "event-meta-editor.EventMetaEditor",
3005
3015
  children: [
@@ -3013,6 +3023,7 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3013
3023
  value: value.icon,
3014
3024
  onChange: (icon) => update({ icon }),
3015
3025
  icons,
3026
+ placeholder: labels.iconPlaceholder,
3016
3027
  "aria-label": labels.icon
3017
3028
  })] }),
3018
3029
  /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("span", {
@@ -3034,7 +3045,7 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3034
3045
  ]
3035
3046
  }),
3036
3047
  /* @__PURE__ */ jsxs("div", {
3037
- className: "gap-group grid grid-cols-2",
3048
+ className: "gap-group grid grid-cols-1 @sm:grid-cols-2",
3038
3049
  children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("label", {
3039
3050
  htmlFor: nameId,
3040
3051
  className: "text-text-tertiary mb-1 block text-xs font-medium",
@@ -3044,7 +3055,8 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3044
3055
  value: value.name,
3045
3056
  onChange: (e) => update({ name: e.target.value }),
3046
3057
  placeholder: labels.namePlaceholder,
3047
- className: "font-mono"
3058
+ className: "font-mono",
3059
+ fullWidth: true
3048
3060
  })] }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("label", {
3049
3061
  htmlFor: displayNameId,
3050
3062
  className: "text-text-tertiary mb-1 block text-xs font-medium",
@@ -3053,7 +3065,8 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3053
3065
  id: displayNameId,
3054
3066
  value: value.displayName,
3055
3067
  onChange: (e) => update({ displayName: e.target.value }),
3056
- placeholder: labels.displayNamePlaceholder
3068
+ placeholder: labels.displayNamePlaceholder,
3069
+ fullWidth: true
3057
3070
  })] })]
3058
3071
  }),
3059
3072
  /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("label", {
@@ -3064,7 +3077,8 @@ function EventMetaEditor({ value, onChange, icons, sections, footer, className,
3064
3077
  id: descriptionId,
3065
3078
  value: value.description,
3066
3079
  onChange: (e) => update({ description: e.target.value }),
3067
- placeholder: labels.descriptionPlaceholder
3080
+ placeholder: labels.descriptionPlaceholder,
3081
+ fullWidth: true
3068
3082
  })] }),
3069
3083
  /* @__PURE__ */ jsxs("div", { children: [
3070
3084
  /* @__PURE__ */ jsx("span", {
@@ -4478,6 +4492,19 @@ function toText(value) {
4478
4492
  if (typeof value === "number" || typeof value === "boolean") return String(value);
4479
4493
  return JSON.stringify(value);
4480
4494
  }
4495
+ /**
4496
+ * The values one field holds, as a list.
4497
+ *
4498
+ * A clause names a single value, so an array field has to be read element by
4499
+ * element: `tag:pay` asks whether *any* tag is `pay`, not whether the whole
4500
+ * list stringifies to it — and `toText` on an array produces `["pay","cart"]`,
4501
+ * which no user ever types. Scalars read as a list of one so both shapes take
4502
+ * the same path, and negation stays where it already is: `matchesQuery` flips
4503
+ * the result, so `-tag:pay` correctly means "no element matches".
4504
+ */
4505
+ function readValues(value) {
4506
+ return Array.isArray(value) ? value : [value];
4507
+ }
4481
4508
  function compare(left, right) {
4482
4509
  const leftNumber = typeof left === "number" ? left : Number(toText(left));
4483
4510
  const rightNumber = Number(right);
@@ -4488,9 +4515,9 @@ function matchesClause(clause, read, searchable) {
4488
4515
  if (clause.type === "term") return searchable().toLowerCase().includes(clause.value.toLowerCase());
4489
4516
  const value = read(clause.field);
4490
4517
  switch (clause.operator) {
4491
- case "exists": return value !== void 0 && value !== null && value !== "";
4492
- case "eq": return clause.values.some((candidate) => toText(value).toLowerCase() === candidate.toLowerCase());
4493
- case "contains": return clause.values.some((candidate) => toText(value).toLowerCase().includes(candidate.toLowerCase()));
4518
+ case "exists": return readValues(value).some((item) => item !== void 0 && item !== null && item !== "");
4519
+ case "eq": return clause.values.some((candidate) => readValues(value).some((item) => toText(item).toLowerCase() === candidate.toLowerCase()));
4520
+ case "contains": return clause.values.some((candidate) => readValues(value).some((item) => toText(item).toLowerCase().includes(candidate.toLowerCase())));
4494
4521
  case "gt":
4495
4522
  var _clause$values$;
4496
4523
  return compare(value, (_clause$values$ = clause.values[0]) !== null && _clause$values$ !== void 0 ? _clause$values$ : "") > 0;
@@ -4526,7 +4553,7 @@ function matchesQueryObject(query, row, options = {}) {
4526
4553
  let cached = null;
4527
4554
  const searchable = () => {
4528
4555
  var _cached;
4529
- (_cached = cached) !== null && _cached !== void 0 || (cached = [...Object.values(row).filter((value) => typeof value !== "object"), ...Object.values(nested !== null && nested !== void 0 ? nested : {})].map(toText).join(" "));
4556
+ (_cached = cached) !== null && _cached !== void 0 || (cached = [...Object.values(row).flatMap((value) => Array.isArray(value) ? value.filter((item) => typeof item !== "object") : typeof value === "object" ? [] : [value]), ...Object.values(nested !== null && nested !== void 0 ? nested : {})].map(toText).join(" "));
4530
4557
  return cached;
4531
4558
  };
4532
4559
  return matchesQuery(query, read, searchable);
@@ -4852,6 +4879,7 @@ function CatalogCellControls({ children }) {
4852
4879
  });
4853
4880
  }
4854
4881
  const defaultLabels$13 = {
4882
+ closeInspector: "Close panel",
4855
4883
  emptyTitle: "아직 아무것도 없습니다",
4856
4884
  emptyDescription: "데이터가 도착하면 여기에 나타납니다.",
4857
4885
  filteredEmptyTitle: "조건에 맞는 항목이 없습니다",
@@ -4951,6 +4979,7 @@ function CatalogFrame({ children, isEmpty, query, onQueryChange, filters, stats,
4951
4979
  actions: inspectorActions,
4952
4980
  footer: inspectorFooter,
4953
4981
  width: inspectorWidth,
4982
+ labels: { close: labels.closeInspector },
4954
4983
  children: /* @__PURE__ */ jsxs("div", {
4955
4984
  className: "gap-group flex flex-col",
4956
4985
  children: [body, onPageChange && totalCount != null && totalCount > pageSize && /* @__PURE__ */ jsx(Pagination, {
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- const require_text_truncate = require("./text-truncate-I1XLWmRa.cjs");
2
+ const require_text_truncate = require("./text-truncate-DsG5UAOY.cjs");
3
3
  let react_jsx_runtime = require("react/jsx-runtime");
4
4
  let react = require("react");
5
5
  react = require_text_truncate.__toESM(react, 1);
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { Bn as OPT_FOCUS, Cn as getDescribedBy, En as OPT_ANIMATE_ENTER_EXIT, Ht as SelectRoot$1, Kn as OPT_SURFACE, Mn as OPT_BORDER, Qn as OPT_TEXTAREA_SIZE, Sn as RequiredMark, Tn as OPT_ANIMATE_DRAWER, Un as OPT_INPUT, Ut as SelectTrigger$1, Vn as OPT_FOCUS_VISIBLE, Vt as SelectPopover$1, _t as MenuRoot$1, an as useInputId, ar as _objectWithoutProperties, bn as useControlledState, cn as Badge, dn as koBreadcrumbLabels, er as OPT_TEXT_PRIMARY, f as formatOptNumber, gt as MenuPopover$1, ir as _objectSpread2, nr as OPT_TEXT_TERTIARY, pt as MenuItem$1, sn as Spinner, sr as cn, tr as OPT_TEXT_SECONDARY, un as Button, vt as MenuSeparator$1, xn as FieldMessages, yt as MenuTrigger$1, zt as SelectItem$1 } from "./text-truncate-DSuZECy0.js";
2
+ import { Bn as OPT_FOCUS, Cn as getDescribedBy, En as OPT_ANIMATE_ENTER_EXIT, Ft as SelectRoot$1, It as SelectTrigger$1, Kn as OPT_SURFACE, Mn as OPT_BORDER, Mt as SelectItem$1, Pt as SelectPopover$1, Qn as OPT_TEXTAREA_SIZE, Qt as useInputId, Sn as RequiredMark, Tn as OPT_ANIMATE_DRAWER, Un as OPT_INPUT, Vn as OPT_FOCUS_VISIBLE, ar as _objectWithoutProperties, bn as useControlledState, cn as Badge, dn as koBreadcrumbLabels, dt as MenuSeparator$1, er as OPT_TEXT_PRIMARY, f as formatOptNumber, ft as MenuTrigger$1, ir as _objectSpread2, lt as MenuPopover$1, nr as OPT_TEXT_TERTIARY, ot as MenuItem$1, sn as Spinner, sr as cn, tr as OPT_TEXT_SECONDARY, un as Button, ut as MenuRoot$1, xn as FieldMessages } from "./text-truncate-BFWd2cE_.js";
3
3
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
4
  import * as React from "react";
5
5
  import { createContext, createElement, forwardRef, useCallback, useContext, useEffect, useId, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";