@marktiderman/genesis-ui 1.2.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-AI6CCNWK.js → chunk-6NPEMLBA.js} +2 -2
- package/dist/chunk-6NPEMLBA.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-UKSBLFEK.js → chunk-6XPMU65K.js} +5 -5
- package/dist/{chunk-UKSBLFEK.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-O4B5ALO7.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-CNTWQSUT.js +65 -0
- package/dist/chunk-CNTWQSUT.js.map +1 -0
- package/dist/chunk-D2LIXA2Y.js +65 -0
- package/dist/chunk-D2LIXA2Y.js.map +1 -0
- package/dist/{chunk-FCGFG4RV.js → chunk-D4JTQYP5.js} +3 -3
- package/dist/{chunk-FCGFG4RV.js.map → chunk-D4JTQYP5.js.map} +1 -1
- 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-GCQFVMPI.js +56 -0
- package/dist/chunk-GCQFVMPI.js.map +1 -0
- package/dist/{chunk-LDPPIBIJ.js → chunk-IJCT5IJD.js} +3 -3
- package/dist/{chunk-LDPPIBIJ.js.map → chunk-IJCT5IJD.js.map} +1 -1
- package/dist/{chunk-DGRHPJ3M.js → chunk-J6FBA7PH.js} +3 -3
- package/dist/{chunk-DGRHPJ3M.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-I6JQHP6D.js → chunk-NWSCYLPT.js} +78 -17
- 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 +223 -74
- package/dist/components/data/index.js +504 -539
- 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 +75 -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.d.ts +30 -0
- package/dist/components/ui/command-palette.js +6 -0
- package/dist/components/ui/command-palette.js.map +1 -0
- 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 +5 -3
- package/dist/hooks/index.js +10 -5
- package/dist/hooks/use-data-filters.d.ts +1 -1
- package/dist/hooks/use-data-filters.js +2 -2
- 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 +3 -2
- package/dist/hooks/use-resource-page.js +2 -2
- package/dist/hooks/use-saved-views.d.ts +28 -0
- package/dist/hooks/use-saved-views.js +3 -0
- package/dist/hooks/use-saved-views.js.map +1 -0
- package/dist/hooks/use-view-preference.d.ts +1 -1
- package/dist/hooks/use-view-preference.js +1 -1
- package/dist/index.d.ts +25 -26
- package/dist/index.js +55 -38
- package/dist/{navigation-qI86Ldug.d.ts → navigation-CpOEyUSb.d.ts} +4 -0
- package/dist/spacing-BS6qECD4.d.ts +191 -0
- package/dist/split-Dk9f4Mi0.d.ts +57 -0
- package/dist/{use-resource-page-B-CFcikK.d.ts → use-resource-page-CPs6wjKt.d.ts} +10 -2
- package/dist/view-settings--KXNT_jE.d.ts +12 -0
- package/package.json +77 -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-AI6CCNWK.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-I6JQHP6D.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-O4B5ALO7.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/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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"dashboard-page.js"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { a as SplitBreakpoint } from '../../split-Dk9f4Mi0.js';
|
|
3
|
+
import 'class-variance-authority/types';
|
|
4
|
+
import 'class-variance-authority';
|
|
5
|
+
|
|
6
|
+
interface DetailPageProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
7
|
+
/** Page title. Rendered as the page's single `<h1>`. */
|
|
8
|
+
title: React.ReactNode;
|
|
9
|
+
/** Supporting line under the title — a status, an owner, a last-updated. */
|
|
10
|
+
subtitle?: React.ReactNode;
|
|
11
|
+
/** Slot above the title: a `Breadcrumb`, a back link, a `StatusBadge`. */
|
|
12
|
+
breadcrumb?: React.ReactNode;
|
|
13
|
+
/** Trailing controls for the whole record — Edit, Archive, a menu. */
|
|
14
|
+
actions?: React.ReactNode;
|
|
15
|
+
/**
|
|
16
|
+
* Metadata column. Omit it and the content region takes the full width —
|
|
17
|
+
* no empty track, no `Split`, no wrapper to reason about.
|
|
18
|
+
*/
|
|
19
|
+
sidebar?: React.ReactNode;
|
|
20
|
+
/**
|
|
21
|
+
* Breakpoint at and above which the sidebar sits beside the content.
|
|
22
|
+
* Below it the two stack, content first. Default `"lg"`.
|
|
23
|
+
*/
|
|
24
|
+
sidebarAt?: SplitBreakpoint;
|
|
25
|
+
/** Stable test/automation selector (emitted as `data-testid`). */
|
|
26
|
+
testID?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* DetailPage — one record's full view: a title row with actions, a primary
|
|
30
|
+
* content region, and a metadata sidebar that drops below the content on
|
|
31
|
+
* small screens.
|
|
32
|
+
*
|
|
33
|
+
* ```tsx
|
|
34
|
+
* <DetailPage
|
|
35
|
+
* breadcrumb={<Breadcrumb>…</Breadcrumb>}
|
|
36
|
+
* title={person.name}
|
|
37
|
+
* subtitle={person.role}
|
|
38
|
+
* actions={<Button testID="edit">Edit</Button>}
|
|
39
|
+
* sidebar={
|
|
40
|
+
* <Stack gap="lg">
|
|
41
|
+
* <StatCard label="Sessions" value={12} />
|
|
42
|
+
* <SettingsRow label="Owner">{person.owner}</SettingsRow>
|
|
43
|
+
* </Stack>
|
|
44
|
+
* }
|
|
45
|
+
* >
|
|
46
|
+
* <Section title="Timeline">{…}</Section>
|
|
47
|
+
* </DetailPage>
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* `Split` is the backbone, at `ratio="2/3"` — content takes eight of twelve
|
|
51
|
+
* tracks, metadata four. Reading order is content-then-metadata in the DOM,
|
|
52
|
+
* which is also the order they stack in, so a phone shows the record before
|
|
53
|
+
* its provenance rather than after it.
|
|
54
|
+
*
|
|
55
|
+
* This is a **layout**: it positions three regions and never asks what is in
|
|
56
|
+
* them. Fetching the record is the caller's job — or
|
|
57
|
+
* `ResourceDetailPage` from `@marktiderman/genesis-ui/data`, which is this
|
|
58
|
+
* component with `useOne` wired to its title, content and sidebar.
|
|
59
|
+
*
|
|
60
|
+
* The header row is markup, not a component, and deliberately not
|
|
61
|
+
* `PageHeader` — which now sits in this same folder, so composing it would
|
|
62
|
+
* be legal. It was tried and measured, and it does not fit:
|
|
63
|
+
*
|
|
64
|
+
* 1. `PageHeader.title` and `.subtitle` are `string`. Every template's title
|
|
65
|
+
* would narrow from `ReactNode`, and a record heading is the one place a
|
|
66
|
+
* `StatusBadge` beside the name is routine.
|
|
67
|
+
* 2. `@marktiderman/genesis-ui/detail-page`'s emitted closure goes from
|
|
68
|
+
* 5.8 KB / 5 chunks to 34.4 KB / 14, and picks up a runtime dependency on
|
|
69
|
+
* `radix-ui` (Popover, Collapsible, Switch, and Select via `ViewSettings`)
|
|
70
|
+
* — for a header that renders a title, a line under it and a slot, and
|
|
71
|
+
* mounts none of that. Per-component subpaths exist so a consumer does
|
|
72
|
+
* not pay for what they did not import.
|
|
73
|
+
* 3. `PageHeader` has no slot above the title, and hard-codes
|
|
74
|
+
* `data-testid="page-title"` on its `<h1>`.
|
|
75
|
+
*
|
|
76
|
+
* Not a reason, having checked it: RSC. `PageHeader` is `"use client"`, but
|
|
77
|
+
* the emitted `detail-page.js` is NOT stamped with the directive when it
|
|
78
|
+
* imports it — a server module importing a client module is the ordinary
|
|
79
|
+
* boundary. What would make folding correct is upstream: widen `title` /
|
|
80
|
+
* `subtitle` to `ReactNode`, and lift the list chrome out of `PageHeader`.
|
|
81
|
+
*
|
|
82
|
+
* Width is deliberately not an opinion here. `Container` already answers
|
|
83
|
+
* "how wide is this page", so wrap rather than duplicate:
|
|
84
|
+
* `<Container size="lg"><DetailPage … /></Container>`. Under `AppShell`,
|
|
85
|
+
* whose `<main>` already pads, most pages want neither.
|
|
86
|
+
*
|
|
87
|
+
* @stability Beta
|
|
88
|
+
*/
|
|
89
|
+
declare const DetailPage: React.ForwardRefExoticComponent<DetailPageProps & React.RefAttributes<HTMLDivElement>>;
|
|
90
|
+
|
|
91
|
+
export { DetailPage, type DetailPageProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"detail-page.js"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface FormPageProps extends Omit<React.FormHTMLAttributes<HTMLFormElement>, "title"> {
|
|
4
|
+
/** Page title. Rendered as the page's single `<h1>`. */
|
|
5
|
+
title: React.ReactNode;
|
|
6
|
+
/** Supporting copy under the title — what this form is for. */
|
|
7
|
+
description?: React.ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* Validation summary. Rendered in a destructive `Alert` above the fields
|
|
10
|
+
* when set, so the summary announces itself (`role="alert"`) and sits
|
|
11
|
+
* where a keyboard user lands after a failed submit. Pass a list, a
|
|
12
|
+
* sentence, or your own markup — the copy is yours.
|
|
13
|
+
*/
|
|
14
|
+
errors?: React.ReactNode;
|
|
15
|
+
/**
|
|
16
|
+
* Submit / cancel controls. Rendered in a bar that sticks to the bottom of
|
|
17
|
+
* the scroll container, so the primary action stays reachable on a form
|
|
18
|
+
* longer than the viewport.
|
|
19
|
+
*/
|
|
20
|
+
actions?: React.ReactNode;
|
|
21
|
+
/** Stable test/automation selector (emitted as `data-testid`). */
|
|
22
|
+
testID?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* FormPage — a titled form: header, validation summary, a body of sections,
|
|
26
|
+
* and a sticky action bar.
|
|
27
|
+
*
|
|
28
|
+
* It renders a real `<form>` and forwards `onSubmit` (and every other form
|
|
29
|
+
* attribute), so a plain `type="submit"` button in `actions` submits it with
|
|
30
|
+
* no `form=` wiring. That is what keeps it usable for a HAND-WRITTEN form —
|
|
31
|
+
* `react-hook-form`, `useActionState`, or an uncontrolled `<form action>` —
|
|
32
|
+
* rather than only for one of them.
|
|
33
|
+
*
|
|
34
|
+
* **Do not put a `ResourceForm` inside it.** `ResourceForm` renders its own
|
|
35
|
+
* `<form>`, and nesting one form in another is invalid HTML: the browser
|
|
36
|
+
* drops the inner element, SSR and hydration disagree about the tree, and a
|
|
37
|
+
* submit fires both handlers. `ResourceForm` is the data-bound *alternative*
|
|
38
|
+
* to this template — it already answers "bind a form to a resource", with a
|
|
39
|
+
* `layout="page"` mode of its own — not something this one wraps.
|
|
40
|
+
*
|
|
41
|
+
* ```tsx
|
|
42
|
+
* <FormPage
|
|
43
|
+
* title="New engagement"
|
|
44
|
+
* description="Both the coach and the client will be notified."
|
|
45
|
+
* errors={submitFailed ? "Fix the highlighted fields." : undefined}
|
|
46
|
+
* onSubmit={handleSubmit(onValid)}
|
|
47
|
+
* actions={
|
|
48
|
+
* <>
|
|
49
|
+
* <Button variant="ghost" type="button" testID="cancel">Cancel</Button>
|
|
50
|
+
* <Button type="submit" testID="save">Save</Button>
|
|
51
|
+
* </>
|
|
52
|
+
* }
|
|
53
|
+
* >
|
|
54
|
+
* <Section title="Basics">
|
|
55
|
+
* <FormField label="Name">…</FormField>
|
|
56
|
+
* </Section>
|
|
57
|
+
* </FormPage>
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* Sections are just children — `Section` is the natural one, but any node
|
|
61
|
+
* works. The body spaces them at `gap-8`, wider than the page's own `gap-6`,
|
|
62
|
+
* so section boundaries read as boundaries rather than as more fields.
|
|
63
|
+
*
|
|
64
|
+
* The sticky bar needs a scrolling ancestor to stick to, which `AppShell`'s
|
|
65
|
+
* `<main>` provides. It renders only when `actions` is set: an empty sticky
|
|
66
|
+
* strip is a border floating over the content for no reason.
|
|
67
|
+
*
|
|
68
|
+
* This is a **layout** — it positions a form, it does not submit one. Binding
|
|
69
|
+
* fields to a resource is `ResourceForm`'s job
|
|
70
|
+
* (`@marktiderman/genesis-ui/data`), which is already the one home for that
|
|
71
|
+
* question. The header row is markup, not a component, and deliberately not
|
|
72
|
+
* `PageHeader` — see `./detail-page` for the measured reasons composing it
|
|
73
|
+
* was rejected across all four templates (`title: string`, and a 6x jump in
|
|
74
|
+
* the emitted per-component closure plus a new `radix-ui` runtime dependency
|
|
75
|
+
* for chrome none of them render). Width is left to `Container` for the
|
|
76
|
+
* one-home reason — wrap, don't duplicate.
|
|
77
|
+
*
|
|
78
|
+
* @stability Beta
|
|
79
|
+
*/
|
|
80
|
+
declare const FormPage: React.ForwardRefExoticComponent<FormPageProps & React.RefAttributes<HTMLFormElement>>;
|
|
81
|
+
|
|
82
|
+
export { FormPage, type FormPageProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"form-page.js"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { A as AppShell, a as AppShellOptions, b as AppShellProps, N as NavItem, P as PageHeader, c as PageHeaderOptions, d as PageHeaderProps } from '../../AppShell-BJarYZzz.js';
|
|
2
|
+
export { DetailPage, DetailPageProps } from './detail-page.js';
|
|
3
|
+
export { FormPage, FormPageProps } from './form-page.js';
|
|
4
|
+
export { D as DashboardPage, a as DashboardPageProps, G as Grid, b as GridProps, g as gridVariants } from '../../dashboard-page-C0TihRl5.js';
|
|
5
|
+
export { SettingsPage, SettingsPageProps, SettingsPageSection } from './settings-page.js';
|
|
6
|
+
export { C as Container, a as ContainerProps, G as GAP_CLASSES, S as Section, b as SectionProps, c as SpaceToken, d as Stack, e as StackProps, f as containerVariants, s as sectionHeadingVariants, g as spaceScale, h as stackVariants } from '../../spacing-BS6qECD4.js';
|
|
7
|
+
export { S as Split, a as SplitBreakpoint, b as SplitProps, c as SplitRatio, s as splitVariants } from '../../split-Dk9f4Mi0.js';
|
|
8
|
+
import 'react/jsx-runtime';
|
|
9
|
+
import 'react';
|
|
10
|
+
import 'lucide-react';
|
|
11
|
+
import '../../view-toggle-DDe_Luj2.js';
|
|
12
|
+
import '../../hooks/use-view-settings.js';
|
|
13
|
+
import '../../navigation-CpOEyUSb.js';
|
|
14
|
+
import 'class-variance-authority/types';
|
|
15
|
+
import 'class-variance-authority';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export { AppShell, PageHeader } from '../../chunk-FEJAZFP3.js';
|
|
2
|
+
import '../../chunk-46TZGMFW.js';
|
|
3
|
+
export { Container, Stack, containerVariants, stackVariants } from '../../chunk-4CQHPWJD.js';
|
|
4
|
+
export { FormPage } from '../../chunk-PLIYF6KI.js';
|
|
5
|
+
import '../../chunk-OZZTPE7F.js';
|
|
6
|
+
export { Section, SettingsPage, sectionHeadingVariants } from '../../chunk-P64MFQXZ.js';
|
|
7
|
+
import '../../chunk-B2GIBUQD.js';
|
|
8
|
+
import '../../chunk-NPNADZHM.js';
|
|
9
|
+
import '../../chunk-FK42ZGGV.js';
|
|
10
|
+
import '../../chunk-22XB3Q6H.js';
|
|
11
|
+
import '../../chunk-27ELYTGE.js';
|
|
12
|
+
import '../../chunk-NWSCYLPT.js';
|
|
13
|
+
import '../../chunk-F47U5KNW.js';
|
|
14
|
+
export { DashboardPage, Grid, gridVariants } from '../../chunk-ARJI2JUV.js';
|
|
15
|
+
export { DetailPage } from '../../chunk-AFZ76Q26.js';
|
|
16
|
+
export { Split, splitVariants } from '../../chunk-D2LIXA2Y.js';
|
|
17
|
+
export { GAP_CLASSES, spaceScale } from '../../chunk-AVFZ4P4B.js';
|
|
18
|
+
import '../../chunk-NZ5WBA4R.js';
|
|
19
|
+
import '../../chunk-6NPEMLBA.js';
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { a as SplitBreakpoint } from '../../split-Dk9f4Mi0.js';
|
|
3
|
+
import 'class-variance-authority/types';
|
|
4
|
+
import 'class-variance-authority';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* One region of a settings surface: a nav-rail entry and the panel it jumps
|
|
8
|
+
* to, declared together so the two can't drift apart.
|
|
9
|
+
*
|
|
10
|
+
* `@marktiderman/genesis-ui-native` exports a type of the same name whose
|
|
11
|
+
* shape differs — it carries `rows: SettingsPageRow[]` and a `footnote`,
|
|
12
|
+
* because a native settings screen is a sectioned list of drill-in rows
|
|
13
|
+
* rather than a scrollable surface with a jump rail (a rail has nowhere to
|
|
14
|
+
* live on a phone). The shared field names mean the same thing on both:
|
|
15
|
+
* `id` keys the section, `title` names it. That parity is deliberate, and
|
|
16
|
+
* it is the same accommodation `Stack` documents for its own two-surface
|
|
17
|
+
* shape difference.
|
|
18
|
+
*/
|
|
19
|
+
interface SettingsPageSection {
|
|
20
|
+
/**
|
|
21
|
+
* Fragment id. The rail links to `#${id}` and the `<section>` carries it,
|
|
22
|
+
* so the jump works with no JavaScript and survives a deep link.
|
|
23
|
+
*/
|
|
24
|
+
id: string;
|
|
25
|
+
/**
|
|
26
|
+
* Rail entry and section heading — one string, so they always match.
|
|
27
|
+
*
|
|
28
|
+
* Named `title` rather than `label` to match the native surface's word for
|
|
29
|
+
* the same thing. Required here where native's is optional: a rail entry
|
|
30
|
+
* with no name is a link to nowhere, whereas an unlabeled native section
|
|
31
|
+
* is a normal grouping.
|
|
32
|
+
*/
|
|
33
|
+
title: string;
|
|
34
|
+
/** Supporting copy under the section heading. */
|
|
35
|
+
description?: React.ReactNode;
|
|
36
|
+
/** The rows themselves — `SettingsRow` / `ToggleRow` are the natural ones. */
|
|
37
|
+
content: React.ReactNode;
|
|
38
|
+
}
|
|
39
|
+
interface SettingsPageProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
40
|
+
/** Page title. Rendered as the page's single `<h1>`. */
|
|
41
|
+
title: React.ReactNode;
|
|
42
|
+
/** Supporting copy under the title. */
|
|
43
|
+
description?: React.ReactNode;
|
|
44
|
+
/** Page-level trailing controls — "Save all", a workspace switcher. */
|
|
45
|
+
actions?: React.ReactNode;
|
|
46
|
+
/** The settings regions, in the order they appear in the rail. */
|
|
47
|
+
sections: SettingsPageSection[];
|
|
48
|
+
/**
|
|
49
|
+
* Breakpoint at and above which the rail sits beside the sections. Below
|
|
50
|
+
* it the rail stacks above them, where it reads as jump links. Default
|
|
51
|
+
* `"md"`.
|
|
52
|
+
*/
|
|
53
|
+
navAt?: SplitBreakpoint;
|
|
54
|
+
/** Stable test/automation selector (emitted as `data-testid`). */
|
|
55
|
+
testID?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* SettingsPage — a sectioned settings surface with a nav rail for jumping
|
|
59
|
+
* between sections.
|
|
60
|
+
*
|
|
61
|
+
* ```tsx
|
|
62
|
+
* <SettingsPage
|
|
63
|
+
* title="Workspace settings"
|
|
64
|
+
* sections={[
|
|
65
|
+
* {
|
|
66
|
+
* id: "profile",
|
|
67
|
+
* title: "Profile",
|
|
68
|
+
* content: <SettingsRow label="Display name" htmlFor="name"><Input id="name" /></SettingsRow>,
|
|
69
|
+
* },
|
|
70
|
+
* {
|
|
71
|
+
* id: "notifications",
|
|
72
|
+
* title: "Notifications",
|
|
73
|
+
* description: "How and when we contact you.",
|
|
74
|
+
* content: <ToggleRow label="Weekly digest" checked={digest} onCheckedChange={setDigest} />,
|
|
75
|
+
* },
|
|
76
|
+
* ]}
|
|
77
|
+
* />
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* Sections are a prop, not children, because the rail has to know their
|
|
81
|
+
* titles and ids. Declaring each once is what makes "the rail says
|
|
82
|
+
* Notifications and the heading says Alerts" unrepresentable.
|
|
83
|
+
*
|
|
84
|
+
* **The rail appears only when there is more than one section** — a rail
|
|
85
|
+
* with a single entry is a link to where you already are. That is an
|
|
86
|
+
* automatic consequence of the content rather than a prop, so nobody has to
|
|
87
|
+
* remember to turn it off.
|
|
88
|
+
*
|
|
89
|
+
* The rail is `sticky top-6` with no breakpoint prefix, and that is correct
|
|
90
|
+
* in both modes rather than an oversight: side by side it is a stretched
|
|
91
|
+
* grid item, so it sticks for the length of the sections; stacked, its pane
|
|
92
|
+
* is exactly its own height, so sticky positioning has nothing to travel
|
|
93
|
+
* and it simply scrolls away. One class, right twice.
|
|
94
|
+
*
|
|
95
|
+
* Each section renders through `Section`, so it is a real `<section>` named
|
|
96
|
+
* by its own heading via `aria-labelledby` — the thing that makes it a
|
|
97
|
+
* landmark a screen-reader user can jump to, which is the whole promise the
|
|
98
|
+
* visual rail is making.
|
|
99
|
+
*
|
|
100
|
+
* The header row is markup, not a component, and deliberately not
|
|
101
|
+
* `PageHeader` — see `./detail-page` for the measured reasons composing it
|
|
102
|
+
* was rejected across all four templates. Width is left to `Container` —
|
|
103
|
+
* wrap, don't duplicate.
|
|
104
|
+
*
|
|
105
|
+
* This is a **layout**: it positions rows, it does not persist them. Where a
|
|
106
|
+
* setting is stored, and when, is the app's. Genesis's answer for the
|
|
107
|
+
* storing half is `useStorage` from `@marktiderman/genesis-core`, which a
|
|
108
|
+
* caller wires up outside this component.
|
|
109
|
+
*
|
|
110
|
+
* @stability Beta
|
|
111
|
+
*/
|
|
112
|
+
declare const SettingsPage: React.ForwardRefExoticComponent<SettingsPageProps & React.RefAttributes<HTMLDivElement>>;
|
|
113
|
+
|
|
114
|
+
export { SettingsPage, type SettingsPageProps, type SettingsPageSection };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"settings-page.js"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { LucideIcon } from 'lucide-react';
|
|
4
|
+
|
|
5
|
+
interface EmptyStateProps {
|
|
6
|
+
icon?: LucideIcon;
|
|
7
|
+
/**
|
|
8
|
+
* Bold heading. Optional — falls back to `message` (deprecated), then a
|
|
9
|
+
* generic default. Superseded by fixed copy whenever `hasFilters` is true.
|
|
10
|
+
*/
|
|
11
|
+
title?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
action?: React.ReactNode;
|
|
14
|
+
className?: string;
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated Use `title` instead. Kept for source compatibility with the
|
|
17
|
+
* former `@marktiderman/genesis-ui/data` EmptyState, which used `message`
|
|
18
|
+
* in place of `title`/`description`. Ignored whenever `title` is also
|
|
19
|
+
* provided.
|
|
20
|
+
*/
|
|
21
|
+
message?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Renders a "no results match your current filters" state — superseding
|
|
24
|
+
* `title`/`description` — and, when `onClearFilters` is also given, a
|
|
25
|
+
* "Clear all filters" action in place of `action`.
|
|
26
|
+
*/
|
|
27
|
+
hasFilters?: boolean;
|
|
28
|
+
/** Invoked by the "Clear all filters" action shown when `hasFilters` is true. */
|
|
29
|
+
onClearFilters?: () => void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* EmptyState — what to show when a list, page, or panel has no data.
|
|
33
|
+
*
|
|
34
|
+
* Canonical for `@marktiderman/genesis-ui`. The former
|
|
35
|
+
* `@marktiderman/genesis-ui/data` EmptyState is now a deprecated re-export of
|
|
36
|
+
* this component (see `../data/EmptyState`) — its `hasFilters` /
|
|
37
|
+
* `onClearFilters` / `message` props all landed here, so nothing consuming
|
|
38
|
+
* that subpath needs a source change. Note that the *rendered output* is this
|
|
39
|
+
* component's, not the old `/data` one's: see that file's `@deprecated` block
|
|
40
|
+
* for the visual differences a `/data` consumer will see.
|
|
41
|
+
*
|
|
42
|
+
* Precedence: `hasFilters` wins over everything the caller passed — it
|
|
43
|
+
* replaces the heading with fixed "no results match your filters" copy,
|
|
44
|
+
* suppresses `description`, and (given `onClearFilters`) replaces `action`
|
|
45
|
+
* with a "Clear all filters" button.
|
|
46
|
+
*
|
|
47
|
+
* @stability Beta
|
|
48
|
+
*/
|
|
49
|
+
declare function EmptyState({ icon: Icon, title, description, action, className, message, hasFilters, onClearFilters, }: EmptyStateProps): react_jsx_runtime.JSX.Element;
|
|
50
|
+
/**
|
|
51
|
+
* Preset `EmptyState` for an empty roadmap / feature list.
|
|
52
|
+
*
|
|
53
|
+
* @stability Beta
|
|
54
|
+
*/
|
|
55
|
+
declare function NoFeaturesFound({ onCreate }: {
|
|
56
|
+
onCreate?: () => void;
|
|
57
|
+
}): react_jsx_runtime.JSX.Element;
|
|
58
|
+
/**
|
|
59
|
+
* Preset `EmptyState` for a feedback inbox with nothing in it yet.
|
|
60
|
+
*
|
|
61
|
+
* @stability Beta
|
|
62
|
+
*/
|
|
63
|
+
declare function NoFeedbackFound(): react_jsx_runtime.JSX.Element;
|
|
64
|
+
/**
|
|
65
|
+
* Preset `EmptyState` for a search or filter that matched nothing.
|
|
66
|
+
*
|
|
67
|
+
* @stability Beta
|
|
68
|
+
*/
|
|
69
|
+
declare function NoSearchResults({ query, onClear, }: {
|
|
70
|
+
query?: string;
|
|
71
|
+
onClear?: () => void;
|
|
72
|
+
}): react_jsx_runtime.JSX.Element;
|
|
73
|
+
|
|
74
|
+
export { EmptyState, type EmptyStateProps, NoFeaturesFound, NoFeedbackFound, NoSearchResults };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { EmptyState, NoFeaturesFound, NoFeedbackFound, NoSearchResults } from '../../chunk-
|
|
1
|
+
export { EmptyState, NoFeaturesFound, NoFeedbackFound, NoSearchResults } from '../../chunk-65SPT7EA.js';
|
|
2
|
+
import '../../chunk-NWSCYLPT.js';
|
|
2
3
|
import '../../chunk-NZ5WBA4R.js';
|
|
3
4
|
//# sourceMappingURL=empty-state.js.map
|
|
4
5
|
//# sourceMappingURL=empty-state.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { Label } from '
|
|
3
|
+
import { Label } from '../ui/label.js';
|
|
4
4
|
import 'class-variance-authority/types';
|
|
5
|
-
import '
|
|
5
|
+
import 'radix-ui';
|
|
6
6
|
import 'class-variance-authority';
|
|
7
7
|
|
|
8
8
|
declare function FormField({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { FormDescription, FormError, FormField, FormLabel } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
1
|
+
export { FormDescription, FormError, FormField, FormLabel } from '../../chunk-R7QFP6EL.js';
|
|
2
|
+
import '../../chunk-F47U5KNW.js';
|
|
3
3
|
import '../../chunk-NZ5WBA4R.js';
|
|
4
4
|
//# sourceMappingURL=form-field.js.map
|
|
5
5
|
//# sourceMappingURL=form-field.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { EmptyState, EmptyStateProps, NoFeaturesFound, NoFeedbackFound, NoSearchResults } from './empty-state.js';
|
|
2
|
+
export { FormDescription, FormError, FormField, FormLabel } from './form-field.js';
|
|
3
|
+
export { PageLoading, PageLoadingProps, pageLoadingVariants } from './page-loading.js';
|
|
4
|
+
export { SettingsRow, SettingsRowProps } from './settings-row.js';
|
|
5
|
+
export { StatusBadge, StatusBadgeProps, StatusBadgeStatus, statusBadgeVariants } from './status-badge.js';
|
|
6
|
+
export { ToggleRow, ToggleRowProps } from './toggle-row.js';
|
|
7
|
+
export { UserAvatar, UserAvatarProps, userAvatarVariants } from './user-avatar.js';
|
|
8
|
+
export { V as ViewMode, a as ViewToggle } from '../../view-toggle-DDe_Luj2.js';
|
|
9
|
+
export { V as ViewSettings } from '../../view-settings--KXNT_jE.js';
|
|
10
|
+
import 'react/jsx-runtime';
|
|
11
|
+
import 'react';
|
|
12
|
+
import 'lucide-react';
|
|
13
|
+
import '../ui/label.js';
|
|
14
|
+
import 'class-variance-authority/types';
|
|
15
|
+
import 'radix-ui';
|
|
16
|
+
import 'class-variance-authority';
|
|
17
|
+
import '@marktiderman/genesis-design-system/tokens';
|
|
18
|
+
import '../../hooks/use-view-settings.js';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { ViewSettings, ViewToggle } from '../../chunk-46TZGMFW.js';
|
|
2
|
+
export { StatusBadge, statusBadgeVariants } from '../../chunk-XMK3T4TA.js';
|
|
3
|
+
export { ToggleRow } from '../../chunk-6M4NHHKG.js';
|
|
4
|
+
export { UserAvatar, userAvatarVariants } from '../../chunk-XBX6QMR5.js';
|
|
5
|
+
import '../../chunk-LNFF2RBD.js';
|
|
6
|
+
export { SettingsRow } from '../../chunk-A7AHVDG7.js';
|
|
7
|
+
import '../../chunk-FK42ZGGV.js';
|
|
8
|
+
import '../../chunk-22XB3Q6H.js';
|
|
9
|
+
import '../../chunk-27ELYTGE.js';
|
|
10
|
+
export { EmptyState, NoFeaturesFound, NoFeedbackFound, NoSearchResults } from '../../chunk-65SPT7EA.js';
|
|
11
|
+
import '../../chunk-NWSCYLPT.js';
|
|
12
|
+
export { PageLoading, pageLoadingVariants } from '../../chunk-YRYQXU3G.js';
|
|
13
|
+
import '../../chunk-OVU3Z2MT.js';
|
|
14
|
+
export { FormDescription, FormError, FormField, FormLabel } from '../../chunk-R7QFP6EL.js';
|
|
15
|
+
import '../../chunk-F47U5KNW.js';
|
|
16
|
+
import '../../chunk-NZ5WBA4R.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
3
|
+
import { VariantProps } from 'class-variance-authority';
|
|
4
|
+
|
|
5
|
+
declare const pageLoadingVariants: (props?: ({
|
|
6
|
+
variant?: "page" | "section" | null | undefined;
|
|
7
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
8
|
+
interface PageLoadingProps extends VariantProps<typeof pageLoadingVariants> {
|
|
9
|
+
/** Optional message shown under the spinner (e.g. "Loading dashboard…"). */
|
|
10
|
+
label?: string;
|
|
11
|
+
className?: string;
|
|
12
|
+
/** Stable test/automation selector (emitted as `data-testid`). */
|
|
13
|
+
testID?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* PageLoading — full-page or in-section loading state: a centered `Spinner`
|
|
17
|
+
* with an optional message. The loading-state counterpart to `EmptyState`.
|
|
18
|
+
* Reach for `Skeleton` instead when the placeholder should mimic the shape
|
|
19
|
+
* of the content that's arriving rather than a generic wait state.
|
|
20
|
+
*
|
|
21
|
+
* @stability Beta
|
|
22
|
+
*/
|
|
23
|
+
declare function PageLoading({ label, variant, className, testID }: PageLoadingProps): react_jsx_runtime.JSX.Element;
|
|
24
|
+
|
|
25
|
+
export { PageLoading, type PageLoadingProps, pageLoadingVariants };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"page-loading.js"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
interface SettingsRowProps {
|
|
5
|
+
/** Row label. */
|
|
6
|
+
label: React.ReactNode;
|
|
7
|
+
/** Supporting copy shown under the label, muted. */
|
|
8
|
+
description?: React.ReactNode;
|
|
9
|
+
/** Control(s) rendered on the trailing side. */
|
|
10
|
+
children?: React.ReactNode;
|
|
11
|
+
/**
|
|
12
|
+
* `id` of the control this row labels (e.g. a Switch), for a11y and
|
|
13
|
+
* click-to-focus. Supply it whenever the trailing control is labelable —
|
|
14
|
+
* the label text is then a real `<label for>`. Omit it for rows whose
|
|
15
|
+
* control names itself (a Button) or has none (a Badge); the text renders
|
|
16
|
+
* as a plain `<span>` rather than a `<label>` associated with nothing.
|
|
17
|
+
*/
|
|
18
|
+
htmlFor?: string;
|
|
19
|
+
/**
|
|
20
|
+
* `id` applied to the description paragraph so the trailing control can point
|
|
21
|
+
* at it with `aria-describedby` — otherwise the description is an unrelated
|
|
22
|
+
* `<p>` that a screen reader skips while navigating controls. `ToggleRow`
|
|
23
|
+
* wires this automatically; pass it yourself when supplying your own control.
|
|
24
|
+
*/
|
|
25
|
+
descriptionId?: string;
|
|
26
|
+
/** Dims the row to indicate the control it wraps is disabled. */
|
|
27
|
+
disabled?: boolean;
|
|
28
|
+
className?: string;
|
|
29
|
+
/** Stable test/automation selector (emitted as `data-testid`). */
|
|
30
|
+
testID?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* SettingsRow — label + description on one side, an arbitrary trailing
|
|
34
|
+
* control (Switch, Select, Button, Badge, ...) on the other. This is the
|
|
35
|
+
* shared layout behind every settings/preferences list row; see `ToggleRow`
|
|
36
|
+
* for the common label+description+Switch case pre-wired.
|
|
37
|
+
*
|
|
38
|
+
* @stability Beta
|
|
39
|
+
*/
|
|
40
|
+
declare function SettingsRow({ label, description, children, htmlFor, descriptionId, disabled, className, testID, }: SettingsRowProps): react_jsx_runtime.JSX.Element;
|
|
41
|
+
|
|
42
|
+
export { SettingsRow, type SettingsRowProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"settings-row.js"}
|