@marktiderman/genesis-ui 1.3.0 → 2.0.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/AppShell-BJarYZzz.d.ts +198 -0
- package/dist/{chunk-NJMO3VPA.js → chunk-22XB3Q6H.js} +8 -8
- package/dist/chunk-22XB3Q6H.js.map +1 -0
- package/dist/{chunk-2MXMWBDV.js → chunk-27ELYTGE.js} +6 -6
- package/dist/chunk-27ELYTGE.js.map +1 -0
- package/dist/chunk-46TZGMFW.js +159 -0
- package/dist/chunk-46TZGMFW.js.map +1 -0
- package/dist/chunk-4CQHPWJD.js +117 -0
- package/dist/chunk-4CQHPWJD.js.map +1 -0
- package/dist/{chunk-ZDAT5JDH.js → chunk-65SPT7EA.js} +24 -6
- package/dist/chunk-65SPT7EA.js.map +1 -0
- package/dist/chunk-6KHY647C.js +67 -0
- package/dist/chunk-6KHY647C.js.map +1 -0
- package/dist/chunk-6M4NHHKG.js +51 -0
- package/dist/chunk-6M4NHHKG.js.map +1 -0
- package/dist/chunk-6Q6CLLJ4.js +9 -0
- package/dist/chunk-6Q6CLLJ4.js.map +1 -0
- package/dist/{chunk-UGHQFQOE.js → chunk-6TVMQH6M.js} +28 -28
- package/dist/chunk-6TVMQH6M.js.map +1 -0
- package/dist/{chunk-6VVVGYKS.js → chunk-6XPMU65K.js} +5 -5
- package/dist/{chunk-6VVVGYKS.js.map → chunk-6XPMU65K.js.map} +1 -1
- package/dist/{chunk-YZEA5TGK.js → chunk-7XMZVISM.js} +16 -16
- package/dist/chunk-7XMZVISM.js.map +1 -0
- package/dist/chunk-A7AHVDG7.js +52 -0
- package/dist/chunk-A7AHVDG7.js.map +1 -0
- package/dist/chunk-AFZ76Q26.js +84 -0
- package/dist/chunk-AFZ76Q26.js.map +1 -0
- package/dist/{chunk-4V4H2ZM7.js → chunk-AL5TMEZQ.js} +31 -31
- package/dist/chunk-AL5TMEZQ.js.map +1 -0
- package/dist/{chunk-AUECDWP2.js → chunk-AOZGQM6W.js} +3 -3
- package/dist/chunk-AOZGQM6W.js.map +1 -0
- package/dist/chunk-ARJI2JUV.js +122 -0
- package/dist/chunk-ARJI2JUV.js.map +1 -0
- package/dist/chunk-AVFZ4P4B.js +25 -0
- package/dist/chunk-AVFZ4P4B.js.map +1 -0
- package/dist/chunk-B2GIBUQD.js +11 -0
- package/dist/chunk-B2GIBUQD.js.map +1 -0
- package/dist/{chunk-JXI2MYL3.js → chunk-C46ITXE4.js} +5 -5
- package/dist/chunk-C46ITXE4.js.map +1 -0
- package/dist/{chunk-A2OXCNNY.js → chunk-CNTWQSUT.js} +3 -3
- package/dist/{chunk-A2OXCNNY.js.map → chunk-CNTWQSUT.js.map} +1 -1
- package/dist/chunk-D2LIXA2Y.js +65 -0
- package/dist/chunk-D2LIXA2Y.js.map +1 -0
- package/dist/{chunk-T5VX5DYO.js → chunk-F47U5KNW.js} +5 -5
- package/dist/chunk-F47U5KNW.js.map +1 -0
- package/dist/chunk-FEJAZFP3.js +1100 -0
- package/dist/chunk-FEJAZFP3.js.map +1 -0
- package/dist/{chunk-2B3MFHBQ.js → chunk-FK42ZGGV.js} +21 -21
- package/dist/chunk-FK42ZGGV.js.map +1 -0
- package/dist/{chunk-XISSLIMH.js → chunk-FTTNGGLA.js} +2 -2
- package/dist/{chunk-XISSLIMH.js.map → chunk-FTTNGGLA.js.map} +1 -1
- package/dist/chunk-G5YKBPBF.js +74 -0
- package/dist/chunk-G5YKBPBF.js.map +1 -0
- package/dist/{chunk-KB5T5LWM.js → chunk-IJCT5IJD.js} +3 -3
- package/dist/{chunk-KB5T5LWM.js.map → chunk-IJCT5IJD.js.map} +1 -1
- package/dist/{chunk-44TULYGG.js → chunk-J6FBA7PH.js} +3 -3
- package/dist/{chunk-44TULYGG.js.map → chunk-J6FBA7PH.js.map} +1 -1
- package/dist/chunk-JAMLFMDS.js +12 -0
- package/dist/chunk-JAMLFMDS.js.map +1 -0
- package/dist/{chunk-C6H7AMO4.js → chunk-LNFF2RBD.js} +9 -9
- package/dist/chunk-LNFF2RBD.js.map +1 -0
- package/dist/{chunk-QBZMY2AF.js → chunk-M62CHO3N.js} +18 -18
- package/dist/chunk-M62CHO3N.js.map +1 -0
- package/dist/{chunk-5Q4FABZQ.js → chunk-NUXW6NPP.js} +8 -8
- package/dist/chunk-NUXW6NPP.js.map +1 -0
- package/dist/{chunk-ZJFSZFPI.js → chunk-NWSCYLPT.js} +77 -18
- package/dist/chunk-NWSCYLPT.js.map +1 -0
- package/dist/{chunk-63FW5ZUA.js → chunk-P3ZL6FGR.js} +7 -7
- package/dist/chunk-P3ZL6FGR.js.map +1 -0
- package/dist/chunk-P64MFQXZ.js +191 -0
- package/dist/chunk-P64MFQXZ.js.map +1 -0
- package/dist/chunk-PLIYF6KI.js +52 -0
- package/dist/chunk-PLIYF6KI.js.map +1 -0
- package/dist/chunk-PSR47JRA.js +26 -0
- package/dist/chunk-PSR47JRA.js.map +1 -0
- package/dist/{chunk-QLCDAFS7.js → chunk-Q4I4SFBD.js} +3 -3
- package/dist/chunk-Q4I4SFBD.js.map +1 -0
- package/dist/{chunk-SBJV3K4G.js → chunk-QJ6P2DW6.js} +28 -28
- package/dist/chunk-QJ6P2DW6.js.map +1 -0
- package/dist/{chunk-IP6TMT3D.js → chunk-R7QFP6EL.js} +3 -3
- package/dist/chunk-R7QFP6EL.js.map +1 -0
- package/dist/{chunk-WZWR2ELB.js → chunk-SEBU6JCK.js} +6 -6
- package/dist/chunk-SEBU6JCK.js.map +1 -0
- package/dist/{chunk-7OBL3H5P.js → chunk-SEFK4NZV.js} +3 -3
- package/dist/chunk-SEFK4NZV.js.map +1 -0
- package/dist/chunk-SRIT4NFQ.js +67 -0
- package/dist/chunk-SRIT4NFQ.js.map +1 -0
- package/dist/chunk-SY62XJFA.js +19 -0
- package/dist/chunk-SY62XJFA.js.map +1 -0
- package/dist/{chunk-SVXDWPLO.js → chunk-THD3YOOZ.js} +17 -17
- package/dist/chunk-THD3YOOZ.js.map +1 -0
- package/dist/chunk-VXFYETRK.js +58 -0
- package/dist/chunk-VXFYETRK.js.map +1 -0
- package/dist/chunk-XBX6QMR5.js +58 -0
- package/dist/chunk-XBX6QMR5.js.map +1 -0
- package/dist/{chunk-SCUT2ZCD.js → chunk-XCGZPFT7.js} +17 -17
- package/dist/chunk-XCGZPFT7.js.map +1 -0
- package/dist/chunk-XMK3T4TA.js +73 -0
- package/dist/chunk-XMK3T4TA.js.map +1 -0
- package/dist/chunk-YJ6MPS6U.js +226 -0
- package/dist/chunk-YJ6MPS6U.js.map +1 -0
- package/dist/chunk-YRYQXU3G.js +38 -0
- package/dist/chunk-YRYQXU3G.js.map +1 -0
- package/dist/{chunk-5J7BP5DI.js → chunk-YWFPMND7.js} +10 -10
- package/dist/chunk-YWFPMND7.js.map +1 -0
- package/dist/chunk-YYEGAFUE.js +94 -0
- package/dist/chunk-YYEGAFUE.js.map +1 -0
- package/dist/{chunk-TKA4LOMT.js → chunk-ZZ7H7VVX.js} +8 -8
- package/dist/chunk-ZZ7H7VVX.js.map +1 -0
- package/dist/components/data/index.d.ts +194 -211
- package/dist/components/data/index.js +362 -1381
- package/dist/components/data/index.js.map +1 -1
- package/dist/components/layout/dashboard-page.d.ts +4 -0
- package/dist/components/layout/dashboard-page.js +5 -0
- package/dist/components/layout/dashboard-page.js.map +1 -0
- package/dist/components/layout/detail-page.d.ts +91 -0
- package/dist/components/layout/detail-page.js +6 -0
- package/dist/components/layout/detail-page.js.map +1 -0
- package/dist/components/layout/form-page.d.ts +82 -0
- package/dist/components/layout/form-page.js +5 -0
- package/dist/components/layout/form-page.js.map +1 -0
- package/dist/components/layout/index.d.ts +15 -0
- package/dist/components/layout/index.js +21 -0
- package/dist/components/layout/index.js.map +1 -0
- package/dist/components/layout/settings-page.d.ts +114 -0
- package/dist/components/layout/settings-page.js +6 -0
- package/dist/components/layout/settings-page.js.map +1 -0
- package/dist/components/patterns/empty-state.d.ts +74 -0
- package/dist/components/{ui → patterns}/empty-state.js +2 -1
- package/dist/components/{ui → patterns}/form-field.d.ts +2 -2
- package/dist/components/{ui → patterns}/form-field.js +2 -2
- package/dist/components/patterns/index.d.ts +18 -0
- package/dist/components/patterns/index.js +18 -0
- package/dist/components/patterns/index.js.map +1 -0
- package/dist/components/patterns/page-loading.d.ts +25 -0
- package/dist/components/patterns/page-loading.js +5 -0
- package/dist/components/patterns/page-loading.js.map +1 -0
- package/dist/components/patterns/settings-row.d.ts +42 -0
- package/dist/components/patterns/settings-row.js +6 -0
- package/dist/components/patterns/settings-row.js.map +1 -0
- package/dist/components/patterns/status-badge.d.ts +38 -0
- package/dist/components/patterns/status-badge.js +4 -0
- package/dist/components/patterns/status-badge.js.map +1 -0
- package/dist/components/patterns/toggle-row.d.ts +36 -0
- package/dist/components/patterns/toggle-row.js +8 -0
- package/dist/components/patterns/toggle-row.js.map +1 -0
- package/dist/components/patterns/user-avatar.d.ts +34 -0
- package/dist/components/patterns/user-avatar.js +5 -0
- package/dist/components/patterns/user-avatar.js.map +1 -0
- package/dist/components/ui/accessible-icon.d.ts +48 -0
- package/dist/components/ui/accessible-icon.js +3 -0
- package/dist/components/ui/accessible-icon.js.map +1 -0
- package/dist/components/ui/accordion.d.ts +5 -5
- package/dist/components/ui/accordion.js +1 -1
- package/dist/components/ui/alert-dialog.d.ts +10 -10
- package/dist/components/ui/alert-dialog.js +1 -1
- package/dist/components/ui/aspect-ratio.d.ts +2 -2
- package/dist/components/ui/aspect-ratio.js +1 -1
- package/dist/components/ui/avatar.d.ts +4 -4
- package/dist/components/ui/avatar.js +1 -1
- package/dist/components/ui/button.d.ts +73 -8
- package/dist/components/ui/button.js +1 -1
- package/dist/components/ui/calendar.js +2 -2
- package/dist/components/ui/carousel.d.ts +4 -3
- package/dist/components/ui/carousel.js +2 -2
- package/dist/components/ui/checkbox.d.ts +2 -2
- package/dist/components/ui/checkbox.js +1 -1
- package/dist/components/ui/collapsible.d.ts +4 -4
- package/dist/components/ui/collapsible.js +1 -1
- package/dist/components/ui/command-palette.js +3 -3
- package/dist/components/ui/command.d.ts +9 -9
- package/dist/components/ui/command.js +2 -2
- package/dist/components/ui/context-menu.d.ts +15 -15
- package/dist/components/ui/context-menu.js +1 -1
- package/dist/components/ui/date-picker.js +4 -4
- package/dist/components/ui/dialog.d.ts +9 -9
- package/dist/components/ui/dialog.js +1 -1
- package/dist/components/ui/drawer.d.ts +7 -7
- package/dist/components/ui/dropdown-menu.d.ts +15 -15
- package/dist/components/ui/dropdown-menu.js +1 -1
- package/dist/components/ui/hover-card.d.ts +4 -4
- package/dist/components/ui/hover-card.js +1 -1
- package/dist/components/ui/input-otp.d.ts +2 -2
- package/dist/components/ui/label.d.ts +2 -2
- package/dist/components/ui/label.js +1 -1
- package/dist/components/ui/menubar.d.ts +16 -16
- package/dist/components/ui/menubar.js +1 -1
- package/dist/components/ui/navigation-menu.d.ts +9 -9
- package/dist/components/ui/navigation-menu.js +1 -1
- package/dist/components/ui/pagination.js +2 -2
- package/dist/components/ui/password-toggle-field.d.ts +121 -0
- package/dist/components/ui/password-toggle-field.js +4 -0
- package/dist/components/ui/password-toggle-field.js.map +1 -0
- package/dist/components/ui/popover.d.ts +4 -4
- package/dist/components/ui/popover.js +1 -1
- package/dist/components/ui/radio-group.d.ts +3 -3
- package/dist/components/ui/radio-group.js +1 -1
- package/dist/components/ui/resizable.d.ts +1 -1
- package/dist/components/ui/scroll-area.d.ts +60 -3
- package/dist/components/ui/scroll-area.js +1 -1
- package/dist/components/ui/select.d.ts +9 -9
- package/dist/components/ui/select.js +1 -1
- package/dist/components/ui/sheet.d.ts +11 -9
- package/dist/components/ui/sheet.js +1 -1
- package/dist/components/ui/slider.d.ts +2 -2
- package/dist/components/ui/slider.js +1 -1
- package/dist/components/ui/switch.d.ts +2 -2
- package/dist/components/ui/switch.js +1 -1
- package/dist/components/ui/tabs.d.ts +29 -14
- package/dist/components/ui/tabs.js +1 -1
- package/dist/components/ui/toggle-group.d.ts +3 -3
- package/dist/components/ui/toggle-group.js +2 -2
- package/dist/components/ui/toggle.d.ts +2 -2
- package/dist/components/ui/toggle.js +1 -1
- package/dist/components/ui/toolbar.d.ts +104 -0
- package/dist/components/ui/toolbar.js +6 -0
- package/dist/components/ui/toolbar.js.map +1 -0
- package/dist/components/ui/tooltip.d.ts +46 -4
- package/dist/components/ui/tooltip.js +1 -1
- package/dist/components/ui/visually-hidden.d.ts +48 -0
- package/dist/components/ui/visually-hidden.js +4 -0
- package/dist/components/ui/visually-hidden.js.map +1 -0
- package/dist/dashboard-page-C0TihRl5.d.ts +107 -0
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.js +6 -6
- package/dist/hooks/use-keyboard-navigation.d.ts +58 -2
- package/dist/hooks/use-keyboard-navigation.js +1 -1
- package/dist/hooks/use-resource-page.d.ts +2 -2
- package/dist/hooks/use-resource-page.js +2 -2
- package/dist/hooks/use-view-preference.d.ts +1 -1
- package/dist/hooks/use-view-preference.js +1 -1
- package/dist/index.d.ts +23 -25
- package/dist/index.js +54 -38
- package/dist/spacing-BS6qECD4.d.ts +191 -0
- package/dist/split-Dk9f4Mi0.d.ts +57 -0
- package/dist/{use-resource-page-BXBv_Xah.d.ts → use-resource-page-CPs6wjKt.d.ts} +1 -1
- package/dist/view-settings--KXNT_jE.d.ts +12 -0
- package/package.json +73 -32
- package/dist/chunk-2B3MFHBQ.js.map +0 -1
- package/dist/chunk-2MXMWBDV.js.map +0 -1
- package/dist/chunk-4V4H2ZM7.js.map +0 -1
- package/dist/chunk-5J7BP5DI.js.map +0 -1
- package/dist/chunk-5Q4FABZQ.js.map +0 -1
- package/dist/chunk-63FW5ZUA.js.map +0 -1
- package/dist/chunk-7OBL3H5P.js.map +0 -1
- package/dist/chunk-AUECDWP2.js.map +0 -1
- package/dist/chunk-C6H7AMO4.js.map +0 -1
- package/dist/chunk-EI5EGKHL.js +0 -32
- package/dist/chunk-EI5EGKHL.js.map +0 -1
- package/dist/chunk-IP6TMT3D.js.map +0 -1
- package/dist/chunk-JJ4NOMMI.js +0 -73
- package/dist/chunk-JJ4NOMMI.js.map +0 -1
- package/dist/chunk-JXI2MYL3.js.map +0 -1
- package/dist/chunk-KBS4BHME.js +0 -11
- package/dist/chunk-KBS4BHME.js.map +0 -1
- package/dist/chunk-LRXDZBV2.js +0 -26
- package/dist/chunk-LRXDZBV2.js.map +0 -1
- package/dist/chunk-NJMO3VPA.js.map +0 -1
- package/dist/chunk-OCTV3S4I.js +0 -29
- package/dist/chunk-OCTV3S4I.js.map +0 -1
- package/dist/chunk-QBZMY2AF.js.map +0 -1
- package/dist/chunk-QLCDAFS7.js.map +0 -1
- package/dist/chunk-SBJV3K4G.js.map +0 -1
- package/dist/chunk-SCUT2ZCD.js.map +0 -1
- package/dist/chunk-SVXDWPLO.js.map +0 -1
- package/dist/chunk-T465NJRL.js +0 -134
- package/dist/chunk-T465NJRL.js.map +0 -1
- package/dist/chunk-T5VX5DYO.js.map +0 -1
- package/dist/chunk-TKA4LOMT.js.map +0 -1
- package/dist/chunk-UGHQFQOE.js.map +0 -1
- package/dist/chunk-WALXVR6V.js +0 -9
- package/dist/chunk-WALXVR6V.js.map +0 -1
- package/dist/chunk-WZWR2ELB.js.map +0 -1
- package/dist/chunk-YZEA5TGK.js.map +0 -1
- package/dist/chunk-ZDAT5JDH.js.map +0 -1
- package/dist/chunk-ZJFSZFPI.js.map +0 -1
- package/dist/components/ui/empty-state.d.ts +0 -22
- /package/dist/components/{ui → patterns}/empty-state.js.map +0 -0
- /package/dist/components/{ui → patterns}/form-field.js.map +0 -0
- /package/dist/{ViewToggle-DDe_Luj2.d.ts → view-toggle-DDe_Luj2.d.ts} +0 -0
|
@@ -1,84 +1,26 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { ReactNode, RefObject } from 'react';
|
|
4
|
+
import { c as PageHeaderOptions, A as AppShell$1, P as PageHeader$1 } from '../../AppShell-BJarYZzz.js';
|
|
5
|
+
export { a as AppShellOptions, b as AppShellProps, N as NavItem, d as PageHeaderProps } from '../../AppShell-BJarYZzz.js';
|
|
6
|
+
import { V as ViewMode } from '../../view-toggle-DDe_Luj2.js';
|
|
7
|
+
export { a as ViewToggle } from '../../view-toggle-DDe_Luj2.js';
|
|
4
8
|
import { LucideIcon } from 'lucide-react';
|
|
5
|
-
import { V as ViewMode } from '../../ViewToggle-DDe_Luj2.js';
|
|
6
|
-
export { a as ViewToggle } from '../../ViewToggle-DDe_Luj2.js';
|
|
7
9
|
import { Density } from '../../hooks/use-view-settings.js';
|
|
8
|
-
import { a as ResourceColumnDef } from '../../use-resource-page-
|
|
9
|
-
export { D as DataTable, c as DataTableColumn, d as DataTableProps, L as LinkCell,
|
|
10
|
+
import { R as ResourceActions, a as ResourceColumnDef } from '../../use-resource-page-CPs6wjKt.js';
|
|
11
|
+
export { D as DataTable, c as DataTableColumn, d as DataTableProps, L as LinkCell, T as ThumbnailCell } from '../../use-resource-page-CPs6wjKt.js';
|
|
12
|
+
export { EmptyState } from '../patterns/empty-state.js';
|
|
13
|
+
export { V as ViewSettings } from '../../view-settings--KXNT_jE.js';
|
|
10
14
|
import { L as LinkComponent, N as NavigateFn } from '../../navigation-CpOEyUSb.js';
|
|
11
15
|
export { D as DefaultLink, G as GenesisLinkProps, d as defaultNavigate, i as isPathActive } from '../../navigation-CpOEyUSb.js';
|
|
12
16
|
import { UseFormReturn, Control, FieldErrors } from 'react-hook-form';
|
|
13
17
|
import { WizardStep, UseResourceOptions } from '@marktiderman/genesis-core/hooks';
|
|
14
|
-
import { FilterParam } from '@marktiderman/genesis-core/provider';
|
|
18
|
+
import { FilterParam, BaseRecord, Identifier } from '@marktiderman/genesis-core/provider';
|
|
15
19
|
import { ResourceFormFieldDef } from '@marktiderman/genesis-core';
|
|
16
20
|
export { FieldType, ResourceFormFieldDef, SelectOption } from '@marktiderman/genesis-core';
|
|
17
21
|
export { CommandPalette, CommandPaletteItem, CommandPaletteProps, useCommandPaletteHotkey } from '../ui/command-palette.js';
|
|
18
22
|
export { UseSavedViewsReturn, useSavedViews } from '../../hooks/use-saved-views.js';
|
|
19
23
|
|
|
20
|
-
/**
|
|
21
|
-
* Declarative chrome for PageHeader — developer defaults + optional
|
|
22
|
-
* in-header user toggles (Notion/Linear “customize view” pattern).
|
|
23
|
-
*
|
|
24
|
-
* @stability Beta
|
|
25
|
-
*/
|
|
26
|
-
interface PageHeaderOptions {
|
|
27
|
-
showIcon?: boolean;
|
|
28
|
-
showSubtitle?: boolean;
|
|
29
|
-
showCount?: boolean;
|
|
30
|
-
showViewToggle?: boolean;
|
|
31
|
-
showViewSettings?: boolean;
|
|
32
|
-
showCreate?: boolean;
|
|
33
|
-
/** Ghost ListFilter control in the actions cluster */
|
|
34
|
-
showDetailsToggle?: boolean;
|
|
35
|
-
/** Quiet hint beside actions while details are collapsed */
|
|
36
|
-
showDetailsHint?: boolean;
|
|
37
|
-
/** Move subtitle into the details panel (default true when details exist) */
|
|
38
|
-
subtitleInDetails?: boolean;
|
|
39
|
-
defaultDetailsOpen?: boolean;
|
|
40
|
-
detailsLabel?: string;
|
|
41
|
-
/**
|
|
42
|
-
* Show the in-header Header options popover so users can customize chrome.
|
|
43
|
-
* Default true when the header has more than one chrome affordance.
|
|
44
|
-
*/
|
|
45
|
-
configurable?: boolean;
|
|
46
|
-
}
|
|
47
|
-
interface PageHeaderProps {
|
|
48
|
-
title: string;
|
|
49
|
-
subtitle?: string;
|
|
50
|
-
icon?: LucideIcon;
|
|
51
|
-
/**
|
|
52
|
-
* Header chrome config (developer defaults). Merged under user picks from
|
|
53
|
-
* the in-header options menu when `options.configurable` / storage is on.
|
|
54
|
-
*/
|
|
55
|
-
options?: PageHeaderOptions;
|
|
56
|
-
/** Persist user header-option overrides (localStorage) */
|
|
57
|
-
optionsStorageKey?: string;
|
|
58
|
-
/** Extra trailing actions (after create); prefer first-class slots below */
|
|
59
|
-
actions?: ReactNode;
|
|
60
|
-
/** Collapsible details region below the title row */
|
|
61
|
-
details?: ReactNode;
|
|
62
|
-
detailsOpen?: boolean;
|
|
63
|
-
onDetailsOpenChange?: (open: boolean) => void;
|
|
64
|
-
detailsActive?: boolean;
|
|
65
|
-
detailsHint?: ReactNode;
|
|
66
|
-
/** Count badge */
|
|
67
|
-
count?: number;
|
|
68
|
-
totalCount?: number;
|
|
69
|
-
/** Singular entity for “N rows” copy when unfiltered */
|
|
70
|
-
entityName?: string;
|
|
71
|
-
countActive?: boolean;
|
|
72
|
-
viewMode?: ViewMode;
|
|
73
|
-
onViewModeChange?: (mode: ViewMode) => void;
|
|
74
|
-
pageSize?: number;
|
|
75
|
-
onPageSizeChange?: (size: number) => void;
|
|
76
|
-
density?: Density;
|
|
77
|
-
onDensityChange?: (density: Density) => void;
|
|
78
|
-
createAction?: ReactNode;
|
|
79
|
-
}
|
|
80
|
-
declare function PageHeader({ title, subtitle, icon: Icon, options: optionsProp, optionsStorageKey, actions, details, detailsOpen, onDetailsOpenChange, detailsActive, detailsHint, count, totalCount, entityName, countActive, viewMode, onViewModeChange, pageSize, onPageSizeChange, density, onDensityChange, createAction, }: PageHeaderProps): react_jsx_runtime.JSX.Element;
|
|
81
|
-
|
|
82
24
|
interface DataPageShellProps {
|
|
83
25
|
/** Display title for the page */
|
|
84
26
|
title: string;
|
|
@@ -262,24 +204,6 @@ declare function CurrencyCell(currency?: string, locale?: string): (_item: unkno
|
|
|
262
204
|
*/
|
|
263
205
|
declare function BadgeCell(colorMap?: Record<string, "default" | "secondary" | "destructive" | "outline" | "success" | "warning" | "info" | "muted">): (_item: unknown, value: unknown) => react_jsx_runtime.JSX.Element | "—";
|
|
264
206
|
|
|
265
|
-
interface EmptyStateProps {
|
|
266
|
-
icon?: LucideIcon;
|
|
267
|
-
message?: string;
|
|
268
|
-
action?: ReactNode;
|
|
269
|
-
/** If true, shows a "no results" message with clear button */
|
|
270
|
-
hasFilters?: boolean;
|
|
271
|
-
onClearFilters?: () => void;
|
|
272
|
-
}
|
|
273
|
-
declare function EmptyState({ icon: Icon, message, action, hasFilters, onClearFilters, }: EmptyStateProps): react_jsx_runtime.JSX.Element;
|
|
274
|
-
|
|
275
|
-
interface ViewSettingsProps {
|
|
276
|
-
pageSize: number;
|
|
277
|
-
onPageSizeChange: (size: number) => void;
|
|
278
|
-
density: Density;
|
|
279
|
-
onDensityChange: (density: Density) => void;
|
|
280
|
-
}
|
|
281
|
-
declare function ViewSettings({ pageSize, onPageSizeChange, density, onDensityChange, }: ViewSettingsProps): react_jsx_runtime.JSX.Element;
|
|
282
|
-
|
|
283
207
|
type StatCardColor = "primary" | "success" | "warning" | "info" | "destructive" | "muted";
|
|
284
208
|
interface StatCardProps {
|
|
285
209
|
label: string;
|
|
@@ -330,6 +254,13 @@ interface DataListProps<T> {
|
|
|
330
254
|
}
|
|
331
255
|
declare function DataList<T>({ items, renderItem, emptyMessage, className, }: DataListProps<T>): react_jsx_runtime.JSX.Element;
|
|
332
256
|
|
|
257
|
+
/**
|
|
258
|
+
* Props for {@link DetailPanel} — a shell-agnostic record detail view.
|
|
259
|
+
* `layout` selects only the surrounding shell (inline / dialog / sheet);
|
|
260
|
+
* the header and content below it render identically across all three.
|
|
261
|
+
*
|
|
262
|
+
* @stability Beta
|
|
263
|
+
*/
|
|
333
264
|
interface DetailPanelProps<T> {
|
|
334
265
|
/** The record to display */
|
|
335
266
|
item: T | null;
|
|
@@ -353,11 +284,57 @@ interface DetailPanelProps<T> {
|
|
|
353
284
|
label: string;
|
|
354
285
|
render?: (value: unknown, item: T) => ReactNode;
|
|
355
286
|
}>;
|
|
356
|
-
/**
|
|
287
|
+
/**
|
|
288
|
+
* Panel width. For `"sheet"` / `"inline"` this is a fixed pixel width
|
|
289
|
+
* (matching this component's original, pre-`layout` sizing exactly). For
|
|
290
|
+
* `"dialog"` it maps to Tailwind's modal max-width scale instead, since a
|
|
291
|
+
* centered modal has a different sizing idiom than an edge-anchored panel.
|
|
292
|
+
*/
|
|
357
293
|
width?: "sm" | "md" | "lg";
|
|
294
|
+
/**
|
|
295
|
+
* Rendering shell for the header + content below.
|
|
296
|
+
* - `"sheet"` (default): fixed, right-anchored slide-in panel, composed
|
|
297
|
+
* from the shared `Sheet` primitive. Matches this component's original
|
|
298
|
+
* (pre-`layout`-prop) behavior — existing consumers that don't pass
|
|
299
|
+
* `layout` see no change, other than an overlay now present at all
|
|
300
|
+
* breakpoints (previously mobile-only) since it's a real `Sheet`.
|
|
301
|
+
* - `"dialog"`: centered modal overlay, composed from the shared `Dialog`
|
|
302
|
+
* primitive.
|
|
303
|
+
* - `"inline"`: plain in-flow panel — no overlay, backdrop, or fixed
|
|
304
|
+
* positioning — for master-detail / split-pane layouts.
|
|
305
|
+
*/
|
|
306
|
+
layout?: "inline" | "dialog" | "sheet";
|
|
358
307
|
}
|
|
359
|
-
declare function DetailPanel<T extends Record<string, unknown>>({ item, open, onClose, title, subtitle, onEdit, onDelete, children, fields, width, }: DetailPanelProps<T>): react_jsx_runtime.JSX.Element | null;
|
|
308
|
+
declare function DetailPanel<T extends Record<string, unknown>>({ item, open, onClose, title, subtitle, onEdit, onDelete, children, fields, width, layout, }: DetailPanelProps<T>): react_jsx_runtime.JSX.Element | null;
|
|
360
309
|
|
|
310
|
+
/**
|
|
311
|
+
* Row-bound actions handed to `renderCard`, on top of the resource-wide
|
|
312
|
+
* `ResourceActions`. `open` is per-row, which is why it lives here rather
|
|
313
|
+
* than on `ResourceActions` — that object is built once and shared by every
|
|
314
|
+
* row and column, so it cannot carry a row-specific callback.
|
|
315
|
+
*
|
|
316
|
+
* @stability Beta
|
|
317
|
+
*/
|
|
318
|
+
interface ResourceCardActions<T> extends ResourceActions<T> {
|
|
319
|
+
/**
|
|
320
|
+
* Activate this row — opens the configured detail panel / modal / route,
|
|
321
|
+
* exactly as clicking the built-in card does. Wire it to your card's
|
|
322
|
+
* `onClick` (and call `stopPropagation` on any nested control that should
|
|
323
|
+
* not also activate the row).
|
|
324
|
+
*/
|
|
325
|
+
open: () => void;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Config-driven resource page: wires data-fetching (or a pre-fetched `data`
|
|
329
|
+
* array), search/filter/sort, table/grid/list views, and a detail
|
|
330
|
+
* panel/modal/route around a `DataProvider` resource — the CRUD page most
|
|
331
|
+
* apps hand-roll, expressed as one component tree. `renderCard` lets a
|
|
332
|
+
* consumer fully own item presentation while ResourcePage keeps handling
|
|
333
|
+
* data-fetching, filtering, and layout; see also the built-in
|
|
334
|
+
* `useKeyboardNavigation` wiring (`keyboardNavigation` prop) and `gridCols`.
|
|
335
|
+
*
|
|
336
|
+
* @stability Beta
|
|
337
|
+
*/
|
|
361
338
|
interface ResourcePageProps<T extends Record<string, unknown> = Record<string, unknown>> {
|
|
362
339
|
/** Client-side mode: resource name passed to useResource / DataProvider. */
|
|
363
340
|
resource?: string;
|
|
@@ -413,6 +390,46 @@ interface ResourcePageProps<T extends Record<string, unknown> = Record<string, u
|
|
|
413
390
|
variant?: "default" | "destructive";
|
|
414
391
|
onAction: (ids: string[]) => void | Promise<void>;
|
|
415
392
|
}>;
|
|
393
|
+
/**
|
|
394
|
+
* Override the default card renderer used for grid view (and, absent a
|
|
395
|
+
* dedicated list layout, list view too — DataGrid falls back to the same
|
|
396
|
+
* renderer there). ResourcePage still owns data-fetching, filtering,
|
|
397
|
+
* sorting, and layout (grid columns, infinite-scroll batching, stagger
|
|
398
|
+
* animation) — this only swaps what's rendered inside each item slot.
|
|
399
|
+
*
|
|
400
|
+
* Receives `ResourceCardActions`: the row's `update`/`remove`/`refetch`
|
|
401
|
+
* plus `open()` to activate the row (opening the configured detail
|
|
402
|
+
* panel/modal/route). Row activation is *not* applied automatically to a
|
|
403
|
+
* custom card — wrapping it would double-fire against cards that bring
|
|
404
|
+
* their own click handling and would hijack clicks on nested buttons — so
|
|
405
|
+
* call `actions.open()` from wherever your card should activate.
|
|
406
|
+
*/
|
|
407
|
+
renderCard?: (item: T, index: number, actions: ResourceCardActions<T>) => ReactNode;
|
|
408
|
+
/**
|
|
409
|
+
* Tailwind grid-column classes for the card grid, passed through to
|
|
410
|
+
* `DataGrid`'s `gridCols` — e.g. `"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3"`.
|
|
411
|
+
* Defaults to DataGrid's own responsive 1/2/3/4-column ramp.
|
|
412
|
+
*/
|
|
413
|
+
gridCols?: string;
|
|
414
|
+
/**
|
|
415
|
+
* Built-in list keyboard navigation via `useKeyboardNavigation`: j/k (or
|
|
416
|
+
* Arrow Up/Down) move a focus cursor, Enter opens the focused item,
|
|
417
|
+
* Backspace (⌫) closes an open detail view, and x toggles the focused
|
|
418
|
+
* item's selection when `bulkActions` are configured. Set to `false` to
|
|
419
|
+
* opt out.
|
|
420
|
+
*
|
|
421
|
+
* Default-on, and scoped so that being on by default stays safe:
|
|
422
|
+
* - Only while the grid or list view is showing. Table view keeps its own
|
|
423
|
+
* independent sort/pagination, so a flat focus index can't reliably map
|
|
424
|
+
* onto its visible rows.
|
|
425
|
+
* - Cursor keys suspend while a detail panel/modal or the built-in form
|
|
426
|
+
* is open, so they can't drive the list behind the overlay; ⌫ stays
|
|
427
|
+
* live there so it can close it.
|
|
428
|
+
* - Backspace is only intercepted while there's an open detail to close.
|
|
429
|
+
* - Modified chords (Ctrl/Cmd/Alt) are never captured, so an app's
|
|
430
|
+
* Cmd+K-style shortcuts keep working.
|
|
431
|
+
*/
|
|
432
|
+
keyboardNavigation?: boolean;
|
|
416
433
|
toolbar?: ReactNode;
|
|
417
434
|
emptyState?: ReactNode;
|
|
418
435
|
/**
|
|
@@ -432,6 +449,85 @@ interface ResourcePageProps<T extends Record<string, unknown> = Record<string, u
|
|
|
432
449
|
}
|
|
433
450
|
declare function ResourcePage<T extends Record<string, unknown> = Record<string, unknown>>(props: ResourcePageProps<T>): react_jsx_runtime.JSX.Element;
|
|
434
451
|
|
|
452
|
+
interface ResourceDetailPageProps<T extends BaseRecord = BaseRecord> {
|
|
453
|
+
/** Resource name, resolved through the mounted `DataProvider`. */
|
|
454
|
+
resource: string;
|
|
455
|
+
/**
|
|
456
|
+
* Record id. Nullish means "not resolved yet" — no request goes out and the
|
|
457
|
+
* page shows its loading state, which is what a route param that hasn't
|
|
458
|
+
* arrived should look like. It is deliberately NOT the not-found state:
|
|
459
|
+
* nothing has been asked, so nothing is missing.
|
|
460
|
+
*/
|
|
461
|
+
id: Identifier | undefined | null;
|
|
462
|
+
/**
|
|
463
|
+
* Field used as the page title. Defaults to `name`, then `title`, then the
|
|
464
|
+
* id — the same fallback chain `ResourcePage` uses for a row's label.
|
|
465
|
+
*/
|
|
466
|
+
titleField?: string;
|
|
467
|
+
/** Field used as the line under the title. */
|
|
468
|
+
subtitleField?: string;
|
|
469
|
+
/** Provider select/join syntax, e.g. `"*, owner:profiles(name)"`. */
|
|
470
|
+
select?: string;
|
|
471
|
+
/** Slot above the title: a `Breadcrumb`, a back link, a `StatusBadge`. */
|
|
472
|
+
breadcrumb?: ReactNode;
|
|
473
|
+
/** Record-scoped controls, built from the loaded record. */
|
|
474
|
+
actions?: (record: T) => ReactNode;
|
|
475
|
+
/** Metadata column, built from the loaded record. */
|
|
476
|
+
sidebar?: (record: T) => ReactNode;
|
|
477
|
+
/** The primary content region. */
|
|
478
|
+
children: (record: T) => ReactNode;
|
|
479
|
+
className?: string;
|
|
480
|
+
/** Stable test/automation selector (emitted as `data-testid`). */
|
|
481
|
+
testID?: string;
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* ResourceDetailPage — `DetailPage` with a record bound to it: fetches one
|
|
485
|
+
* record by id through the mounted `DataProvider` and hands it to the title,
|
|
486
|
+
* the actions, the sidebar and the content.
|
|
487
|
+
*
|
|
488
|
+
* ```tsx
|
|
489
|
+
* <ResourceDetailPage
|
|
490
|
+
* resource="people"
|
|
491
|
+
* id={params.id}
|
|
492
|
+
* subtitleField="role"
|
|
493
|
+
* actions={(person) => <Button testID="edit">Edit {person.name}</Button>}
|
|
494
|
+
* sidebar={(person) => <StatCard label="Sessions" value={person.session_count} />}
|
|
495
|
+
* >
|
|
496
|
+
* {(person) => <Section title="Timeline"><Timeline personId={person.id} /></Section>}
|
|
497
|
+
* </ResourceDetailPage>
|
|
498
|
+
* ```
|
|
499
|
+
*
|
|
500
|
+
* This is the detail-route counterpart to `ResourcePage`, which is the list
|
|
501
|
+
* one. Both are **data-bound**, not layouts: they need a resource contract
|
|
502
|
+
* to be useful, which is the layers table's admission test for this tier.
|
|
503
|
+
* The structure they render is a layout and lives one layer down —
|
|
504
|
+
* `DetailPage` in `@marktiderman/genesis-ui/layout` — so an app with its own
|
|
505
|
+
* fetching keeps the page shape without inheriting the provider. That
|
|
506
|
+
* layout/data-bound pairing is the same one `AppShell` and `ResourcePage`
|
|
507
|
+
* already have.
|
|
508
|
+
*
|
|
509
|
+
* The three non-record states are rendered here rather than left to the
|
|
510
|
+
* caller, because a per-app "loading…" is exactly the hand-written code a
|
|
511
|
+
* template exists to remove:
|
|
512
|
+
* - loading, or no id yet -> `PageLoading`
|
|
513
|
+
* - absent -> `EmptyState` saying so, distinct from the error state, since a
|
|
514
|
+
* deleted record and a broken query need different words. Every provider
|
|
515
|
+
* Genesis ships signals "no such row" by throwing rather than by resolving
|
|
516
|
+
* empty, so this state is reached by classifying the error (see
|
|
517
|
+
* `isNotFoundError`) as well as by a falsy `data`
|
|
518
|
+
* - any other failure -> `EmptyState` carrying the provider's message, which
|
|
519
|
+
* is kept verbatim: an error state that hides what went wrong is the one
|
|
520
|
+
* nobody can act on
|
|
521
|
+
*
|
|
522
|
+
* `titleField` is exact: name a field and you get that field, empty string
|
|
523
|
+
* included. The `name` -> `title` -> id chain is the DEFAULT, not a fallback
|
|
524
|
+
* layered under an explicit choice — a page silently titled by a different
|
|
525
|
+
* column than the one asked for is worse than a blank one.
|
|
526
|
+
*
|
|
527
|
+
* @stability Beta
|
|
528
|
+
*/
|
|
529
|
+
declare function ResourceDetailPage<T extends BaseRecord = BaseRecord>({ resource, id, titleField, subtitleField, select, breadcrumb, actions, sidebar, children, className, testID, }: ResourceDetailPageProps<T>): react_jsx_runtime.JSX.Element;
|
|
530
|
+
|
|
435
531
|
interface ResourceFormProps {
|
|
436
532
|
resource: string;
|
|
437
533
|
action: "create" | "edit";
|
|
@@ -491,132 +587,19 @@ interface WizardFormProps {
|
|
|
491
587
|
}
|
|
492
588
|
declare function WizardForm({ steps, form, fields, onSubmit, isSaving, renderField, action, onInvalid, }: WizardFormProps): react_jsx_runtime.JSX.Element;
|
|
493
589
|
|
|
494
|
-
interface NavItem {
|
|
495
|
-
to: string;
|
|
496
|
-
icon: LucideIcon;
|
|
497
|
-
label: string;
|
|
498
|
-
/** Nested items — rendered as a collapsible group when the rail is expanded */
|
|
499
|
-
children?: NavItem[];
|
|
500
|
-
badge?: string | number;
|
|
501
|
-
disabled?: boolean;
|
|
502
|
-
/** Exact-match active state (e.g. overview `/`) */
|
|
503
|
-
end?: boolean;
|
|
504
|
-
}
|
|
505
590
|
/**
|
|
506
|
-
*
|
|
507
|
-
*
|
|
508
|
-
*
|
|
509
|
-
* @stability
|
|
591
|
+
* @deprecated Import `AppShell` from `@marktiderman/genesis-ui/layout` instead.
|
|
592
|
+
* `AppShell` is a layout, not a data-bound component. This `/data` alias is
|
|
593
|
+
* removed in the next major — see docs/FRAMEWORK.md rule 5.
|
|
594
|
+
* @stability Deprecated
|
|
510
595
|
*/
|
|
511
|
-
|
|
512
|
-
showLogo?: boolean;
|
|
513
|
-
showAppName?: boolean;
|
|
514
|
-
showThemeToggle?: boolean;
|
|
515
|
-
/** Desktop rail collapse control */
|
|
516
|
-
showCollapse?: boolean;
|
|
517
|
-
showUserSlot?: boolean;
|
|
518
|
-
showFooter?: boolean;
|
|
519
|
-
showSecondaryNav?: boolean;
|
|
520
|
-
/** Mobile fixed bottom tab bar */
|
|
521
|
-
showMobileBottomNav?: boolean;
|
|
522
|
-
defaultCollapsed?: boolean;
|
|
523
|
-
/**
|
|
524
|
-
* Show the in-sidebar Sidebar options popover so users can customize chrome.
|
|
525
|
-
* Default true when collapse / secondary / theme / slots are available.
|
|
526
|
-
*/
|
|
527
|
-
configurable?: boolean;
|
|
528
|
-
/**
|
|
529
|
-
* Toggle keys the developer has decided on and users may not override —
|
|
530
|
-
* e.g. hiding `showThemeToggle` for a brand that manages theme elsewhere.
|
|
531
|
-
* Locked keys are dropped from the options popover and any stored user
|
|
532
|
-
* override for them is ignored on resolve.
|
|
533
|
-
*/
|
|
534
|
-
lockedOptions?: (keyof AppShellOptions)[];
|
|
535
|
-
/** Comfortable (default) vs compact row padding */
|
|
536
|
-
density?: "comfortable" | "compact";
|
|
537
|
-
/** Expanded rail width in rem-ish tokens: narrow ≈ 13rem, wide ≈ 16rem */
|
|
538
|
-
railWidth?: "narrow" | "wide";
|
|
539
|
-
/**
|
|
540
|
-
* Where page content scrolls.
|
|
541
|
-
* - `container` (default): main panel scrolls — classic app-shell chrome.
|
|
542
|
-
* - `window`: document/window scrolls with a sticky rail so React Router
|
|
543
|
-
* `ScrollRestoration` keeps working (dashboard dogfood).
|
|
544
|
-
*/
|
|
545
|
-
scrollRoot?: "container" | "window";
|
|
546
|
-
}
|
|
596
|
+
declare const AppShell: typeof AppShell$1;
|
|
547
597
|
/**
|
|
548
|
-
* @
|
|
598
|
+
* @deprecated Import `PageHeader` from `@marktiderman/genesis-ui/layout`
|
|
599
|
+
* instead. `PageHeader` is a layout, not a data-bound component. This `/data`
|
|
600
|
+
* alias is removed in the next major — see docs/FRAMEWORK.md rule 5.
|
|
601
|
+
* @stability Deprecated
|
|
549
602
|
*/
|
|
550
|
-
|
|
551
|
-
/** App name shown in sidebar header */
|
|
552
|
-
appName: string;
|
|
553
|
-
/** App logo letter or short text (ignored when `logo` is set) */
|
|
554
|
-
appLogo?: string;
|
|
555
|
-
/** Custom logo node — preferred over `appLogo` letter tile */
|
|
556
|
-
logo?: ReactNode;
|
|
557
|
-
/** Primary navigation items */
|
|
558
|
-
navItems: NavItem[];
|
|
559
|
-
/** Secondary nav (e.g. “More”) — rendered below a divider when shown */
|
|
560
|
-
secondaryNavItems?: NavItem[];
|
|
561
|
-
/** Label above secondary nav (default “More”) */
|
|
562
|
-
secondaryNavLabel?: string;
|
|
563
|
-
/**
|
|
564
|
-
* Items for the mobile bottom tab bar. Defaults to top-level `navItems`
|
|
565
|
-
* (no children). Pass a short list for apps with large sidebars; pass `[]`
|
|
566
|
-
* and set `options.showMobileBottomNav: false` to hide.
|
|
567
|
-
*/
|
|
568
|
-
mobileNavItems?: NavItem[];
|
|
569
|
-
/** Slot below the logo row (product switcher, workspace picker, …) */
|
|
570
|
-
headerSlot?: ReactNode;
|
|
571
|
-
/**
|
|
572
|
-
* Compact slot shown in the **collapsed** desktop rail, where `headerSlot`
|
|
573
|
-
* is hidden for space. Use it to keep a core affordance reachable without
|
|
574
|
-
* expanding — e.g. an icon-only product switcher. Omit to hide the header
|
|
575
|
-
* region entirely while collapsed.
|
|
576
|
-
*/
|
|
577
|
-
collapsedHeaderSlot?: ReactNode;
|
|
578
|
-
/** Footer region above the user slot (version, links) */
|
|
579
|
-
footer?: ReactNode;
|
|
580
|
-
/**
|
|
581
|
-
* User / account block at the bottom of the sidebar. When the rail is
|
|
582
|
-
* collapsed, AppShell hides any descendant carrying the
|
|
583
|
-
* `data-shell-user-detail` attribute (e.g. name/email text) so only a
|
|
584
|
-
* compact element (avatar, initial) remains — tag the detail wrapper you
|
|
585
|
-
* want hidden in the collapsed rail with that attribute.
|
|
586
|
-
*/
|
|
587
|
-
userSlot?: ReactNode;
|
|
588
|
-
/** Page content */
|
|
589
|
-
children: ReactNode;
|
|
590
|
-
/**
|
|
591
|
-
* @deprecated Prefer `options.showThemeToggle`. Kept for sample-app
|
|
592
|
-
* back-compat; merges into resolved options when `options` omits it.
|
|
593
|
-
*/
|
|
594
|
-
showThemeToggle?: boolean;
|
|
595
|
-
/** Chrome config (developer defaults + optional in-sidebar menu) */
|
|
596
|
-
options?: AppShellOptions;
|
|
597
|
-
/** Persist user sidebar-option overrides + collapse state (localStorage) */
|
|
598
|
-
optionsStorageKey?: string;
|
|
599
|
-
/** Controlled collapse (desktop rail) */
|
|
600
|
-
collapsed?: boolean;
|
|
601
|
-
onCollapsedChange?: (collapsed: boolean) => void;
|
|
602
|
-
/**
|
|
603
|
-
* Injectable link component. Defaults to a plain `<a>` (no router). Pass a
|
|
604
|
-
* router adapter — e.g. React Router `({ href, ...p }) => <Link to={href} {...p} />`
|
|
605
|
-
* or Next.js `next/link` — to get client-side navigation.
|
|
606
|
-
*/
|
|
607
|
-
linkComponent?: LinkComponent;
|
|
608
|
-
/**
|
|
609
|
-
* Current path used to highlight the active nav item. Router consumers pass
|
|
610
|
-
* `useLocation().pathname` (RR) or `usePathname()` (Next). Omit to disable
|
|
611
|
-
* active highlighting.
|
|
612
|
-
*/
|
|
613
|
-
activePath?: string;
|
|
614
|
-
/**
|
|
615
|
-
* Optional custom active-state matcher. Defaults to a prefix match (with `/`
|
|
616
|
-
* treated as exact), mirroring React Router `NavLink`.
|
|
617
|
-
*/
|
|
618
|
-
isActive?: (to: string, activePath?: string) => boolean;
|
|
619
|
-
}
|
|
620
|
-
declare function AppShell({ appName, appLogo, logo, navItems, secondaryNavItems, secondaryNavLabel, mobileNavItems, headerSlot, collapsedHeaderSlot, footer, userSlot, children, showThemeToggle: showThemeToggleProp, options: optionsProp, optionsStorageKey, collapsed: collapsedProp, onCollapsedChange, linkComponent, activePath, isActive, }: AppShellProps): react_jsx_runtime.JSX.Element;
|
|
603
|
+
declare const PageHeader: typeof PageHeader$1;
|
|
621
604
|
|
|
622
|
-
export { AppShell,
|
|
605
|
+
export { AppShell, BadgeCell, type BulkAction, type ColumnStatus, CurrencyCell, DataBulkBar, type DataFilterConfig, DataFilters, DataGrid, DataList, type DataListProps, DataPageShell, type DataPageShellProps, DateCell, Density, DetailPanel, type DetailPanelProps, FieldArrayRenderer, FileUploadField, FilterCombobox, type FilterOption, KanbanBoard, type KanbanBoardProps, type KanbanColumn, LinkComponent, NavigateFn, NumberCell, PageHeader, PageHeaderOptions, RelationField, ResourceActions, type ResourceCardActions, ResourceColumnDef, ResourceDetailPage, type ResourceDetailPageProps, ResourceForm, type ResourceFormProps, ResourcePage, type ResourcePageProps, type SavedViewItem, StatCard, type StatCardColor, type StatCardProps, ViewMode, WizardForm };
|