@ai-matrx/records-ui 0.101.27 → 0.101.29

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.d.cts CHANGED
@@ -3369,9 +3369,14 @@ declare function choiceNudgeOf(client: RecordsClient): Promise<ChoiceNudge>;
3369
3369
  */
3370
3370
  declare function useChoiceNudge(enabled?: boolean): ChoiceNudge | null;
3371
3371
 
3372
+ interface EmbeddedLook {
3373
+ blankEmpty: boolean;
3374
+ choiceDot: boolean;
3375
+ }
3376
+
3372
3377
  /** The envelope for one key, when the document carries one. */
3373
3378
  declare function envelopeFor(document: RecordDocument | undefined, key: string): ValueEnvelope | undefined;
3374
- declare function renderValue(field: Field, value: unknown, document?: RecordDocument, labels?: LabelLookup, stillWaitingFor?: string | null): string | number | bigint | boolean | Iterable<react.ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<react.ReactNode> | null | undefined> | react.JSX.Element | null;
3379
+ declare function renderValue(field: Field, value: unknown, document?: RecordDocument, labels?: LabelLookup, stillWaitingFor?: string | null, look?: EmbeddedLook | null): string | number | bigint | boolean | Iterable<react.ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<react.ReactNode> | null | undefined> | react.JSX.Element | null;
3375
3380
  /**
3376
3381
  * The text of one scalar, with the Field's UNIT and FORMAT applied — FLD-N-1
3377
3382
  * says both change the MEANING — and with an id resolved to the NAME of the
@@ -3441,7 +3446,7 @@ declare function RecordValue({ field, value, document, format, withheld, inCell,
3441
3446
  * unbound, the words as written.
3442
3447
  */
3443
3448
  inCell?: boolean | undefined;
3444
- }): react.JSX.Element;
3449
+ }): react.JSX.Element | null;
3445
3450
  /**
3446
3451
  * WHAT ONE CARD SAYS — the kanban's, the calendar's, the gallery's and the pipeline's alike, so
3447
3452
  * no card can read a record differently from another. `field` is the card's title column
package/dist/index.d.ts CHANGED
@@ -3369,9 +3369,14 @@ declare function choiceNudgeOf(client: RecordsClient): Promise<ChoiceNudge>;
3369
3369
  */
3370
3370
  declare function useChoiceNudge(enabled?: boolean): ChoiceNudge | null;
3371
3371
 
3372
+ interface EmbeddedLook {
3373
+ blankEmpty: boolean;
3374
+ choiceDot: boolean;
3375
+ }
3376
+
3372
3377
  /** The envelope for one key, when the document carries one. */
3373
3378
  declare function envelopeFor(document: RecordDocument | undefined, key: string): ValueEnvelope | undefined;
3374
- declare function renderValue(field: Field, value: unknown, document?: RecordDocument, labels?: LabelLookup, stillWaitingFor?: string | null): string | number | bigint | boolean | Iterable<react.ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<react.ReactNode> | null | undefined> | react.JSX.Element | null;
3379
+ declare function renderValue(field: Field, value: unknown, document?: RecordDocument, labels?: LabelLookup, stillWaitingFor?: string | null, look?: EmbeddedLook | null): string | number | bigint | boolean | Iterable<react.ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<react.ReactNode> | null | undefined> | react.JSX.Element | null;
3375
3380
  /**
3376
3381
  * The text of one scalar, with the Field's UNIT and FORMAT applied — FLD-N-1
3377
3382
  * says both change the MEANING — and with an id resolved to the NAME of the
@@ -3441,7 +3446,7 @@ declare function RecordValue({ field, value, document, format, withheld, inCell,
3441
3446
  * unbound, the words as written.
3442
3447
  */
3443
3448
  inCell?: boolean | undefined;
3444
- }): react.JSX.Element;
3449
+ }): react.JSX.Element | null;
3445
3450
  /**
3446
3451
  * WHAT ONE CARD SAYS — the kanban's, the calendar's, the gallery's and the pipeline's alike, so
3447
3452
  * no card can read a record differently from another. `field` is the card's title column
package/dist/index.js CHANGED
@@ -5119,7 +5119,7 @@ function useWhoChanged(fieldKey, recordId) {
5119
5119
  }
5120
5120
 
5121
5121
  // src/values.tsx
5122
- import { formatColumnValue } from "@ai-matrx/design-system/data-table";
5122
+ import { SWATCH_CLASS, formatColumnValue } from "@ai-matrx/design-system/data-table";
5123
5123
  import { formatFieldValue as formatFieldValue3 } from "@ai-matrx/design-system/field-formats";
5124
5124
 
5125
5125
  // src/withheld.tsx
@@ -5155,6 +5155,25 @@ function WithheldValue({ field: field2, notice }) {
5155
5155
  // src/values.tsx
5156
5156
  import { Badge as Badge5, cn as cn17 } from "@ai-matrx/design-system";
5157
5157
 
5158
+ // src/embeddedLook.tsx
5159
+ import { createContext as createContext4, useContext as useContext4 } from "react";
5160
+ var EMBEDDED_LOOK = { blankEmpty: true, choiceDot: true };
5161
+ var EmbeddedLookContext = createContext4(null);
5162
+ var EmbeddedLookProvider = EmbeddedLookContext.Provider;
5163
+ function useEmbeddedLook() {
5164
+ return useContext4(EmbeddedLookContext);
5165
+ }
5166
+ var EMBEDDED_TABLE_CLASS = [
5167
+ "[&_tbody_td]:h-10",
5168
+ "[&_tbody_td]:align-middle!",
5169
+ "[&_tbody_td]:border-r",
5170
+ "[&_tbody_td]:border-border",
5171
+ "[&_tbody_td:last-child]:border-r-0",
5172
+ "[&_thead_th]:border-r",
5173
+ "[&_thead_th]:border-border",
5174
+ "[&_thead_th:last-child]:border-r-0"
5175
+ ].join(" ");
5176
+
5158
5177
  // src/enumLabels.ts
5159
5178
  function exhaustiveValuesOf() {
5160
5179
  return function(values) {
@@ -6145,7 +6164,7 @@ function SourceArchivedValue({ state }) {
6145
6164
  return /* @__PURE__ */ jsx26("span", { className: "text-xs italic text-muted-foreground", title: sourceArchivedSentence(state), "data-records-source-archived": state.field_id ?? "", children: SOURCE_ARCHIVED_WORDS });
6146
6165
  }
6147
6166
  var ABSENCE_WORDS = ABSENCE_WORD_LABEL;
6148
- function renderValue(field2, value, document2, labels, stillWaitingFor) {
6167
+ function renderValue(field2, value, document2, labels, stillWaitingFor, look) {
6149
6168
  const archivedSource = sourceArchivedOf2(value);
6150
6169
  if (archivedSource) return /* @__PURE__ */ jsx26(SourceArchivedValue, { state: archivedSource });
6151
6170
  const envelope = envelopeFor(document2, field2.key);
@@ -6165,6 +6184,7 @@ function renderValue(field2, value, document2, labels, stillWaitingFor) {
6165
6184
  if (computed?.why) {
6166
6185
  return /* @__PURE__ */ jsx26("span", { className: "text-muted-foreground", title: computed.why, "data-records-empty-why": computed.kind, children: "\u2014" });
6167
6186
  }
6187
+ if (look?.blankEmpty) return null;
6168
6188
  return /* @__PURE__ */ jsx26("span", { className: "text-muted-foreground", children: "\u2014" });
6169
6189
  }
6170
6190
  if (isSignatureField(field2)) return /* @__PURE__ */ jsx26(SignatureValue, { value, fieldKey: field2.key, document: document2 });
@@ -6180,8 +6200,8 @@ function renderValue(field2, value, document2, labels, stillWaitingFor) {
6180
6200
  if (kv) return /* @__PURE__ */ jsx26(KindValueCell, { kv, where: "cell", title: field2.label });
6181
6201
  const chosen = kind === "select" || kind === "multi_select";
6182
6202
  const chipOf = (item) => {
6183
- const look = choiceChipLookOf(field2, item, scalarText(field2, item, labels));
6184
- return { className: look.className, tinted: look.color !== null };
6203
+ const chipLook = choiceChipLookOf(field2, item, scalarText(field2, item, labels));
6204
+ return { className: chipLook.className, tinted: chipLook.color !== null, dot: SWATCH_CLASS[chipLook.color ?? "gray"] };
6185
6205
  };
6186
6206
  if (chosen) {
6187
6207
  const items = Array.isArray(value) ? value : [value];
@@ -6195,6 +6215,7 @@ function renderValue(field2, value, document2, labels, stillWaitingFor) {
6195
6215
  "data-records-choice-chip": "",
6196
6216
  ...chip.tinted ? { "data-records-choice-tint": "" } : {},
6197
6217
  children: [
6218
+ look?.choiceDot ? /* @__PURE__ */ jsx26("span", { "aria-hidden": "true", "data-records-choice-dot": "", className: cn17("mr-1.5 inline-block size-1.5 shrink-0 rounded-full", chip.dot) }) : null,
6198
6219
  statusMark(field2, item, Array.isArray(value) ? void 0 : document2),
6199
6220
  scalarText(field2, item, labels, Array.isArray(value) ? void 0 : stillWaitingFor)
6200
6221
  ]
@@ -6306,6 +6327,7 @@ function RecordValue({
6306
6327
  const ui = useRecordsUi();
6307
6328
  const labels = useRecordLabels(ONE_FIELD_ARRAY_CACHE(field2));
6308
6329
  const stillWaitingFor = useLabelWait(field2);
6330
+ const embeddedLook = useEmbeddedLook();
6309
6331
  if (withheld && (value === null || value === void 0)) return /* @__PURE__ */ jsx26(WithheldValue, { field: field2, notice: withheld });
6310
6332
  if (value === null || value === void 0) {
6311
6333
  const failed = workedOutErrorFor(document2, field2.key);
@@ -6317,7 +6339,7 @@ function RecordValue({
6317
6339
  }
6318
6340
  const archivedSource = sourceArchivedOf2(value);
6319
6341
  if (archivedSource) return /* @__PURE__ */ jsx26(SourceArchivedValue, { state: archivedSource });
6320
- if (formulaHasNothingToWorkOn(field2, document2)) return /* @__PURE__ */ jsx26("span", { className: "text-muted-foreground", children: "\u2014" });
6342
+ if (formulaHasNothingToWorkOn(field2, document2)) return embeddedLook?.blankEmpty ? null : /* @__PURE__ */ jsx26("span", { className: "text-muted-foreground", children: "\u2014" });
6321
6343
  if (value !== null && value !== void 0 && value !== "" && !envelopeFor(document2, field2.key)?.absent) {
6322
6344
  const newer = newerKindValue(field2, value, { inCell });
6323
6345
  if (newer !== void 0) return /* @__PURE__ */ jsx26(Fragment6, { children: newer });
@@ -6345,10 +6367,11 @@ function RecordValue({
6345
6367
  }
6346
6368
  }
6347
6369
  const shown4 = format ?? formatForField(field2);
6348
- const dated = shown4 && (shown4.id === "date" || shown4.id === "datetime") && isDateField(field2) ? dateFormatFor(field2, value) : void 0;
6370
+ const shape = shown4 && (shown4.id === "date" || shown4.id === "datetime") && isDateField(field2) ? dateFormatFor(field2, value) : void 0;
6371
+ const dated = shape ? { ...shape, ...shown4?.options ? { options: shown4.options } : {} } : void 0;
6349
6372
  const formatted = shown4 ? formatColumnValue({ format: dated ?? shown4 }, value) : null;
6350
6373
  if (formatted) return /* @__PURE__ */ jsx26(FormattedValue, { value, format: dated ?? shown4 });
6351
- return /* @__PURE__ */ jsx26(Fragment6, { children: renderValue(field2, value, document2, labels, stillWaitingFor) });
6374
+ return /* @__PURE__ */ jsx26(Fragment6, { children: renderValue(field2, value, document2, labels, stillWaitingFor, embeddedLook) });
6352
6375
  }
6353
6376
  var ONE_FIELD_ARRAYS = /* @__PURE__ */ new WeakMap();
6354
6377
  function ONE_FIELD_ARRAY_CACHE(field2) {
@@ -8766,7 +8789,7 @@ import {
8766
8789
  SelectValue as SelectValue5,
8767
8790
  cn as cn21
8768
8791
  } from "@ai-matrx/design-system";
8769
- import { STYLE_COLORS as STYLE_COLORS3, STYLE_COLOR_LABELS, SWATCH_CLASS } from "@ai-matrx/design-system/data-table";
8792
+ import { STYLE_COLORS as STYLE_COLORS3, STYLE_COLOR_LABELS, SWATCH_CLASS as SWATCH_CLASS2 } from "@ai-matrx/design-system/data-table";
8770
8793
  import { Fragment as Fragment9, jsx as jsx35, jsxs as jsxs30 } from "react/jsx-runtime";
8771
8794
  var rowSeed = 0;
8772
8795
  var nextRow = () => `new-${rowSeed += 1}`;
@@ -8989,7 +9012,7 @@ function ChoiceSwatch({ words: words2, color, onColor }) {
8989
9012
  "data-records-choice-swatch": color ?? "none",
8990
9013
  className: cn21(
8991
9014
  "h-4 w-4 shrink-0 rounded-full",
8992
- color ? SWATCH_CLASS[color] : "border border-border bg-background"
9015
+ color ? SWATCH_CLASS2[color] : "border border-border bg-background"
8993
9016
  )
8994
9017
  }
8995
9018
  ) }),
@@ -9016,7 +9039,7 @@ function ChoiceSwatch({ words: words2, color, onColor }) {
9016
9039
  title: STYLE_COLOR_LABELS[c],
9017
9040
  "data-records-choice-color": `${words2}:${c}`,
9018
9041
  onClick: () => pick(c),
9019
- className: cn21("h-5 w-5 rounded-full", SWATCH_CLASS[c], color === c && "ring-2 ring-ring ring-offset-1")
9042
+ className: cn21("h-5 w-5 rounded-full", SWATCH_CLASS2[c], color === c && "ring-2 ring-ring ring-offset-1")
9020
9043
  },
9021
9044
  c
9022
9045
  ))
@@ -13382,6 +13405,14 @@ function asField(f) {
13382
13405
  relation_target: f.relation_target ?? null
13383
13406
  };
13384
13407
  }
13408
+ function CustomValue({ field: field2, value }) {
13409
+ const choice = isChoiceField(field2);
13410
+ const index = useChoiceOptions(choice ? [field2] : [], choice ? [field2.key] : []);
13411
+ const options = index.get(field2.key);
13412
+ if (!choice || !options) return renderValue(field2, value);
13413
+ const worded = (v) => optionFor(options, v)?.label ?? v;
13414
+ return renderValue(field2, Array.isArray(value) ? value.map(worded) : worded(value));
13415
+ }
13385
13416
  function CustomFieldsSection({
13386
13417
  entityToken,
13387
13418
  recordId,
@@ -13701,7 +13732,7 @@ function CustomFieldsSection({
13701
13732
  setCellValue(values[f.key]);
13702
13733
  setCellKey(f.key);
13703
13734
  },
13704
- children: isEmptyValue(values[f.key]) ? /* @__PURE__ */ jsx47("span", { className: "text-muted-foreground", children: "\u2014" }) : renderValue(asField(f), values[f.key])
13735
+ children: isEmptyValue(values[f.key]) ? /* @__PURE__ */ jsx47("span", { className: "text-muted-foreground", children: "\u2014" }) : /* @__PURE__ */ jsx47(CustomValue, { field: asField(f), value: values[f.key] })
13705
13736
  }
13706
13737
  ) })
13707
13738
  ] }, f.id)) })
@@ -18409,12 +18440,12 @@ function shapeTextOfNode(node) {
18409
18440
  }
18410
18441
 
18411
18442
  // src/toolbarSlot.tsx
18412
- import { createContext as createContext4, useContext as useContext4 } from "react";
18443
+ import { createContext as createContext5, useContext as useContext5 } from "react";
18413
18444
  import { createPortal } from "react-dom";
18414
18445
  import { Fragment as Fragment18, jsx as jsx58 } from "react/jsx-runtime";
18415
- var TableToolbarSlotContext = createContext4(void 0);
18446
+ var TableToolbarSlotContext = createContext5(void 0);
18416
18447
  function useTableToolbarSlot() {
18417
- return useContext4(TableToolbarSlotContext);
18448
+ return useContext5(TableToolbarSlotContext);
18418
18449
  }
18419
18450
  function InTableToolbar({ children }) {
18420
18451
  const slot = useTableToolbarSlot();
@@ -18422,13 +18453,13 @@ function InTableToolbar({ children }) {
18422
18453
  if (slot === null) return null;
18423
18454
  return createPortal(children, slot);
18424
18455
  }
18425
- var TableToolbarFoldContext = createContext4(0);
18456
+ var TableToolbarFoldContext = createContext5(0);
18426
18457
  function useTableToolbarFold() {
18427
- return useContext4(TableToolbarFoldContext);
18458
+ return useContext5(TableToolbarFoldContext);
18428
18459
  }
18429
- var TableToolbarSheetExtrasContext = createContext4(void 0);
18460
+ var TableToolbarSheetExtrasContext = createContext5(void 0);
18430
18461
  function useTableToolbarSheetExtras() {
18431
- return useContext4(TableToolbarSheetExtrasContext);
18462
+ return useContext5(TableToolbarSheetExtrasContext);
18432
18463
  }
18433
18464
 
18434
18465
  // src/GridLayoutMenu.tsx
@@ -20926,7 +20957,7 @@ function HandOrderDialog({
20926
20957
  }
20927
20958
 
20928
20959
  // src/viewAddress.ts
20929
- import { createContext as createContext5, useContext as useContext5 } from "react";
20960
+ import { createContext as createContext6, useContext as useContext6 } from "react";
20930
20961
  var VIEW_ADDRESS_KEYS = ["sort", "cf", "q", "hide", "page"];
20931
20962
  function isViewAddressEmpty(state) {
20932
20963
  if (!state) return true;
@@ -20980,8 +21011,8 @@ function viewAddressFromParams(get) {
20980
21011
  function sameViewAddress(a, b) {
20981
21012
  return JSON.stringify(viewAddressToParams(a)) === JSON.stringify(viewAddressToParams(b));
20982
21013
  }
20983
- var ViewAddressContext = createContext5(null);
20984
- var useViewAddress = () => useContext5(ViewAddressContext);
21014
+ var ViewAddressContext = createContext6(null);
21015
+ var useViewAddress = () => useContext6(ViewAddressContext);
20985
21016
 
20986
21017
  // src/Grid.tsx
20987
21018
  import { Fragment as Fragment23, jsx as jsx68, jsxs as jsxs61 } from "react/jsx-runtime";
@@ -22358,6 +22389,8 @@ function GridBody({
22358
22389
  const tableToolbar = useMemo35(
22359
22390
  () => ({
22360
22391
  search: !embedded,
22392
+ // The host (Spaces) has its own Properties menu: an embedded table draws no Columns button.
22393
+ ...embedded ? { columns: false } : {},
22361
22394
  searchPlaceholder: "Search records",
22362
22395
  /*
22363
22396
  * A PHONE (tranche 6o): search and the one Tools button sit side by side at the START of
@@ -22745,7 +22778,7 @@ function GridBody({
22745
22778
  "data-records-grid-wrap": look.wrap ? "on" : "off",
22746
22779
  "data-records-grid-fit": look.fit,
22747
22780
  onPasteCapture: takeEmptyTablePaste,
22748
- children: /* @__PURE__ */ jsx68(
22781
+ children: /* @__PURE__ */ jsx68(EmbeddedLookProvider, { value: embedded ? EMBEDDED_LOOK : null, children: /* @__PURE__ */ jsx68(
22749
22782
  MatrxDataTable,
22750
22783
  {
22751
22784
  ...fills ? { className: "min-h-0 flex-1" } : {},
@@ -22765,7 +22798,8 @@ function GridBody({
22765
22798
  ...embedded ? { appearance: "embedded" } : {},
22766
22799
  tableClassName: cn34(
22767
22800
  !look.wrap && "[&_tbody_td]:max-w-[28rem] [&_tbody_td]:overflow-hidden [&_tbody_td]:text-ellipsis [&_tbody_td]:whitespace-nowrap! [&_tbody_td_*]:whitespace-nowrap!",
22768
- look.fit === "scroll" && "sm:[&>table]:w-max! sm:[&>table]:max-w-none! sm:[&>table]:min-w-full!"
22801
+ look.fit === "scroll" && "sm:[&>table]:w-max! sm:[&>table]:max-w-none! sm:[&>table]:min-w-full!",
22802
+ embedded && EMBEDDED_TABLE_CLASS
22769
22803
  ),
22770
22804
  footerRows,
22771
22805
  ...embedded ? { copy: false } : copyConfig ? { copy: copyConfig } : {},
@@ -22825,7 +22859,7 @@ function GridBody({
22825
22859
  toolbar: tableToolbar
22826
22860
  },
22827
22861
  `records-grid-${tableId}:${openingKey}`
22828
- )
22862
+ ) })
22829
22863
  }
22830
22864
  ),
22831
22865
  summaries.error ? /* @__PURE__ */ jsx68(RefusalNotice, { error: summaries.error }) : null,
@@ -27933,7 +27967,7 @@ import { Button as Button67, Select as Select16, SelectContent as SelectContent1
27933
27967
  import {
27934
27968
  CHOICE_CHIP_CLASS as CHOICE_CHIP_CLASS4,
27935
27969
  EMPTY_TABLE_STYLE as EMPTY_TABLE_STYLE2,
27936
- SWATCH_CLASS as SWATCH_CLASS2,
27970
+ SWATCH_CLASS as SWATCH_CLASS3,
27937
27971
  resolveRowColor as resolveRowColor4,
27938
27972
  ROW_TINT_CLASS as ROW_TINT_CLASS3
27939
27973
  } from "@ai-matrx/design-system/data-table";
@@ -31977,7 +32011,7 @@ function Kanban({
31977
32011
  void move(card, name, to);
31978
32012
  },
31979
32013
  children: [
31980
- columnColor(name) ? /* @__PURE__ */ jsx105("span", { "aria-hidden": "true", "data-card-accent": columnColor(name), className: cn53("absolute inset-y-0.5 left-0 w-1 rounded", SWATCH_CLASS2[columnColor(name)]) }) : null,
32014
+ columnColor(name) ? /* @__PURE__ */ jsx105("span", { "aria-hidden": "true", "data-card-accent": columnColor(name), className: cn53("absolute inset-y-0.5 left-0 w-1 rounded", SWATCH_CLASS3[columnColor(name)]) }) : null,
31981
32015
  /* @__PURE__ */ jsx105(
31982
32016
  RecordActionMenu,
31983
32017
  {
@@ -35912,7 +35946,7 @@ import { BasicInput as BasicInput24, Button as Button78, cn as cn66 } from "@ai-
35912
35946
  // src/AccentSwatches.tsx
35913
35947
  import { PORTAL_ACCENTS } from "@ai-matrx/records";
35914
35948
  import { cn as cn64 } from "@ai-matrx/design-system";
35915
- import { STYLE_COLOR_LABELS as STYLE_COLOR_LABELS3, SWATCH_CLASS as SWATCH_CLASS3 } from "@ai-matrx/design-system/data-table";
35949
+ import { STYLE_COLOR_LABELS as STYLE_COLOR_LABELS3, SWATCH_CLASS as SWATCH_CLASS4 } from "@ai-matrx/design-system/data-table";
35916
35950
  import { jsx as jsx116, jsxs as jsxs105 } from "react/jsx-runtime";
35917
35951
  function AccentSwatches({ value, onChange, options = PORTAL_ACCENTS, noneLabel = "App colour" }) {
35918
35952
  return /* @__PURE__ */ jsxs105("div", { className: "flex flex-wrap gap-1.5", role: "radiogroup", "aria-label": "Colour", children: [
@@ -35939,7 +35973,7 @@ function AccentSwatches({ value, onChange, options = PORTAL_ACCENTS, noneLabel =
35939
35973
  "aria-label": STYLE_COLOR_LABELS3[c],
35940
35974
  title: STYLE_COLOR_LABELS3[c],
35941
35975
  onClick: () => onChange(c),
35942
- className: cn64("h-7 w-7 rounded-full border-2", SWATCH_CLASS3[c], value === c ? "border-foreground" : "border-transparent")
35976
+ className: cn64("h-7 w-7 rounded-full border-2", SWATCH_CLASS4[c], value === c ? "border-foreground" : "border-transparent")
35943
35977
  },
35944
35978
  c
35945
35979
  ))
@@ -36931,7 +36965,7 @@ function Invite({ card, onInvited }) {
36931
36965
 
36932
36966
  // src/FormLookFrame.tsx
36933
36967
  import { cn as cn68 } from "@ai-matrx/design-system";
36934
- import { SWATCH_CLASS as SWATCH_CLASS4 } from "@ai-matrx/design-system/data-table";
36968
+ import { SWATCH_CLASS as SWATCH_CLASS5 } from "@ai-matrx/design-system/data-table";
36935
36969
  import { jsx as jsx120, jsxs as jsxs109 } from "react/jsx-runtime";
36936
36970
  var ACCENT_PRIMARY = {
36937
36971
  slate: "215 19% 35%",
@@ -36950,15 +36984,15 @@ function safeHref(url) {
36950
36984
  return null;
36951
36985
  }
36952
36986
  function formLookView(style, fallbackName) {
36953
- const accent = style?.accent && style.accent in SWATCH_CLASS4 ? style.accent : null;
36987
+ const accent = style?.accent && style.accent in SWATCH_CLASS5 ? style.accent : null;
36954
36988
  const https = (u) => typeof u === "string" && /^https:\/\//i.test(u) ? u : null;
36955
36989
  const links = Array.isArray(style?.footer_links) ? style.footer_links : [];
36956
36990
  return {
36957
36991
  name: (style?.display_name ?? "").trim() || fallbackName.trim() || "Form",
36958
36992
  logoUrl: https(style?.logo_url),
36959
36993
  coverUrl: https(style?.cover_url),
36960
- bandClass: accent ? SWATCH_CLASS4[accent] : null,
36961
- monogramClass: accent ? `${SWATCH_CLASS4[accent]} text-white` : "bg-primary text-primary-foreground",
36994
+ bandClass: accent ? SWATCH_CLASS5[accent] : null,
36995
+ monogramClass: accent ? `${SWATCH_CLASS5[accent]} text-white` : "bg-primary text-primary-foreground",
36962
36996
  primaryVars: accent && ACCENT_PRIMARY[accent] ? {
36963
36997
  "--primary": ACCENT_PRIMARY[accent],
36964
36998
  "--primary-foreground": "0 0% 100%",