@burojs/ui-shadcn 0.5.0 → 0.6.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.
- package/dist/candidates-gate-Bb70LPAy.js +135 -0
- package/dist/candidates-gate-Bb70LPAy.js.map +1 -0
- package/dist/candidates-gate-D33jXLHO.cjs +153 -0
- package/dist/candidates-gate-D33jXLHO.cjs.map +1 -0
- package/dist/candidates-relation-picker-B116Bmqi.js +31 -0
- package/dist/candidates-relation-picker-B116Bmqi.js.map +1 -0
- package/dist/candidates-relation-picker-Cy0rTxvI.cjs +31 -0
- package/dist/candidates-relation-picker-Cy0rTxvI.cjs.map +1 -0
- package/dist/{check-confirm-dialog-BRByTFpg.cjs → check-confirm-dialog--gPFnEeg.cjs} +27 -14
- package/dist/check-confirm-dialog--gPFnEeg.cjs.map +1 -0
- package/dist/{check-confirm-dialog-CkaVTPT9.js → check-confirm-dialog-bRT8lt0d.js} +28 -15
- package/dist/check-confirm-dialog-bRT8lt0d.js.map +1 -0
- package/dist/{filter-builder-DOnaXNfP.js → filter-builder-Bhn-dhZV.js} +30 -14
- package/dist/filter-builder-Bhn-dhZV.js.map +1 -0
- package/dist/{filter-builder-B3mZFL-K.cjs → filter-builder-nXqtM_h4.cjs} +39 -11
- package/dist/filter-builder-nXqtM_h4.cjs.map +1 -0
- package/dist/{flow-runtime-B6zOHYqI.cjs → flow-runtime-D3avVH0I.cjs} +3 -3
- package/dist/{flow-runtime-B6zOHYqI.cjs.map → flow-runtime-D3avVH0I.cjs.map} +1 -1
- package/dist/{flow-runtime-D8h99FSg.js → flow-runtime-s6lkRPKF.js} +3 -3
- package/dist/{flow-runtime-D8h99FSg.js.map → flow-runtime-s6lkRPKF.js.map} +1 -1
- package/dist/{flow-screen-CmbARSqg.js → flow-screen-CCvgDI9G.js} +11 -8
- package/dist/flow-screen-CCvgDI9G.js.map +1 -0
- package/dist/{flow-screen-CX05b3G9.cjs → flow-screen-Ci_Sik4Y.cjs} +10 -7
- package/dist/flow-screen-Ci_Sik4Y.cjs.map +1 -0
- package/dist/index.cjs +577 -56
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +181 -103
- package/dist/index.d.ts +181 -103
- package/dist/index.js +567 -45
- package/dist/index.js.map +1 -1
- package/dist/{inline-flow-host-C3H2UpSA.js → inline-flow-host-B6FI0ctQ.js} +3 -3
- package/dist/{inline-flow-host-C3H2UpSA.js.map → inline-flow-host-B6FI0ctQ.js.map} +1 -1
- package/dist/{inline-flow-host-B7U1OJUe.cjs → inline-flow-host-DV1et3c6.cjs} +3 -3
- package/dist/{inline-flow-host-B7U1OJUe.cjs.map → inline-flow-host-DV1et3c6.cjs.map} +1 -1
- package/dist/label-66W1qbke.js.map +1 -1
- package/dist/label-w6JYf2cF.cjs.map +1 -1
- package/dist/markdown/index.d.cts +2 -3
- package/dist/markdown/index.d.ts +2 -3
- package/dist/{page-flow-route-CQ7HsbBm.cjs → page-flow-route-hdnULWqd.cjs} +6 -6
- package/dist/{page-flow-route-CQ7HsbBm.cjs.map → page-flow-route-hdnULWqd.cjs.map} +1 -1
- package/dist/{page-flow-route-CyXSvXSE.js → page-flow-route-i3ZfJ1sd.js} +6 -6
- package/dist/{page-flow-route-CyXSvXSE.js.map → page-flow-route-i3ZfJ1sd.js.map} +1 -1
- package/dist/{place-node-SIp4XYQH.cjs → place-node-C5SmIAYU.cjs} +441 -135
- package/dist/place-node-C5SmIAYU.cjs.map +1 -0
- package/dist/{place-node--GdsP688.js → place-node-NraNYKPx.js} +420 -138
- package/dist/place-node-NraNYKPx.js.map +1 -0
- package/dist/{related-list-cards-B6x9HQQp.js → related-list-cards-BWZ9GfOG.js} +3 -3
- package/dist/{related-list-cards-B6x9HQQp.js.map → related-list-cards-BWZ9GfOG.js.map} +1 -1
- package/dist/{related-list-cards-nxuODlIA.cjs → related-list-cards-CFq3meUn.cjs} +3 -3
- package/dist/{related-list-cards-nxuODlIA.cjs.map → related-list-cards-CFq3meUn.cjs.map} +1 -1
- package/dist/{related-list-timeline-BYJKEbmA.cjs → related-list-timeline-CCzl71aA.cjs} +2 -2
- package/dist/{related-list-timeline-BYJKEbmA.cjs.map → related-list-timeline-CCzl71aA.cjs.map} +1 -1
- package/dist/{related-list-timeline-DEdfd-rr.js → related-list-timeline-yrPsjA3F.js} +2 -2
- package/dist/{related-list-timeline-DEdfd-rr.js.map → related-list-timeline-yrPsjA3F.js.map} +1 -1
- package/dist/{related-rows-zh5f_4QR.cjs → related-rows-ea43qhhy.cjs} +10 -11
- package/dist/related-rows-ea43qhhy.cjs.map +1 -0
- package/dist/{related-rows-B4levHcR.js → related-rows-o0_t-Yce.js} +7 -8
- package/dist/related-rows-o0_t-Yce.js.map +1 -0
- package/dist/{relation-create-BOaUe12G.cjs → relation-create-IA40t1hi.cjs} +10 -8
- package/dist/relation-create-IA40t1hi.cjs.map +1 -0
- package/dist/{relation-create-Bg-eEJLs.js → relation-create-h6F9B4C4.js} +10 -8
- package/dist/relation-create-h6F9B4C4.js.map +1 -0
- package/dist/{relation-many-picker-B-NCEUgX.cjs → relation-many-picker-C8zFEjwd.cjs} +14 -12
- package/dist/relation-many-picker-C8zFEjwd.cjs.map +1 -0
- package/dist/{relation-many-picker-gdAOD-qK.js → relation-many-picker-bvkjkv-k.js} +13 -11
- package/dist/relation-many-picker-bvkjkv-k.js.map +1 -0
- package/dist/{relation-picker-BAY77ivO.js → relation-picker-Z0ZJJ5uS.js} +68 -37
- package/dist/relation-picker-Z0ZJJ5uS.js.map +1 -0
- package/dist/{relation-picker-dialog-M0pQaWlp.cjs → relation-picker-dialog-0IzkjmiA.cjs} +17 -13
- package/dist/relation-picker-dialog-0IzkjmiA.cjs.map +1 -0
- package/dist/{relation-picker-dialog-hA9rYrZB.js → relation-picker-dialog-B6nIiJBf.js} +18 -14
- package/dist/relation-picker-dialog-B6nIiJBf.js.map +1 -0
- package/dist/{relation-picker-Da_uhFvA.cjs → relation-picker-gag0qSR5.cjs} +74 -37
- package/dist/relation-picker-gag0qSR5.cjs.map +1 -0
- package/dist/{resource-page-router-T4vS5gbJ.js → resource-page-router-3RUf9d1j.js} +44 -38
- package/dist/resource-page-router-3RUf9d1j.js.map +1 -0
- package/dist/{resource-page-router-OSQyRA5b.cjs → resource-page-router-PXfMW9nh.cjs} +42 -36
- package/dist/resource-page-router-PXfMW9nh.cjs.map +1 -0
- package/dist/{search-access-CURsWn-U.js → search-access-CPPmfuvy.js} +4 -19
- package/dist/search-access-CPPmfuvy.js.map +1 -0
- package/dist/{search-access-B7G5oR8n.cjs → search-access-Dugvttlg.cjs} +3 -24
- package/dist/search-access-Dugvttlg.cjs.map +1 -0
- package/dist/{toaster-CfCRLgR-.js → toaster-C02XbB9r.js} +30 -59
- package/dist/toaster-C02XbB9r.js.map +1 -0
- package/dist/{toaster-C7CiYA4Z.cjs → toaster-Cr51X7bz.cjs} +30 -83
- package/dist/toaster-Cr51X7bz.cjs.map +1 -0
- package/dist/{use-dialog-filter-state-BDcgS5Oz.js → use-dialog-filter-state-C--oMAZG.js} +2 -2
- package/dist/{use-dialog-filter-state-BDcgS5Oz.js.map → use-dialog-filter-state-C--oMAZG.js.map} +1 -1
- package/dist/{use-dialog-filter-state-BBCC0OEK.cjs → use-dialog-filter-state-Dhe8PcB5.cjs} +2 -2
- package/dist/{use-dialog-filter-state-BBCC0OEK.cjs.map → use-dialog-filter-state-Dhe8PcB5.cjs.map} +1 -1
- package/dist/use-theme-DFlpXils.cjs.map +1 -1
- package/dist/use-theme-dnE3Od3I.js.map +1 -1
- package/package.json +9 -9
- package/dist/candidates-gate-CX2PBu6l.js +0 -63
- package/dist/candidates-gate-CX2PBu6l.js.map +0 -1
- package/dist/candidates-gate-DiFI52r7.cjs +0 -70
- package/dist/candidates-gate-DiFI52r7.cjs.map +0 -1
- package/dist/candidates-relation-picker-CBsVcnPR.js +0 -82
- package/dist/candidates-relation-picker-CBsVcnPR.js.map +0 -1
- package/dist/candidates-relation-picker-Dd_GVLlu.cjs +0 -84
- package/dist/candidates-relation-picker-Dd_GVLlu.cjs.map +0 -1
- package/dist/check-confirm-dialog-BRByTFpg.cjs.map +0 -1
- package/dist/check-confirm-dialog-CkaVTPT9.js.map +0 -1
- package/dist/filter-builder-B3mZFL-K.cjs.map +0 -1
- package/dist/filter-builder-DOnaXNfP.js.map +0 -1
- package/dist/flow-screen-CX05b3G9.cjs.map +0 -1
- package/dist/flow-screen-CmbARSqg.js.map +0 -1
- package/dist/lazy-relation-picker-dialog-2oxnA6IR.js +0 -14
- package/dist/lazy-relation-picker-dialog-2oxnA6IR.js.map +0 -1
- package/dist/lazy-relation-picker-dialog-BfAGKzUG.cjs +0 -19
- package/dist/lazy-relation-picker-dialog-BfAGKzUG.cjs.map +0 -1
- package/dist/peek-filter-CnqHwTMU.cjs +0 -51
- package/dist/peek-filter-CnqHwTMU.cjs.map +0 -1
- package/dist/peek-filter-ErLfO153.js +0 -28
- package/dist/peek-filter-ErLfO153.js.map +0 -1
- package/dist/place-node--GdsP688.js.map +0 -1
- package/dist/place-node-SIp4XYQH.cjs.map +0 -1
- package/dist/related-rows-B4levHcR.js.map +0 -1
- package/dist/related-rows-zh5f_4QR.cjs.map +0 -1
- package/dist/relation-create-BOaUe12G.cjs.map +0 -1
- package/dist/relation-create-Bg-eEJLs.js.map +0 -1
- package/dist/relation-many-picker-B-NCEUgX.cjs.map +0 -1
- package/dist/relation-many-picker-gdAOD-qK.js.map +0 -1
- package/dist/relation-picker-BAY77ivO.js.map +0 -1
- package/dist/relation-picker-Da_uhFvA.cjs.map +0 -1
- package/dist/relation-picker-dialog-M0pQaWlp.cjs.map +0 -1
- package/dist/relation-picker-dialog-hA9rYrZB.js.map +0 -1
- package/dist/resource-page-router-OSQyRA5b.cjs.map +0 -1
- package/dist/resource-page-router-T4vS5gbJ.js.map +0 -1
- package/dist/search-access-B7G5oR8n.cjs.map +0 -1
- package/dist/search-access-CURsWn-U.js.map +0 -1
- package/dist/toaster-C7CiYA4Z.cjs.map +0 -1
- package/dist/toaster-CfCRLgR-.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
import { c as scrollToDocAnchor, l as cn, n as useTheme, s as readDocHash, t as THEME_CHOICES } from "./use-theme-dnE3Od3I.js";
|
|
2
|
-
import { a as
|
|
3
|
-
import { A as hasIcon, B as DropdownMenuRadioItem, F as DropdownMenuGroup, G as DropdownMenuSubTrigger, H as DropdownMenuShortcut, I as DropdownMenuItem, J as TooltipContent, K as DropdownMenuTrigger, L as DropdownMenuLabel, M as DropdownMenu, N as DropdownMenuCheckboxItem, O as useLoaded, P as DropdownMenuContent, R as DropdownMenuPortal, U as DropdownMenuSub, V as DropdownMenuSeparator, W as DropdownMenuSubContent, X as TooltipTrigger, Y as TooltipProvider, Z as DocInfo, _ as FlowBoundary, a as modeForSurface, c as useListSlot, f as FlowActionButton, j as registerIcons, k as Icon, l as isExternalHref, n as ActionButton, o as canonicalResourceName, q as Tooltip, r as DisabledAction, s as listSlot, t as CheckConfirmDialog, u as openExternal, v as FlowLoadFailed, w as loadFlowScreen, z as DropdownMenuRadioGroup } from "./check-confirm-dialog-
|
|
2
|
+
import { a as LinkComponentProvider, c as PopoverAnchor, d as PopoverTrigger, i as toFriendlyError, l as PopoverClose, n as toast, o as useLinkComponent, r as friendlyStringsFrom, s as Popover, t as Toaster, u as PopoverContent } from "./toaster-C02XbB9r.js";
|
|
3
|
+
import { A as hasIcon, B as DropdownMenuRadioItem, F as DropdownMenuGroup, G as DropdownMenuSubTrigger, H as DropdownMenuShortcut, I as DropdownMenuItem, J as TooltipContent, K as DropdownMenuTrigger, L as DropdownMenuLabel, M as DropdownMenu, N as DropdownMenuCheckboxItem, O as useLoaded, P as DropdownMenuContent, R as DropdownMenuPortal, U as DropdownMenuSub, V as DropdownMenuSeparator, W as DropdownMenuSubContent, X as TooltipTrigger, Y as TooltipProvider, Z as DocInfo, _ as FlowBoundary, a as modeForSurface, c as useListSlot, f as FlowActionButton, j as registerIcons, k as Icon, l as isExternalHref, n as ActionButton, o as canonicalResourceName, q as Tooltip, r as DisabledAction, s as listSlot, t as CheckConfirmDialog, u as openExternal, v as FlowLoadFailed, w as loadFlowScreen, z as DropdownMenuRadioGroup } from "./check-confirm-dialog-bRT8lt0d.js";
|
|
4
4
|
import { n as buttonVariants, t as Button } from "./button-MWVeZaqj.js";
|
|
5
5
|
import { t as Input } from "./input-CUPStzZO.js";
|
|
6
6
|
import { a as DialogFooter, c as DialogTrigger, i as DialogDescription, n as DialogClose, o as DialogHeader, r as DialogContent, s as DialogTitle, t as Dialog } from "./dialog-B_rt9S1c.js";
|
|
7
|
-
import { C as
|
|
7
|
+
import { C as CommandSeparator, S as CommandLoading, _ as CommandEmpty, b as CommandItem, c as peekAnchorOpener, f as recordDisplayName, g as CommandDialog, h as Command, i as RelationField, l as PeekContext, o as relationLinkClassName, r as RelationDisplay, s as focusWithoutPeek, u as PeekHostContext, v as CommandGroup, x as CommandList, y as CommandInput } from "./search-access-CPPmfuvy.js";
|
|
8
8
|
import { a as SheetClose, c as SheetFooter, d as SheetTrigger, i as Sheet, l as SheetHeader, n as OwnTitleContext, o as SheetContent, r as SheetPresentationShell, s as SheetDescription, t as DialogPresentationShell, u as SheetTitle } from "./shell-BPlk8hEa.js";
|
|
9
9
|
import { t as Skeleton } from "./skeleton-U2noefj5.js";
|
|
10
|
-
import { $ as
|
|
10
|
+
import { $ as tanStackSortingToBuro, A as ListExport, At as i18nPrefixToRef, B as DeclarativeForm, C as ListSavedViews, Ct as useExportRunWatcher, D as ListFilters, Dt as AppFlowButton, E as ListFlows, F as ColumnsToggle, Ft as defaultUserMapper, I as DataTableViewOptions, It as usePaletteState, J as ResourceList, L as ListBulkBar, Lt as useShell, M as ListCreate, Mt as lowerLegacyField, N as CreateButton, Nt as toDisplayText, O as FilterRegion, Ot as Field, P as ListColumns, Pt as ShellProvider, Q as resolveUpdater, R as BulkActionToolbar, S as ListControls, T as ListLive, Tt as EnumBadge, U as QuickScreenClaimContext, V as ScreenTree, X as ListErrorState, Y as CursorLoadMore, Z as buroSortingToTanStack, _ as FormActions, a as peekFieldDefinition, at as TabsList, c as peekRow, d as shadcnFrameViews, dt as PageHeader, et as useBuroDataTable, ft as ShowPageHeader, g as CopyId, gt as isShowAvailable, ht as typography, it as TabsContent, j as ExportButton, jt as ResolvedFieldDisplay, k as ListSearchInput, kt as FieldDisplay, mt as useDocumentTitle, nt as Checkbox, o as peekLeafAllowed, ot as TabsTrigger, pt as DocumentTitleProvider, q as ListBody, r as shadcnBlockImplementations, rt as Tabs, s as peekRecord, tt as DataTable, u as resolveFrameView, ut as EditPageHeader, v as RecordActions, w as SavedViewsDropdown, wt as downloadArtifact, xt as ActionOverflow, y as RecordTitle, yt as recordRouteAvailable, z as ExportDialog } from "./place-node-NraNYKPx.js";
|
|
11
11
|
import { THEME_STORAGE_KEY } from "./layout/theme-storage-key.js";
|
|
12
|
-
import {
|
|
12
|
+
import { C as TableHeader, D as DEFAULT_LANGUAGE_STORAGE_KEY, E as badgeVariants, O as loadLocale, S as TableHead, T as Badge, _ as SelectValue, a as FilterBadges, b as TableCaption, c as Select, d as SelectItem, f as SelectLabel, g as SelectTrigger, h as SelectSeparator, i as FilterValueControl, k as saveLocale, l as SelectContent, m as SelectScrollUpButton, n as PinnedFilterControls, o as formatDate, p as SelectScrollDownButton, r as FilterPanel, s as formatNumber, t as FilterBuilder, u as SelectGroup, v as Table, w as TableRow, x as TableCell, y as TableBody } from "./filter-builder-Bhn-dhZV.js";
|
|
13
|
+
import { A as useLayoutResolver, C as useNavChromeBoundary, D as usePageAllowed, E as useNavVisible, M as canonicalNavKey, N as canonicalResourceKey, O as layoutSlot, S as NavChromeBoundaryProvider, T as useMatch, _ as useFormControl, a as recordErrorState, b as RecordState, c as readRecentRecords, d as recordTrailRoute, f as useTrailContext, g as RecordScreen, h as usePublishedRecordTrail, i as RecordPage, j as buildNavItems, k as useLayout, l as headerTrail, n as NavAreaPage, o as useRecordVisit, p as recordTrailKey, r as ResourcePageRouter, s as RECENT_LABEL_KEYS, u as recordTrail, v as PlannedBody, w as useHref, x as NavChrome, y as ResourceListPage } from "./resource-page-router-3RUf9d1j.js";
|
|
13
14
|
import { t as Label } from "./label-66W1qbke.js";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { t as
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import { builtinFrames, compilePageScreen, compiledScreenFor, dtoFields, effectiveFlow, enumFallbackKey, enumNamespaceOf, evaluateVisible, fieldOptionKey, formatEntityRef, groupChain, hasListPage, hasRecordPage, hrefFor, humanizeKey, isCustomPageDef, isRelationField, isScreenFailure, navHrefFor, nodeKind, normalizeDataError, projectDto, recordEntries, relationAmbiguousError, resolveConceptLabel, resolveContentSlot, resolveDoc, resolveEnumLabel, resolveFieldLabel, resolveNavLabel, resolveResourceLabel, resolveResourceNavLabel, resolveStaticAvailability, resourceCreateHref, resourceShowHref, snapshotAppFrames, snapshotBlockLookup, snapshotFrameLookup, taskRunFraction, taskRunOutcome } from "@burojs/core";
|
|
20
|
-
import { ComponentsContext, DispatcherProvider, I18nContext, QUICK_ANCHOR_ATTRIBUTE, QuickEntryContext, ResourceContext, RouteSourceContext, ScreenStateProvider, formatBytes, retryRecordRead, useApp, useAppActions, useApplicationSnapshot, useAvailabilityGate, useCapabilityResolver, useChangeLocale, useCommandPalette, useCurrentUserId, useDebouncedValue, useDispatcherEffects, useDocPanel, useDocScopes, useDocTopics, useDocTrailScopes, useDocsConfig, useDocumentedScopes, useEntryGate, useEnumValues, useFieldAccess, useFileField, useFileUrls, useFormController, useFrameImplementations, useFrameT, useI18nCaps, useIdentity, useLanguageStorageKey, useList, useListAccess, useLocale, useLogout, useNavigationGuardText, useOne, useOptionalAuthController, useOptionalDataRuntime, useOptionalFileStorage, useOptionalLocale, useOptionalRouterAdapter, useOptionalT, usePresentBlock, useProjectedRecord, useProjectedTitle, useQuick, useQuickEntry, useQuickEntryValue, useQuickOpener, useRecordTitle, useRefresh, useRegisterNavigationGuardDialog, useRouteNavigate, useRouterAdapter, useT, useTestIds, useUIInstance, useUIPresentationRuntime, useVisibilityCtx } from "@burojs/react";
|
|
15
|
+
import { i as useRelationSelect, n as RelationPicker, r as RelationPickerInput } from "./relation-picker-Z0ZJJ5uS.js";
|
|
16
|
+
import { r as LazyRelationPickerDialog, t as useCandidateSelection } from "./candidates-gate-Bb70LPAy.js";
|
|
17
|
+
import { t as useDialogFilterState } from "./use-dialog-filter-state-C--oMAZG.js";
|
|
18
|
+
import { builtinFrames, compilePageScreen, compiledScreenFor, declaredField, declaredText, dtoFields, effectiveFlow, enumFallbackKey, enumFallbackText, enumNamespaceOf, enumValueText, evaluateVisible, fieldOptionText, formatEntityRef, groupChain, hasListPage, hasRecordPage, hrefFor, humanizeKey, isCustomPageDef, isRelationField, isScreenFailure, linkOf, navHrefFor, nodeKind, normalizeDataError, normalizeEntityRef, projectDto, recordEntries, relationAmbiguousError, resolveConceptLabel, resolveContentSlot, resolveDoc, resolveEnumLabel, resolveFieldLabel, resolveFieldOptionLabel, resolveNavLabel, resolveResourceLabel, resolveResourceNavLabel, resolveStaticAvailability, resourceCreateHref, resourceKey, resourceShowHref, snapshotAppFrames, snapshotBlockLookup, snapshotFrameLookup, taskRunFraction, taskRunOutcome } from "@burojs/core";
|
|
19
|
+
import { ComponentsContext, DispatcherProvider, I18nContext, NO_RECORD_SCOPE_FRAMES, QUICK_ANCHOR_ATTRIBUTE, QuickEntryContext, RecordScopeChain, ResourceContext, RouteSourceContext, ScreenStateProvider, formatBytes, retryRecordRead, useApp, useAppActions, useApplicationSnapshot, useAvailabilityGate, useCapabilityResolver, useChangeLocale, useCommandPalette, useCurrentUserId, useDataRuntime, useDebouncedValue, useDispatcherEffects, useDocPanel, useDocScopes, useDocTopics, useDocTrailScopes, useDocsConfig, useDocumentedScopes, useEntryGate, useEnumValues, useFieldAccess, useFileField, useFileUrls, useFormController, useFrameImplementations, useFrameT, useI18nCaps, useIdentity, useLanguageStorageKey, useLinkKeys, useList, useListAccess, useLocale, useLogout, useNavigationGuardText, useOne, useOptionalApp, useOptionalAuthController, useOptionalDataRuntime, useOptionalFileStorage, useOptionalLocale, useOptionalRecordFrame, useOptionalRouterAdapter, useOptionalT, usePresentBlock, useProjectedRecord, useProjectedTitle, useQuick, useQuickEntry, useQuickEntryValue, useQuickOpener, useRecordScopeFrames, useRecordTitle, useRefresh, useRegisterNavigationGuardDialog, useRelatedRecord, useRouteNavigate, useRouterAdapter, useT, useTestIds, useUIInstance, useUIPresentationRuntime, useVisibilityCtx } from "@burojs/react";
|
|
21
20
|
import { IconAlertCircle, IconArrowLeft, IconArrowUpRight, IconBook2, IconCheck, IconChevronDown, IconChevronRight, IconCirclePlus, IconDeviceDesktop, IconDots, IconExternalLink, IconHelp, IconHelpHexagon, IconLayoutSidebar, IconLoader2, IconLogin, IconLogout, IconMaximize, IconMinimize, IconMoon, IconRefresh, IconRotate, IconSearch, IconSelector, IconSun, IconUpload, IconUser, IconX } from "@tabler/icons-react";
|
|
22
21
|
import * as React from "react";
|
|
23
22
|
import { Children, Fragment, Suspense, cloneElement, createContext, createElement, isValidElement, lazy, useCallback, useContext, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
@@ -1746,9 +1745,9 @@ function useNavTree(opts = {}) {
|
|
|
1746
1745
|
const topLevelCustomPages = allCustomPages.filter((p) => !p.section && !p.group).filter(pageAllowed).filter(passesEntryFilter);
|
|
1747
1746
|
const resourceHref = (def) => hrefFor(app.registry, canonicalResourceKey(def));
|
|
1748
1747
|
const resourceLabel = (def) => resolveResourceNavLabel(caps, canonicalResourceKey(def), def);
|
|
1749
|
-
const pageLabel = (page) => resolveNavLabel(caps, `pages.${canonicalNavKey(page)}`, page
|
|
1750
|
-
const sectionLabel = (section) => resolveNavLabel(caps, `sections.${canonicalNavKey(section)}`, section
|
|
1751
|
-
const groupLabel = (group) => resolveNavLabel(caps, `groups.${canonicalNavKey(group)}`, group
|
|
1748
|
+
const pageLabel = (page) => resolveNavLabel(caps, `pages.${canonicalNavKey(page)}`, declaredText("chrome", page, "label"));
|
|
1749
|
+
const sectionLabel = (section) => resolveNavLabel(caps, `sections.${canonicalNavKey(section)}`, declaredText("chrome", section, "label"));
|
|
1750
|
+
const groupLabel = (group) => resolveNavLabel(caps, `groups.${canonicalNavKey(group)}`, declaredText("chrome", group, "label"));
|
|
1752
1751
|
const pageEntry = (page) => {
|
|
1753
1752
|
const href = page.path;
|
|
1754
1753
|
return {
|
|
@@ -2039,7 +2038,7 @@ function SecondarySidebarLayout({ group, groupKey, items, children }) {
|
|
|
2039
2038
|
const RouterLink = useLinkComponent();
|
|
2040
2039
|
const caps = useI18nCaps();
|
|
2041
2040
|
const id = groupKey ?? group.name;
|
|
2042
|
-
const label = resolveNavLabel(caps, `groups.${id}`, group
|
|
2041
|
+
const label = resolveNavLabel(caps, `groups.${id}`, declaredText("chrome", group, "label"));
|
|
2043
2042
|
return jsxs("div", {
|
|
2044
2043
|
className: "md:-m-6 md:flex md:min-h-[calc(100%+3rem)]",
|
|
2045
2044
|
"data-testid": `nav-secondary:${id}`,
|
|
@@ -2084,7 +2083,7 @@ function TabsLayout({ group, groupKey, items, children }) {
|
|
|
2084
2083
|
const RouterLink = useLinkComponent();
|
|
2085
2084
|
const caps = useI18nCaps();
|
|
2086
2085
|
const id = groupKey ?? group.name;
|
|
2087
|
-
const label = resolveNavLabel(caps, `groups.${id}`, group
|
|
2086
|
+
const label = resolveNavLabel(caps, `groups.${id}`, declaredText("chrome", group, "label"));
|
|
2088
2087
|
return jsxs("div", {
|
|
2089
2088
|
className: "flex flex-col gap-4",
|
|
2090
2089
|
"data-testid": `nav-tabs:${id}`,
|
|
@@ -2551,7 +2550,7 @@ function CommandPaletteNavigationGroups({ onSelect, getTestId }) {
|
|
|
2551
2550
|
navigate(href);
|
|
2552
2551
|
};
|
|
2553
2552
|
const resourceLabel = (def) => resolveResourceLabel(caps, canonicalResourceKey(def), "plural", def);
|
|
2554
|
-
const pageLabel = (def) => resolveNavLabel(caps, `pages.${canonicalNavKey(def)}`, def
|
|
2553
|
+
const pageLabel = (def) => resolveNavLabel(caps, `pages.${canonicalNavKey(def)}`, declaredText("chrome", def, "label"));
|
|
2555
2554
|
const groups = [];
|
|
2556
2555
|
if (topLevelResources.length > 0) groups.push(jsx(CommandGroup, {
|
|
2557
2556
|
heading: t("commandPalette.resources", { defaultValue: "Resources" }),
|
|
@@ -2583,7 +2582,7 @@ function CommandPaletteNavigationGroups({ onSelect, getTestId }) {
|
|
|
2583
2582
|
}, "pages"));
|
|
2584
2583
|
for (const { section, children } of sectionGroups) {
|
|
2585
2584
|
const sectionKey = canonicalNavKey(section);
|
|
2586
|
-
const sectionLabel = resolveNavLabel(caps, `sections.${sectionKey}`, section
|
|
2585
|
+
const sectionLabel = resolveNavLabel(caps, `sections.${sectionKey}`, declaredText("chrome", section, "label"));
|
|
2587
2586
|
groups.push(jsxs(CommandGroup, {
|
|
2588
2587
|
heading: sectionLabel,
|
|
2589
2588
|
children: [jsx(CommandItem, {
|
|
@@ -2622,7 +2621,7 @@ function CommandPaletteNavigationGroups({ onSelect, getTestId }) {
|
|
|
2622
2621
|
const items = [];
|
|
2623
2622
|
if (!!resolveLayout(group.layout)) {
|
|
2624
2623
|
const groupKey = canonicalNavKey(group);
|
|
2625
|
-
const label = resolveNavLabel(caps, `groups.${groupKey}`, group
|
|
2624
|
+
const label = resolveNavLabel(caps, `groups.${groupKey}`, declaredText("chrome", group, "label"));
|
|
2626
2625
|
const href = navHrefFor(app.registry, groupKey, { isVisible });
|
|
2627
2626
|
items.push(jsx(CommandItem, {
|
|
2628
2627
|
value: `group:${idPath}:${label}`,
|
|
@@ -2676,7 +2675,7 @@ function CommandPaletteNavigationGroups({ onSelect, getTestId }) {
|
|
|
2676
2675
|
const groupKey = canonicalNavKey(group);
|
|
2677
2676
|
const items = collectGroupItems(group, groupKey, 0);
|
|
2678
2677
|
if (items.length === 0) continue;
|
|
2679
|
-
const heading = resolveNavLabel(caps, `groups.${groupKey}`, group
|
|
2678
|
+
const heading = resolveNavLabel(caps, `groups.${groupKey}`, declaredText("chrome", group, "label"));
|
|
2680
2679
|
groups.push(jsx(CommandGroup, {
|
|
2681
2680
|
heading,
|
|
2682
2681
|
children: items
|
|
@@ -2848,6 +2847,7 @@ function PerResourceSearchHits({ def, displayField, query, pageSize, goTo, recor
|
|
|
2848
2847
|
page: 1,
|
|
2849
2848
|
pageSize
|
|
2850
2849
|
},
|
|
2850
|
+
scope: "session",
|
|
2851
2851
|
enabled: shouldFetch
|
|
2852
2852
|
});
|
|
2853
2853
|
const report = useCommandPaletteResults(`records:${resource}`);
|
|
@@ -3219,7 +3219,6 @@ function localizedSchema(t) {
|
|
|
3219
3219
|
function LoginForm({ onSubmit, title, description, className }) {
|
|
3220
3220
|
const tid = useTestIds();
|
|
3221
3221
|
const t = useOptionalT();
|
|
3222
|
-
const locale = useLocale();
|
|
3223
3222
|
const resolvedTitle = title ?? t("auth.signIn", { defaultValue: "Sign in" });
|
|
3224
3223
|
const { register, handleSubmit, formState: { errors, isSubmitting } } = useForm({
|
|
3225
3224
|
resolver: zodResolver(localizedSchema(t)),
|
|
@@ -3235,7 +3234,7 @@ function LoginForm({ onSubmit, title, description, className }) {
|
|
|
3235
3234
|
await onSubmit(values);
|
|
3236
3235
|
} catch (e) {
|
|
3237
3236
|
const raw = e instanceof Error ? e.message : String(e);
|
|
3238
|
-
const friendly = toFriendlyError(raw, "",
|
|
3237
|
+
const friendly = toFriendlyError(raw, "", friendlyStringsFrom(t));
|
|
3239
3238
|
setSubmitError(friendly.replaced ? `${friendly.title}. ${friendly.detail}` : credentialsMessage(raw, t));
|
|
3240
3239
|
}
|
|
3241
3240
|
});
|
|
@@ -3427,7 +3426,7 @@ function EnumPicker({ enumName, value, onChange, renderAs = "select", name, id,
|
|
|
3427
3426
|
...ariaErrorMessage ? { "aria-errormessage": ariaErrorMessage } : {},
|
|
3428
3427
|
"data-testid": `${tid}:option:${entry.value}`,
|
|
3429
3428
|
className: "h-4 w-4"
|
|
3430
|
-
}), jsx("span", { children: resolveEnumLabel(caps, ns, entry.value, entry.label) })]
|
|
3429
|
+
}), jsx("span", { children: resolveEnumLabel(caps, ns, entry.value, enumValueText(def, entry.value) ?? entry.label) })]
|
|
3431
3430
|
}, entry.value);
|
|
3432
3431
|
})
|
|
3433
3432
|
});
|
|
@@ -3448,7 +3447,7 @@ function EnumPicker({ enumName, value, onChange, renderAs = "select", name, id,
|
|
|
3448
3447
|
disabled,
|
|
3449
3448
|
onClick: () => onChange(entry.value),
|
|
3450
3449
|
className: cn("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all", "data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-xs", "disabled:pointer-events-none disabled:opacity-50", "focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring"),
|
|
3451
|
-
children: resolveEnumLabel(caps, ns, entry.value, entry.label)
|
|
3450
|
+
children: resolveEnumLabel(caps, ns, entry.value, enumValueText(def, entry.value) ?? entry.label)
|
|
3452
3451
|
}, entry.value);
|
|
3453
3452
|
})
|
|
3454
3453
|
});
|
|
@@ -3480,7 +3479,7 @@ function EnumPicker({ enumName, value, onChange, renderAs = "select", name, id,
|
|
|
3480
3479
|
"data-testid": `${tid}:option:__clear__`,
|
|
3481
3480
|
children: clearLabel
|
|
3482
3481
|
}), values.map((entry) => {
|
|
3483
|
-
const optionLabel = resolveEnumLabel(caps, ns, entry.value, entry.label);
|
|
3482
|
+
const optionLabel = resolveEnumLabel(caps, ns, entry.value, enumValueText(def, entry.value) ?? entry.label);
|
|
3484
3483
|
const optionDoc = resolveDoc(caps, `enum/${ns}/${entry.value}`)?.summary;
|
|
3485
3484
|
return jsx(SelectItem, {
|
|
3486
3485
|
value: entry.value,
|
|
@@ -3570,20 +3569,28 @@ function DateInput({ name, id, value, onChange, testid, disabled, required, aria
|
|
|
3570
3569
|
function optionLabel(caps, field, value, inline) {
|
|
3571
3570
|
const ns = enumNamespaceOf(field);
|
|
3572
3571
|
if (ns) return resolveEnumLabel(caps, ns, value, inline);
|
|
3573
|
-
return field ?
|
|
3572
|
+
return field ? resolveFieldOptionLabel(caps, field.name, value, inline) : inline;
|
|
3573
|
+
}
|
|
3574
|
+
function declaredOptionLabel(option, value, enumDef) {
|
|
3575
|
+
return (enumDef === void 0 ? void 0 : enumValueText(enumDef, value)) ?? (typeof option?.label === "string" ? option.label : value);
|
|
3576
|
+
}
|
|
3577
|
+
function useBoundEnum(field) {
|
|
3578
|
+
const app = useOptionalApp();
|
|
3579
|
+
const namespace = enumNamespaceOf(field);
|
|
3580
|
+
return namespace === void 0 ? void 0 : app?.registry.enums.get(namespace);
|
|
3574
3581
|
}
|
|
3575
3582
|
function useOptionCaps(resource) {
|
|
3576
3583
|
return useI18nCaps(useContext(ResourceContext).resource ?? resource);
|
|
3577
3584
|
}
|
|
3578
3585
|
function EnumDisplay({ value, options, field, resource }) {
|
|
3579
3586
|
const caps = useOptionCaps(resource);
|
|
3587
|
+
const enumDef = useBoundEnum(field);
|
|
3580
3588
|
if (value == null || value === "") return jsx("span", {
|
|
3581
3589
|
className: "text-muted-foreground",
|
|
3582
3590
|
children: "—"
|
|
3583
3591
|
});
|
|
3584
3592
|
const opt = options?.find((o) => o.value === String(value));
|
|
3585
|
-
const
|
|
3586
|
-
const label = optionLabel(caps, field, String(value), inline);
|
|
3593
|
+
const label = optionLabel(caps, field, String(value), declaredOptionLabel(opt, String(value), enumDef));
|
|
3587
3594
|
return jsxs("span", {
|
|
3588
3595
|
className: "inline-flex items-center gap-1",
|
|
3589
3596
|
children: [opt?.icon ? jsx(Icon, {
|
|
@@ -3595,6 +3602,7 @@ function EnumDisplay({ value, options, field, resource }) {
|
|
|
3595
3602
|
function EnumInput({ name, id, value, onChange, testid, options, field, placeholder, disabled, required, ariaInvalid, ariaDescribedBy, ariaErrorMessage, resource }) {
|
|
3596
3603
|
const t = useOptionalT();
|
|
3597
3604
|
const caps = useOptionCaps(resource);
|
|
3605
|
+
const enumDef = useBoundEnum(field);
|
|
3598
3606
|
return jsxs(Select, {
|
|
3599
3607
|
value: value ?? "",
|
|
3600
3608
|
onValueChange: onChange,
|
|
@@ -3616,7 +3624,7 @@ function EnumInput({ name, id, value, onChange, testid, options, field, placehol
|
|
|
3616
3624
|
children: [o.icon ? jsx(Icon, {
|
|
3617
3625
|
name: o.icon,
|
|
3618
3626
|
className: "size-3.5 shrink-0 text-muted-foreground"
|
|
3619
|
-
}) : null, optionLabel(caps, field, o.value,
|
|
3627
|
+
}) : null, optionLabel(caps, field, o.value, declaredOptionLabel(o, o.value, enumDef))]
|
|
3620
3628
|
})
|
|
3621
3629
|
}, o.value)) })]
|
|
3622
3630
|
});
|
|
@@ -3989,6 +3997,7 @@ function JsonDisplay({ value, presentation, testid }) {
|
|
|
3989
3997
|
});
|
|
3990
3998
|
}
|
|
3991
3999
|
function JsonInput({ name, id, value, onChange, testid, disabled, required, ariaInvalid, ariaDescribedBy, ariaErrorMessage }) {
|
|
4000
|
+
const t = useOptionalT();
|
|
3992
4001
|
const seed = React.useMemo(() => {
|
|
3993
4002
|
if (value == null || value === "") return "";
|
|
3994
4003
|
return toDisplayText(value).text;
|
|
@@ -4032,13 +4041,13 @@ function JsonInput({ name, id, value, onChange, testid, disabled, required, aria
|
|
|
4032
4041
|
}), invalid && jsx("p", {
|
|
4033
4042
|
className: "text-[13px] leading-snug text-destructive",
|
|
4034
4043
|
"data-testid": `${testid}-json-error`,
|
|
4035
|
-
children: "
|
|
4044
|
+
children: t("field.jsonInvalid", { defaultValue: "Invalid JSON. Changes will not be saved until it is valid." })
|
|
4036
4045
|
})]
|
|
4037
4046
|
});
|
|
4038
4047
|
}
|
|
4039
4048
|
//#endregion
|
|
4040
4049
|
//#region src/fields/lazy-relation-many.tsx
|
|
4041
|
-
const RelationManyPickerInput = lazy(() => import("./relation-many-picker-
|
|
4050
|
+
const RelationManyPickerInput = lazy(() => import("./relation-many-picker-bvkjkv-k.js").then((module) => ({ default: module.RelationManyPickerInput })));
|
|
4042
4051
|
function LazyRelationManyInput(props) {
|
|
4043
4052
|
return jsx(Suspense, {
|
|
4044
4053
|
fallback: jsx(Skeleton, {
|
|
@@ -4149,6 +4158,192 @@ function NumberInput({ name, id, value, onChange, testid, placeholder, disabled,
|
|
|
4149
4158
|
});
|
|
4150
4159
|
}
|
|
4151
4160
|
//#endregion
|
|
4161
|
+
//#region src/fields/link-keys-display.tsx
|
|
4162
|
+
const isRecord$1 = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
4163
|
+
function qualify(name, owner) {
|
|
4164
|
+
try {
|
|
4165
|
+
const namespace = normalizeEntityRef(owner).namespace;
|
|
4166
|
+
const ref = normalizeEntityRef(name, { defaultNamespace: namespace });
|
|
4167
|
+
return ref.namespace === "default" ? ref.id : `${ref.namespace}:${ref.id}`;
|
|
4168
|
+
} catch {
|
|
4169
|
+
return;
|
|
4170
|
+
}
|
|
4171
|
+
}
|
|
4172
|
+
function idFieldOf(def) {
|
|
4173
|
+
const declared = (def?.data)?.idField;
|
|
4174
|
+
return typeof declared === "string" && declared.length > 0 ? declared : "id";
|
|
4175
|
+
}
|
|
4176
|
+
function byOf(field) {
|
|
4177
|
+
const by = isRecord$1(field) && isRecord$1(field.meta) ? field.meta.by : void 0;
|
|
4178
|
+
return typeof by === "string" && by.length > 0 ? by : void 0;
|
|
4179
|
+
}
|
|
4180
|
+
const chipClassName = "inline-flex items-center rounded-md border border-border bg-muted/40 px-1.5 py-0.5 text-xs";
|
|
4181
|
+
function LinkKeysDisplay(props) {
|
|
4182
|
+
const { field, record } = props;
|
|
4183
|
+
const owner = props.owner ?? props.resource ?? "";
|
|
4184
|
+
const name = field?.name ?? "";
|
|
4185
|
+
const app = useApp();
|
|
4186
|
+
const t = useOptionalT();
|
|
4187
|
+
const tid = useTestIds();
|
|
4188
|
+
const ownerDef = owner === "" ? void 0 : app.registry.get(owner);
|
|
4189
|
+
const declaration = ownerDef === void 0 ? void 0 : declaredField(ownerDef, name);
|
|
4190
|
+
const link = isRecord$1(declaration) ? linkOf(declaration) : void 0;
|
|
4191
|
+
const junctionName = link === void 0 ? void 0 : qualify(link.junction, owner);
|
|
4192
|
+
const junctionDef = junctionName === void 0 ? void 0 : app.registry.get(junctionName);
|
|
4193
|
+
const junctionField = (key) => junctionDef === void 0 ? void 0 : declaredField(junctionDef, key);
|
|
4194
|
+
const ownerField = link === void 0 ? idFieldOf(ownerDef) : byOf(junctionField(link.sourceKey)) ?? idFieldOf(ownerDef);
|
|
4195
|
+
const targetBy = link === void 0 ? void 0 : byOf(junctionField(link.targetKey));
|
|
4196
|
+
const ownerKey = record?.[ownerField];
|
|
4197
|
+
const { keys, complete, isLoading, error } = useLinkKeys(owner, name, ownerKey);
|
|
4198
|
+
const [missed, setMissed] = useState(() => new Set());
|
|
4199
|
+
const onMiss = useCallback((key, miss) => {
|
|
4200
|
+
setMissed((current) => {
|
|
4201
|
+
if (current.has(key) === miss) return current;
|
|
4202
|
+
const next = new Set(current);
|
|
4203
|
+
if (miss) next.add(key);
|
|
4204
|
+
else next.delete(key);
|
|
4205
|
+
return next;
|
|
4206
|
+
});
|
|
4207
|
+
}, []);
|
|
4208
|
+
const target = (isRecord$1(declaration) && isRecord$1(declaration.meta) ? declaration.meta.to : void 0) ?? field?.meta?.to;
|
|
4209
|
+
const chipField = useMemo(() => ({
|
|
4210
|
+
name,
|
|
4211
|
+
meta: {
|
|
4212
|
+
...target === void 0 ? {} : { to: target },
|
|
4213
|
+
...targetBy === void 0 ? {} : { by: targetBy }
|
|
4214
|
+
},
|
|
4215
|
+
...field?.ui === void 0 ? {} : { ui: field.ui }
|
|
4216
|
+
}), [
|
|
4217
|
+
name,
|
|
4218
|
+
target,
|
|
4219
|
+
field?.ui,
|
|
4220
|
+
targetBy
|
|
4221
|
+
]);
|
|
4222
|
+
const chipsId = tid.linkChips(owner, name);
|
|
4223
|
+
if (error) return jsx("span", {
|
|
4224
|
+
"data-testid": tid.linkError(owner, name),
|
|
4225
|
+
role: "status",
|
|
4226
|
+
className: "text-destructive text-xs",
|
|
4227
|
+
title: error.message,
|
|
4228
|
+
children: t("fields.link.failed", { defaultValue: "Links could not be loaded" })
|
|
4229
|
+
});
|
|
4230
|
+
if (keys === void 0) {
|
|
4231
|
+
if (!isLoading) return jsx("span", {
|
|
4232
|
+
"data-testid": "relation-many-display:empty",
|
|
4233
|
+
className: "text-muted-foreground",
|
|
4234
|
+
children: "—"
|
|
4235
|
+
});
|
|
4236
|
+
return jsx("span", {
|
|
4237
|
+
"data-testid": `${chipsId}:loading`,
|
|
4238
|
+
className: "inline-block h-5 w-20 animate-pulse rounded bg-muted",
|
|
4239
|
+
"aria-busy": "true"
|
|
4240
|
+
});
|
|
4241
|
+
}
|
|
4242
|
+
if (!complete) return jsx("span", {
|
|
4243
|
+
"data-testid": chipsId,
|
|
4244
|
+
className: "inline-flex flex-wrap gap-1",
|
|
4245
|
+
children: jsx("span", {
|
|
4246
|
+
"data-testid": tid.linkIncomplete(owner, name),
|
|
4247
|
+
className: "text-muted-foreground",
|
|
4248
|
+
children: t("fields.link.incomplete", {
|
|
4249
|
+
count: keys.length,
|
|
4250
|
+
defaultValue: "More than {{count}} links"
|
|
4251
|
+
})
|
|
4252
|
+
})
|
|
4253
|
+
});
|
|
4254
|
+
if (keys.length === 0) return jsx("span", {
|
|
4255
|
+
"data-testid": "relation-many-display:empty",
|
|
4256
|
+
className: "text-muted-foreground",
|
|
4257
|
+
children: "—"
|
|
4258
|
+
});
|
|
4259
|
+
const hidden = keys.filter((key) => missed.has(String(key))).length;
|
|
4260
|
+
return jsxs("span", {
|
|
4261
|
+
"data-testid": chipsId,
|
|
4262
|
+
className: "inline-flex flex-wrap gap-1",
|
|
4263
|
+
children: [keys.map((key) => jsx(LinkChip, {
|
|
4264
|
+
value: key,
|
|
4265
|
+
field: chipField,
|
|
4266
|
+
onMiss
|
|
4267
|
+
}, String(key))), hidden > 0 ? jsx("span", {
|
|
4268
|
+
"data-testid": tid.linkHidden(owner, name),
|
|
4269
|
+
className: `${chipClassName} text-muted-foreground`,
|
|
4270
|
+
children: t("fields.link.hidden", {
|
|
4271
|
+
count: hidden,
|
|
4272
|
+
defaultValue: "{{count}} not visible"
|
|
4273
|
+
})
|
|
4274
|
+
}) : null]
|
|
4275
|
+
});
|
|
4276
|
+
}
|
|
4277
|
+
function LinkChip({ value, field, onMiss }) {
|
|
4278
|
+
const gate = useEntryGate();
|
|
4279
|
+
const meta = field.meta;
|
|
4280
|
+
let to;
|
|
4281
|
+
try {
|
|
4282
|
+
to = meta?.to === void 0 ? void 0 : resourceKey(meta.to);
|
|
4283
|
+
} catch {
|
|
4284
|
+
to = void 0;
|
|
4285
|
+
}
|
|
4286
|
+
const answer = to === void 0 ? void 0 : gate(to, "show");
|
|
4287
|
+
if (!(to !== void 0 && answer !== void 0 && answer.state !== "undecided" && answer.state !== "hidden" && answer.state !== "disabled")) return jsx("span", {
|
|
4288
|
+
className: chipClassName,
|
|
4289
|
+
children: jsx(RelationDisplay, {
|
|
4290
|
+
value,
|
|
4291
|
+
field
|
|
4292
|
+
})
|
|
4293
|
+
});
|
|
4294
|
+
return jsx(ReadChip, {
|
|
4295
|
+
to,
|
|
4296
|
+
value,
|
|
4297
|
+
field,
|
|
4298
|
+
onMiss
|
|
4299
|
+
});
|
|
4300
|
+
}
|
|
4301
|
+
function ReadChip({ to, value, field, onMiss }) {
|
|
4302
|
+
const app = useApp();
|
|
4303
|
+
const by = field.meta?.by;
|
|
4304
|
+
const { record, isLoading, error, ambiguous } = useRelatedRecord(to, value, typeof by === "string" ? { by } : void 0);
|
|
4305
|
+
const miss = app.registry.get(to) !== void 0 && !isLoading && !error && !ambiguous && !record;
|
|
4306
|
+
const key = String(value);
|
|
4307
|
+
useEffect(() => {
|
|
4308
|
+
onMiss(key, miss);
|
|
4309
|
+
}, [
|
|
4310
|
+
onMiss,
|
|
4311
|
+
key,
|
|
4312
|
+
miss
|
|
4313
|
+
]);
|
|
4314
|
+
useEffect(() => () => onMiss(key, false), [onMiss, key]);
|
|
4315
|
+
if (miss) return null;
|
|
4316
|
+
return jsx("span", {
|
|
4317
|
+
className: chipClassName,
|
|
4318
|
+
children: jsx(RelationDisplay, {
|
|
4319
|
+
value,
|
|
4320
|
+
field
|
|
4321
|
+
})
|
|
4322
|
+
});
|
|
4323
|
+
}
|
|
4324
|
+
function RelationManyDisplay(props) {
|
|
4325
|
+
const app = useApp();
|
|
4326
|
+
const owner = props.owner ?? props.resource ?? "";
|
|
4327
|
+
const ownerDef = owner === "" ? void 0 : app.registry.get(owner);
|
|
4328
|
+
const declared = ownerDef === void 0 || props.field?.name === void 0 ? void 0 : declaredField(ownerDef, props.field.name);
|
|
4329
|
+
if (isRecord$1(declared) && linkOf(declared) !== void 0) return jsx(LinkKeysDisplay, { ...props });
|
|
4330
|
+
const { value, field } = props;
|
|
4331
|
+
const keys = Array.isArray(value) ? value : [];
|
|
4332
|
+
if (keys.length === 0) return jsx("span", {
|
|
4333
|
+
"data-testid": "relation-many-display:empty",
|
|
4334
|
+
className: "text-muted-foreground",
|
|
4335
|
+
children: "—"
|
|
4336
|
+
});
|
|
4337
|
+
return jsx("span", {
|
|
4338
|
+
className: "inline-flex flex-wrap gap-x-2",
|
|
4339
|
+
"data-testid": "relation-many-display",
|
|
4340
|
+
children: keys.map((key, index) => jsx(RelationDisplay, {
|
|
4341
|
+
value: key,
|
|
4342
|
+
field
|
|
4343
|
+
}, `${String(key)}:${index}`))
|
|
4344
|
+
});
|
|
4345
|
+
}
|
|
4346
|
+
//#endregion
|
|
4152
4347
|
//#region src/fields/relation-meta-schema.ts
|
|
4153
4348
|
const isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
4154
4349
|
const relationMetaSchema = Object.freeze({ "~standard": Object.freeze({
|
|
@@ -4280,20 +4475,28 @@ function TextareaInput({ name, id, value, onChange, testid, placeholder, disable
|
|
|
4280
4475
|
//#region src/fields/default-renderers.ts
|
|
4281
4476
|
function legacyField(props) {
|
|
4282
4477
|
const name = typeof props.path.at(-1) === "string" ? props.path.at(-1) : "field";
|
|
4478
|
+
const texts = props.field.texts;
|
|
4283
4479
|
return Object.freeze({
|
|
4284
4480
|
name,
|
|
4285
4481
|
meta: props.meta,
|
|
4286
4482
|
ui: props.ui,
|
|
4287
|
-
codec: props.field.codec
|
|
4483
|
+
codec: props.field.codec,
|
|
4484
|
+
...texts === void 0 ? {} : { texts }
|
|
4288
4485
|
});
|
|
4289
4486
|
}
|
|
4290
|
-
function legacyOptions(options) {
|
|
4487
|
+
function legacyOptions(options, field) {
|
|
4291
4488
|
if (options.length === 0) return void 0;
|
|
4292
|
-
return options.map((option) =>
|
|
4293
|
-
value
|
|
4294
|
-
|
|
4295
|
-
|
|
4296
|
-
|
|
4489
|
+
return options.map((option) => {
|
|
4490
|
+
const value = String(option.value ?? "");
|
|
4491
|
+
return Object.freeze({
|
|
4492
|
+
value,
|
|
4493
|
+
label: fieldOptionText(field, value) ?? value,
|
|
4494
|
+
...typeof option.meta?.icon === "string" ? { icon: option.meta.icon } : {}
|
|
4495
|
+
});
|
|
4496
|
+
});
|
|
4497
|
+
}
|
|
4498
|
+
function registryKey(ref) {
|
|
4499
|
+
return ref.namespace === "default" ? ref.id : formatEntityRef(ref);
|
|
4297
4500
|
}
|
|
4298
4501
|
function display(renderer) {
|
|
4299
4502
|
return function ShadcnDisplay(props) {
|
|
@@ -4301,8 +4504,9 @@ function display(renderer) {
|
|
|
4301
4504
|
value: props.value,
|
|
4302
4505
|
multiple: props.multiple,
|
|
4303
4506
|
field: legacyField(props),
|
|
4304
|
-
options: legacyOptions(props.options),
|
|
4507
|
+
options: legacyOptions(props.options, props.field),
|
|
4305
4508
|
resource: props.resource.id,
|
|
4509
|
+
owner: registryKey(props.resource),
|
|
4306
4510
|
record: props.record,
|
|
4307
4511
|
presentation: props.presentation,
|
|
4308
4512
|
testid: props.testIds.display
|
|
@@ -4327,7 +4531,7 @@ function input(renderer) {
|
|
|
4327
4531
|
multiple: props.multiple,
|
|
4328
4532
|
onChange: props.onChange ?? (() => void 0),
|
|
4329
4533
|
testid: props.testIds.input,
|
|
4330
|
-
options: legacyOptions(props.options),
|
|
4534
|
+
options: legacyOptions(props.options, props.field),
|
|
4331
4535
|
placeholder: typeof props.ui.placeholder === "string" ? props.ui.placeholder : void 0,
|
|
4332
4536
|
disabled: props.disabled,
|
|
4333
4537
|
required: props.field.required === true,
|
|
@@ -4501,6 +4705,313 @@ const shadcnFieldImplementations = Object.freeze({
|
|
|
4501
4705
|
file: scalarOrCollection(file, { size: "full" })
|
|
4502
4706
|
});
|
|
4503
4707
|
//#endregion
|
|
4708
|
+
//#region src/fields/use-relation-picker.tsx
|
|
4709
|
+
const noop = () => void 0;
|
|
4710
|
+
function safeKey(input) {
|
|
4711
|
+
if (input === void 0 || input === null) return void 0;
|
|
4712
|
+
try {
|
|
4713
|
+
return resourceKey(input);
|
|
4714
|
+
} catch {
|
|
4715
|
+
return;
|
|
4716
|
+
}
|
|
4717
|
+
}
|
|
4718
|
+
function sessionIdentity(runtime) {
|
|
4719
|
+
const state = runtime.dataSession.getState();
|
|
4720
|
+
const snapshot = state.status === "ready" ? state.snapshot : state.target;
|
|
4721
|
+
let scopeKey;
|
|
4722
|
+
try {
|
|
4723
|
+
scopeKey = JSON.stringify(snapshot.scopeKey) ?? "";
|
|
4724
|
+
} catch {
|
|
4725
|
+
scopeKey = String(snapshot.scopeKey);
|
|
4726
|
+
}
|
|
4727
|
+
return {
|
|
4728
|
+
sessionKey: snapshot.sessionKey,
|
|
4729
|
+
scopeKey
|
|
4730
|
+
};
|
|
4731
|
+
}
|
|
4732
|
+
function PickerHost(props) {
|
|
4733
|
+
const { register } = props;
|
|
4734
|
+
React.useEffect(() => register(), [register]);
|
|
4735
|
+
return jsx(Fragment$1, { children: props.children });
|
|
4736
|
+
}
|
|
4737
|
+
function useRelationPicker(options) {
|
|
4738
|
+
const app = useApp();
|
|
4739
|
+
const runtime = useDataRuntime();
|
|
4740
|
+
const frame = useOptionalRecordFrame();
|
|
4741
|
+
const frames = useRecordScopeFrames();
|
|
4742
|
+
const multiple = options.multiple === true;
|
|
4743
|
+
const fieldName = options.field;
|
|
4744
|
+
let to;
|
|
4745
|
+
let declaredBy;
|
|
4746
|
+
let declaredCandidates;
|
|
4747
|
+
if (fieldName !== void 0) {
|
|
4748
|
+
const meta = ((frame === null ? void 0 : app.registry.get(frame.resource)?.fields)?.[fieldName])?.meta;
|
|
4749
|
+
to = safeKey(meta?.to);
|
|
4750
|
+
declaredBy = typeof meta?.by === "string" ? meta.by : void 0;
|
|
4751
|
+
declaredCandidates = Array.isArray(meta?.candidates) ? meta.candidates : void 0;
|
|
4752
|
+
} else to = safeKey(options.to);
|
|
4753
|
+
const target = to ?? "";
|
|
4754
|
+
const by = options.valueField ?? declaredBy;
|
|
4755
|
+
const scope = options.scope ?? "context";
|
|
4756
|
+
const selection = useCandidateSelection({
|
|
4757
|
+
to,
|
|
4758
|
+
candidates: options.candidates ?? declaredCandidates,
|
|
4759
|
+
sources: frame?.controller.sources,
|
|
4760
|
+
resource: frame?.resource ?? "",
|
|
4761
|
+
fieldName: fieldName ?? target,
|
|
4762
|
+
fixedFilters: options.fixedFilters
|
|
4763
|
+
});
|
|
4764
|
+
const held = selection.gate !== void 0;
|
|
4765
|
+
const pendingRef = React.useRef(null);
|
|
4766
|
+
const [active, setActive] = React.useState(null);
|
|
4767
|
+
const activeRef = React.useRef(null);
|
|
4768
|
+
activeRef.current = active;
|
|
4769
|
+
const rowsRef = React.useRef(new Map());
|
|
4770
|
+
const createdRowRef = React.useRef(void 0);
|
|
4771
|
+
const alive = React.useRef(true);
|
|
4772
|
+
const mounts = React.useRef(0);
|
|
4773
|
+
const sequence = React.useRef(0);
|
|
4774
|
+
const latest = React.useRef({
|
|
4775
|
+
multiple,
|
|
4776
|
+
select: options.select,
|
|
4777
|
+
idField: "id",
|
|
4778
|
+
valueField: "id",
|
|
4779
|
+
available: false,
|
|
4780
|
+
frames
|
|
4781
|
+
});
|
|
4782
|
+
const project = React.useCallback((row) => {
|
|
4783
|
+
const select = latest.current.select;
|
|
4784
|
+
if (select === void 0) return { ...row };
|
|
4785
|
+
const out = {};
|
|
4786
|
+
const key = row.id !== void 0 ? row.id : row[latest.current.idField];
|
|
4787
|
+
if (key !== void 0) out.id = key;
|
|
4788
|
+
const { valueField } = latest.current;
|
|
4789
|
+
if (Object.hasOwn(row, valueField)) out[valueField] = row[valueField];
|
|
4790
|
+
for (const name of select) if (Object.hasOwn(row, name)) out[name] = row[name];
|
|
4791
|
+
return out;
|
|
4792
|
+
}, []);
|
|
4793
|
+
const settle = React.useCallback((result) => {
|
|
4794
|
+
const pending = pendingRef.current;
|
|
4795
|
+
if (pending === null) return;
|
|
4796
|
+
pendingRef.current = null;
|
|
4797
|
+
pending.detach();
|
|
4798
|
+
if (alive.current) setActive(null);
|
|
4799
|
+
pending.resolve(result);
|
|
4800
|
+
}, []);
|
|
4801
|
+
const toggle = React.useCallback((key, row) => {
|
|
4802
|
+
setActive((current) => {
|
|
4803
|
+
if (current === null) return current;
|
|
4804
|
+
const has = current.selected.some((k) => String(k) === String(key));
|
|
4805
|
+
if (has) rowsRef.current.delete(String(key));
|
|
4806
|
+
else if (row !== void 0) rowsRef.current.set(String(key), row);
|
|
4807
|
+
const selected = has ? current.selected.filter((k) => String(k) !== String(key)) : [...current.selected, key];
|
|
4808
|
+
const next = {
|
|
4809
|
+
...current,
|
|
4810
|
+
selected
|
|
4811
|
+
};
|
|
4812
|
+
activeRef.current = next;
|
|
4813
|
+
return next;
|
|
4814
|
+
});
|
|
4815
|
+
}, []);
|
|
4816
|
+
const onValue = React.useCallback((value) => {
|
|
4817
|
+
const row = createdRowRef.current;
|
|
4818
|
+
createdRowRef.current = void 0;
|
|
4819
|
+
if (latest.current.multiple) {
|
|
4820
|
+
const current = activeRef.current;
|
|
4821
|
+
if (current !== null && !current.selected.some((k) => String(k) === String(value))) toggle(value, row);
|
|
4822
|
+
return;
|
|
4823
|
+
}
|
|
4824
|
+
settle({
|
|
4825
|
+
kind: "selected",
|
|
4826
|
+
keys: [value],
|
|
4827
|
+
rows: row === void 0 ? [] : [project(row)]
|
|
4828
|
+
});
|
|
4829
|
+
}, [
|
|
4830
|
+
project,
|
|
4831
|
+
settle,
|
|
4832
|
+
toggle
|
|
4833
|
+
]);
|
|
4834
|
+
const wiring = useRelationSelect({
|
|
4835
|
+
to: target,
|
|
4836
|
+
by,
|
|
4837
|
+
fixedFilters: selection.fixedFilters,
|
|
4838
|
+
scope,
|
|
4839
|
+
...fieldName === void 0 ? {} : { scopeField: fieldName },
|
|
4840
|
+
held,
|
|
4841
|
+
onValue
|
|
4842
|
+
});
|
|
4843
|
+
latest.current = {
|
|
4844
|
+
multiple,
|
|
4845
|
+
select: options.select,
|
|
4846
|
+
idField: wiring.idField,
|
|
4847
|
+
valueField: wiring.valueField,
|
|
4848
|
+
available: to !== void 0 && wiring.targetDef !== void 0 && !held,
|
|
4849
|
+
frames
|
|
4850
|
+
};
|
|
4851
|
+
const { create: shared } = wiring;
|
|
4852
|
+
const create = React.useMemo(() => ({
|
|
4853
|
+
...shared,
|
|
4854
|
+
start: (openCreate) => shared.start(() => {
|
|
4855
|
+
const opened = openCreate();
|
|
4856
|
+
opened.then((row) => {
|
|
4857
|
+
createdRowRef.current = row === null ? void 0 : { ...row };
|
|
4858
|
+
}, noop);
|
|
4859
|
+
return opened;
|
|
4860
|
+
})
|
|
4861
|
+
}), [shared]);
|
|
4862
|
+
React.useEffect(() => runtime.dataSession.subscribe(() => {
|
|
4863
|
+
const pending = pendingRef.current;
|
|
4864
|
+
if (pending === null) return;
|
|
4865
|
+
const now = sessionIdentity(runtime);
|
|
4866
|
+
if (now.sessionKey !== pending.sessionKey || now.scopeKey !== pending.scopeKey) settle({
|
|
4867
|
+
kind: "cancelled",
|
|
4868
|
+
reason: "session-changed"
|
|
4869
|
+
});
|
|
4870
|
+
}), [runtime, settle]);
|
|
4871
|
+
React.useEffect(() => {
|
|
4872
|
+
alive.current = true;
|
|
4873
|
+
return () => {
|
|
4874
|
+
alive.current = false;
|
|
4875
|
+
settle({
|
|
4876
|
+
kind: "cancelled",
|
|
4877
|
+
reason: "unmounted"
|
|
4878
|
+
});
|
|
4879
|
+
};
|
|
4880
|
+
}, [settle]);
|
|
4881
|
+
React.useEffect(() => {
|
|
4882
|
+
if (held) settle({
|
|
4883
|
+
kind: "cancelled",
|
|
4884
|
+
reason: "unavailable"
|
|
4885
|
+
});
|
|
4886
|
+
}, [held, settle]);
|
|
4887
|
+
const register = React.useCallback(() => {
|
|
4888
|
+
mounts.current += 1;
|
|
4889
|
+
return () => {
|
|
4890
|
+
mounts.current -= 1;
|
|
4891
|
+
if (mounts.current === 0) settle({
|
|
4892
|
+
kind: "cancelled",
|
|
4893
|
+
reason: "unmounted"
|
|
4894
|
+
});
|
|
4895
|
+
};
|
|
4896
|
+
}, [settle]);
|
|
4897
|
+
const open = React.useCallback((opts = {}) => new Promise((resolve) => {
|
|
4898
|
+
settle({
|
|
4899
|
+
kind: "cancelled",
|
|
4900
|
+
reason: "superseded"
|
|
4901
|
+
});
|
|
4902
|
+
if (mounts.current === 0) {
|
|
4903
|
+
if (process.env.NODE_ENV !== "production") console.error("[burojs] useRelationPicker: open() was called but its element is not rendered — render `handle.element` once in your tree.");
|
|
4904
|
+
resolve({
|
|
4905
|
+
kind: "cancelled",
|
|
4906
|
+
reason: "not-mounted"
|
|
4907
|
+
});
|
|
4908
|
+
return;
|
|
4909
|
+
}
|
|
4910
|
+
const { signal } = opts;
|
|
4911
|
+
if (signal?.aborted === true) {
|
|
4912
|
+
resolve({
|
|
4913
|
+
kind: "cancelled",
|
|
4914
|
+
reason: "aborted"
|
|
4915
|
+
});
|
|
4916
|
+
return;
|
|
4917
|
+
}
|
|
4918
|
+
if (!latest.current.available) {
|
|
4919
|
+
resolve({
|
|
4920
|
+
kind: "cancelled",
|
|
4921
|
+
reason: "unavailable"
|
|
4922
|
+
});
|
|
4923
|
+
return;
|
|
4924
|
+
}
|
|
4925
|
+
sequence.current += 1;
|
|
4926
|
+
const id = sequence.current;
|
|
4927
|
+
const onAbort = () => {
|
|
4928
|
+
if (pendingRef.current?.id === id) settle({
|
|
4929
|
+
kind: "cancelled",
|
|
4930
|
+
reason: "aborted"
|
|
4931
|
+
});
|
|
4932
|
+
};
|
|
4933
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
4934
|
+
pendingRef.current = {
|
|
4935
|
+
id,
|
|
4936
|
+
...sessionIdentity(runtime),
|
|
4937
|
+
resolve,
|
|
4938
|
+
detach: () => signal?.removeEventListener("abort", onAbort)
|
|
4939
|
+
};
|
|
4940
|
+
rowsRef.current = new Map();
|
|
4941
|
+
createdRowRef.current = void 0;
|
|
4942
|
+
const next = {
|
|
4943
|
+
id,
|
|
4944
|
+
frames: latest.current.frames,
|
|
4945
|
+
selected: opts.selected ?? []
|
|
4946
|
+
};
|
|
4947
|
+
activeRef.current = next;
|
|
4948
|
+
setActive(next);
|
|
4949
|
+
}), [runtime, settle]);
|
|
4950
|
+
const onSelectRow = React.useCallback((row) => {
|
|
4951
|
+
const field = wiring.valueField;
|
|
4952
|
+
const value = field === "id" ? row.id : row[field];
|
|
4953
|
+
if (typeof value !== "string" && typeof value !== "number") return;
|
|
4954
|
+
settle({
|
|
4955
|
+
kind: "selected",
|
|
4956
|
+
keys: [value],
|
|
4957
|
+
rows: [project(row)]
|
|
4958
|
+
});
|
|
4959
|
+
}, [
|
|
4960
|
+
wiring.valueField,
|
|
4961
|
+
settle,
|
|
4962
|
+
project
|
|
4963
|
+
]);
|
|
4964
|
+
const onDone = React.useCallback(() => {
|
|
4965
|
+
const keys = activeRef.current?.selected ?? [];
|
|
4966
|
+
const rows = keys.flatMap((key) => {
|
|
4967
|
+
const row = rowsRef.current.get(String(key));
|
|
4968
|
+
return row === void 0 ? [] : [project(row)];
|
|
4969
|
+
});
|
|
4970
|
+
settle({
|
|
4971
|
+
kind: "selected",
|
|
4972
|
+
keys,
|
|
4973
|
+
rows
|
|
4974
|
+
});
|
|
4975
|
+
}, [settle, project]);
|
|
4976
|
+
const onOpenChange = React.useCallback((next) => {
|
|
4977
|
+
if (!next) settle({
|
|
4978
|
+
kind: "cancelled",
|
|
4979
|
+
reason: "dismissed"
|
|
4980
|
+
});
|
|
4981
|
+
}, [settle]);
|
|
4982
|
+
return {
|
|
4983
|
+
open,
|
|
4984
|
+
element: jsx(PickerHost, {
|
|
4985
|
+
register,
|
|
4986
|
+
children: active === null || held ? null : jsxs(RecordScopeChain, {
|
|
4987
|
+
frames: active.frames,
|
|
4988
|
+
children: [jsx(LazyRelationPickerDialog, {
|
|
4989
|
+
to: target,
|
|
4990
|
+
open: true,
|
|
4991
|
+
onOpenChange,
|
|
4992
|
+
onSelect: noop,
|
|
4993
|
+
onSelectRow,
|
|
4994
|
+
valueField: wiring.valueField,
|
|
4995
|
+
...selection.fixedFilters === void 0 ? {} : { fixedFilters: selection.fixedFilters },
|
|
4996
|
+
scope,
|
|
4997
|
+
...fieldName === void 0 ? {} : { scopeField: fieldName },
|
|
4998
|
+
...options.create === void 0 ? {} : {
|
|
4999
|
+
create,
|
|
5000
|
+
...options.create.seeds === void 0 ? {} : { createSeeds: options.create.seeds }
|
|
5001
|
+
},
|
|
5002
|
+
fieldName: fieldName ?? target,
|
|
5003
|
+
...multiple ? {
|
|
5004
|
+
multiple: true,
|
|
5005
|
+
selected: active.selected,
|
|
5006
|
+
onToggle: (value, row) => toggle(value, row),
|
|
5007
|
+
onDone
|
|
5008
|
+
} : {}
|
|
5009
|
+
}), wiring.reader]
|
|
5010
|
+
}, active.id)
|
|
5011
|
+
})
|
|
5012
|
+
};
|
|
5013
|
+
}
|
|
5014
|
+
//#endregion
|
|
4504
5015
|
//#region src/forms/declarative-display.tsx
|
|
4505
5016
|
function DeclarativeDisplay(props) {
|
|
4506
5017
|
return jsx(ScreenStateProvider, { children: jsx(DisplayBody, { ...props }) });
|
|
@@ -4556,7 +5067,7 @@ function EnumDisplay$1({ enumName, value, variant = "badge", testid, className }
|
|
|
4556
5067
|
children: value
|
|
4557
5068
|
});
|
|
4558
5069
|
const entry = values?.find((v) => v.value === value);
|
|
4559
|
-
const label = entry === void 0 && def?.fallback ? resolveContentSlot(caps, [enumFallbackKey(ns)], { default: def
|
|
5070
|
+
const label = entry === void 0 && (def?.fallback !== void 0 || enumFallbackText(def) !== void 0) ? resolveContentSlot(caps, [enumFallbackKey(ns)], { default: enumFallbackText(def) }) ?? value : resolveEnumLabel(caps, ns, value, enumValueText(def, value) ?? entry?.label);
|
|
4560
5071
|
const icon = entry?.icon;
|
|
4561
5072
|
if (variant === "icon-label") return jsxs("span", {
|
|
4562
5073
|
"data-testid": id,
|
|
@@ -4876,7 +5387,11 @@ const OPERATOR_LABELS = {
|
|
|
4876
5387
|
null: "is null",
|
|
4877
5388
|
nnull: "is not null",
|
|
4878
5389
|
startswith: "starts with",
|
|
4879
|
-
endswith: "ends with"
|
|
5390
|
+
endswith: "ends with",
|
|
5391
|
+
has: "has",
|
|
5392
|
+
hasAny: "has any of",
|
|
5393
|
+
hasAll: "has all of",
|
|
5394
|
+
hasNone: "has none of"
|
|
4880
5395
|
};
|
|
4881
5396
|
function formatOperatorLabel(op, t) {
|
|
4882
5397
|
return t ? t(`filters.operators.${op}`, { defaultValue: OPERATOR_LABELS[op] }) : OPERATOR_LABELS[op];
|
|
@@ -5198,6 +5713,7 @@ function PeekByKey({ target, by }) {
|
|
|
5198
5713
|
page: 1,
|
|
5199
5714
|
pageSize: 2
|
|
5200
5715
|
},
|
|
5716
|
+
scope: "none",
|
|
5201
5717
|
enabled: by.key !== "",
|
|
5202
5718
|
retry: false
|
|
5203
5719
|
});
|
|
@@ -5521,7 +6037,7 @@ function DefaultPeekBody({ target, testid, row, open }) {
|
|
|
5521
6037
|
className: "flex min-w-0 items-baseline gap-2 text-sm",
|
|
5522
6038
|
children: [jsx("dt", {
|
|
5523
6039
|
className: "w-24 shrink-0 truncate text-xs text-muted-foreground",
|
|
5524
|
-
children: resolveFieldLabel(caps, name, field
|
|
6040
|
+
children: resolveFieldLabel(caps, name, declaredText("field", field, "label"))
|
|
5525
6041
|
}), jsx("dd", {
|
|
5526
6042
|
className: "min-w-0 break-words",
|
|
5527
6043
|
children: jsx(ResolvedFieldDisplay, {
|
|
@@ -5542,6 +6058,12 @@ function DefaultPeekBody({ target, testid, row, open }) {
|
|
|
5542
6058
|
//#region src/quick/quick-body.tsx
|
|
5543
6059
|
const EMPTY_ROUTE = Object.freeze({});
|
|
5544
6060
|
function QuickBody({ entry }) {
|
|
6061
|
+
return jsx(RecordScopeChain, {
|
|
6062
|
+
frames: entry.scopeFrames ?? NO_RECORD_SCOPE_FRAMES,
|
|
6063
|
+
children: jsx(QuickBodyOf, { entry })
|
|
6064
|
+
});
|
|
6065
|
+
}
|
|
6066
|
+
function QuickBodyOf({ entry }) {
|
|
5545
6067
|
if (entry.mode === "create") return jsx(QuickScreenOf, {
|
|
5546
6068
|
entry,
|
|
5547
6069
|
route: EMPTY_ROUTE
|
|
@@ -6361,6 +6883,6 @@ function ScopeSwitcher({ options, value, onChange, label, extra, placeholder })
|
|
|
6361
6883
|
const PACKAGE_NAME = "@burojs/ui-shadcn";
|
|
6362
6884
|
const PACKAGE_VERSION = "0.0.0";
|
|
6363
6885
|
//#endregion
|
|
6364
|
-
export { ActionButton, ActionOverflow, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AppActions, AppFlowButton, AppHeader, AppLayout, AppShell, AppSidebar, AuthPage, Avatar, AvatarFallback, AvatarImage, Badge, BooleanDisplay, BooleanInput, BrandMark, Breadcrumbs, BulkActionToolbar, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CheckConfirmDialog, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, ColumnsToggle, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandLoading, CommandPalette, CommandPaletteActionsGroup, CommandPaletteCreateGroup, CommandPaletteDocsGroup, CommandPaletteNavigationGroups, CommandPaletteRecentGroup, CommandPaletteRecordsGroup, CommandPaletteTrigger, CommandSeparator, ContextPicker, CopyId, CreateButton, CursorLoadMore,
|
|
6886
|
+
export { ActionButton, ActionOverflow, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AppActions, AppFlowButton, AppHeader, AppLayout, AppShell, AppSidebar, AuthPage, Avatar, AvatarFallback, AvatarImage, Badge, BooleanDisplay, BooleanInput, BrandMark, Breadcrumbs, BulkActionToolbar, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CheckConfirmDialog, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, ColumnsToggle, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandLoading, CommandPalette, CommandPaletteActionsGroup, CommandPaletteCreateGroup, CommandPaletteDocsGroup, CommandPaletteNavigationGroups, CommandPaletteRecentGroup, CommandPaletteRecordsGroup, CommandPaletteTrigger, CommandSeparator, ContextPicker, CopyId, CreateButton, CursorLoadMore, DEFAULT_LANGUAGE_STORAGE_KEY, DataTable, DataTableDateRangeFilter, DataTableEnumFilter, DataTableFacetedFilter, DataTableNumRangeFilter, DataTableOperatorFilter, DataTableRowActions, DataTableTextFilter, DataTableToolbar, DataTableViewOptions, DateDisplay, DateInput, DeclarativeDisplay, DeclarativeForm, DefaultCommandPalette, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogPresentationHost, DialogPresentationShell, DialogTitle, DialogTrigger, DisabledAction, DocBrowser, DocInfo, DocPanel, DocTrailHelp, DocumentTitleProvider, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, ENUM_PICKER_CLEAR_SENTINEL, EditPageHeader, EnumBadge, EnumDisplay, EnumInput, EnumPicker, EnumDisplay$1 as EnumValueDisplay, ExportButton, ExportDialog, Field, FieldDisplay, FileDisplay, FileField, FileInput, FilterBadges, FilterBuilder, FilterPanel, FilterRegion, FilterValueControl, FlowActionButton, Form, FormActions, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HeaderBreadcrumbs, HelpButton, Icon, Input, Label, LanguageSubmenu, LanguageSwitch, LinkComponentProvider, LinkKeysDisplay, ListBody, ListBulkBar, ListColumns, ListControls, ListCreate, ListErrorState, ListExport, ListFilters, ListFlows, ListLive, ListSavedViews, ListSearchInput, LoginForm, NavAreaLayout, NavAreaPage, NavChrome, NavChromeBoundaryProvider, NavMain, NavigationGuardDialog, NumberDisplay, NumberInput, PACKAGE_NAME, PACKAGE_VERSION, PageHeader, PinnedFilterControls, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverPresentationHost, PopoverTrigger, Progress, RecordActions, RecordBreadcrumbs, RecordPage, RecordScreen, RecordTitle, RefreshButton, RelationDisplay, RelationField, RelationManyDisplay, RelationPicker, LazyRelationPickerDialog as RelationPickerDialog, RelationPickerInput, ResourceList, ResourceListPage, ResourcePageRouter, SavedViewsDropdown, ScopeSwitcher, SecondarySidebarLayout, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetPresentationHost, SheetPresentationShell, SheetTitle, SheetTrigger, ShellProvider, ShowPageHeader, Sidebar, SidebarBrand, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, THEME_CHOICES, THEME_STORAGE_KEY, Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsLayout, TabsList, TabsTrigger, TaskRunPanel, TextDisplay, TextInput, Textarea, TextareaDisplay, TextareaInput, ThemeSubmenu, ThemeToggle, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserMenu, badgeVariants, buildNavItems, buroSortingToTanStack, buttonVariants, cn, defaultNavLayouts, defaultUserMapper, downloadArtifact, formatOperatorLabel, hasIcon, i18nPrefixToRef, isImage, layoutSlot, listSlot, loadLocale, localeLabel, modeForSurface, recordDisplayName, registerIcons, relationLinkClassName, resolveNavIcon, resolveUpdater, saveLocale, shadcnBlockImplementations, shadcnFieldImplementations, shadcnPresentationHosts, spacing, tanStackSortingToBuro, toast, typography, useBuroDataTable, useCurrentUser, useDialogFilterState, useDocumentTitle, useExportRunWatcher, useFormControl, useFormField, useHref, useIsMobile, useLanguagePaletteActions, useLanguageSwitch, useLayout, useLayoutResolver, useLinkComponent, useListSlot, useMatch, useNavChromeBoundary, useNavIcon, useNavTree, useNavVisible, useOptionalSidebar, usePaletteState, usePresentationCopy, useRelationPicker, useShell, useSidebar, useTheme, useThemePaletteActions, wrapperEnabled };
|
|
6365
6887
|
|
|
6366
6888
|
//# sourceMappingURL=index.js.map
|