@burojs/ui-shadcn 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/dist/{bulk-summary-CrEij5vq.cjs → bulk-summary-2HLgz7Il.cjs} +31 -5
  2. package/dist/bulk-summary-2HLgz7Il.cjs.map +1 -0
  3. package/dist/{bulk-summary-BWSAS7k2.js → bulk-summary-D6A0ua21.js} +32 -6
  4. package/dist/bulk-summary-D6A0ua21.js.map +1 -0
  5. package/dist/{candidates-relation-picker-CS_JZ4Fd.js → candidates-relation-picker-QvoY2bOQ.js} +3 -3
  6. package/dist/{candidates-relation-picker-CS_JZ4Fd.js.map → candidates-relation-picker-QvoY2bOQ.js.map} +1 -1
  7. package/dist/{candidates-relation-picker-y5M6_oe4.cjs → candidates-relation-picker-pEAWKQEY.cjs} +3 -3
  8. package/dist/{candidates-relation-picker-y5M6_oe4.cjs.map → candidates-relation-picker-pEAWKQEY.cjs.map} +1 -1
  9. package/dist/{check-confirm-dialog-2j0gOd7x.js → check-confirm-dialog-B-CbJTln.js} +68 -8
  10. package/dist/{check-confirm-dialog-2j0gOd7x.js.map → check-confirm-dialog-B-CbJTln.js.map} +1 -1
  11. package/dist/{check-confirm-dialog-C-NHgMST.cjs → check-confirm-dialog-W-8WOmGh.cjs} +72 -6
  12. package/dist/check-confirm-dialog-W-8WOmGh.cjs.map +1 -0
  13. package/dist/{filter-builder-DaWHUZuV.js → filter-builder-04nas3eq.js} +127 -61
  14. package/dist/filter-builder-04nas3eq.js.map +1 -0
  15. package/dist/{filter-builder-DFu0JP-1.cjs → filter-builder-DQX-TMFh.cjs} +140 -68
  16. package/dist/filter-builder-DQX-TMFh.cjs.map +1 -0
  17. package/dist/{flow-runtime-DyqTmK3H.js → flow-runtime-BEIyym7d.js} +7 -4
  18. package/dist/{flow-runtime-DyqTmK3H.js.map → flow-runtime-BEIyym7d.js.map} +1 -1
  19. package/dist/{flow-runtime-BpmrIUb6.cjs → flow-runtime-DyNIYfUP.cjs} +7 -4
  20. package/dist/{flow-runtime-BpmrIUb6.cjs.map → flow-runtime-DyNIYfUP.cjs.map} +1 -1
  21. package/dist/{flow-screen-DCdli6Ha.js → flow-screen-DY1Z9PbG.js} +56 -15
  22. package/dist/flow-screen-DY1Z9PbG.js.map +1 -0
  23. package/dist/{flow-screen-Bcz9NF2V.cjs → flow-screen-FE5Xhb3t.cjs} +54 -13
  24. package/dist/flow-screen-FE5Xhb3t.cjs.map +1 -0
  25. package/dist/index.cjs +564 -170
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +235 -95
  28. package/dist/index.d.ts +235 -95
  29. package/dist/index.js +562 -169
  30. package/dist/index.js.map +1 -1
  31. package/dist/{inline-flow-host-C0rI9B7f.js → inline-flow-host-D6u-RlsV.js} +3 -3
  32. package/dist/{inline-flow-host-C0rI9B7f.js.map → inline-flow-host-D6u-RlsV.js.map} +1 -1
  33. package/dist/{inline-flow-host-3vw7LzzD.cjs → inline-flow-host-yVLo6-sM.cjs} +3 -3
  34. package/dist/{inline-flow-host-3vw7LzzD.cjs.map → inline-flow-host-yVLo6-sM.cjs.map} +1 -1
  35. package/dist/{lazy-relation-picker-dialog-CAScLPb2.js → lazy-relation-picker-dialog-BaORufxQ.js} +2 -2
  36. package/dist/{lazy-relation-picker-dialog-CAScLPb2.js.map → lazy-relation-picker-dialog-BaORufxQ.js.map} +1 -1
  37. package/dist/{lazy-relation-picker-dialog-Bt8lrEIu.cjs → lazy-relation-picker-dialog-C_VlGlDz.cjs} +2 -2
  38. package/dist/{lazy-relation-picker-dialog-Bt8lrEIu.cjs.map → lazy-relation-picker-dialog-C_VlGlDz.cjs.map} +1 -1
  39. package/dist/{page-flow-route-BHUEpn0I.js → page-flow-route-CyMzUidK.js} +8 -9
  40. package/dist/page-flow-route-CyMzUidK.js.map +1 -0
  41. package/dist/{page-flow-route-DS8IVTVH.cjs → page-flow-route-OFx7h7Ja.cjs} +8 -9
  42. package/dist/page-flow-route-OFx7h7Ja.cjs.map +1 -0
  43. package/dist/{place-node-CNb3w-c7.cjs → place-node-BZF5Af6x.cjs} +224 -151
  44. package/dist/place-node-BZF5Af6x.cjs.map +1 -0
  45. package/dist/{place-node-CfzQvh4Y.js → place-node-DRjmJGQ_.js} +210 -125
  46. package/dist/place-node-DRjmJGQ_.js.map +1 -0
  47. package/dist/{related-list-cards-BIqqY69Y.js → related-list-cards-2hLitVkg.js} +3 -3
  48. package/dist/{related-list-cards-BIqqY69Y.js.map → related-list-cards-2hLitVkg.js.map} +1 -1
  49. package/dist/{related-list-cards-CelMxl4q.cjs → related-list-cards-xVvgSlu-.cjs} +3 -3
  50. package/dist/{related-list-cards-CelMxl4q.cjs.map → related-list-cards-xVvgSlu-.cjs.map} +1 -1
  51. package/dist/related-list-timeline-CxJqe6eK.js +167 -0
  52. package/dist/related-list-timeline-CxJqe6eK.js.map +1 -0
  53. package/dist/related-list-timeline-Dsf5WewG.cjs +167 -0
  54. package/dist/related-list-timeline-Dsf5WewG.cjs.map +1 -0
  55. package/dist/{related-rows-MPnLCmPF.cjs → related-rows-DDhp9axl.cjs} +4 -4
  56. package/dist/{related-rows-MPnLCmPF.cjs.map → related-rows-DDhp9axl.cjs.map} +1 -1
  57. package/dist/{related-rows--uP2iKQC.js → related-rows-DL6CWsrj.js} +4 -4
  58. package/dist/{related-rows--uP2iKQC.js.map → related-rows-DL6CWsrj.js.map} +1 -1
  59. package/dist/{relation-create-C43cdPQt.js → relation-create-6WicROWA.js} +33 -5
  60. package/dist/relation-create-6WicROWA.js.map +1 -0
  61. package/dist/{relation-create-DDEYcKfw.cjs → relation-create-_SFuPQGM.cjs} +37 -3
  62. package/dist/relation-create-_SFuPQGM.cjs.map +1 -0
  63. package/dist/{relation-many-picker-DzuGJpEl.cjs → relation-many-picker-BBNsmkaX.cjs} +18 -11
  64. package/dist/relation-many-picker-BBNsmkaX.cjs.map +1 -0
  65. package/dist/{relation-many-picker-BJhaEqxz.js → relation-many-picker-mGEQDWo2.js} +18 -11
  66. package/dist/relation-many-picker-mGEQDWo2.js.map +1 -0
  67. package/dist/{relation-picker-D-tBBZW_.js → relation-picker-BbO41cFV.js} +19 -11
  68. package/dist/relation-picker-BbO41cFV.js.map +1 -0
  69. package/dist/{relation-picker-dialog-DoEY8EkH.js → relation-picker-dialog-BgSG_8bU.js} +5 -5
  70. package/dist/relation-picker-dialog-BgSG_8bU.js.map +1 -0
  71. package/dist/{relation-picker-dialog-9Vg5vvR1.cjs → relation-picker-dialog-Duqy2r0n.cjs} +5 -5
  72. package/dist/relation-picker-dialog-Duqy2r0n.cjs.map +1 -0
  73. package/dist/{relation-picker-DaIMzf2H.cjs → relation-picker-jk9D_uwn.cjs} +19 -11
  74. package/dist/relation-picker-jk9D_uwn.cjs.map +1 -0
  75. package/dist/{relation-select-Cr3CfNLy.cjs → relation-select-C3aV18kT.cjs} +2 -2
  76. package/dist/{relation-select-Cr3CfNLy.cjs.map → relation-select-C3aV18kT.cjs.map} +1 -1
  77. package/dist/{relation-select-B8Fq4o-t.js → relation-select-CjQT9LpS.js} +2 -2
  78. package/dist/{relation-select-B8Fq4o-t.js.map → relation-select-CjQT9LpS.js.map} +1 -1
  79. package/dist/{resource-page-router-Diw6S6TK.js → resource-page-router-CzaNATSp.js} +209 -30
  80. package/dist/resource-page-router-CzaNATSp.js.map +1 -0
  81. package/dist/{resource-page-router-C_kGW2o_.cjs → resource-page-router-dmVIeu5s.cjs} +235 -32
  82. package/dist/resource-page-router-dmVIeu5s.cjs.map +1 -0
  83. package/dist/{success-notices-Dl3M1fZP.cjs → success-notices-Cl4b6MLQ.cjs} +3 -2
  84. package/dist/success-notices-Cl4b6MLQ.cjs.map +1 -0
  85. package/dist/{success-notices-LDEgEkc4.js → success-notices-CrcWOGSo.js} +3 -2
  86. package/dist/success-notices-CrcWOGSo.js.map +1 -0
  87. package/dist/{use-dialog-filter-state-B_MqzHaT.js → use-dialog-filter-state-CJoeY-1j.js} +2 -2
  88. package/dist/{use-dialog-filter-state-B_MqzHaT.js.map → use-dialog-filter-state-CJoeY-1j.js.map} +1 -1
  89. package/dist/{use-dialog-filter-state-tNvqAAjh.cjs → use-dialog-filter-state-lsTJxrB4.cjs} +2 -2
  90. package/dist/{use-dialog-filter-state-tNvqAAjh.cjs.map → use-dialog-filter-state-lsTJxrB4.cjs.map} +1 -1
  91. package/dist/use-record-subtitle-BJ9rnj6F.cjs +67 -0
  92. package/dist/use-record-subtitle-BJ9rnj6F.cjs.map +1 -0
  93. package/dist/use-record-subtitle-w3ZhXNlf.js +50 -0
  94. package/dist/use-record-subtitle-w3ZhXNlf.js.map +1 -0
  95. package/package.json +9 -9
  96. package/dist/bulk-summary-BWSAS7k2.js.map +0 -1
  97. package/dist/bulk-summary-CrEij5vq.cjs.map +0 -1
  98. package/dist/check-confirm-dialog-C-NHgMST.cjs.map +0 -1
  99. package/dist/filter-builder-DFu0JP-1.cjs.map +0 -1
  100. package/dist/filter-builder-DaWHUZuV.js.map +0 -1
  101. package/dist/flow-screen-Bcz9NF2V.cjs.map +0 -1
  102. package/dist/flow-screen-DCdli6Ha.js.map +0 -1
  103. package/dist/page-flow-route-BHUEpn0I.js.map +0 -1
  104. package/dist/page-flow-route-DS8IVTVH.cjs.map +0 -1
  105. package/dist/place-node-CNb3w-c7.cjs.map +0 -1
  106. package/dist/place-node-CfzQvh4Y.js.map +0 -1
  107. package/dist/related-list-timeline-CRh7xwLD.js +0 -141
  108. package/dist/related-list-timeline-CRh7xwLD.js.map +0 -1
  109. package/dist/related-list-timeline-DsLdi8sv.cjs +0 -141
  110. package/dist/related-list-timeline-DsLdi8sv.cjs.map +0 -1
  111. package/dist/relation-create-C43cdPQt.js.map +0 -1
  112. package/dist/relation-create-DDEYcKfw.cjs.map +0 -1
  113. package/dist/relation-many-picker-BJhaEqxz.js.map +0 -1
  114. package/dist/relation-many-picker-DzuGJpEl.cjs.map +0 -1
  115. package/dist/relation-picker-D-tBBZW_.js.map +0 -1
  116. package/dist/relation-picker-DaIMzf2H.cjs.map +0 -1
  117. package/dist/relation-picker-dialog-9Vg5vvR1.cjs.map +0 -1
  118. package/dist/relation-picker-dialog-DoEY8EkH.js.map +0 -1
  119. package/dist/resource-page-router-C_kGW2o_.cjs.map +0 -1
  120. package/dist/resource-page-router-Diw6S6TK.js.map +0 -1
  121. package/dist/success-notices-Dl3M1fZP.cjs.map +0 -1
  122. package/dist/success-notices-LDEgEkc4.js.map +0 -1
@@ -2,7 +2,7 @@ const require_use_theme = require("./use-theme-DFlpXils.cjs");
2
2
  const require_toaster = require("./toaster-BbByOytP.cjs");
3
3
  const require_button = require("./button-BxnnE28H.cjs");
4
4
  const require_input = require("./input-BI0czGyI.cjs");
5
- const require_relation_create = require("./relation-create-DDEYcKfw.cjs");
5
+ const require_relation_create = require("./relation-create-_SFuPQGM.cjs");
6
6
  const require_skeleton = require("./skeleton-_1gP7wan.cjs");
7
7
  let _burojs_core = require("@burojs/core");
8
8
  let _burojs_react = require("@burojs/react");
@@ -11,6 +11,7 @@ let react = require("react");
11
11
  react = require_use_theme.__toESM(react, 1);
12
12
  let react_jsx_runtime = require("react/jsx-runtime");
13
13
  let class_variance_authority = require("class-variance-authority");
14
+ let _burojs_core_internal = require("@burojs/core/internal");
14
15
  let _radix_ui_react_select = require("@radix-ui/react-select");
15
16
  _radix_ui_react_select = require_use_theme.__toESM(_radix_ui_react_select, 1);
16
17
  //#region src/layout/language-storage.ts
@@ -100,6 +101,7 @@ const SEMANTIC_KEYS = Object.freeze([
100
101
  "empty",
101
102
  "default",
102
103
  "constraints",
104
+ "zone",
103
105
  "texts",
104
106
  "options",
105
107
  "items",
@@ -129,9 +131,11 @@ function projectUiSelection(input) {
129
131
  const selection = {};
130
132
  const inputId = ownSelection(input, "input");
131
133
  const displayId = ownSelection(input, "display");
134
+ const layout = ownData(input, "layout").value;
132
135
  if (inputId !== void 0) selection.input = inputId;
133
136
  if (displayId !== void 0) selection.display = displayId;
134
- return inputId === void 0 && displayId === void 0 ? void 0 : Object.freeze(selection);
137
+ if (Array.isArray(layout)) selection.layout = layout;
138
+ return Object.keys(selection).length === 0 ? void 0 : Object.freeze(selection);
135
139
  }
136
140
  function projectFieldDeclaration(input) {
137
141
  const type = ownString(input, "type");
@@ -150,7 +154,16 @@ function projectFieldDeclaration(input) {
150
154
  }
151
155
  if (type === "object") {
152
156
  const properties = ownData(input, "properties").value;
153
- if (properties !== null && typeof properties === "object" && !Array.isArray(properties)) {
157
+ if (Array.isArray(properties)) {
158
+ const output = {};
159
+ for (let index = 0; index < properties.length; index += 1) {
160
+ const entry = ownData(properties, index).value;
161
+ const name = ownString(entry, "name");
162
+ const child = projectFieldDeclaration(entry);
163
+ if (name !== void 0 && child !== void 0) output[name] = child;
164
+ }
165
+ projected.properties = Object.freeze(output);
166
+ } else if (properties !== null && typeof properties === "object") {
154
167
  const output = {};
155
168
  for (const key of Object.keys(properties)) {
156
169
  const child = projectFieldDeclaration(ownData(properties, key).value);
@@ -207,6 +220,7 @@ function lowerLegacyField(field) {
207
220
  const items = type === "array" ? projectFieldDeclaration(ownData(field, "items").value) ?? mapping?.items ?? STRING_ITEM : void 0;
208
221
  const meta = ownData(field, "meta");
209
222
  const texts = ownData(field, "texts");
223
+ const zone = ownData(field, "zone");
210
224
  const options = kind === "enum" ? enumValueOptions(field) : void 0;
211
225
  const required = ownData(field, "required");
212
226
  const nullable = ownData(field, "nullable");
@@ -222,6 +236,7 @@ function lowerLegacyField(field) {
222
236
  ...meta.present && meta.value !== void 0 ? { meta: meta.value } : {},
223
237
  ...options === void 0 ? {} : { options },
224
238
  ...texts.present && texts.value !== void 0 ? { texts: texts.value } : {},
239
+ ...zone.present && zone.value !== void 0 ? { zone: zone.value } : {},
225
240
  ...requiredValue === true ? { required: true } : {},
226
241
  ...nullableValue === true ? { nullable: true } : {}
227
242
  });
@@ -373,7 +388,7 @@ function useFieldImplementationDiagnostic(diagnostic) {
373
388
  console.warn("[buro/ui-shadcn] missing-field-implementation; rendering fallback.", diagnostic);
374
389
  }, [diagnostic]);
375
390
  }
376
- function ResolvedFieldDisplay({ resource, name, field: source, value, record, testId, fallback, presentation, metaSources, uiSurface = "display", columnEntry }) {
391
+ function ResolvedFieldDisplay({ resource, name, field: source, value, record, testId, fallback, presentation, metaSources, uiSurface = "display", columnEntry, absentPaths, pathStatus }) {
377
392
  const { sourceAtEdge, field, ui } = useLoweredField(source);
378
393
  const surfaceField = (0, react.useMemo)(() => sourceAtEdge.ui === void 0 ? field : Object.freeze({
379
394
  ...field,
@@ -398,10 +413,19 @@ function ResolvedFieldDisplay({ resource, name, field: source, value, record, te
398
413
  const text = (0, _burojs_react.useFieldDisplayText)(textField, value, {
399
414
  surface: uiSurface,
400
415
  ...columnEntry === void 0 ? {} : { entry: columnEntry },
401
- resource: (0, _burojs_core.canonicalResourceKey)(resource)
416
+ resource: (0, _burojs_core.canonicalResourceKey)(resource),
417
+ ...record === void 0 ? {} : { record }
402
418
  });
403
419
  const options = useContextOptions(field, name, metaState.status === "ready" ? metaState.meta : void 0, ui, resource);
404
420
  const texts = useContextTexts(field, name, resolved, resource);
421
+ const dateDisplay = (0, _burojs_core.resolveSurfaceUi)(surfaceField, uiSurface, columnEntry).dateDisplay;
422
+ const contextUi = (0, react.useMemo)(() => dateDisplay === void 0 ? ui : Object.freeze({
423
+ ...ui,
424
+ display: Object.freeze({
425
+ ...typeof ui.display === "object" && ui.display !== null ? ui.display : {},
426
+ ...dateDisplay
427
+ })
428
+ }), [ui, dateDisplay]);
405
429
  useFieldMetaDiagnostic(metaState, resource, name, surfaceField, uiSurface, columnEntry);
406
430
  useFieldImplementationDiagnostic(resolved.diagnostic);
407
431
  if (resolved.Component === void 0) return (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: fallback });
@@ -412,11 +436,13 @@ function ResolvedFieldDisplay({ resource, name, field: source, value, record, te
412
436
  resource,
413
437
  field,
414
438
  path: Object.freeze([name]),
439
+ ...absentPaths === void 0 || absentPaths.length === 0 ? {} : { absentPaths },
440
+ ...pathStatus === void 0 ? {} : { pathStatus },
415
441
  surface: "display",
416
442
  presentation: presentation ?? "default",
417
443
  record,
418
444
  meta: metaState.meta,
419
- ui,
445
+ ui: contextUi,
420
446
  options,
421
447
  texts,
422
448
  ...text === void 0 ? {} : { text },
@@ -439,7 +465,7 @@ function ResolvedFieldDisplay({ resource, name, field: source, value, record, te
439
465
  value
440
466
  });
441
467
  }
442
- function ResolvedFieldInput({ resource, name, field: source, value, record, form, testId, inputId, onChange, onBlur, disabled, required, placeholder, descriptionId, labelId, errorId, errorMessage, pending = false, touched = errorMessage != null, issues: suppliedIssues, relationSeeds, fixedFilters, link, metaSources, fallback }) {
468
+ function ResolvedFieldInput({ resource, name, field: source, value, record, form, testId, inputId, onChange, onBlur, disabled, required, placeholder, descriptionId, labelId, errorId, errorMessage, pending = false, touched = errorMessage != null, issues: suppliedIssues, relationSeeds, fixedFilters, optionSubtitle, link, metaSources, baseline, fallback, absentPaths, pathStatus }) {
443
469
  const { sourceAtEdge, field: base } = useLoweredField(source);
444
470
  const field = (0, react.useMemo)(() => required === void 0 || required === base.required ? base : Object.freeze({
445
471
  ...base,
@@ -481,6 +507,8 @@ function ResolvedFieldInput({ resource, name, field: source, value, record, form
481
507
  resource,
482
508
  field,
483
509
  path: Object.freeze([name]),
510
+ ...absentPaths === void 0 || absentPaths.length === 0 ? {} : { absentPaths },
511
+ ...pathStatus === void 0 ? {} : { pathStatus },
484
512
  surface: "input",
485
513
  presentation: "default",
486
514
  record,
@@ -511,8 +539,10 @@ function ResolvedFieldInput({ resource, name, field: source, value, record, form
511
539
  disabled,
512
540
  relationSeeds,
513
541
  fixedFilters,
542
+ optionSubtitle,
514
543
  link,
515
- metaSources: runtimeContext.metaSources
544
+ metaSources: runtimeContext.metaSources,
545
+ ...baseline === void 0 ? {} : { baseline }
516
546
  });
517
547
  return (0, react.createElement)(Component, {
518
548
  ...context,
@@ -523,8 +553,10 @@ function ResolvedFieldInput({ resource, name, field: source, value, record, form
523
553
  disabled,
524
554
  relationSeeds,
525
555
  fixedFilters,
556
+ optionSubtitle,
526
557
  link,
527
- metaSources: runtimeContext.metaSources
558
+ metaSources: runtimeContext.metaSources,
559
+ ...baseline === void 0 ? {} : { baseline }
528
560
  });
529
561
  }
530
562
  //#endregion
@@ -600,7 +632,15 @@ const TableCaption = react.forwardRef(({ className, ...props }, ref) => (0, reac
600
632
  TableCaption.displayName = "TableCaption";
601
633
  //#endregion
602
634
  //#region src/primitives/select.tsx
603
- const Select = _radix_ui_react_select.Root;
635
+ function Select({ onValueChange, ...props }) {
636
+ return (0, react_jsx_runtime.jsx)(_radix_ui_react_select.Root, {
637
+ ...props,
638
+ ...onValueChange === void 0 ? {} : { onValueChange: (next) => {
639
+ if (next !== "") onValueChange(next);
640
+ } }
641
+ });
642
+ }
643
+ Select.displayName = _radix_ui_react_select.Root.displayName;
604
644
  const SelectGroup = _radix_ui_react_select.Group;
605
645
  const SelectValue = _radix_ui_react_select.Value;
606
646
  const SelectTrigger = react.forwardRef(({ className, children, ...props }, ref) => (0, react_jsx_runtime.jsxs)(_radix_ui_react_select.Trigger, {
@@ -678,8 +718,6 @@ SelectSeparator.displayName = _radix_ui_react_select.Separator.displayName;
678
718
  function localeTag(locale) {
679
719
  return locale || loadLocale() || "en-US";
680
720
  }
681
- const dateCache = new Map();
682
- const dateTimeCache = new Map();
683
721
  const numberCache = new Map();
684
722
  function cached(cache, key, make) {
685
723
  const hit = cache.get(key);
@@ -693,24 +731,6 @@ function cached(cache, key, make) {
693
731
  cache.set(key, made);
694
732
  return made;
695
733
  }
696
- function formatDate(d, locale) {
697
- const tag = localeTag(locale);
698
- return cached(dateCache, tag, (t) => new Intl.DateTimeFormat(t, {
699
- year: "numeric",
700
- month: "short",
701
- day: "numeric"
702
- })).format(d);
703
- }
704
- function formatDateTime(d, locale) {
705
- const tag = localeTag(locale);
706
- return cached(dateTimeCache, tag, (t) => new Intl.DateTimeFormat(t, {
707
- year: "numeric",
708
- month: "short",
709
- day: "numeric",
710
- hour: "2-digit",
711
- minute: "2-digit"
712
- })).format(d);
713
- }
714
734
  function formatNumber(n, locale) {
715
735
  const tag = localeTag(locale);
716
736
  return cached(numberCache, tag, (t) => new Intl.NumberFormat(t)).format(n);
@@ -724,7 +744,7 @@ function describeValue(value, chromeT, spec, formatValue) {
724
744
  const optionLabel = spec?.options?.find((o) => o.value === String(value))?.label;
725
745
  if (optionLabel !== void 0) return optionLabel;
726
746
  if (spec && formatValue) {
727
- const formatted = formatValue(spec.kind, value);
747
+ const formatted = formatValue(spec.kind, value, spec.zone);
728
748
  if (formatted !== void 0) return formatted;
729
749
  }
730
750
  return String(value);
@@ -805,7 +825,7 @@ function RelationLabelResolver(props) {
805
825
  const { to, id, by, onResolve } = props;
806
826
  const targetDef = (0, _burojs_react.useApp)().registry.get(to);
807
827
  const { record } = (0, _burojs_react.useRelatedRecord)(to, id, by === void 0 ? void 0 : { by });
808
- const rowTitle = require_relation_create.useRowTitle(to, targetDef?.displayField);
828
+ const rowTitle = require_relation_create.useRowTitle(to, targetDef?.displayField, { recordTitle: true });
809
829
  (0, react.useEffect)(() => {
810
830
  if (!record) return;
811
831
  onResolve(relationLabelKey(to, by, id), rowTitle(record));
@@ -881,6 +901,8 @@ function FilterBadges(props) {
881
901
  const { group, setGroup, available, fixed, testIdBase, onOpenAt, onRemoved, pinnedFields = [], pinnedValue = [], setPinnedValue } = props;
882
902
  const chromeT = (0, _burojs_react.useChromeT)();
883
903
  const locale = (0, _burojs_react.useOptionalLocale)();
904
+ const viewer = (0, _burojs_react.useTimeZone)();
905
+ const timeContext = (0, _burojs_react.useTimeContext)();
884
906
  const tt = (key, params, fallback) => chromeT(key, {
885
907
  params,
886
908
  ...typeof params?.count === "number" ? { count: params.count } : {},
@@ -888,13 +910,18 @@ function FilterBadges(props) {
888
910
  });
889
911
  const removeLabel = chromeT("filters.removeRow", { defaultValue: "Remove filter" });
890
912
  const { enumLabels, relationLabels, onEnumResolved, onRelationResolved } = useFormatValueMaps();
891
- const formatValue = (kind, value) => {
913
+ const formatValue = (kind, value, fieldZone) => {
892
914
  if (kind.kind === "enum") return enumLabels[kind.enumName]?.[String(value)];
893
915
  if (kind.kind === "relation") return relationLabels[relationLabelKey(kind.to, kind.by, String(value))];
894
- if (kind.kind === "date") {
895
- const d = new Date(String(value));
896
- if (Number.isNaN(d.getTime())) return void 0;
897
- return kind.time ? formatDateTime(d, locale) : formatDate(d, locale);
916
+ if (kind.kind === "date" && viewer.status === "ready") {
917
+ const zone = (0, _burojs_core.resolveTimeZone)(timeContext.levels, fieldZone, timeContext.sources);
918
+ if (zone.status === "pending") return void 0;
919
+ return (0, _burojs_core.formatTimeValue)(kind.time ? "dateTime" : "date", String(value), {
920
+ zone: zone.zone,
921
+ viewerZone: viewer.zone,
922
+ locale: localeTag(locale),
923
+ params: {}
924
+ });
898
925
  }
899
926
  };
900
927
  const orphanPinned = (0, react.useMemo)(() => {
@@ -1331,7 +1358,7 @@ function EnumValueControl(props) {
1331
1358
  function useRelatedLabels(to, ids, by) {
1332
1359
  const targetDef = (0, _burojs_react.useApp)().registry.get(to);
1333
1360
  const idField = (targetDef?.data)?.idField;
1334
- const rowTitle = require_relation_create.useRowTitle(to, targetDef?.displayField);
1361
+ const rowTitle = require_relation_create.useRowTitle(to, targetDef?.displayField, { recordTitle: true });
1335
1362
  const field = by ?? (typeof idField === "string" && idField.length > 0 ? idField : "id");
1336
1363
  const query = (0, _burojs_react.useList)(to, {
1337
1364
  pagination: {
@@ -1375,7 +1402,7 @@ function RelationValueControl(props) {
1375
1402
  arity,
1376
1403
  onChange
1377
1404
  });
1378
- const rowTitle = require_relation_create.useRowTitle(to, targetDef?.displayField);
1405
+ const rowTitle = require_relation_create.useRowTitle(to, targetDef?.displayField, { recordTitle: true });
1379
1406
  const access = (0, _burojs_react.useListAccess)(to);
1380
1407
  const searchable = (0, react.useMemo)(() => access.status === "ready" && require_relation_create.narrowSearchDecl({ fields: [displayField] }, (name) => access.fieldVisible(name)) !== void 0, [access, displayField]);
1381
1408
  const listQuery = (0, _burojs_react.useList)(to, {
@@ -1481,21 +1508,56 @@ function RelationValueControl(props) {
1481
1508
  });
1482
1509
  }
1483
1510
  //#endregion
1511
+ //#region src/fields/field-time-zone.ts
1512
+ function useFieldTimeZone(zone, row) {
1513
+ const { sources: session } = (0, _burojs_react.useTimeContext)();
1514
+ const sources = (0, react.useMemo)(() => row === void 0 ? session : {
1515
+ ...session,
1516
+ record: {
1517
+ status: "ready",
1518
+ value: row,
1519
+ refreshing: false
1520
+ }
1521
+ }, [session, row]);
1522
+ const fieldZone = (0, react.useMemo)(() => (0, _burojs_core_internal.normaliseFieldZone)(zone), [zone]);
1523
+ return (0, _burojs_react.useTimeZone)(fieldZone, sources);
1524
+ }
1525
+ const DATE_KEYS = [
1526
+ "dateStyle",
1527
+ "timeStyle",
1528
+ "zoneName"
1529
+ ];
1530
+ function dateDisplayParams(ui) {
1531
+ const display = ui?.display;
1532
+ if (display === null || typeof display !== "object") return {};
1533
+ const params = {};
1534
+ for (const key of DATE_KEYS) {
1535
+ const value = display[key];
1536
+ if (value !== void 0) params[key] = value;
1537
+ }
1538
+ return params;
1539
+ }
1540
+ //#endregion
1484
1541
  //#region src/fields/local-date-time.ts
1485
- function toLocalDateTimeText(value) {
1542
+ function toLocalDateTimeText(value, zone) {
1486
1543
  if (value === void 0 || value === null || value === "") return "";
1487
- const d = value instanceof Date ? value : new Date(String(value));
1488
- if (Number.isNaN(d.getTime())) return "";
1489
- const pad = (n) => String(n).padStart(2, "0");
1490
- return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}`;
1544
+ const instant = (0, _burojs_core.canonicalInstant)(value instanceof Date ? value.toISOString() : String(value));
1545
+ if (instant === void 0) return "";
1546
+ const { date, time } = (0, _burojs_core.instantToWall)(instant, zone);
1547
+ return `${date}T${time.slice(0, 5)}`;
1491
1548
  }
1492
- function fromLocalDateTimeText(text) {
1493
- if (text === "") return void 0;
1494
- const d = new Date(text);
1495
- return Number.isNaN(d.getTime()) ? void 0 : d.toISOString();
1549
+ function fromLocalDateTimeText(text, zone) {
1550
+ const [date, time, ...rest] = text.split("T");
1551
+ if (date === void 0 || time === void 0 || rest.length > 0) return void 0;
1552
+ if (!(0, _burojs_core.isCalendarDate)(date) || !(0, _burojs_core.isWallTime)(time)) return void 0;
1553
+ return (0, _burojs_core.wallToInstant)(date, time, zone);
1496
1554
  }
1497
1555
  //#endregion
1498
1556
  //#region src/list-kit/filter-builder/values/scalar-value-input.tsx
1557
+ function useFilterZone(fieldZone) {
1558
+ const zone = useFieldTimeZone(fieldZone, void 0);
1559
+ return zone.status === "ready" ? zone.zone : "UTC";
1560
+ }
1499
1561
  function isDateTime(kind) {
1500
1562
  return kind.kind === "date" && kind.time === true;
1501
1563
  }
@@ -1506,18 +1568,18 @@ function inputTypeFor(kind) {
1506
1568
  default: return "text";
1507
1569
  }
1508
1570
  }
1509
- function toText(kind, value) {
1510
- if (isDateTime(kind)) return toLocalDateTimeText(value);
1571
+ function toText(kind, value, zone) {
1572
+ if (isDateTime(kind)) return toLocalDateTimeText(value, zone);
1511
1573
  if (value === void 0 || value === null || value === "") return "";
1512
1574
  return String(value);
1513
1575
  }
1514
- function parseOne(kind, raw) {
1576
+ function parseOne(kind, raw, zone) {
1515
1577
  if (raw === "") return void 0;
1516
1578
  if (kind.kind === "number") {
1517
1579
  const n = Number(raw);
1518
1580
  return Number.isFinite(n) ? n : void 0;
1519
1581
  }
1520
- if (isDateTime(kind)) return fromLocalDateTimeText(raw);
1582
+ if (isDateTime(kind)) return fromLocalDateTimeText(raw, zone);
1521
1583
  return raw;
1522
1584
  }
1523
1585
  function ScalarValueInput(props) {
@@ -1540,7 +1602,8 @@ function ScalarValueInput(props) {
1540
1602
  }
1541
1603
  function ScalarSingleInput(props) {
1542
1604
  const { value, onChange, kind, testId, autoFocus, inputType, ariaLabel, debounceMs = 300 } = props;
1543
- const storedText = toText(kind, value);
1605
+ const zone = useFilterZone(props.zone);
1606
+ const storedText = toText(kind, value, zone);
1544
1607
  const [text, setText] = (0, react.useState)(storedText);
1545
1608
  const lastPushedRef = (0, react.useRef)(storedText);
1546
1609
  const timerRef = (0, react.useRef)(null);
@@ -1548,8 +1611,8 @@ function ScalarSingleInput(props) {
1548
1611
  const commitRef = (0, react.useRef)(() => {});
1549
1612
  (0, react.useEffect)(() => {
1550
1613
  commitRef.current = (raw) => {
1551
- const parsed = parseOne(kind, raw);
1552
- lastPushedRef.current = toText(kind, parsed);
1614
+ const parsed = parseOne(kind, raw, zone);
1615
+ lastPushedRef.current = toText(kind, parsed, zone);
1553
1616
  pendingRawRef.current = null;
1554
1617
  onChange(parsed);
1555
1618
  };
@@ -1598,8 +1661,9 @@ function ScalarMultiInput(props) {
1598
1661
  const { value, onChange, kind, testId, autoFocus, inputType, ariaLabel } = props;
1599
1662
  const chips = Array.isArray(value) ? value.map((v) => String(v)) : [];
1600
1663
  const [draft, setDraft] = (0, react.useState)("");
1664
+ const zone = useFilterZone(props.zone);
1601
1665
  const addChip = () => {
1602
- const parsed = parseOne(kind, draft.trim());
1666
+ const parsed = parseOne(kind, draft.trim(), zone);
1603
1667
  if (parsed === void 0) return;
1604
1668
  const text = String(parsed);
1605
1669
  setDraft("");
@@ -1789,6 +1853,7 @@ function FilterRow(props) {
1789
1853
  debounceMs,
1790
1854
  fieldLabel: spec.label,
1791
1855
  options: spec.options,
1856
+ ...spec.zone === void 0 ? {} : { zone: spec.zone },
1792
1857
  fill: true
1793
1858
  })
1794
1859
  }),
@@ -2090,7 +2155,8 @@ function PinnedControl(props) {
2090
2155
  testId: `${testIdBase}:pinned:${spec.field}`,
2091
2156
  fieldLabel: spec.label,
2092
2157
  placeholder: spec.label,
2093
- options: spec.options
2158
+ options: spec.options,
2159
+ ...spec.zone === void 0 ? {} : { zone: spec.zone }
2094
2160
  });
2095
2161
  }
2096
2162
  //#endregion
@@ -2528,22 +2594,16 @@ Object.defineProperty(exports, "badgeVariants", {
2528
2594
  return badgeVariants;
2529
2595
  }
2530
2596
  });
2531
- Object.defineProperty(exports, "fieldDescription", {
2597
+ Object.defineProperty(exports, "dateDisplayParams", {
2532
2598
  enumerable: true,
2533
2599
  get: function() {
2534
- return fieldDescription;
2600
+ return dateDisplayParams;
2535
2601
  }
2536
2602
  });
2537
- Object.defineProperty(exports, "formatDate", {
2538
- enumerable: true,
2539
- get: function() {
2540
- return formatDate;
2541
- }
2542
- });
2543
- Object.defineProperty(exports, "formatDateTime", {
2603
+ Object.defineProperty(exports, "fieldDescription", {
2544
2604
  enumerable: true,
2545
2605
  get: function() {
2546
- return formatDateTime;
2606
+ return fieldDescription;
2547
2607
  }
2548
2608
  });
2549
2609
  Object.defineProperty(exports, "formatNumber", {
@@ -2564,6 +2624,12 @@ Object.defineProperty(exports, "loadLocale", {
2564
2624
  return loadLocale;
2565
2625
  }
2566
2626
  });
2627
+ Object.defineProperty(exports, "localeTag", {
2628
+ enumerable: true,
2629
+ get: function() {
2630
+ return localeTag;
2631
+ }
2632
+ });
2567
2633
  Object.defineProperty(exports, "lowerLegacyField", {
2568
2634
  enumerable: true,
2569
2635
  get: function() {
@@ -2588,5 +2654,11 @@ Object.defineProperty(exports, "useFieldMetaDiagnostic", {
2588
2654
  return useFieldMetaDiagnostic;
2589
2655
  }
2590
2656
  });
2657
+ Object.defineProperty(exports, "useFieldTimeZone", {
2658
+ enumerable: true,
2659
+ get: function() {
2660
+ return useFieldTimeZone;
2661
+ }
2662
+ });
2591
2663
 
2592
- //# sourceMappingURL=filter-builder-DFu0JP-1.cjs.map
2664
+ //# sourceMappingURL=filter-builder-DQX-TMFh.cjs.map