@ai-matrx/records-ui 0.113.2 → 0.113.6

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.
@@ -9,7 +9,7 @@ interface TableAnywhere {
9
9
  organization_id: Uuid;
10
10
  organization_name: string;
11
11
  kind: string | null;
12
- kept_by_the_app: boolean;
12
+ platform_owned: boolean;
13
13
  /** When the table last changed (the door's own column) — what tells two same-named tables apart. */
14
14
  updated_at?: string | null;
15
15
  /** Who made it, when the door says. */
package/dist/pickers.d.ts CHANGED
@@ -9,7 +9,7 @@ interface TableAnywhere {
9
9
  organization_id: Uuid;
10
10
  organization_name: string;
11
11
  kind: string | null;
12
- kept_by_the_app: boolean;
12
+ platform_owned: boolean;
13
13
  /** When the table last changed (the door's own column) — what tells two same-named tables apart. */
14
14
  updated_at?: string | null;
15
15
  /** Who made it, when the door says. */
package/dist/pickers.js CHANGED
@@ -66,7 +66,7 @@ function fieldOptionsOnce(client, fieldId) {
66
66
 
67
67
  // src/editors.tsx
68
68
  import { useCallback as useCallback5, useEffect as useEffect10, useLayoutEffect as useLayoutEffect2, useRef as useRef12, useState as useState15 } from "react";
69
- import { allowsOtherValues, choiceValuesOf, coerceTypedAnswer, newerKindOf as newerKindOf4, decideTypedChoice, isTheChosen, optionKey as optionKey2, rankTypedMatches as rankTypedMatches3, readTypedTime as readTypedTime2, typedDateText as typedDateText2, typedTimeText as typedTimeText2 } from "@ai-matrx/records";
69
+ import { allowsOtherValues, choiceValuesOf, coerceTypedAnswer, newerKindOf as newerKindOf5, decideTypedChoice, isTheChosen, optionKey as optionKey2, rankTypedMatches as rankTypedMatches3, readTypedTime as readTypedTime2, typedDateText as typedDateText2, typedTimeText as typedTimeText2 } from "@ai-matrx/records";
70
70
  import { useOptionalRecordsClient as useOptionalRecordsClient7 } from "@ai-matrx/records/react";
71
71
  import {
72
72
  BasicInput as BasicInput5,
@@ -458,6 +458,7 @@ function BarcodeControl({ value, onChange, disabled, id }) {
458
458
  }
459
459
 
460
460
  // src/choiceLooks.ts
461
+ import { newerKindOf as newerKindOf2 } from "@ai-matrx/records";
461
462
  import {
462
463
  CHOICE_CHIP_CLASS,
463
464
  NEUTRAL_CHIP_CLASS,
@@ -496,6 +497,20 @@ function choiceLooksOf(field) {
496
497
  function choiceWord(value) {
497
498
  return String(value ?? "").trim().toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
498
499
  }
500
+ var STATUS_GROUP_COLOR = { todo: "gray", in_progress: "blue", done: "green" };
501
+ function statusGroupColor(field, value) {
502
+ if (newerKindOf2(field) !== "status" || value === null || value === void 0 || value === "") return void 0;
503
+ const word = choiceWord(value);
504
+ if (word === "") return void 0;
505
+ const groups = (field.config ?? {})["status_groups"];
506
+ if (groups && typeof groups === "object") {
507
+ for (const [key, group] of Object.entries(groups)) {
508
+ if (choiceWord(key) !== word) continue;
509
+ return group === "in_progress" ? STATUS_GROUP_COLOR.in_progress : group === "done" ? STATUS_GROUP_COLOR.done : STATUS_GROUP_COLOR.todo;
510
+ }
511
+ }
512
+ return STATUS_GROUP_COLOR.todo;
513
+ }
499
514
  function storedChoiceColor(field, value) {
500
515
  if (value === null || value === void 0 || value === "") return void 0;
501
516
  const word = choiceWord(value);
@@ -504,7 +519,7 @@ function storedChoiceColor(field, value) {
504
519
  if (!look.color) continue;
505
520
  if (choiceWord(look.value) === word || look.label && choiceWord(look.label) === word) return look.color;
506
521
  }
507
- return void 0;
522
+ return statusGroupColor(field, value);
508
523
  }
509
524
  function choiceChipLookOf(field, ...words) {
510
525
  for (const word of words) {
@@ -519,7 +534,7 @@ import {
519
534
  KERNEL_TABLES,
520
535
  PARITY_FIELD_TYPES,
521
536
  fieldKindFor,
522
- newerKindOf as newerKindOf2
537
+ newerKindOf as newerKindOf3
523
538
  } from "@ai-matrx/records";
524
539
  import { humanizeIdentifier } from "@ai-matrx/kit/text-case";
525
540
 
@@ -2781,7 +2796,7 @@ import {
2781
2796
  COLOR_ROTATION
2782
2797
  } from "@ai-matrx/design-system/data-table";
2783
2798
  import { getFieldFormat } from "@ai-matrx/design-system/field-formats";
2784
- import { newerKindOf as newerKindOf3, ratingMaxOf } from "@ai-matrx/records";
2799
+ import { newerKindOf as newerKindOf4, ratingMaxOf } from "@ai-matrx/records";
2785
2800
  var DRAWN_KINDS = /* @__PURE__ */ new Set(["select", "multi_select", "relation", "member", "person", "attachment", "file", "entity_reference", "checkbox", "boolean", "signature", "json"]);
2786
2801
  function shownAsOf(field) {
2787
2802
  if (DRAWN_KINDS.has(String(editorKindFor(field)))) return void 0;
@@ -2794,7 +2809,7 @@ function shownAsOf(field) {
2794
2809
  }
2795
2810
  function formatForField(field) {
2796
2811
  const shownAs = shownAsOf(field);
2797
- if (newerKindOf3(field) === "rating" && (!shownAs || shownAs.id === "rating")) {
2812
+ if (newerKindOf4(field) === "rating" && (!shownAs || shownAs.id === "rating")) {
2798
2813
  return { id: "rating", options: { ...shownAs?.options ?? {}, ratingMax: ratingMaxOf(field) } };
2799
2814
  }
2800
2815
  if (shownAs) return shownAs;
@@ -3173,9 +3188,10 @@ function TypedDateHelper({
3173
3188
  text,
3174
3189
  onText,
3175
3190
  label,
3176
- onPicked
3191
+ onPicked,
3192
+ startOpen = false
3177
3193
  }) {
3178
- const [open, setOpen] = useState13(false);
3194
+ const [open, setOpen] = useState13(startOpen);
3179
3195
  const held = readBox(text, kind);
3180
3196
  usePersonTimeZone();
3181
3197
  const today = personWallNow();
@@ -3506,7 +3522,7 @@ function TypedTextControl({ field, value, onChange, disabled, id, onCommit, onCa
3506
3522
  return /* @__PURE__ */ jsxs16("span", { className: "flex flex-col gap-0.5", children: [
3507
3523
  helper && !disabled ? /* @__PURE__ */ jsxs16("span", { className: "flex min-w-0 items-center gap-0.5", children: [
3508
3524
  box,
3509
- /* @__PURE__ */ jsx18(TypedDateHelper, { kind: helper, text: value.text, onText: retype, label: fieldName(field), onPicked: onCommit })
3525
+ /* @__PURE__ */ jsx18(TypedDateHelper, { kind: helper, text: value.text, onText: retype, label: fieldName(field), onPicked: onCommit, startOpen: value.openedAs !== void 0 })
3510
3526
  ] }) : box,
3511
3527
  judged === null ? /* @__PURE__ */ jsxs16("span", { "data-records-cell-note": "", className: "text-[10px] text-muted-foreground", children: [
3512
3528
  "Reading ",
@@ -4250,10 +4266,10 @@ import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
4250
4266
  var PLATFORM_TABLE_PREFIX = "records_ui_";
4251
4267
  function isValueSet(table) {
4252
4268
  if (table.kept_for === "choices") return true;
4253
- return table.kept_for == null && table.kind === "list" && table.kept_by_the_app === true;
4269
+ return table.kept_for == null && table.kind === "list" && table.platform_owned === true;
4254
4270
  }
4255
4271
  function isKeptTable(table) {
4256
- return table.kept_by_the_app === true || isValueSet(table) || Boolean(table.work_kind) || (table.slug ?? "").startsWith(PLATFORM_TABLE_PREFIX);
4272
+ return table.platform_owned === true || isValueSet(table) || Boolean(table.work_kind) || (table.slug ?? "").startsWith(PLATFORM_TABLE_PREFIX);
4257
4273
  }
4258
4274
  var CHOICES_SUFFIX = / choices$/i;
4259
4275
  function tablePickerEntries(tables, options = {}) {