@burojs/ui-shadcn 0.6.0 → 0.8.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 (158) hide show
  1. package/README.md +9 -0
  2. package/dist/bulk-summary-2HLgz7Il.cjs +169 -0
  3. package/dist/bulk-summary-2HLgz7Il.cjs.map +1 -0
  4. package/dist/bulk-summary-D6A0ua21.js +169 -0
  5. package/dist/bulk-summary-D6A0ua21.js.map +1 -0
  6. package/dist/{candidates-relation-picker-Cy0rTxvI.cjs → candidates-relation-picker-C47mF260.cjs} +4 -4
  7. package/dist/{candidates-relation-picker-Cy0rTxvI.cjs.map → candidates-relation-picker-C47mF260.cjs.map} +1 -1
  8. package/dist/{candidates-relation-picker-B116Bmqi.js → candidates-relation-picker-CGXItMN0.js} +3 -3
  9. package/dist/{candidates-relation-picker-B116Bmqi.js.map → candidates-relation-picker-CGXItMN0.js.map} +1 -1
  10. package/dist/{check-confirm-dialog--gPFnEeg.cjs → check-confirm-dialog-BT04Mieo.cjs} +475 -107
  11. package/dist/check-confirm-dialog-BT04Mieo.cjs.map +1 -0
  12. package/dist/{check-confirm-dialog-bRT8lt0d.js → check-confirm-dialog-CtiRzOAt.js} +391 -108
  13. package/dist/check-confirm-dialog-CtiRzOAt.js.map +1 -0
  14. package/dist/{dialog-B_rt9S1c.js → dialog-C123sVQ8.js} +4 -4
  15. package/dist/dialog-C123sVQ8.js.map +1 -0
  16. package/dist/{dialog-DRNUq9EA.cjs → dialog-vmMdfUWs.cjs} +3 -3
  17. package/dist/dialog-vmMdfUWs.cjs.map +1 -0
  18. package/dist/{filter-builder-nXqtM_h4.cjs → filter-builder-ByGhxLf_.cjs} +1021 -154
  19. package/dist/filter-builder-ByGhxLf_.cjs.map +1 -0
  20. package/dist/{filter-builder-Bhn-dhZV.js → filter-builder-z3Axzf9Y.js} +929 -140
  21. package/dist/filter-builder-z3Axzf9Y.js.map +1 -0
  22. package/dist/{flow-runtime-D3avVH0I.cjs → flow-runtime-BVFjMU5-.cjs} +64 -29
  23. package/dist/flow-runtime-BVFjMU5-.cjs.map +1 -0
  24. package/dist/{flow-runtime-s6lkRPKF.js → flow-runtime-DrUWyTS0.js} +65 -30
  25. package/dist/flow-runtime-DrUWyTS0.js.map +1 -0
  26. package/dist/{flow-screen-CCvgDI9G.js → flow-screen-3fk6J33y.js} +130 -87
  27. package/dist/flow-screen-3fk6J33y.js.map +1 -0
  28. package/dist/{flow-screen-Ci_Sik4Y.cjs → flow-screen-6y5E_HT6.cjs} +130 -87
  29. package/dist/flow-screen-6y5E_HT6.cjs.map +1 -0
  30. package/dist/index.cjs +1186 -950
  31. package/dist/index.cjs.map +1 -1
  32. package/dist/index.d.cts +631 -322
  33. package/dist/index.d.ts +631 -322
  34. package/dist/index.js +1100 -870
  35. package/dist/index.js.map +1 -1
  36. package/dist/{inline-flow-host-DV1et3c6.cjs → inline-flow-host-C4KmZIYE.cjs} +5 -5
  37. package/dist/inline-flow-host-C4KmZIYE.cjs.map +1 -0
  38. package/dist/{inline-flow-host-B6FI0ctQ.js → inline-flow-host-YnnvWjdU.js} +5 -5
  39. package/dist/inline-flow-host-YnnvWjdU.js.map +1 -0
  40. package/dist/{candidates-gate-D33jXLHO.cjs → lazy-relation-picker-dialog-BAKBRn3V.cjs} +10 -10
  41. package/dist/lazy-relation-picker-dialog-BAKBRn3V.cjs.map +1 -0
  42. package/dist/{candidates-gate-Bb70LPAy.js → lazy-relation-picker-dialog-DN4bvQfg.js} +11 -11
  43. package/dist/lazy-relation-picker-dialog-DN4bvQfg.js.map +1 -0
  44. package/dist/{page-flow-route-i3ZfJ1sd.js → page-flow-route-CtEfqAvU.js} +35 -23
  45. package/dist/page-flow-route-CtEfqAvU.js.map +1 -0
  46. package/dist/{page-flow-route-hdnULWqd.cjs → page-flow-route-DEjAxHe3.cjs} +42 -30
  47. package/dist/page-flow-route-DEjAxHe3.cjs.map +1 -0
  48. package/dist/{place-node-NraNYKPx.js → place-node-BdxT-30h.js} +1980 -1041
  49. package/dist/place-node-BdxT-30h.js.map +1 -0
  50. package/dist/{place-node-C5SmIAYU.cjs → place-node-Bhl8B3fF.cjs} +2038 -1087
  51. package/dist/place-node-Bhl8B3fF.cjs.map +1 -0
  52. package/dist/{related-list-cards-CFq3meUn.cjs → related-list-cards-Bc_vfCE_.cjs} +9 -4
  53. package/dist/{related-list-cards-CFq3meUn.cjs.map → related-list-cards-Bc_vfCE_.cjs.map} +1 -1
  54. package/dist/{related-list-cards-BWZ9GfOG.js → related-list-cards-BvkD5OcC.js} +9 -4
  55. package/dist/{related-list-cards-BWZ9GfOG.js.map → related-list-cards-BvkD5OcC.js.map} +1 -1
  56. package/dist/related-list-timeline-DCrwN9oO.js +167 -0
  57. package/dist/related-list-timeline-DCrwN9oO.js.map +1 -0
  58. package/dist/related-list-timeline-k0DtnxTs.cjs +167 -0
  59. package/dist/related-list-timeline-k0DtnxTs.cjs.map +1 -0
  60. package/dist/{related-rows-ea43qhhy.cjs → related-rows-BW9Jr07T.cjs} +27 -16
  61. package/dist/related-rows-BW9Jr07T.cjs.map +1 -0
  62. package/dist/{related-rows-o0_t-Yce.js → related-rows-CPE-9FFr.js} +25 -14
  63. package/dist/related-rows-CPE-9FFr.js.map +1 -0
  64. package/dist/{search-access-CPPmfuvy.js → relation-create-C43cdPQt.js} +595 -13
  65. package/dist/relation-create-C43cdPQt.js.map +1 -0
  66. package/dist/{search-access-Dugvttlg.cjs → relation-create-DDEYcKfw.cjs} +633 -14
  67. package/dist/relation-create-DDEYcKfw.cjs.map +1 -0
  68. package/dist/{relation-many-picker-bvkjkv-k.js → relation-many-picker-BlrGRwMV.js} +210 -104
  69. package/dist/relation-many-picker-BlrGRwMV.js.map +1 -0
  70. package/dist/{relation-many-picker-C8zFEjwd.cjs → relation-many-picker-Br-zBHxT.cjs} +218 -112
  71. package/dist/relation-many-picker-Br-zBHxT.cjs.map +1 -0
  72. package/dist/{relation-picker-gag0qSR5.cjs → relation-picker-ADjxI_TI.cjs} +36 -73
  73. package/dist/relation-picker-ADjxI_TI.cjs.map +1 -0
  74. package/dist/{relation-picker-dialog-B6nIiJBf.js → relation-picker-dialog-CyKliBkN.js} +134 -36
  75. package/dist/relation-picker-dialog-CyKliBkN.js.map +1 -0
  76. package/dist/{relation-picker-dialog-0IzkjmiA.cjs → relation-picker-dialog-DimVQF9Y.cjs} +133 -35
  77. package/dist/relation-picker-dialog-DimVQF9Y.cjs.map +1 -0
  78. package/dist/{relation-picker-Z0ZJJ5uS.js → relation-picker-x7P5HKie.js} +30 -61
  79. package/dist/relation-picker-x7P5HKie.js.map +1 -0
  80. package/dist/relation-select-B8Fq4o-t.js +48 -0
  81. package/dist/relation-select-B8Fq4o-t.js.map +1 -0
  82. package/dist/relation-select-Cr3CfNLy.cjs +55 -0
  83. package/dist/relation-select-Cr3CfNLy.cjs.map +1 -0
  84. package/dist/{resource-page-router-3RUf9d1j.js → resource-page-router-BRpUnhay.js} +634 -264
  85. package/dist/resource-page-router-BRpUnhay.js.map +1 -0
  86. package/dist/{resource-page-router-PXfMW9nh.cjs → resource-page-router-qEd2xb55.cjs} +694 -312
  87. package/dist/resource-page-router-qEd2xb55.cjs.map +1 -0
  88. package/dist/{rich-text-vTyVjDoa.cjs → rich-text-C_7JCvRo.cjs} +2 -2
  89. package/dist/{rich-text-vTyVjDoa.cjs.map → rich-text-C_7JCvRo.cjs.map} +1 -1
  90. package/dist/{rich-text-DFerywgz.js → rich-text-RcPBf6hr.js} +2 -2
  91. package/dist/{rich-text-DFerywgz.js.map → rich-text-RcPBf6hr.js.map} +1 -1
  92. package/dist/success-notices-Dl3M1fZP.cjs +46 -0
  93. package/dist/success-notices-Dl3M1fZP.cjs.map +1 -0
  94. package/dist/success-notices-LDEgEkc4.js +41 -0
  95. package/dist/success-notices-LDEgEkc4.js.map +1 -0
  96. package/dist/{toaster-Cr51X7bz.cjs → toaster-BbByOytP.cjs} +60 -15
  97. package/dist/toaster-BbByOytP.cjs.map +1 -0
  98. package/dist/{toaster-C02XbB9r.js → toaster-Ct_YHGs6.js} +43 -16
  99. package/dist/toaster-Ct_YHGs6.js.map +1 -0
  100. package/dist/{use-dialog-filter-state-C--oMAZG.js → use-dialog-filter-state-B_MqzHaT.js} +5 -4
  101. package/dist/use-dialog-filter-state-B_MqzHaT.js.map +1 -0
  102. package/dist/{use-dialog-filter-state-Dhe8PcB5.cjs → use-dialog-filter-state-tNvqAAjh.cjs} +6 -5
  103. package/dist/use-dialog-filter-state-tNvqAAjh.cjs.map +1 -0
  104. package/dist/use-record-subtitle-bfwIoUme.cjs +70 -0
  105. package/dist/use-record-subtitle-bfwIoUme.cjs.map +1 -0
  106. package/dist/use-record-subtitle-gIaCGgbI.js +53 -0
  107. package/dist/use-record-subtitle-gIaCGgbI.js.map +1 -0
  108. package/package.json +11 -11
  109. package/dist/bulk-summary-CwSd6Yjb.cjs +0 -108
  110. package/dist/bulk-summary-CwSd6Yjb.cjs.map +0 -1
  111. package/dist/bulk-summary-GxMDP4bw.js +0 -108
  112. package/dist/bulk-summary-GxMDP4bw.js.map +0 -1
  113. package/dist/candidates-gate-Bb70LPAy.js.map +0 -1
  114. package/dist/candidates-gate-D33jXLHO.cjs.map +0 -1
  115. package/dist/check-confirm-dialog--gPFnEeg.cjs.map +0 -1
  116. package/dist/check-confirm-dialog-bRT8lt0d.js.map +0 -1
  117. package/dist/dialog-B_rt9S1c.js.map +0 -1
  118. package/dist/dialog-DRNUq9EA.cjs.map +0 -1
  119. package/dist/filter-builder-Bhn-dhZV.js.map +0 -1
  120. package/dist/filter-builder-nXqtM_h4.cjs.map +0 -1
  121. package/dist/flow-runtime-D3avVH0I.cjs.map +0 -1
  122. package/dist/flow-runtime-s6lkRPKF.js.map +0 -1
  123. package/dist/flow-screen-CCvgDI9G.js.map +0 -1
  124. package/dist/flow-screen-Ci_Sik4Y.cjs.map +0 -1
  125. package/dist/inline-flow-host-B6FI0ctQ.js.map +0 -1
  126. package/dist/inline-flow-host-DV1et3c6.cjs.map +0 -1
  127. package/dist/page-flow-route-hdnULWqd.cjs.map +0 -1
  128. package/dist/page-flow-route-i3ZfJ1sd.js.map +0 -1
  129. package/dist/place-node-C5SmIAYU.cjs.map +0 -1
  130. package/dist/place-node-NraNYKPx.js.map +0 -1
  131. package/dist/related-list-timeline-CCzl71aA.cjs +0 -142
  132. package/dist/related-list-timeline-CCzl71aA.cjs.map +0 -1
  133. package/dist/related-list-timeline-yrPsjA3F.js +0 -142
  134. package/dist/related-list-timeline-yrPsjA3F.js.map +0 -1
  135. package/dist/related-rows-ea43qhhy.cjs.map +0 -1
  136. package/dist/related-rows-o0_t-Yce.js.map +0 -1
  137. package/dist/relation-create-IA40t1hi.cjs +0 -364
  138. package/dist/relation-create-IA40t1hi.cjs.map +0 -1
  139. package/dist/relation-create-h6F9B4C4.js +0 -339
  140. package/dist/relation-create-h6F9B4C4.js.map +0 -1
  141. package/dist/relation-many-picker-C8zFEjwd.cjs.map +0 -1
  142. package/dist/relation-many-picker-bvkjkv-k.js.map +0 -1
  143. package/dist/relation-picker-Z0ZJJ5uS.js.map +0 -1
  144. package/dist/relation-picker-dialog-0IzkjmiA.cjs.map +0 -1
  145. package/dist/relation-picker-dialog-B6nIiJBf.js.map +0 -1
  146. package/dist/relation-picker-gag0qSR5.cjs.map +0 -1
  147. package/dist/resource-page-router-3RUf9d1j.js.map +0 -1
  148. package/dist/resource-page-router-PXfMW9nh.cjs.map +0 -1
  149. package/dist/search-access-CPPmfuvy.js.map +0 -1
  150. package/dist/search-access-Dugvttlg.cjs.map +0 -1
  151. package/dist/shell-BPlk8hEa.js +0 -205
  152. package/dist/shell-BPlk8hEa.js.map +0 -1
  153. package/dist/shell-DxhlsPwm.cjs +0 -271
  154. package/dist/shell-DxhlsPwm.cjs.map +0 -1
  155. package/dist/toaster-C02XbB9r.js.map +0 -1
  156. package/dist/toaster-Cr51X7bz.cjs.map +0 -1
  157. package/dist/use-dialog-filter-state-C--oMAZG.js.map +0 -1
  158. package/dist/use-dialog-filter-state-Dhe8PcB5.cjs.map +0 -1
@@ -1,16 +1,18 @@
1
1
  import { l as cn } from "./use-theme-dnE3Od3I.js";
2
- import { d as PopoverTrigger, n as toast, o as useLinkComponent, s as Popover, u as PopoverContent } from "./toaster-C02XbB9r.js";
2
+ import { l as useLinkComponent, m as PopoverTrigger, n as toast, p as PopoverContent, u as Popover } from "./toaster-Ct_YHGs6.js";
3
3
  import { t as Button } from "./button-MWVeZaqj.js";
4
- import { a as DialogFooter, i as DialogDescription, o as DialogHeader, r as DialogContent, s as DialogTitle, t as Dialog } from "./dialog-B_rt9S1c.js";
5
- import { FRAMEWORK_TEXT_KEYS, canonicalEntityNodeKey, checkFailedDefault, compileFlow, declaredText, docAddressToArticle, hasRecordPage, hrefFor, humanizeKey, isBuiltinItemAction, normalizeEntityRef, recordEntries, resolveContentSlot, resolveDocSee } from "@burojs/core";
6
- import { buildDI, conjoinHostPage, modeForSurface, resolveRoute, useApp, useAvailabilityResolver, useComponent, useDoc, useDocPanel, useDocTopics, useEntryGate, useFlowRowResolver, useHostPage, useI18nCaps, useOptionalRouterAdapter, useOptionalT, usePresentBlock, usePresentFlow, useProjectedTitle, useQuick, useQuickEntry, useTestIds, useUIInstance } from "@burojs/react";
4
+ import { a as DialogFooter, i as DialogDescription, o as DialogHeader, r as DialogContent, s as DialogTitle, t as Dialog } from "./dialog-C123sVQ8.js";
5
+ import { FRAMEWORK_TEXT_KEYS, canonicalEntityNodeKey, checkFailedDefault, compileFlow, constraintText, declaredText, docAddressToArticle, flowRecordOf, hasRecordPage, hrefFor, humanizeKey, isBuiltinItemAction, normalizeEntityRef, recordEntries, resolveContentSlot, resolveDocSee, routeResourceKey, textsValueAt } from "@burojs/core";
6
+ import { buildDI, conjoinHostPage, modeForSurface, recordKeyOf, resolveRoute, useActionWhenSources, useApp, useAvailabilityResolver, useChromeT, useComponent, useDoc, useDocPanel, useDocTopics, useEntryGate, useFlowRowResolver, useHostPage, useI18nCaps, useOptionalRouterAdapter, useOptionalT, usePresentBlock, usePresentFlow, useProjectedTitle, useQuick, useQuickEntry, useTestIds, useUIInstance } from "@burojs/react";
7
7
  import { IconArrowRight, IconArrowUpRight, IconArrowsLeftRight, IconBan, IconBell, IconBox, IconBoxMultiple, IconBuilding, IconCheck, IconChevronRight, IconCircle, IconCircleCaretRight, IconCircleCheck, IconCircleX, IconClipboardList, IconClock, IconCopy, IconDots, IconEye, IconFileOff, IconFilePencil, IconFileText, IconFileX, IconGitBranch, IconHammer, IconHash, IconHistory, IconInfoHexagon, IconKey, IconKeyOff, IconLink, IconList, IconLoader2, IconMapPin, IconNetwork, IconPackage, IconPackageExport, IconPackageImport, IconPackageOff, IconPackages, IconPencil, IconPlayerPlay, IconPlayerTrackNext, IconPlus, IconQrcode, IconRefresh, IconRotate, IconScript, IconSettings, IconShieldCheck, IconTag, IconTool, IconTrash, IconTruck, IconUserPlus, IconUsers, IconX } from "@tabler/icons-react";
8
8
  import * as React from "react";
9
- import { Component, useCallback, useEffect, useMemo, useRef, useState } from "react";
9
+ import { Component, createContext, useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from "react";
10
10
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
11
+ import { cva } from "class-variance-authority";
12
+ import * as SheetPrimitive from "@radix-ui/react-dialog";
11
13
  import * as TooltipPrimitive from "@radix-ui/react-tooltip";
12
14
  import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
13
- import { evaluateCondition, isFlowAction } from "@burojs/core/internal";
15
+ import { actionWhenHolds, actionWhenSources, isFlowAction } from "@burojs/core/internal";
14
16
  //#region src/doc/doc-info.tsx
15
17
  function DocInfo({ address, name, testId, className }) {
16
18
  const doc = useDoc(address);
@@ -100,6 +102,69 @@ function DocInfo({ address, name, testId, className }) {
100
102
  });
101
103
  }
102
104
  //#endregion
105
+ //#region src/primitives/sheet.tsx
106
+ const Sheet = SheetPrimitive.Root;
107
+ const SheetTrigger = SheetPrimitive.Trigger;
108
+ const SheetClose = SheetPrimitive.Close;
109
+ const SheetPortal = SheetPrimitive.Portal;
110
+ const SheetOverlay = React.forwardRef(({ className, ...props }, ref) => jsx(SheetPrimitive.Overlay, {
111
+ className: cn("fixed inset-0 z-50 bg-overlay/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 duration-[var(--duration-panel)] ease-[var(--ease-overlay)]", className),
112
+ ...props,
113
+ ref
114
+ }));
115
+ SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
116
+ const sheetVariants = cva("fixed z-50 gap-4 bg-background text-foreground p-6 shadow-lg duration-[var(--duration-panel)] ease-[var(--ease-overlay)] data-[state=open]:animate-in data-[state=closed]:animate-out", {
117
+ variants: { side: {
118
+ top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
119
+ bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
120
+ left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
121
+ right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
122
+ } },
123
+ defaultVariants: { side: "right" }
124
+ });
125
+ const SheetContent = React.forwardRef(({ side = "right", className, children, showClose = true, ...props }, ref) => {
126
+ const chromeT = useChromeT();
127
+ return jsxs(SheetPortal, { children: [jsx(SheetOverlay, {}), jsxs(SheetPrimitive.Content, {
128
+ ref,
129
+ className: cn(sheetVariants({ side }), className),
130
+ ...props,
131
+ children: [children, showClose && jsxs(SheetPrimitive.Close, {
132
+ className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary",
133
+ children: [jsx(IconX, { className: "h-4 w-4" }), jsx("span", {
134
+ className: "sr-only",
135
+ children: chromeT("actions.close", { defaultValue: "Close" })
136
+ })]
137
+ })]
138
+ })] });
139
+ });
140
+ SheetContent.displayName = SheetPrimitive.Content.displayName;
141
+ function SheetHeader({ className, ...props }) {
142
+ return jsx("div", {
143
+ className: cn("flex flex-col space-y-2 text-center sm:text-left", className),
144
+ ...props
145
+ });
146
+ }
147
+ SheetHeader.displayName = "SheetHeader";
148
+ function SheetFooter({ className, ...props }) {
149
+ return jsx("div", {
150
+ className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className),
151
+ ...props
152
+ });
153
+ }
154
+ SheetFooter.displayName = "SheetFooter";
155
+ const SheetTitle = React.forwardRef(({ className, ...props }, ref) => jsx(SheetPrimitive.Title, {
156
+ ref,
157
+ className: cn("text-lg font-semibold text-foreground", className),
158
+ ...props
159
+ }));
160
+ SheetTitle.displayName = SheetPrimitive.Title.displayName;
161
+ const SheetDescription = React.forwardRef(({ className, ...props }, ref) => jsx(SheetPrimitive.Description, {
162
+ ref,
163
+ className: cn("text-sm text-muted-foreground", className),
164
+ ...props
165
+ }));
166
+ SheetDescription.displayName = SheetPrimitive.Description.displayName;
167
+ //#endregion
103
168
  //#region src/primitives/tooltip.tsx
104
169
  const TooltipProvider = TooltipPrimitive.Provider;
105
170
  const Tooltip = TooltipPrimitive.Root;
@@ -256,6 +321,162 @@ function Icon({ name, className }) {
256
321
  });
257
322
  }
258
323
  //#endregion
324
+ //#region src/ui-presentations/shell.tsx
325
+ const OwnTitleContext = createContext(false);
326
+ function focusOwnHeading(event) {
327
+ const container = event.currentTarget;
328
+ if (!(container instanceof HTMLElement)) return;
329
+ const heading = container.querySelector("[data-buro-overlay-heading]");
330
+ if (!(heading instanceof HTMLElement)) return;
331
+ event.preventDefault();
332
+ heading.focus();
333
+ }
334
+ function WrappedDialogContent({ wrapper, copy, children }) {
335
+ return wrapper ? jsxs(Fragment$1, { children: [jsxs(DialogHeader, { children: [jsx(DialogTitle, { children: copy.title }), jsx(DialogDescription, {
336
+ className: copy.description === void 0 ? "sr-only" : void 0,
337
+ children: copy.description ?? ""
338
+ })] }), children] }) : jsxs(Fragment$1, { children: [
339
+ jsx(DialogTitle, {
340
+ className: "sr-only",
341
+ children: copy.title
342
+ }),
343
+ jsx(DialogDescription, {
344
+ className: "sr-only",
345
+ children: copy.description ?? ""
346
+ }),
347
+ children
348
+ ] });
349
+ }
350
+ function WrappedSheetContent({ wrapper, copy, children }) {
351
+ return wrapper ? jsxs(Fragment$1, { children: [jsxs(SheetHeader, { children: [jsx(SheetTitle, { children: copy.title }), jsx(SheetDescription, {
352
+ className: copy.description === void 0 ? "sr-only" : void 0,
353
+ children: copy.description ?? ""
354
+ })] }), children] }) : jsxs(Fragment$1, { children: [
355
+ jsx(SheetTitle, {
356
+ className: "sr-only",
357
+ children: copy.title
358
+ }),
359
+ jsx(SheetDescription, {
360
+ className: "sr-only",
361
+ children: copy.description ?? ""
362
+ }),
363
+ children
364
+ ] });
365
+ }
366
+ function useFocusRestoration() {
367
+ const returnFocus = useRef(typeof document === "undefined" || !(document.activeElement instanceof HTMLElement) ? null : document.activeElement);
368
+ useEffect(() => () => {
369
+ const element = returnFocus.current;
370
+ queueMicrotask(() => {
371
+ if (element?.isConnected && element !== document.body) {
372
+ element.focus();
373
+ return;
374
+ }
375
+ const main = document.querySelector("main");
376
+ if (main === null) return;
377
+ if (!main.hasAttribute("tabindex")) main.setAttribute("tabindex", "-1");
378
+ main.focus();
379
+ });
380
+ }, []);
381
+ }
382
+ function keepForPopover(event) {
383
+ const target = event.target;
384
+ if (target instanceof Element && target.closest("[data-buro-popover]") !== null) event.preventDefault();
385
+ }
386
+ const REDUCED_MOTION = "motion-reduce:animate-none motion-reduce:transition-none";
387
+ function DialogPresentationShell({ dismiss, wrapper, copy, ownTitle = false, children }) {
388
+ useFocusRestoration();
389
+ return jsx(Dialog, {
390
+ open: true,
391
+ onOpenChange: (open) => {
392
+ if (!open) dismiss();
393
+ },
394
+ children: ownTitle ? jsx(DialogContent, {
395
+ className: `flex max-h-[85vh] flex-col ${REDUCED_MOTION}`,
396
+ overlayClassName: REDUCED_MOTION,
397
+ showClose: wrapper,
398
+ "aria-describedby": void 0,
399
+ "aria-modal": "true",
400
+ onOpenAutoFocus: focusOwnHeading,
401
+ onPointerDownOutside: keepForPopover,
402
+ children: jsx(OwnTitleContext.Provider, {
403
+ value: true,
404
+ children
405
+ })
406
+ }) : jsx(DialogContent, {
407
+ className: REDUCED_MOTION,
408
+ overlayClassName: REDUCED_MOTION,
409
+ showClose: wrapper,
410
+ "aria-modal": "true",
411
+ onPointerDownOutside: keepForPopover,
412
+ children: jsx(WrappedDialogContent, {
413
+ wrapper,
414
+ copy,
415
+ children
416
+ })
417
+ })
418
+ });
419
+ }
420
+ function SheetPresentationShell({ dismiss, wrapper, copy, ownTitle = false, children }) {
421
+ useFocusRestoration();
422
+ return jsx(Sheet, {
423
+ open: true,
424
+ onOpenChange: (open) => {
425
+ if (!open) dismiss();
426
+ },
427
+ children: ownTitle ? jsx(SheetContent, {
428
+ side: "right",
429
+ className: `flex flex-col sm:max-w-xl ${REDUCED_MOTION}`,
430
+ showClose: wrapper,
431
+ "aria-describedby": void 0,
432
+ "aria-modal": "true",
433
+ onOpenAutoFocus: focusOwnHeading,
434
+ onPointerDownOutside: keepForPopover,
435
+ children: jsx(OwnTitleContext.Provider, {
436
+ value: true,
437
+ children
438
+ })
439
+ }) : jsx(SheetContent, {
440
+ side: "right",
441
+ className: `sm:max-w-xl ${REDUCED_MOTION}`,
442
+ showClose: wrapper,
443
+ "aria-modal": "true",
444
+ onPointerDownOutside: keepForPopover,
445
+ children: jsx(WrappedSheetContent, {
446
+ wrapper,
447
+ copy,
448
+ children
449
+ })
450
+ })
451
+ });
452
+ }
453
+ //#endregion
454
+ //#region src/flows/overlay-heading.tsx
455
+ function useFocusOnMount(ref) {
456
+ useEffect(() => {
457
+ const heading = ref.current;
458
+ if (heading === null) return;
459
+ const active = document.activeElement;
460
+ if (active === document.body || active === heading.closest("[role=\"dialog\"]")) heading.focus();
461
+ }, [ref]);
462
+ }
463
+ function OwnTitleHeading({ label }) {
464
+ const ownTitle = useContext(OwnTitleContext);
465
+ const ref = useRef(null);
466
+ useFocusOnMount(ref);
467
+ const heading = jsx("h2", {
468
+ ref,
469
+ tabIndex: -1,
470
+ "data-buro-overlay-heading": "",
471
+ className: "text-lg font-semibold",
472
+ children: label
473
+ });
474
+ return ownTitle ? jsx(SheetPrimitive.Title, {
475
+ asChild: true,
476
+ children: heading
477
+ }) : heading;
478
+ }
479
+ //#endregion
259
480
  //#region src/flows/load-runtime.tsx
260
481
  function retrying(importer) {
261
482
  let loading;
@@ -267,11 +488,11 @@ function retrying(importer) {
267
488
  return loading;
268
489
  };
269
490
  }
270
- const loadFlowRuntime = retrying(() => import("./flow-runtime-s6lkRPKF.js"));
271
- const loadFlowScreen = retrying(() => import("./flow-screen-CCvgDI9G.js"));
272
- const loadPageFlowRoute = retrying(() => import("./page-flow-route-i3ZfJ1sd.js"));
273
- const loadInlineFlowHost = retrying(() => import("./inline-flow-host-B6FI0ctQ.js"));
274
- const loadBulkSummary = retrying(() => import("./bulk-summary-GxMDP4bw.js"));
491
+ const loadFlowRuntime = retrying(() => import("./flow-runtime-DrUWyTS0.js"));
492
+ const loadFlowScreen = retrying(() => import("./flow-screen-3fk6J33y.js"));
493
+ const loadPageFlowRoute = retrying(() => import("./page-flow-route-CtEfqAvU.js"));
494
+ const loadInlineFlowHost = retrying(() => import("./inline-flow-host-YnnvWjdU.js"));
495
+ const loadBulkSummary = retrying(() => import("./bulk-summary-D6A0ua21.js"));
275
496
  function preloadFlowRuntime() {
276
497
  loadFlowRuntime().catch(() => void 0);
277
498
  }
@@ -312,8 +533,7 @@ var FlowBoundary = class extends Component {
312
533
  }
313
534
  };
314
535
  function loadFailedText(t) {
315
- const value = t("block.failed");
316
- return value === "block.failed" ? "This section could not be loaded." : value;
536
+ return t("block.failed", { defaultValue: "This section could not be loaded." });
317
537
  }
318
538
  function FailedRun({ onDone }) {
319
539
  const t = useOptionalT();
@@ -354,31 +574,45 @@ function RuntimeBulkFlowRunner(props) {
354
574
  children: jsx(Runner, { ...props })
355
575
  });
356
576
  }
357
- function FlowLoadFailed({ onRetry }) {
577
+ function FlowLoadFailed({ label, onRetry }) {
358
578
  const t = useOptionalT();
579
+ const chromeT = useChromeT();
359
580
  const instance = useUIInstance();
360
- const retryText = t("actions.retry") === "actions.retry" ? "Retry" : t("actions.retry");
361
- const closeText = t("flow.close") === "flow.close" ? "Close" : t("flow.close");
581
+ const retryText = chromeT("actions.retry", { defaultValue: "Retry" });
582
+ const closeText = t("flow.close", { defaultValue: "Close" });
362
583
  return jsxs("div", {
363
584
  role: "alert",
364
585
  "data-buro-flow-load": "failed",
365
586
  className: "flex flex-col gap-3 text-sm",
366
- children: [jsx("p", { children: loadFailedText(t) }), jsxs("div", {
367
- className: "flex justify-end gap-2",
368
- children: [jsx(Button, {
369
- type: "button",
370
- variant: "ghost",
371
- onClick: () => instance.dismiss(),
372
- children: closeText
373
- }), jsx(Button, {
374
- type: "button",
375
- onClick: onRetry,
376
- children: retryText
377
- })]
378
- })]
587
+ children: [
588
+ label === void 0 ? null : jsx(OwnTitleHeading, { label }),
589
+ jsx("p", { children: loadFailedText(t) }),
590
+ jsxs("div", {
591
+ className: "flex justify-end gap-2",
592
+ children: [jsx(Button, {
593
+ type: "button",
594
+ variant: "ghost",
595
+ onClick: () => instance.dismiss(),
596
+ children: closeText
597
+ }), jsx(Button, {
598
+ type: "button",
599
+ onClick: onRetry,
600
+ children: retryText
601
+ })]
602
+ })
603
+ ]
379
604
  });
380
605
  }
381
606
  //#endregion
607
+ //#region src/lib/reason-text.ts
608
+ function reasonText(caps, reason, resource) {
609
+ if (reason === "") return reason;
610
+ return resolveContentSlot(caps, [reason], {
611
+ resource,
612
+ default: reason
613
+ }) ?? reason;
614
+ }
615
+ //#endregion
382
616
  //#region src/actions/action-inner.tsx
383
617
  function ActionInner({ icon, label }) {
384
618
  return jsxs(Fragment$1, { children: [icon ? jsx(Icon, { name: icon }) : null, label] });
@@ -436,10 +670,6 @@ function withActionTooltip(control, label, compact, reason) {
436
670
  }
437
671
  //#endregion
438
672
  //#region src/flows/chrome.ts
439
- const text = (t, key, fallback, params) => {
440
- const value = t(key, params === void 0 ? void 0 : { params });
441
- return value === key ? fallback : value;
442
- };
443
673
  function findDeclared(def, name) {
444
674
  const actions = def?.actions ?? {};
445
675
  for (const place of [
@@ -453,15 +683,39 @@ function findDeclared(def, name) {
453
683
  if (found !== void 0) return found;
454
684
  }
455
685
  }
686
+ function declaredFlow(app, resource, actionName) {
687
+ try {
688
+ return resource === "" ? app.registry.appActions.get(actionName) : findDeclared(app.registry.get(resource), actionName);
689
+ } catch {
690
+ return;
691
+ }
692
+ }
693
+ function useFlowDialogTexts(resource, actionName, labelText) {
694
+ const app = useApp();
695
+ const caps = useI18nCaps("");
696
+ const texts = declaredFlow(app, resource, actionName)?.texts;
697
+ const prefix = resource === "" ? `appActions.${actionName}` : `resources.${resource}.actions.${actionName}`;
698
+ const own = (path) => {
699
+ const key = `${prefix}.${path.join(".")}`;
700
+ return caps.has(key) ? caps.t(key) : textsValueAt(texts, path);
701
+ };
702
+ return {
703
+ confirmTitle: own(["confirm", "title"]) ?? labelText,
704
+ confirmProceed: own(["confirm", "proceed"]) ?? labelText,
705
+ dismiss: own(["dismiss"])
706
+ };
707
+ }
456
708
  function useFlowChrome(resource, actionName, children) {
457
709
  const app = useApp();
458
710
  const declared = (resource === "" ? void 0 : findDeclared(app.registry.get(resource), actionName)) ?? {};
459
711
  const label = useResolvedLabel(declared, actionName, children, resource);
712
+ const labelText = typeof label === "string" ? label : humanizeKey(actionName);
460
713
  return {
461
714
  label,
462
- labelText: typeof label === "string" ? label : humanizeKey(actionName),
715
+ labelText,
463
716
  icon: resolveActionIcon(declared, actionName),
464
- destructive: declared.variant === "destructive"
717
+ destructive: declared.variant === "destructive",
718
+ ...useFlowDialogTexts(resource, actionName, labelText)
465
719
  };
466
720
  }
467
721
  //#endregion
@@ -573,14 +827,19 @@ function FlowControl(props) {
573
827
  testId: `${testid}:info`
574
828
  })] });
575
829
  }
576
- function FlowActionButton(props) {
830
+ function FlowActionButton(input) {
831
+ const props = {
832
+ ...input,
833
+ resource: routeResourceKey(input.resource)
834
+ };
577
835
  const { resource, actionName, record, scope = "row", children } = props;
578
836
  const control = useFlowRowResolver(resource)(actionName, record);
579
837
  const chrome = useFlowChrome(resource, actionName, children);
580
838
  const tid = useTestIds();
581
- const testid = makeTestId(scope, resource, actionName, record?.id ?? "", tid);
839
+ const app = useApp();
840
+ const testid = makeTestId(scope, resource, actionName, String(recordKeyOf(app.registry.get(resource), record) ?? ""), tid);
582
841
  const [running, setRunning] = useState(false);
583
- const runRecord = control.record ?? record;
842
+ const runRecord = useFlowRecord(resource, actionName, control.record ?? record);
584
843
  const hosted = useHostedFlow(resource, actionName, runRecord, chrome.labelText);
585
844
  const onRun = () => {
586
845
  if (running) return;
@@ -612,6 +871,17 @@ function FlowActionButton(props) {
612
871
  onClose: () => setRunning(false)
613
872
  }) : null] });
614
873
  }
874
+ function useFlowRecord(resource, actionName, record) {
875
+ const def = useApp().registry.get(resource);
876
+ const compiled = useMemo(() => {
877
+ try {
878
+ return def === void 0 ? null : compileFlow(def, actionName);
879
+ } catch {
880
+ return null;
881
+ }
882
+ }, [def, actionName]);
883
+ return compiled === null ? void 0 : flowRecordOf(compiled, record);
884
+ }
615
885
  function useHostedFlow(resource, actionName, record, label) {
616
886
  const app = useApp();
617
887
  const def = app.registry.get(resource);
@@ -622,7 +892,7 @@ function useHostedFlow(resource, actionName, record, label) {
622
892
  return null;
623
893
  }
624
894
  }, [def, actionName]);
625
- const title = useProjectedTitle(resource, record?.id, record);
895
+ const title = useProjectedTitle(resource, recordKeyOf(def, record), record);
626
896
  const presentFlow = usePresentFlow();
627
897
  const hasHost = compiled?.hasHost === true;
628
898
  const recordId = record?.[compiled?.idField ?? "id"] ?? record?.id;
@@ -651,8 +921,9 @@ function useHostedFlow(resource, actionName, record, label) {
651
921
  function FlowMenuItem(props) {
652
922
  const chrome = useFlowChrome(props.resource, props.actionName);
653
923
  const tid = useTestIds();
654
- const testid = makeTestId(props.scope, props.resource, props.actionName, props.record?.id ?? "", tid);
655
- const runRecord = props.control.record ?? props.record;
924
+ const def = useApp().registry.get(props.resource);
925
+ const testid = makeTestId(props.scope, props.resource, props.actionName, String(recordKeyOf(def, props.record) ?? ""), tid);
926
+ const runRecord = useFlowRecord(props.resource, props.actionName, props.control.record ?? props.record);
656
927
  const hosted = useHostedFlow(props.resource, props.actionName, runRecord, chrome.labelText);
657
928
  return jsx(FlowControl, {
658
929
  state: conjoinHostPage(props.control.state, hosted.hostPage),
@@ -706,7 +977,7 @@ function listSlot(region, resource) {
706
977
  return `list.${region}.${canonicalResourceName(resource)}`;
707
978
  }
708
979
  function useListSlot(region, resource) {
709
- return useComponent(listSlot(region, resource));
980
+ return useComponent(listSlot(region, routeResourceKey(resource)));
710
981
  }
711
982
  //#endregion
712
983
  //#region src/actions/builtin-edit-route.ts
@@ -755,12 +1026,10 @@ function useBuiltinEditRoute(action, resource, recordId) {
755
1026
  }
756
1027
  //#endregion
757
1028
  //#region src/actions/action-button.tsx
758
- function DisabledAction({ reason, label, icon, testid, size, variant, className, asMenuItem, resource, density = "regular", actionName, surface }) {
1029
+ function DisabledAction({ reason, label, icon, testid, size, variant, className, asMenuItem, resource: resourceInput, density = "regular", actionName, surface }) {
1030
+ const resource = resourceInput === void 0 ? void 0 : routeResourceKey(resourceInput);
759
1031
  const i18nCaps = useI18nCaps(resource);
760
- const text = reason ? resolveContentSlot(i18nCaps, [reason], {
761
- resource,
762
- default: reason
763
- }) : resolveContentSlot(i18nCaps, ["availability.denied"], {
1032
+ const text = reason ? reasonText(i18nCaps, reason, resource) : resolveContentSlot(i18nCaps, ["availability.denied"], {
764
1033
  resource,
765
1034
  default: "This action isn't available"
766
1035
  });
@@ -769,15 +1038,24 @@ function DisabledAction({ reason, label, icon, testid, size, variant, className,
769
1038
  e.stopPropagation();
770
1039
  toast(text);
771
1040
  };
1041
+ const reasonId = useId();
772
1042
  if (asMenuItem) return jsx(DropdownMenuItem, {
773
1043
  "aria-disabled": "true",
1044
+ "aria-describedby": reasonId,
774
1045
  "data-testid": testid,
775
1046
  onSelect: (e) => e.preventDefault(),
776
1047
  onClick,
777
1048
  className: "opacity-60",
778
1049
  children: jsx(ActionInner, {
779
1050
  icon,
780
- label
1051
+ label: jsxs("span", {
1052
+ className: "flex min-w-0 flex-col",
1053
+ children: [jsx("span", { children: label }), jsx("span", {
1054
+ id: reasonId,
1055
+ className: "text-xs text-muted-foreground",
1056
+ children: text
1057
+ })]
1058
+ })
781
1059
  })
782
1060
  });
783
1061
  const chrome = resolveControlChrome({
@@ -841,36 +1119,41 @@ function actionResourceHandle(resource) {
841
1119
  ref: normalizeEntityRef(resource)
842
1120
  };
843
1121
  }
844
- function ActionButton(props) {
1122
+ function ActionButton(input) {
1123
+ const { sources, ...rest } = input;
1124
+ const props = {
1125
+ ...rest,
1126
+ resource: routeResourceKey(input.resource)
1127
+ };
845
1128
  const def = useApp().registry.get(props.resource);
846
1129
  const scope = props.scope ?? "row";
847
- const availability = useAvailabilityResolver(props.resource, modeForSurface(scope))(props.actionName, props.record);
848
- const action = findAction(def?.actions?.item, props.actionName) ?? findAction(def?.actions?.resource, props.actionName);
1130
+ const resolveAvailability = useAvailabilityResolver(props.resource, modeForSurface(scope));
1131
+ const itemAction = findAction(def?.actions?.item, props.actionName);
1132
+ const action = itemAction ?? findAction(def?.actions?.resource, props.actionName);
1133
+ const record = itemAction === void 0 ? void 0 : props.record;
1134
+ const availability = resolveAvailability(props.actionName, record);
1135
+ const whenSources = useActionWhenSources({
1136
+ resource: props.resource,
1137
+ record
1138
+ });
849
1139
  if (!action) return null;
850
1140
  if (isFlowAction(action)) return jsx(FlowActionButton, { ...props });
851
1141
  if (availability.state === "absent" || availability.state === "hidden") return null;
852
- if (!actionWhenHolds(action, props.record)) return null;
1142
+ if (!actionWhenHolds(action, actionWhenSources(whenSources, sources))) return null;
853
1143
  if (action.kind === "link") return jsx(LinkActionButton, {
854
1144
  ...props,
1145
+ record,
855
1146
  action,
856
1147
  availability
857
1148
  });
858
1149
  if (action.kind === "modal") return jsx(ModalActionButton, {
859
1150
  ...props,
1151
+ record,
860
1152
  action,
861
1153
  availability
862
1154
  });
863
1155
  return null;
864
1156
  }
865
- function actionWhenHolds(action, record) {
866
- const when = action.when;
867
- if (when === void 0) return true;
868
- return evaluateCondition(when, record === void 0 ? {} : { record: {
869
- status: "ready",
870
- value: record,
871
- refreshing: false
872
- } }, { mode: "show" }) === true;
873
- }
874
1157
  function presentModalAction(args) {
875
1158
  const { present, action, resource, actionName, record, recordId, label } = args;
876
1159
  const result = present({
@@ -898,17 +1181,20 @@ const reportedDeadRoutes = new Set();
898
1181
  function deadRecordRoute(registry, action, to) {
899
1182
  if (isBuiltinItemAction(action) || to === null || typeof to !== "object") return null;
900
1183
  const target = to;
901
- if (typeof target.resource !== "string") return null;
902
1184
  if (target.action !== "show" && target.action !== "edit" && target.action !== "create") return null;
1185
+ let resource;
903
1186
  let def;
904
1187
  try {
905
- def = registry.get(target.resource);
1188
+ if (typeof target.resource === "string") resource = target.resource;
1189
+ else if (target.resource !== null && typeof target.resource === "object") resource = routeResourceKey(target.resource);
1190
+ else return null;
1191
+ def = registry.get(resource);
906
1192
  } catch {
907
1193
  return null;
908
1194
  }
909
1195
  if (def === void 0 || hasRecordPage(def, target.action)) return null;
910
1196
  return {
911
- resource: target.resource,
1197
+ resource,
912
1198
  action: target.action
913
1199
  };
914
1200
  }
@@ -926,7 +1212,7 @@ function LinkActionButton({ resource, actionName, record, scope = "row", variant
926
1212
  const safeRecord = record ?? { id: "" };
927
1213
  const isDestructive = action.variant === "destructive";
928
1214
  const buttonVariant = variant ?? (isDestructive ? "destructive" : "outline");
929
- const recordId = record?.id ?? "";
1215
+ const recordId = String(recordKeyOf(app.registry.get(resource), record) ?? "");
930
1216
  const testid = makeTestId(scope, resource, actionName, recordId, tid);
931
1217
  const label = useResolvedLabel(action, actionName, children, resource);
932
1218
  const editRoute = useBuiltinEditRoute(action, resource, recordId);
@@ -1032,11 +1318,12 @@ function LinkActionButton({ resource, actionName, record, scope = "row", variant
1032
1318
  }
1033
1319
  function ModalActionButton({ resource, actionName, record, scope = "row", variant, size, density, className, children, asMenuItem, action, availability }) {
1034
1320
  const tid = useTestIds();
1321
+ const app = useApp();
1035
1322
  const present = usePresentBlock();
1036
1323
  const safeRecord = record ?? { id: "" };
1037
1324
  const isDestructive = action.variant === "destructive";
1038
1325
  const buttonVariant = variant ?? (isDestructive ? "destructive" : "outline");
1039
- const recordId = record?.id ?? "";
1326
+ const recordId = String(recordKeyOf(app.registry.get(resource), record) ?? "");
1040
1327
  const testid = makeTestId(scope, resource, actionName, recordId, tid);
1041
1328
  const label = useResolvedLabel(action, actionName, children, resource);
1042
1329
  if (availability.state === "disabled") return jsx(DisabledAction, {
@@ -1096,33 +1383,41 @@ function ModalActionButton({ resource, actionName, record, scope = "row", varian
1096
1383
  }
1097
1384
  //#endregion
1098
1385
  //#region src/checks/check-confirm-dialog.tsx
1099
- function translateOrFallback(t, key, fallback, params, resource) {
1100
- const translated = t(key, {
1386
+ function issueText(issue, t, caps, resource) {
1387
+ const params = issue.message.params;
1388
+ const checkId = issue.check?.id;
1389
+ const ownCheck = checkId !== void 0 && issue.message.key === `checks.${checkId}`;
1390
+ const declared = typeof issue.message.default === "string" ? issue.message.default : ownCheck ? void 0 : issue.message.key;
1391
+ if (issue.message.params?.resolved === true) return declared ?? issue.message.key;
1392
+ if (!ownCheck) return t(issue.message.key, {
1393
+ defaultValue: declared ?? "",
1101
1394
  params,
1102
1395
  ...resource === void 0 ? {} : { resource }
1103
1396
  });
1104
- return translated === key ? fallback : translated;
1105
- }
1106
- function issueText(issue, t, resource) {
1107
- const params = issue.params;
1108
- const checkId = params?.checkId;
1109
- const ownCheck = typeof checkId === "string" && issue.message.key === `checks.${checkId}`;
1110
- const declared = typeof issue.message.default === "string" ? issue.message.default : ownCheck ? void 0 : issue.message.key;
1111
- if (issue.params?.resolved === true) return declared ?? issue.message.key;
1112
- if (!ownCheck) return translateOrFallback(t, issue.message.key, declared ?? "", params, resource);
1113
- const miss = "\0";
1114
- const bundled = [`${issue.message.key}.message`, issue.message.key].map((key) => translateOrFallback(t, key, miss, params, resource)).find((text) => text !== miss);
1115
- if (bundled !== void 0) return bundled;
1397
+ const entryKey = [`${issue.message.key}.message`, issue.message.key].find((key) => caps.has(key, { resource }));
1398
+ if (entryKey !== void 0) return caps.t(entryKey, {
1399
+ resource,
1400
+ params
1401
+ });
1116
1402
  if (declared !== void 0) return declared;
1403
+ if (issue.check?.constraint !== void 0) {
1404
+ const text = constraintText(issue.check.constraint, String(params?.limit ?? ""));
1405
+ return t(text.key, {
1406
+ defaultValue: text.defaultValue,
1407
+ params
1408
+ });
1409
+ }
1117
1410
  const name = String(params?.name ?? checkId);
1118
- return translateOrFallback(t, FRAMEWORK_TEXT_KEYS.checkFailed, checkFailedDefault(name), {
1119
- ...params,
1120
- name
1121
- }, void 0);
1411
+ return t(FRAMEWORK_TEXT_KEYS.checkFailed, {
1412
+ defaultValue: checkFailedDefault(name),
1413
+ params: {
1414
+ ...params,
1415
+ name
1416
+ }
1417
+ });
1122
1418
  }
1123
1419
  function checkIdOf(issue, index) {
1124
- const id = issue.params?.checkId;
1125
- return typeof id === "string" ? id : `${index}`;
1420
+ return issue.check?.id ?? `${index}`;
1126
1421
  }
1127
1422
  const SEVERITY_CLASSNAME = {
1128
1423
  error: "text-destructive",
@@ -1131,11 +1426,12 @@ const SEVERITY_CLASSNAME = {
1131
1426
  };
1132
1427
  function ChecksList({ issues, testid, onRowClick, resource }) {
1133
1428
  const t = useOptionalT();
1429
+ const caps = useI18nCaps(resource);
1134
1430
  return issues.map((issue, index) => {
1135
1431
  const checkId = checkIdOf(issue, index);
1136
1432
  const anchor = issue.path[0];
1137
1433
  const anchorable = typeof anchor === "string";
1138
- const text = issueText(issue, t, resource);
1434
+ const text = issueText(issue, t, caps, resource);
1139
1435
  const className = cn("text-sm", SEVERITY_CLASSNAME[issue.severity]);
1140
1436
  return anchorable ? jsx("li", { children: jsx("button", {
1141
1437
  type: "button",
@@ -1150,15 +1446,11 @@ function ChecksList({ issues, testid, onRowClick, resource }) {
1150
1446
  }, `${checkId}-${index}`);
1151
1447
  });
1152
1448
  }
1153
- function CheckConfirmDialog({ state, testid, onAnchorFocus, title, proceedLabel, tone }) {
1154
- const t = useOptionalT();
1449
+ function CheckConfirmDialog({ state, testid, onAnchorFocus, title, proceedLabel, cancelLabel, tone }) {
1450
+ const chromeT = useChromeT();
1155
1451
  const { resource, open, busy, header, blockers, confirmable, proceed, cancel } = state;
1156
1452
  const blocked = blockers.length > 0;
1157
- const bound = resource === void 0 ? {} : { resource };
1158
- const heading = title ?? t("checks.dialogTitle", {
1159
- defaultValue: "Please review",
1160
- ...bound
1161
- });
1453
+ const heading = title ?? chromeT("checks.dialogTitle", { defaultValue: "Please review" });
1162
1454
  const restoreFocusRef = useRef(null);
1163
1455
  useEffect(() => {
1164
1456
  if (typeof document === "undefined") return;
@@ -1195,10 +1487,7 @@ function CheckConfirmDialog({ state, testid, onAnchorFocus, title, proceedLabel,
1195
1487
  children: [
1196
1488
  blocked && jsx("li", {
1197
1489
  className: "text-xs font-semibold uppercase tracking-wider text-destructive",
1198
- children: t("checks.blocked", {
1199
- defaultValue: "Cannot continue",
1200
- ...bound
1201
- })
1490
+ children: chromeT("checks.blocked", { defaultValue: "Cannot continue" })
1202
1491
  }),
1203
1492
  jsx(ChecksList, {
1204
1493
  issues: blockers,
@@ -1220,26 +1509,20 @@ function CheckConfirmDialog({ state, testid, onAnchorFocus, title, proceedLabel,
1220
1509
  onClick: cancel,
1221
1510
  "data-testid": `${testid}:cancel`,
1222
1511
  disabled: busy,
1223
- children: t("checks.back", {
1224
- defaultValue: "Go back",
1225
- ...bound
1226
- })
1512
+ children: cancelLabel ?? chromeT("checks.back", { defaultValue: "Go back" })
1227
1513
  }), !blocked && jsx(Button, {
1228
1514
  type: "button",
1229
1515
  variant: tone === "destructive" ? "destructive" : "default",
1230
1516
  onClick: proceed,
1231
1517
  "data-testid": `${testid}:proceed`,
1232
1518
  disabled: busy,
1233
- children: proceedLabel ?? t("checks.proceed", {
1234
- defaultValue: "Continue anyway",
1235
- ...bound
1236
- })
1519
+ children: proceedLabel ?? chromeT("checks.proceed", { defaultValue: "Continue anyway" })
1237
1520
  })] })
1238
1521
  ]
1239
1522
  })
1240
1523
  });
1241
1524
  }
1242
1525
  //#endregion
1243
- export { hasIcon as A, DropdownMenuRadioItem as B, loadFailedText as C, preloadFlowRuntime as D, loadPageFlowRoute as E, DropdownMenuGroup as F, DropdownMenuSubTrigger as G, DropdownMenuShortcut as H, DropdownMenuItem as I, TooltipContent as J, DropdownMenuTrigger as K, DropdownMenuLabel as L, DropdownMenu as M, DropdownMenuCheckboxItem as N, useLoaded as O, DropdownMenuContent as P, DropdownMenuPortal as R, loadBulkSummary as S, loadInlineFlowHost as T, DropdownMenuSub as U, DropdownMenuSeparator as V, DropdownMenuSubContent as W, TooltipTrigger as X, TooltipProvider as Y, DocInfo as Z, FlowBoundary as _, modeForSurface as a, RuntimeBulkFlowRunner as b, useListSlot as c, useToBrowserHref as d, FlowActionButton as f, ActionInner as g, useFlowChrome as h, makeTestId as i, registerIcons as j, Icon as k, isExternalHref as l, text as m, ActionButton as n, canonicalResourceName as o, FlowMenuItem as p, Tooltip as q, DisabledAction as r, listSlot as s, CheckConfirmDialog as t, openExternal as u, FlowLoadFailed as v, loadFlowScreen as w, RuntimeFlowRunner as x, RuntimeAppFlowRunner as y, DropdownMenuRadioGroup as z };
1526
+ export { Tooltip as $, OwnTitleHeading as A, DropdownMenuContent as B, loadBulkSummary as C, loadPageFlowRoute as D, loadInlineFlowHost as E, Icon as F, DropdownMenuRadioGroup as G, DropdownMenuItem as H, hasIcon as I, DropdownMenuShortcut as J, DropdownMenuRadioItem as K, registerIcons as L, DialogPresentationShell as M, OwnTitleContext as N, preloadFlowRuntime as O, SheetPresentationShell as P, DropdownMenuTrigger as Q, DropdownMenu as R, RuntimeFlowRunner as S, loadFlowScreen as T, DropdownMenuLabel as U, DropdownMenuGroup as V, DropdownMenuPortal as W, DropdownMenuSubContent as X, DropdownMenuSub as Y, DropdownMenuSubTrigger as Z, reasonText as _, modeForSurface as a, SheetContent as at, RuntimeAppFlowRunner as b, useListSlot as c, SheetHeader as ct, useToBrowserHref as d, DocInfo as dt, TooltipContent as et, FlowActionButton as f, ActionInner as g, useFlowDialogTexts as h, makeTestId as i, SheetClose as it, useFocusOnMount as j, useLoaded as k, isExternalHref as l, SheetTitle as lt, useFlowChrome as m, ActionButton as n, TooltipTrigger as nt, canonicalResourceName as o, SheetDescription as ot, FlowMenuItem as p, DropdownMenuSeparator as q, DisabledAction as r, Sheet as rt, listSlot as s, SheetFooter as st, CheckConfirmDialog as t, TooltipProvider as tt, openExternal as u, SheetTrigger as ut, FlowBoundary as v, loadFailedText as w, RuntimeBulkFlowRunner as x, FlowLoadFailed as y, DropdownMenuCheckboxItem as z };
1244
1527
 
1245
- //# sourceMappingURL=check-confirm-dialog-bRT8lt0d.js.map
1528
+ //# sourceMappingURL=check-confirm-dialog-CtiRzOAt.js.map