@burojs/ui-shadcn 0.8.0 → 0.10.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/{bulk-summary-2HLgz7Il.cjs → bulk-summary-Chc61Pyw.cjs} +9 -7
- package/dist/bulk-summary-Chc61Pyw.cjs.map +1 -0
- package/dist/{bulk-summary-D6A0ua21.js → bulk-summary-DpSQD2Fq.js} +9 -7
- package/dist/bulk-summary-DpSQD2Fq.js.map +1 -0
- package/dist/{candidates-relation-picker-CGXItMN0.js → candidates-relation-picker-DRsHKe6N.js} +3 -3
- package/dist/{candidates-relation-picker-CGXItMN0.js.map → candidates-relation-picker-DRsHKe6N.js.map} +1 -1
- package/dist/{candidates-relation-picker-C47mF260.cjs → candidates-relation-picker-GIxsp7D_.cjs} +3 -3
- package/dist/{candidates-relation-picker-C47mF260.cjs.map → candidates-relation-picker-GIxsp7D_.cjs.map} +1 -1
- package/dist/{check-confirm-dialog-BT04Mieo.cjs → check-confirm-dialog-BMSb7wFv.cjs} +76 -9
- package/dist/check-confirm-dialog-BMSb7wFv.cjs.map +1 -0
- package/dist/{check-confirm-dialog-CtiRzOAt.js → check-confirm-dialog-B_u3YVHS.js} +72 -11
- package/dist/{check-confirm-dialog-CtiRzOAt.js.map → check-confirm-dialog-B_u3YVHS.js.map} +1 -1
- package/dist/{filter-builder-z3Axzf9Y.js → filter-builder-DX-xC3Yd.js} +14 -6
- package/dist/filter-builder-DX-xC3Yd.js.map +1 -0
- package/dist/{filter-builder-ByGhxLf_.cjs → filter-builder-Dt5E8PSX.cjs} +14 -6
- package/dist/filter-builder-Dt5E8PSX.cjs.map +1 -0
- package/dist/{flow-runtime-BVFjMU5-.cjs → flow-runtime-CQ4wf8co.cjs} +3 -3
- package/dist/{flow-runtime-BVFjMU5-.cjs.map → flow-runtime-CQ4wf8co.cjs.map} +1 -1
- package/dist/{flow-runtime-DrUWyTS0.js → flow-runtime-Q2vD7R3c.js} +3 -3
- package/dist/{flow-runtime-DrUWyTS0.js.map → flow-runtime-Q2vD7R3c.js.map} +1 -1
- package/dist/{flow-screen-3fk6J33y.js → flow-screen-B1y2yizP.js} +68 -29
- package/dist/flow-screen-B1y2yizP.js.map +1 -0
- package/dist/{flow-screen-6y5E_HT6.cjs → flow-screen-sw2cP70t.cjs} +67 -28
- package/dist/flow-screen-sw2cP70t.cjs.map +1 -0
- package/dist/index.cjs +2304 -247
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +119 -12
- package/dist/index.d.ts +119 -12
- package/dist/index.js +2225 -172
- package/dist/index.js.map +1 -1
- package/dist/{inline-flow-host-C4KmZIYE.cjs → inline-flow-host-CkhoA69R.cjs} +3 -3
- package/dist/{inline-flow-host-C4KmZIYE.cjs.map → inline-flow-host-CkhoA69R.cjs.map} +1 -1
- package/dist/{inline-flow-host-YnnvWjdU.js → inline-flow-host-DqbXqcPS.js} +3 -3
- package/dist/{inline-flow-host-YnnvWjdU.js.map → inline-flow-host-DqbXqcPS.js.map} +1 -1
- package/dist/{lazy-relation-picker-dialog-DN4bvQfg.js → lazy-relation-picker-dialog-BaIEWLbF.js} +3 -52
- package/dist/lazy-relation-picker-dialog-BaIEWLbF.js.map +1 -0
- package/dist/{lazy-relation-picker-dialog-BAKBRn3V.cjs → lazy-relation-picker-dialog-CeRzOAi0.cjs} +3 -52
- package/dist/lazy-relation-picker-dialog-CeRzOAi0.cjs.map +1 -0
- package/dist/{page-flow-route-CtEfqAvU.js → page-flow-route-CP7cS7FY.js} +7 -7
- package/dist/page-flow-route-CP7cS7FY.js.map +1 -0
- package/dist/{page-flow-route-DEjAxHe3.cjs → page-flow-route-UDx8qvdM.cjs} +10 -10
- package/dist/page-flow-route-UDx8qvdM.cjs.map +1 -0
- package/dist/{place-node-Bhl8B3fF.cjs → place-node-C5ZmuHaN.cjs} +208 -55
- package/dist/place-node-C5ZmuHaN.cjs.map +1 -0
- package/dist/{place-node-BdxT-30h.js → place-node-DwWAigv0.js} +205 -58
- package/dist/place-node-DwWAigv0.js.map +1 -0
- package/dist/record-trail-store-Cjo9vtod.cjs +126 -0
- package/dist/record-trail-store-Cjo9vtod.cjs.map +1 -0
- package/dist/record-trail-store-Dn6bVry4.js +91 -0
- package/dist/record-trail-store-Dn6bVry4.js.map +1 -0
- package/dist/{related-list-cards-Bc_vfCE_.cjs → related-list-cards-BypKfm9t.cjs} +3 -3
- package/dist/{related-list-cards-Bc_vfCE_.cjs.map → related-list-cards-BypKfm9t.cjs.map} +1 -1
- package/dist/{related-list-cards-BvkD5OcC.js → related-list-cards-Dcmruy09.js} +3 -3
- package/dist/{related-list-cards-BvkD5OcC.js.map → related-list-cards-Dcmruy09.js.map} +1 -1
- package/dist/{related-list-timeline-k0DtnxTs.cjs → related-list-timeline-D-KClgKb.cjs} +4 -4
- package/dist/related-list-timeline-D-KClgKb.cjs.map +1 -0
- package/dist/{related-list-timeline-DCrwN9oO.js → related-list-timeline-DZON_qSc.js} +4 -4
- package/dist/related-list-timeline-DZON_qSc.js.map +1 -0
- package/dist/{related-rows-BW9Jr07T.cjs → related-rows-DgF05ssi.cjs} +4 -4
- package/dist/{related-rows-BW9Jr07T.cjs.map → related-rows-DgF05ssi.cjs.map} +1 -1
- package/dist/{related-rows-CPE-9FFr.js → related-rows-ETZl5CB9.js} +4 -4
- package/dist/{related-rows-CPE-9FFr.js.map → related-rows-ETZl5CB9.js.map} +1 -1
- package/dist/{relation-create-DDEYcKfw.cjs → relation-create-B8zngAcA.cjs} +82 -13
- package/dist/relation-create-B8zngAcA.cjs.map +1 -0
- package/dist/{relation-create-C43cdPQt.js → relation-create-CeCWyxIb.js} +79 -16
- package/dist/relation-create-CeCWyxIb.js.map +1 -0
- package/dist/{relation-many-picker-BlrGRwMV.js → relation-many-picker-CT7nKfE2.js} +12 -10
- package/dist/relation-many-picker-CT7nKfE2.js.map +1 -0
- package/dist/{relation-many-picker-Br-zBHxT.cjs → relation-many-picker-Cq0EHY5I.cjs} +12 -10
- package/dist/relation-many-picker-Cq0EHY5I.cjs.map +1 -0
- package/dist/{relation-picker-x7P5HKie.js → relation-picker-CCyuMeGq.js} +13 -10
- package/dist/relation-picker-CCyuMeGq.js.map +1 -0
- package/dist/{relation-picker-ADjxI_TI.cjs → relation-picker-DmwTzgsd.cjs} +13 -10
- package/dist/relation-picker-DmwTzgsd.cjs.map +1 -0
- package/dist/{relation-picker-dialog-CyKliBkN.js → relation-picker-dialog-CoWKjNv8.js} +5 -5
- package/dist/relation-picker-dialog-CoWKjNv8.js.map +1 -0
- package/dist/{relation-picker-dialog-DimVQF9Y.cjs → relation-picker-dialog-mbwyNK43.cjs} +5 -5
- package/dist/relation-picker-dialog-mbwyNK43.cjs.map +1 -0
- package/dist/{relation-select-Cr3CfNLy.cjs → relation-select-CguIo2M5.cjs} +2 -2
- package/dist/{relation-select-Cr3CfNLy.cjs.map → relation-select-CguIo2M5.cjs.map} +1 -1
- package/dist/{relation-select-B8Fq4o-t.js → relation-select-nAYxhopN.js} +2 -2
- package/dist/{relation-select-B8Fq4o-t.js.map → relation-select-nAYxhopN.js.map} +1 -1
- package/dist/{success-notices-Dl3M1fZP.cjs → success-notices-Cl4b6MLQ.cjs} +3 -2
- package/dist/success-notices-Cl4b6MLQ.cjs.map +1 -0
- package/dist/{success-notices-LDEgEkc4.js → success-notices-CrcWOGSo.js} +3 -2
- package/dist/success-notices-CrcWOGSo.js.map +1 -0
- package/dist/{use-dialog-filter-state-tNvqAAjh.cjs → use-dialog-filter-state-CpWblz3C.cjs} +2 -2
- package/dist/{use-dialog-filter-state-tNvqAAjh.cjs.map → use-dialog-filter-state-CpWblz3C.cjs.map} +1 -1
- package/dist/{use-dialog-filter-state-B_MqzHaT.js → use-dialog-filter-state-ZYxOp5WO.js} +2 -2
- package/dist/{use-dialog-filter-state-B_MqzHaT.js.map → use-dialog-filter-state-ZYxOp5WO.js.map} +1 -1
- package/dist/{use-record-subtitle-bfwIoUme.cjs → use-record-subtitle-B4lTR7pf.cjs} +5 -8
- package/dist/use-record-subtitle-B4lTR7pf.cjs.map +1 -0
- package/dist/{use-record-subtitle-gIaCGgbI.js → use-record-subtitle-pWMBqQx9.js} +5 -8
- package/dist/use-record-subtitle-pWMBqQx9.js.map +1 -0
- package/package.json +9 -9
- package/dist/bulk-summary-2HLgz7Il.cjs.map +0 -1
- package/dist/bulk-summary-D6A0ua21.js.map +0 -1
- package/dist/check-confirm-dialog-BT04Mieo.cjs.map +0 -1
- package/dist/filter-builder-ByGhxLf_.cjs.map +0 -1
- package/dist/filter-builder-z3Axzf9Y.js.map +0 -1
- package/dist/flow-screen-3fk6J33y.js.map +0 -1
- package/dist/flow-screen-6y5E_HT6.cjs.map +0 -1
- package/dist/lazy-relation-picker-dialog-BAKBRn3V.cjs.map +0 -1
- package/dist/lazy-relation-picker-dialog-DN4bvQfg.js.map +0 -1
- package/dist/page-flow-route-CtEfqAvU.js.map +0 -1
- package/dist/page-flow-route-DEjAxHe3.cjs.map +0 -1
- package/dist/place-node-BdxT-30h.js.map +0 -1
- package/dist/place-node-Bhl8B3fF.cjs.map +0 -1
- package/dist/related-list-timeline-DCrwN9oO.js.map +0 -1
- package/dist/related-list-timeline-k0DtnxTs.cjs.map +0 -1
- package/dist/relation-create-C43cdPQt.js.map +0 -1
- package/dist/relation-create-DDEYcKfw.cjs.map +0 -1
- package/dist/relation-many-picker-BlrGRwMV.js.map +0 -1
- package/dist/relation-many-picker-Br-zBHxT.cjs.map +0 -1
- package/dist/relation-picker-ADjxI_TI.cjs.map +0 -1
- package/dist/relation-picker-dialog-CyKliBkN.js.map +0 -1
- package/dist/relation-picker-dialog-DimVQF9Y.cjs.map +0 -1
- package/dist/relation-picker-x7P5HKie.js.map +0 -1
- package/dist/resource-page-router-BRpUnhay.js +0 -1958
- package/dist/resource-page-router-BRpUnhay.js.map +0 -1
- package/dist/resource-page-router-qEd2xb55.cjs +0 -2167
- package/dist/resource-page-router-qEd2xb55.cjs.map +0 -1
- package/dist/success-notices-Dl3M1fZP.cjs.map +0 -1
- package/dist/success-notices-LDEgEkc4.js.map +0 -1
- package/dist/use-record-subtitle-bfwIoUme.cjs.map +0 -1
- package/dist/use-record-subtitle-gIaCGgbI.js.map +0 -1
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { l as cn } from "./use-theme-dnE3Od3I.js";
|
|
2
2
|
import { i as isNetworkFailure, l as useLinkComponent, m as PopoverTrigger, n as toast, o as technicalTexts, p as PopoverContent, r as friendlyStringsFrom, s as toFriendlyError, u as Popover } from "./toaster-Ct_YHGs6.js";
|
|
3
|
-
import {
|
|
3
|
+
import { $ as DropdownMenuTrigger, A as useLoaded, C as RuntimeFlowRunner, D as loadInlineFlowHost, H as DropdownMenuGroup, I as Icon, J as DropdownMenuSeparator, S as RuntimeBulkFlowRunner, T as loadFailedText, U as DropdownMenuItem, V as DropdownMenuContent, W as DropdownMenuLabel, _ as ActionInner, f as useToBrowserHref, ft as DocInfo, h as useFlowChrome, i as UndecidedAction, k as preloadFlowRuntime, l as useListSlot, m as FlowMenuItem, n as ActionButton, p as FlowActionButton, r as DisabledAction, s as canonicalResourceName, t as CheckConfirmDialog, v as reasonText, w as loadBulkSummary, x as RuntimeAppFlowRunner, y as FlowBoundary, z as DropdownMenu } from "./check-confirm-dialog-B_u3YVHS.js";
|
|
4
4
|
import { t as Button } from "./button-MWVeZaqj.js";
|
|
5
5
|
import { t as Input } from "./input-CUPStzZO.js";
|
|
6
6
|
import { a as DialogFooter, i as DialogDescription, o as DialogHeader, r as DialogContent, s as DialogTitle, t as Dialog } from "./dialog-C123sVQ8.js";
|
|
7
|
-
import {
|
|
7
|
+
import { _ as ClaimedQuickLink, b as LoadError, l as relationLinkClassName } from "./relation-create-CeCWyxIb.js";
|
|
8
8
|
import { t as Skeleton } from "./skeleton-U2noefj5.js";
|
|
9
|
-
import { A as TableHeader, C as SelectTrigger, E as TableBody, F as ResolvedFieldDisplay, I as ResolvedFieldInput, L as useFieldMetaDiagnostic, M as Badge, O as TableCell, P as MetaPlaceholder, R as fieldDescription, T as Table$1, g as SelectContent, h as Select, j as TableRow, k as TableHead, t as FilterBuilder, v as SelectItem, w as SelectValue, z as lowerLegacyField } from "./filter-builder-
|
|
9
|
+
import { A as TableHeader, C as SelectTrigger, E as TableBody, F as ResolvedFieldDisplay, I as ResolvedFieldInput, L as useFieldMetaDiagnostic, M as Badge, O as TableCell, P as MetaPlaceholder, R as fieldDescription, T as Table$1, g as SelectContent, h as Select, j as TableRow, k as TableHead, t as FilterBuilder, v as SelectItem, w as SelectValue, z as lowerLegacyField } from "./filter-builder-DX-xC3Yd.js";
|
|
10
10
|
import { t as Label } from "./label-66W1qbke.js";
|
|
11
|
-
import { n as useCandidateSelection, t as LazyRelationPickerDialog } from "./lazy-relation-picker-dialog-
|
|
12
|
-
import { t as useRelationSelect } from "./relation-select-
|
|
13
|
-
import { BULK_EACH_LIMIT, FORM_SLOT, LAYOUT_SIZES, builtinFrames, canonicalEntityNodeKey, columnName, compileFlow, compiledScreenFor, declaredField, declaredText, displayClassOf, dtoFields, enumFallbackKey, enumFallbackText, enumNamespaceOf, enumValueText, exportFormatFieldKey, exportFormatLabelKey, exportFormatOptionKey, facts, fieldOptionText, fieldSensitivity, flowRecordOf, formatEntityRef, grantedPlacementKeys, hasRecordPage, humanizeKey, i18nPrefixToRef, i18nPrefixToRef as i18nPrefixToRef$1, inlineFlow, isBuiltinItemAction, isColumnSortable, isRelationField, isScreenFailure, linkOf, normalizeDataError, normalizeEntityRef, planItemActions, projectDto, recordEntries, relatedList, relatedRecord, resolveActionDensity, resolveActionSurfaceMode, resolveColumnUi, resolveContentSlot, resolveEnumLabel, resolveFieldLabel, resolveFieldOptionLabel, resolveFieldSlot, resolveNavLabel, resolveResourceLabel, resolveSurfaceUi, resolveTextSlot, resourceKey, resourceShowHref, reverseLinkOf, routeResourceKey, routeServerIssues, savedViewKey, validatePlacementProps, whereEntryToFilter } from "@burojs/core";
|
|
14
|
-
import { ActionRouteContext, DismissGuardScope, FlowRowBatchContext, LOCAL_USER_SCOPE_ID, QUICK_ANCHOR_ATTRIBUTE, RECORD_KIND_KEYS, RecordScopeChain, ResourceListProvider, RouteSourceContext, ScreenStateProvider, columnTypeWidth, deriveRecord, implementFrame, isObjectColumn, kindErrorText, linkCapabilitiesOf, policyRecordOf, policyRowsOf, readColumnValue, recordKeyOf, resolveColumnField, resolveErrorText, resolveObjectColumn, resolveValidationMessage, resourceFlowsOn, specificErrorText, tableLayoutSetting, useApp, useApplicationSnapshot, useAvailability, useAvailabilityResolver, useCapability, useCapabilityResolver, useChromeT, useClipboard, useComponent, useCtx, useCurrentUserId, useCustomQuery, useDataRuntime, useDismissGuard, useEntryGate, useEnumValues, useExportRuns, useFieldAccess, useFieldImplementation, useFieldMeta, useFieldMetaSources,
|
|
11
|
+
import { n as useCandidateSelection, t as LazyRelationPickerDialog } from "./lazy-relation-picker-dialog-BaIEWLbF.js";
|
|
12
|
+
import { t as useRelationSelect } from "./relation-select-nAYxhopN.js";
|
|
13
|
+
import { BULK_EACH_LIMIT, FORM_SLOT, LAYOUT_SIZES, addressesCapability, builtinFrames, canonicalEntityNodeKey, columnName, compileFlow, compiledScreenFor, declaredField, declaredText, displayClassOf, dtoFields, enumFallbackKey, enumFallbackText, enumNamespaceOf, enumValueText, exportFormatFieldKey, exportFormatLabelKey, exportFormatOptionKey, facts, fieldOptionText, fieldSensitivity, flowRecordOf, formatEntityRef, grantedPlacementKeys, hasRecordPage, humanizeKey, i18nPrefixToRef, i18nPrefixToRef as i18nPrefixToRef$1, inlineFlow, isBuiltinItemAction, isColumnSortable, isRelationField, isScreenFailure, linkOf, memberFactOf, normalizeDataError, normalizeEntityRef, permissionsUndecided, planItemActions, projectDto, propertyTextKey, recordEntries, relatedList, relatedRecord, resolveActionDensity, resolveActionSurfaceMode, resolveColumnUi, resolveContentSlot, resolveEnumLabel, resolveFieldLabel, resolveFieldOptionLabel, resolveFieldSlot, resolveNavLabel, resolveResourceLabel, resolveSurfaceUi, resolveTextSlot, resourceKey, resourceShowHref, reverseLinkOf, routeResourceKey, routeServerIssues, savedViewKey, validatePlacementProps, whereEntryToFilter } from "@burojs/core";
|
|
14
|
+
import { ActionRouteContext, DismissGuardScope, FlowRowBatchContext, LOCAL_USER_SCOPE_ID, QUICK_ANCHOR_ATTRIBUTE, RECORD_KIND_KEYS, RecordScopeChain, ResourceListProvider, RouteSourceContext, ScreenStateProvider, collectionBulkState, columnTypeWidth, deriveRecord, implementFrame, isObjectColumn, kindErrorText, linkCapabilitiesOf, policyRecordOf, policyRowsOf, readColumnValue, recordKeyOf, resolveColumnField, resolveErrorText, resolveObjectColumn, resolveValidationMessage, resourceFlowsOn, specificErrorText, tableLayoutSetting, useApp, useApplicationSnapshot, useAvailability, useAvailabilityGate, useAvailabilityResolver, useCapability, useCapabilityResolver, useChromeT, useClipboard, useCollectionRows, useComponent, useCtx, useCurrentUserId, useCustomQuery, useDataRuntime, useDismissGuard, useEntryGate, useEnumValues, useExportRuns, useFieldAccess, useFieldImplementation, useFieldMeta, useFieldMetaSources, useFlowRowBatches, useFlowRowResolver, useFormController, useFrameImplementations, useFramePiece, useFrameT, useI18nCaps, useItemActions, useLinkRights, useLinkWriter, useLinkedKeys, useListAccess, useLocale, useNavigationBlocker, useOne, useOptionalDataRuntime, useOptionalRecordFrame, useOptionalRouterAdapter, useOptionalT, useOptionalUiSettings, usePageFlowGate, usePageScreen, usePathAccess, usePermissionsUndecided, usePlacement, useProjectedRecord, useProjectedTitle, usePublishDocVariant, useQuick, useQuickEntry, useQuickOpener, useRecordFrame, useRecordScopeFrames, useRecordTitle, useResource, useResourceExport, useResourceList, useResourceListContext, useReturnTarget, useRouteNavigate, useScreenState, useSearchParamsWriter, useT, useTestIds, useViewRow, withRecordKeys } from "@burojs/react";
|
|
15
15
|
import { IconAlertCircle, IconAlertTriangle, IconArrowDown, IconArrowLeft, IconArrowRight, IconArrowUp, IconBookmark, IconCheck, IconChevronLeft, IconChevronRight, IconChevronsLeft, IconChevronsRight, IconColumns3, IconCopy, IconDots, IconDownload, IconEyeOff, IconFilterX, IconInbox, IconLink, IconLoader2, IconLock, IconMinus, IconPencil, IconPinned, IconPinnedOff, IconPlus, IconRefresh, IconSelector, IconSettings2, IconTrash, IconUnlink, IconX } from "@tabler/icons-react";
|
|
16
16
|
import * as React from "react";
|
|
17
17
|
import { Component, Fragment, Suspense, createContext, createElement, lazy, memo, useCallback, useContext, useEffect, useId, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
@@ -879,6 +879,20 @@ function AppFlowButton({ action, variant = "ghost", size = "sm", className }) {
|
|
|
879
879
|
actionName: action.name,
|
|
880
880
|
surface: "app"
|
|
881
881
|
});
|
|
882
|
+
if (action.undecided === true) return jsx(Button, {
|
|
883
|
+
type: "button",
|
|
884
|
+
variant,
|
|
885
|
+
size,
|
|
886
|
+
className,
|
|
887
|
+
"data-testid": testid,
|
|
888
|
+
"data-buro-flow-state": "undecided",
|
|
889
|
+
disabled: true,
|
|
890
|
+
"aria-busy": "true",
|
|
891
|
+
children: jsx(ActionInner, {
|
|
892
|
+
icon: action.icon,
|
|
893
|
+
label
|
|
894
|
+
})
|
|
895
|
+
});
|
|
882
896
|
if (action.hostHref !== void 0) return jsx(Button, {
|
|
883
897
|
asChild: true,
|
|
884
898
|
variant,
|
|
@@ -1446,14 +1460,15 @@ function useExportRunWatcher() {
|
|
|
1446
1460
|
//#endregion
|
|
1447
1461
|
//#region src/actions/action-overflow.tsx
|
|
1448
1462
|
const RowActionsCollapseContext = createContext(false);
|
|
1449
|
-
function ActionOverflow({ resource: resourceInput, record, surface, className, hideFlows, collapse, sources }) {
|
|
1463
|
+
function ActionOverflow({ resource: resourceInput, record, surface, className, hideFlows, hideActions, collapse, sources }) {
|
|
1450
1464
|
const resource = routeResourceKey(resourceInput);
|
|
1451
1465
|
const chromeT = useChromeT();
|
|
1452
1466
|
const tid = useTestIds();
|
|
1453
1467
|
const recordKey = String(recordKeyOf(useApp().registry.get(resource), record) ?? "");
|
|
1454
1468
|
const collapsedRows = useContext(RowActionsCollapseContext);
|
|
1455
1469
|
const [flowFor, setFlowFor] = useState(null);
|
|
1456
|
-
const
|
|
1470
|
+
const shown = useShownItemActions(resource, record, surface, hideFlows, sources);
|
|
1471
|
+
const actions = hideActions === void 0 ? shown : shown.filter((a) => !hideActions(a.name));
|
|
1457
1472
|
if (actions.length === 0) return null;
|
|
1458
1473
|
const isRow = surface === "row";
|
|
1459
1474
|
const folded = isRow && (collapse ?? collapsedRows);
|
|
@@ -3042,6 +3057,22 @@ function actionsColumnSize(items) {
|
|
|
3042
3057
|
const strip = controls * ROW_ACTION_CONTROL_PX + (controls - 1) * ROW_ACTION_GAP_PX + ACTIONS_CELL_PADDING_PX;
|
|
3043
3058
|
return Math.max(ACTIONS_COL_MIN_PX, strip);
|
|
3044
3059
|
}
|
|
3060
|
+
const isNamedEntry = (value) => typeof value === "object" && value !== null;
|
|
3061
|
+
function offered(items, offers) {
|
|
3062
|
+
return offers === void 0 || items === void 0 ? items : items.filter((action) => offers(action.name));
|
|
3063
|
+
}
|
|
3064
|
+
function rowFlowsOf(def, offers) {
|
|
3065
|
+
if (!def) return [];
|
|
3066
|
+
const items = offered(def.actions?.item, offers) ?? [];
|
|
3067
|
+
const out = [];
|
|
3068
|
+
for (const placement of planItemActions(items, "row")) {
|
|
3069
|
+
if (items.find((entry) => entry.name === placement.name)?.kind !== "flow") continue;
|
|
3070
|
+
try {
|
|
3071
|
+
out.push(compileFlow(def, placement.name));
|
|
3072
|
+
} catch {}
|
|
3073
|
+
}
|
|
3074
|
+
return out;
|
|
3075
|
+
}
|
|
3045
3076
|
const ALIGN_CLASS = {
|
|
3046
3077
|
start: "text-start",
|
|
3047
3078
|
center: "text-center",
|
|
@@ -3108,25 +3139,72 @@ function ResourceList({ resource: resourceInput, data, total, page = 1, pageSize
|
|
|
3108
3139
|
]);
|
|
3109
3140
|
const skeletonColumnKeys = accessPending ? declaredColumnKeys : visibleColumnKeys;
|
|
3110
3141
|
const rows = useMemo(() => data ?? [], [data]);
|
|
3111
|
-
const
|
|
3112
|
-
|
|
3113
|
-
|
|
3114
|
-
const
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
|
|
3118
|
-
|
|
3119
|
-
|
|
3142
|
+
const collectionRows = useCollectionRows(resource);
|
|
3143
|
+
const rowKinds = useMemo(() => collectionRows === void 0 ? void 0 : rows.map((row) => collectionRows(row)), [collectionRows, rows]);
|
|
3144
|
+
const rowOffers = useMemo(() => {
|
|
3145
|
+
const fact = memberFactOf(def);
|
|
3146
|
+
if (fact?.collection === void 0 || def?.rowActions !== "base") return void 0;
|
|
3147
|
+
const declared = app.registry.bases.get(fact.ref)?.actions?.item;
|
|
3148
|
+
const names = new Set(["edit", "delete"]);
|
|
3149
|
+
if (Array.isArray(declared)) {
|
|
3150
|
+
for (const entry of declared) if (isNamedEntry(entry) && typeof entry.name === "string") names.add(entry.name);
|
|
3120
3151
|
}
|
|
3121
|
-
return
|
|
3122
|
-
}, [def]);
|
|
3123
|
-
const
|
|
3124
|
-
const
|
|
3125
|
-
|
|
3126
|
-
|
|
3152
|
+
return (name) => names.has(name);
|
|
3153
|
+
}, [def, app]);
|
|
3154
|
+
const hideRowAction = useMemo(() => rowOffers === void 0 ? void 0 : (name) => !rowOffers(name), [rowOffers]);
|
|
3155
|
+
const flowsByDef = useMemo(() => {
|
|
3156
|
+
const cache = new WeakMap();
|
|
3157
|
+
return (target) => {
|
|
3158
|
+
if (target === void 0) return [];
|
|
3159
|
+
let flows = cache.get(target);
|
|
3160
|
+
if (flows === void 0) {
|
|
3161
|
+
flows = rowFlowsOf(target, rowOffers);
|
|
3162
|
+
cache.set(target, flows);
|
|
3163
|
+
}
|
|
3164
|
+
return flows;
|
|
3165
|
+
};
|
|
3166
|
+
}, [rowOffers]);
|
|
3167
|
+
const batchGroups = useMemo(() => {
|
|
3168
|
+
if (rowKinds === void 0) return [{
|
|
3169
|
+
resource,
|
|
3170
|
+
ids: rows.map((row) => String(row.id)),
|
|
3171
|
+
flows: flowsByDef(def)
|
|
3172
|
+
}];
|
|
3173
|
+
const idsByMember = new Map();
|
|
3174
|
+
rowKinds.forEach((kind, index) => {
|
|
3175
|
+
if (!("member" in kind)) return;
|
|
3176
|
+
const ids = idsByMember.get(kind.member) ?? [];
|
|
3177
|
+
ids.push(String(rows[index]?.id));
|
|
3178
|
+
idsByMember.set(kind.member, ids);
|
|
3179
|
+
});
|
|
3180
|
+
return [...idsByMember].map(([member, ids]) => ({
|
|
3181
|
+
resource: member,
|
|
3182
|
+
ids,
|
|
3183
|
+
flows: flowsByDef(app.registry.get(member)),
|
|
3184
|
+
list: resource
|
|
3185
|
+
}));
|
|
3186
|
+
}, [
|
|
3187
|
+
rowKinds,
|
|
3188
|
+
rows,
|
|
3127
3189
|
resource,
|
|
3128
|
-
|
|
3129
|
-
|
|
3190
|
+
def,
|
|
3191
|
+
flowsByDef,
|
|
3192
|
+
app
|
|
3193
|
+
]);
|
|
3194
|
+
const rowBatch = useFlowRowBatches(batchGroups);
|
|
3195
|
+
const rowBatchState = rowBatch.state;
|
|
3196
|
+
const flowRowBatch = useMemo(() => ({ state: rowBatchState }), [rowBatchState]);
|
|
3197
|
+
const actionsWidth = useMemo(() => {
|
|
3198
|
+
if (rowKinds === void 0) return actionsColumnSize(def?.actions?.item);
|
|
3199
|
+
let widest = ACTIONS_COL_MIN_PX;
|
|
3200
|
+
for (const member of new Set(rowKinds.flatMap((kind) => "member" in kind ? [kind.member] : []))) widest = Math.max(widest, actionsColumnSize(offered(app.registry.get(member)?.actions?.item, rowOffers)));
|
|
3201
|
+
return widest;
|
|
3202
|
+
}, [
|
|
3203
|
+
rowKinds,
|
|
3204
|
+
def,
|
|
3205
|
+
app,
|
|
3206
|
+
rowOffers
|
|
3207
|
+
]);
|
|
3130
3208
|
const knownTotal = typeof total === "number";
|
|
3131
3209
|
const totalPages = knownTotal ? Math.max(1, Math.ceil(total / pageSize)) : void 0;
|
|
3132
3210
|
const pageIsFull = rows.length >= pageSize;
|
|
@@ -3374,7 +3452,7 @@ function ResourceList({ resource: resourceInput, data, total, page = 1, pageSize
|
|
|
3374
3452
|
id: ACTIONS_COL_ID,
|
|
3375
3453
|
enableSorting: false,
|
|
3376
3454
|
enableResizing: false,
|
|
3377
|
-
size: narrow || typeof rowActions === "function" ? 44 :
|
|
3455
|
+
size: narrow || typeof rowActions === "function" ? 44 : actionsWidth,
|
|
3378
3456
|
enableHiding: false,
|
|
3379
3457
|
header: () => jsx("span", {
|
|
3380
3458
|
className: "sr-only",
|
|
@@ -3385,11 +3463,22 @@ function ResourceList({ resource: resourceInput, data, total, page = 1, pageSize
|
|
|
3385
3463
|
noRowNav: true,
|
|
3386
3464
|
noClip: true
|
|
3387
3465
|
},
|
|
3388
|
-
cell: ({ row }) =>
|
|
3389
|
-
|
|
3390
|
-
|
|
3391
|
-
|
|
3392
|
-
|
|
3466
|
+
cell: ({ row }) => {
|
|
3467
|
+
if (typeof rowActions === "function") return rowActions(row.original);
|
|
3468
|
+
if (collectionRows === void 0) return jsx(ActionOverflow, {
|
|
3469
|
+
resource,
|
|
3470
|
+
record: row.original,
|
|
3471
|
+
surface: "row"
|
|
3472
|
+
});
|
|
3473
|
+
const kind = collectionRows(row.original);
|
|
3474
|
+
if (!("member" in kind)) return null;
|
|
3475
|
+
return jsx(ActionOverflow, {
|
|
3476
|
+
resource: kind.member,
|
|
3477
|
+
record: row.original,
|
|
3478
|
+
surface: "row",
|
|
3479
|
+
...hideRowAction === void 0 ? {} : { hideActions: hideRowAction }
|
|
3480
|
+
});
|
|
3481
|
+
}
|
|
3393
3482
|
});
|
|
3394
3483
|
return cols;
|
|
3395
3484
|
}, [
|
|
@@ -3406,6 +3495,9 @@ function ResourceList({ resource: resourceInput, data, total, page = 1, pageSize
|
|
|
3406
3495
|
i18nCaps,
|
|
3407
3496
|
rowLinkKey,
|
|
3408
3497
|
narrow,
|
|
3498
|
+
actionsWidth,
|
|
3499
|
+
collectionRows,
|
|
3500
|
+
hideRowAction,
|
|
3409
3501
|
columnUiOf
|
|
3410
3502
|
]);
|
|
3411
3503
|
const handleSelectionChange = (updater) => {
|
|
@@ -3594,7 +3686,7 @@ function ResourceList({ resource: resourceInput, data, total, page = 1, pageSize
|
|
|
3594
3686
|
value: flowRowBatch,
|
|
3595
3687
|
children: jsxs(RowActionsCollapseContext.Provider, {
|
|
3596
3688
|
value: narrow,
|
|
3597
|
-
children: [rowBatch.
|
|
3689
|
+
children: [rowBatch.readers, jsxs("div", {
|
|
3598
3690
|
ref: listRoot,
|
|
3599
3691
|
className: cn("space-y-4", className),
|
|
3600
3692
|
children: [
|
|
@@ -4473,7 +4565,7 @@ function issueText(issue, caps, i18nPrefix) {
|
|
|
4473
4565
|
}, {
|
|
4474
4566
|
has: caps.has,
|
|
4475
4567
|
t: caps.t,
|
|
4476
|
-
...issue.field === "_form" ? {} : { fieldKey: `resources.${i18nPrefix}
|
|
4568
|
+
...issue.field === "_form" ? {} : { fieldKey: `resources.${i18nPrefix}.${propertyTextKey([...issue.field.split("."), ...issue.path])}` }
|
|
4477
4569
|
});
|
|
4478
4570
|
}
|
|
4479
4571
|
const EMPTY_ISSUES = Object.freeze([]);
|
|
@@ -4522,9 +4614,10 @@ function DeclarativeForm(props) {
|
|
|
4522
4614
|
function DeclarativeFormBody(props) {
|
|
4523
4615
|
const gate = useDeclarativeCheckGate();
|
|
4524
4616
|
const prefix = props.i18nPrefix ?? "form";
|
|
4617
|
+
const mode = props.mode ?? "create";
|
|
4525
4618
|
const form = useFormController({
|
|
4526
4619
|
fields: props.fields,
|
|
4527
|
-
mode
|
|
4620
|
+
mode,
|
|
4528
4621
|
onConfirmChecks: gate.confirmChecks,
|
|
4529
4622
|
...props.body === void 0 ? {} : { body: props.body },
|
|
4530
4623
|
...props.formId === void 0 ? {} : { formId: props.formId },
|
|
@@ -4589,7 +4682,7 @@ function DeclarativeFormBody(props) {
|
|
|
4589
4682
|
children: jsx(ScreenTree, {
|
|
4590
4683
|
region: "form-body",
|
|
4591
4684
|
resource: prefix,
|
|
4592
|
-
mode
|
|
4685
|
+
mode,
|
|
4593
4686
|
compiled: form.screen,
|
|
4594
4687
|
controller: form,
|
|
4595
4688
|
leafIds,
|
|
@@ -4953,10 +5046,12 @@ function BulkSummary(props) {
|
|
|
4953
5046
|
children: jsx(Summary, { ...props })
|
|
4954
5047
|
});
|
|
4955
5048
|
}
|
|
4956
|
-
function BulkFlowButton({ resource, actionName, ids, onSelectionChange }) {
|
|
5049
|
+
function BulkFlowButton({ resource, actionName, ids, records, onSelectionChange }) {
|
|
4957
5050
|
const app = useApp();
|
|
4958
5051
|
const tid = useTestIds();
|
|
4959
5052
|
const t = useOptionalT();
|
|
5053
|
+
const caps = useI18nCaps();
|
|
5054
|
+
const gate = useAvailabilityGate();
|
|
4960
5055
|
const control = useFlowRowResolver(resource)(actionName, void 0);
|
|
4961
5056
|
const chrome = useFlowChrome(resource, actionName);
|
|
4962
5057
|
const def = app.registry.get(resource);
|
|
@@ -4975,11 +5070,31 @@ function BulkFlowButton({ resource, actionName, ids, onSelectionChange }) {
|
|
|
4975
5070
|
if (control.state === "absent") return null;
|
|
4976
5071
|
const variant = chrome.destructive ? "destructive" : "outline";
|
|
4977
5072
|
const overLimit = each && ids.length > BULK_EACH_LIMIT;
|
|
4978
|
-
|
|
5073
|
+
let membersUndecided = false;
|
|
5074
|
+
const selection = def === void 0 ? void 0 : collectionBulkState({
|
|
5075
|
+
registry: app.registry,
|
|
5076
|
+
collection: def,
|
|
5077
|
+
action: actionName,
|
|
5078
|
+
ids,
|
|
5079
|
+
records: records ?? [],
|
|
5080
|
+
available: (member, action) => {
|
|
5081
|
+
const state = gate(member, action).state;
|
|
5082
|
+
if (state === "undecided") membersUndecided = true;
|
|
5083
|
+
return state === "available";
|
|
5084
|
+
}
|
|
5085
|
+
});
|
|
5086
|
+
const refused = membersUndecided || selection?.state !== "disabled" ? void 0 : selection.members.length > 0 ? t("collection.bulkUnavailable", {
|
|
5087
|
+
defaultValue: "Not available for {{types}}.",
|
|
5088
|
+
params: { types: selection.members.map((member) => resolveResourceLabel(caps, member, "single", app.registry.get(member))).join(", ") }
|
|
5089
|
+
}) : t("collection.bulkUnknownRows", {
|
|
5090
|
+
defaultValue: "{{count}} selected records are not loaded.",
|
|
5091
|
+
count: selection.missing
|
|
5092
|
+
});
|
|
5093
|
+
if (overLimit || control.state === "disabled" || refused !== void 0) return jsx(DisabledAction, {
|
|
4979
5094
|
reason: overLimit ? t("flow.bulkLimit", {
|
|
4980
5095
|
defaultValue: `Select at most ${BULK_EACH_LIMIT}.`,
|
|
4981
5096
|
count: BULK_EACH_LIMIT
|
|
4982
|
-
}) : control.reason,
|
|
5097
|
+
}) : control.state === "disabled" ? control.reason : refused,
|
|
4983
5098
|
label: chrome.label,
|
|
4984
5099
|
icon: chrome.icon,
|
|
4985
5100
|
testid,
|
|
@@ -4989,7 +5104,7 @@ function BulkFlowButton({ resource, actionName, ids, onSelectionChange }) {
|
|
|
4989
5104
|
actionName,
|
|
4990
5105
|
surface: "bulk"
|
|
4991
5106
|
});
|
|
4992
|
-
const busy = control.state === "undecided" || control.state === "pending" || running;
|
|
5107
|
+
const busy = control.state === "undecided" || control.state === "pending" || membersUndecided || running;
|
|
4993
5108
|
const finish = (result, progress) => {
|
|
4994
5109
|
setRunning(false);
|
|
4995
5110
|
if (progress === void 0) return;
|
|
@@ -5051,7 +5166,8 @@ function BulkFlowButton({ resource, actionName, ids, onSelectionChange }) {
|
|
|
5051
5166
|
label: chrome.labelText,
|
|
5052
5167
|
total: summary.total,
|
|
5053
5168
|
progress: summary.progress,
|
|
5054
|
-
texts: compiled?.flow.texts
|
|
5169
|
+
texts: compiled?.flow.texts,
|
|
5170
|
+
...compiled === void 0 ? {} : { prefixes: compiled.textKeys.prefixes }
|
|
5055
5171
|
}),
|
|
5056
5172
|
jsx(DialogFooter, { children: jsx(Button, {
|
|
5057
5173
|
type: "button",
|
|
@@ -5117,6 +5233,7 @@ function BulkActionToolbar({ resource: resourceInput, table, selectedRecords, se
|
|
|
5117
5233
|
resource,
|
|
5118
5234
|
actionName: action.name,
|
|
5119
5235
|
ids,
|
|
5236
|
+
records,
|
|
5120
5237
|
onSelectionChange: (next) => {
|
|
5121
5238
|
if (onSelectionChange !== void 0) onSelectionChange(next);
|
|
5122
5239
|
else if (next.length === 0) handleClear();
|
|
@@ -5435,6 +5552,14 @@ function CreateButton({ resource: resourceInput, href, testid, size = "sm", vari
|
|
|
5435
5552
|
resource,
|
|
5436
5553
|
defaultValue: "Create"
|
|
5437
5554
|
});
|
|
5555
|
+
const undecided = jsx(UndecidedAction, {
|
|
5556
|
+
label: text,
|
|
5557
|
+
icon: "Plus",
|
|
5558
|
+
testid,
|
|
5559
|
+
size,
|
|
5560
|
+
variant,
|
|
5561
|
+
className
|
|
5562
|
+
});
|
|
5438
5563
|
if (onOpen !== void 0) {
|
|
5439
5564
|
const answer = gate(resource, "create");
|
|
5440
5565
|
if (answer.state === "disabled") return jsx(DisabledAction, {
|
|
@@ -5447,6 +5572,7 @@ function CreateButton({ resource: resourceInput, href, testid, size = "sm", vari
|
|
|
5447
5572
|
className,
|
|
5448
5573
|
resource
|
|
5449
5574
|
});
|
|
5575
|
+
if (answer.state === "undecided") return undecided;
|
|
5450
5576
|
if (answer.state !== "open") return null;
|
|
5451
5577
|
return jsxs(Button, {
|
|
5452
5578
|
type: "button",
|
|
@@ -5462,6 +5588,7 @@ function CreateButton({ resource: resourceInput, href, testid, size = "sm", vari
|
|
|
5462
5588
|
});
|
|
5463
5589
|
}
|
|
5464
5590
|
if (availability.state === "absent" || availability.state === "hidden") return null;
|
|
5591
|
+
if (availability.state === "undecided") return undecided;
|
|
5465
5592
|
if (availability.state === "disabled") return jsx(DisabledAction, {
|
|
5466
5593
|
reason: availability.reason,
|
|
5467
5594
|
label: text,
|
|
@@ -5505,6 +5632,10 @@ const ListCreate = listPiece("ListCreate", ListCreateView);
|
|
|
5505
5632
|
//#endregion
|
|
5506
5633
|
//#region src/export/export-button.tsx
|
|
5507
5634
|
const warnedProviderQueryResources = new Set();
|
|
5635
|
+
const EXPORT_TARGET = {
|
|
5636
|
+
kind: "action",
|
|
5637
|
+
name: "export"
|
|
5638
|
+
};
|
|
5508
5639
|
function ExportButton({ resource: resourceInput, className }) {
|
|
5509
5640
|
const resource = routeResourceKey(resourceInput);
|
|
5510
5641
|
if (!(useOptionalDataRuntime() !== null)) return null;
|
|
@@ -5518,12 +5649,11 @@ function ExportButtonActive({ resource, className }) {
|
|
|
5518
5649
|
const { available, prefetch } = useResourceExport(resource);
|
|
5519
5650
|
const capability = useCapability("run", {
|
|
5520
5651
|
resource,
|
|
5521
|
-
target:
|
|
5522
|
-
kind: "action",
|
|
5523
|
-
name: "export"
|
|
5524
|
-
},
|
|
5652
|
+
target: EXPORT_TARGET,
|
|
5525
5653
|
mode: "list"
|
|
5526
5654
|
});
|
|
5655
|
+
const app = useApp();
|
|
5656
|
+
const undecided = usePermissionsUndecided() && addressesCapability(app.ruleSource.rules(resource), "run", EXPORT_TARGET);
|
|
5527
5657
|
const tid = useTestIds();
|
|
5528
5658
|
const t = useOptionalT();
|
|
5529
5659
|
const [open, setOpen] = React.useState(false);
|
|
@@ -5541,18 +5671,35 @@ function ExportButtonActive({ resource, className }) {
|
|
|
5541
5671
|
if (target !== null) lastTarget.current = target;
|
|
5542
5672
|
const dialogTarget = target ?? lastTarget.current;
|
|
5543
5673
|
React.useEffect(() => {
|
|
5544
|
-
if (!available || !capability.allowed) return;
|
|
5674
|
+
if (!available || undecided || !capability.allowed) return;
|
|
5545
5675
|
if (list.providerQuery.value === void 0) return;
|
|
5546
5676
|
if (warnedProviderQueryResources.has(resource)) return;
|
|
5547
5677
|
warnedProviderQueryResources.add(resource);
|
|
5548
5678
|
console.warn(`[buro] ExportButton('${resource}'): this list is narrowed by \`providerQuery\` (a raw provider blob), which an export target cannot carry — the exported file will NOT be narrowed by it. See docs/adopters/data-export.md.`);
|
|
5549
5679
|
}, [
|
|
5550
5680
|
available,
|
|
5681
|
+
undecided,
|
|
5551
5682
|
capability.allowed,
|
|
5552
5683
|
list.providerQuery.value,
|
|
5553
5684
|
resource
|
|
5554
5685
|
]);
|
|
5555
|
-
if (!available ||
|
|
5686
|
+
if (!available || list.isForbidden) return null;
|
|
5687
|
+
if (undecided) return jsx(Button, {
|
|
5688
|
+
type: "button",
|
|
5689
|
+
variant: "outline",
|
|
5690
|
+
size: "icon",
|
|
5691
|
+
"aria-label": t("export.button.label"),
|
|
5692
|
+
title: t("export.button.label"),
|
|
5693
|
+
className: cn("h-8 w-8", className),
|
|
5694
|
+
"data-testid": tid.exportButton(resource),
|
|
5695
|
+
disabled: true,
|
|
5696
|
+
"aria-busy": "true",
|
|
5697
|
+
children: jsx(IconDownload, {
|
|
5698
|
+
className: "size-4",
|
|
5699
|
+
"aria-hidden": "true"
|
|
5700
|
+
})
|
|
5701
|
+
});
|
|
5702
|
+
if (!capability.allowed) return null;
|
|
5556
5703
|
if (target === null && !open) return null;
|
|
5557
5704
|
if (dialogTarget === null) return null;
|
|
5558
5705
|
return jsxs(Fragment$1, { children: [target === null ? null : jsx(Button, {
|
|
@@ -6085,6 +6232,7 @@ function BuroPeekFrame({ slots }) {
|
|
|
6085
6232
|
//#endregion
|
|
6086
6233
|
//#region src/record/frame-context.ts
|
|
6087
6234
|
const FrameChromeContext = createContext(null);
|
|
6235
|
+
const ItemActionsOffContext = createContext(false);
|
|
6088
6236
|
function useFrameChrome() {
|
|
6089
6237
|
const chrome = useContext(FrameChromeContext);
|
|
6090
6238
|
if (chrome === null) throw new Error("[burojs] useRecordFrame() must be called inside <RecordScreen>");
|
|
@@ -6122,7 +6270,7 @@ function RecordActionsView() {
|
|
|
6122
6270
|
const { extraActions } = useFrameChrome();
|
|
6123
6271
|
const id = useFrameId();
|
|
6124
6272
|
const holder = useScreenState()?.inline;
|
|
6125
|
-
if (mode === "create" || record === void 0 || id === void 0) return null;
|
|
6273
|
+
if (useContext(ItemActionsOffContext) || mode === "create" || record === void 0 || id === void 0) return null;
|
|
6126
6274
|
const row = withRecordKeys(policyRecordOf(controller) ?? record, { id });
|
|
6127
6275
|
holder?.declare(inlineFlowNames(controller.screen, controller.plan));
|
|
6128
6276
|
return jsxs("div", {
|
|
@@ -6223,7 +6371,7 @@ function FormActionsView() {
|
|
|
6223
6371
|
}, {
|
|
6224
6372
|
has: caps.has,
|
|
6225
6373
|
t: caps.t,
|
|
6226
|
-
...declared === void 0 ? {} : { fieldKey: `resources.${resource}
|
|
6374
|
+
...declared === void 0 ? {} : { fieldKey: `resources.${resource}.${propertyTextKey(issue.path)}` }
|
|
6227
6375
|
});
|
|
6228
6376
|
if (issue.path.length === 0 && message === failure) return [];
|
|
6229
6377
|
return [{
|
|
@@ -6722,8 +6870,8 @@ function declaresDisplay(field) {
|
|
|
6722
6870
|
return field !== void 0 && resolveSurfaceUi(field, "column").use !== void 0;
|
|
6723
6871
|
}
|
|
6724
6872
|
const NO_INITIAL_FILTERS = Object.freeze({});
|
|
6725
|
-
const RelatedCards = lazy(async () => ({ default: (await import("./related-list-cards-
|
|
6726
|
-
const RelatedTimeline = lazy(async () => ({ default: (await import("./related-list-timeline-
|
|
6873
|
+
const RelatedCards = lazy(async () => ({ default: (await import("./related-list-cards-Dcmruy09.js")).RelatedCards }));
|
|
6874
|
+
const RelatedTimeline = lazy(async () => ({ default: (await import("./related-list-timeline-DZON_qSc.js")).RelatedTimeline }));
|
|
6727
6875
|
function discriminatorOptionLabel(field, value) {
|
|
6728
6876
|
const text = fieldOptionText(field, value);
|
|
6729
6877
|
if (text !== void 0) return text;
|
|
@@ -7910,16 +8058,15 @@ function byOf(field) {
|
|
|
7910
8058
|
}
|
|
7911
8059
|
const MAX_TARGET_HOPS = 2;
|
|
7912
8060
|
function targetColumns(registry, target, def) {
|
|
7913
|
-
if (
|
|
7914
|
-
const source = def;
|
|
8061
|
+
if (def === void 0) return [];
|
|
7915
8062
|
const views = isRecord(def.views) ? def.views : void 0;
|
|
7916
8063
|
const list = views !== void 0 && isRecord(views.list) ? views.list : void 0;
|
|
7917
8064
|
return (list !== void 0 && Array.isArray(list.columns) ? list.columns.flatMap((entry) => {
|
|
7918
8065
|
const name = isRecord(entry) ? entry.field : entry;
|
|
7919
8066
|
return typeof name === "string" ? [name] : [];
|
|
7920
|
-
}) : dtoFields(
|
|
8067
|
+
}) : dtoFields(def, "list")).filter((name) => {
|
|
7921
8068
|
if (name.includes(".")) return name.split(".").length - 1 <= MAX_TARGET_HOPS && resolveColumnField(registry, target, name) !== void 0;
|
|
7922
|
-
const field = peekFieldDefinition(
|
|
8069
|
+
const field = peekFieldDefinition(def, name);
|
|
7923
8070
|
return isRecord(field) && !isRelationField(field) && fieldSensitivity(field) === void 0;
|
|
7924
8071
|
});
|
|
7925
8072
|
}
|
|
@@ -8114,7 +8261,7 @@ function RelatedListView({ props, empty }) {
|
|
|
8114
8261
|
...route.renderCell === void 0 ? {} : { renderCell: route.renderCell },
|
|
8115
8262
|
...route.emptyState === void 0 ? {} : { emptyState: route.emptyState }
|
|
8116
8263
|
});
|
|
8117
|
-
if (own.view !== void 0 && own.view !== "table" && permissions
|
|
8264
|
+
if (own.view !== void 0 && own.view !== "table" && permissionsUndecided(permissions)) return jsx("div", {
|
|
8118
8265
|
role: "status",
|
|
8119
8266
|
"aria-busy": "true",
|
|
8120
8267
|
"data-testid": `list-undecided:${resource}`,
|
|
@@ -8531,6 +8678,6 @@ function PlaceNode({ node }) {
|
|
|
8531
8678
|
});
|
|
8532
8679
|
}
|
|
8533
8680
|
//#endregion
|
|
8534
|
-
export {
|
|
8681
|
+
export { ResourceList as $, FilterRegion as A, DeepLinkScope as At, BulkActionToolbar as B, useShell as Bt, useFrameChrome as C, ActionOverflow as Ct, ListLive as D, EnumBadge as Dt, SavedViewsDropdown as E, downloadArtifact as Et, CreateButton as F, FieldValueFrame as Ft, QuickScreenClaimContext as G, DeclarativeForm as H, ListColumns as I, toDisplayText as It, useIsRouteScreen as J, RouteScreenClaimContext as K, ColumnsToggle as L, ShellProvider as Lt, ListExport as M, Field as Mt, ExportButton as N, FieldDisplay as Nt, ListFlows as O, EnumSettlingRow as Ot, ListCreate as P, i18nPrefixToRef$1 as Pt, ListBody as Q, DataTableViewOptions as R, defaultUserMapper as Rt, ItemActionsOffContext as S, typography as St, ListSavedViews as T, useExportRunWatcher as Tt, ScreenTree as U, ExportDialog as V, useTabsUrlState as W, useFormControl as X, FormControlProvider as Y, useFormControlOf as Z, CopyId as _, PageHeader as _t, peekFieldDefinition as a, useBuroDataTable as at, RecordTitle as b, DocumentTitleProvider as bt, peekRow as c, Tabs as ct, resolveFrameView as d, TabsTrigger as dt, CursorLoadMore as et, shadcnFrameViews as f, RelatedItem as ft, UndeclaredTypeNotice as g, EditPageHeader as gt, TypeChromeDrawnContext as h, RelatedTimelineSkeleton as ht, RouteListContext as i, tanStackSortingToBuro as it, ListSearchInput as j, AppFlowButton as jt, ListFilters as k, unknownEnumValueLabel as kt, useRelationPicker as l, TabsContent as lt, HeaderTypeNotice as m, RELATED_GRID_CLASS as mt, viewOf as n, buroSortingToTanStack as nt, peekLeafAllowed as o, DataTable as ot, ChangeTypeButton as p, useItemDrawn as pt, RouteScreenContext as q, shadcnBlockImplementations as r, resolveUpdater as rt, peekRecord as s, Checkbox as st, selectImplementation as t, ListErrorState as tt, isBuiltinRecordView as u, TabsList as ut, FormActions as v, ShowPageHeader as vt, ListControls as w, useShownItemActions as wt, FrameChromeContext as x, useDocumentTitle as xt, RecordActions as y, resolveResourceTitle as yt, ListBulkBar as z, usePaletteState as zt };
|
|
8535
8682
|
|
|
8536
|
-
//# sourceMappingURL=place-node-
|
|
8683
|
+
//# sourceMappingURL=place-node-DwWAigv0.js.map
|