@marktiderman/genesis-ui 1.3.0 → 2.1.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/LICENSE +21 -0
- package/dist/AppShell-sQT0UbXg.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-QLCDAFS7.js → chunk-GDFNAHI4.js} +10 -6
- package/dist/chunk-GDFNAHI4.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-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 +318 -228
- package/dist/components/data/index.js +591 -1394
- 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 +14 -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 +73 -0
- package/dist/components/{ui → patterns}/empty-state.js +2 -1
- package/dist/components/{ui → patterns}/form-field.d.ts +5 -6
- package/dist/components/{ui → patterns}/form-field.js +2 -2
- package/dist/components/patterns/index.d.ts +17 -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 +41 -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 +37 -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 +35 -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 +47 -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 +12 -13
- 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/badge.d.ts +1 -2
- package/dist/components/ui/breadcrumb.d.ts +2 -3
- package/dist/components/ui/button-group.d.ts +1 -2
- package/dist/components/ui/button.d.ts +73 -8
- package/dist/components/ui/button.js +1 -1
- package/dist/components/ui/calendar.d.ts +2 -3
- package/dist/components/ui/calendar.js +2 -2
- package/dist/components/ui/card.d.ts +6 -7
- package/dist/components/ui/carousel.d.ts +4 -4
- package/dist/components/ui/carousel.js +2 -2
- package/dist/components/ui/chart.d.ts +4 -5
- 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 +1 -2
- package/dist/components/ui/command-palette.js +3 -3
- package/dist/components/ui/command.d.ts +11 -12
- package/dist/components/ui/command.js +2 -2
- package/dist/components/ui/context-menu.d.ts +16 -17
- package/dist/components/ui/context-menu.js +1 -1
- package/dist/components/ui/date-picker.d.ts +2 -2
- package/dist/components/ui/date-picker.js +4 -4
- package/dist/components/ui/dialog.d.ts +11 -12
- package/dist/components/ui/dialog.js +1 -1
- package/dist/components/ui/drawer.d.ts +10 -11
- package/dist/components/ui/dropdown-menu.d.ts +16 -17
- 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/kbd.d.ts +1 -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 +17 -18
- 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.d.ts +5 -6
- package/dist/components/ui/pagination.js +2 -2
- package/dist/components/ui/password-toggle-field.d.ts +120 -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/progress.d.ts +1 -2
- 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 +3 -4
- 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/separator.d.ts +1 -2
- package/dist/components/ui/sheet.d.ts +13 -12
- package/dist/components/ui/sheet.js +1 -1
- package/dist/components/ui/skeleton.d.ts +1 -2
- package/dist/components/ui/slider.d.ts +2 -2
- package/dist/components/ui/slider.js +1 -1
- package/dist/components/ui/sonner.d.ts +1 -2
- package/dist/components/ui/spinner.d.ts +1 -2
- 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 -5
- package/dist/components/ui/tooltip.js +1 -1
- package/dist/components/ui/typography.d.ts +9 -10
- 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 -3
- 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 -3
- package/dist/hooks/use-resource-page.js +2 -2
- package/dist/hooks/use-view-preference.d.ts +2 -2
- package/dist/hooks/use-view-preference.js +1 -1
- package/dist/index.d.ts +22 -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-DTQS011Q.d.ts} +18 -6
- package/dist/view-settings-kHKCHMjj.d.ts +12 -0
- package/dist/{ViewToggle-DDe_Luj2.d.ts → view-toggle-CahQ87PW.d.ts} +2 -2
- package/package.json +80 -39
- 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
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Toolbar as Toolbar$1 } from 'radix-ui';
|
|
4
|
+
import { VariantProps } from 'class-variance-authority';
|
|
5
|
+
import { buttonVariants } from './button.js';
|
|
6
|
+
import { toggleVariants } from './toggle.js';
|
|
7
|
+
|
|
8
|
+
declare const toolbarVariants: (props?: ({
|
|
9
|
+
orientation?: "horizontal" | "vertical" | null | undefined;
|
|
10
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
11
|
+
interface ToolbarProps extends React.ComponentPropsWithoutRef<typeof Toolbar$1.Root> {
|
|
12
|
+
/** Stable test/automation selector (emitted as `data-testid`). */
|
|
13
|
+
testID?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Toolbar — a grouped set of controls that behaves as ONE tab stop.
|
|
17
|
+
*
|
|
18
|
+
* This is a primitive, not a layout, and the distinction is the whole reason
|
|
19
|
+
* it wraps Radix instead of a `<div className="flex gap-1">`. Radix's Toolbar
|
|
20
|
+
* owns a roving tabindex: Tab moves into and out of the whole group, and
|
|
21
|
+
* Arrow/Home/End move between the items inside it. A layout, by the framework's
|
|
22
|
+
* own definition, "positions things without knowing what they are" — this one
|
|
23
|
+
* knows its children are focusable controls and manages their focus, so it
|
|
24
|
+
* fails that test and passes the primitive one.
|
|
25
|
+
*
|
|
26
|
+
* `orientation` is passed to BOTH Radix (which uses it to decide whether
|
|
27
|
+
* Left/Right or Up/Down are the navigation keys) and the CVA class (which uses
|
|
28
|
+
* it to decide the flex direction). Splitting those would let the visual axis
|
|
29
|
+
* and the keyboard axis disagree — arrows moving "down" a row of buttons.
|
|
30
|
+
*
|
|
31
|
+
* @stability Beta
|
|
32
|
+
*/
|
|
33
|
+
declare const Toolbar: React.ForwardRefExoticComponent<ToolbarProps & React.RefAttributes<HTMLDivElement>>;
|
|
34
|
+
interface ToolbarButtonProps extends React.ComponentPropsWithoutRef<typeof Toolbar$1.Button>, VariantProps<typeof buttonVariants> {
|
|
35
|
+
/** Stable test/automation selector (emitted as `data-testid`). */
|
|
36
|
+
testID?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* ToolbarButton — a button that participates in the toolbar's roving tabindex.
|
|
40
|
+
*
|
|
41
|
+
* Styling reuses `buttonVariants` rather than declaring a second button look:
|
|
42
|
+
* per the framework's "one home per concept", the question "what does a button
|
|
43
|
+
* look like?" already has an answer. Only the DEFAULTS differ — `ghost`/`sm`,
|
|
44
|
+
* because a toolbar is a dense strip of controls, not a page's primary action —
|
|
45
|
+
* and both remain overridable.
|
|
46
|
+
*
|
|
47
|
+
* @stability Beta
|
|
48
|
+
*/
|
|
49
|
+
declare const ToolbarButton: React.ForwardRefExoticComponent<ToolbarButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
50
|
+
interface ToolbarLinkProps extends React.ComponentPropsWithoutRef<typeof Toolbar$1.Link> {
|
|
51
|
+
/** Stable test/automation selector (emitted as `data-testid`). */
|
|
52
|
+
testID?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* ToolbarLink — an anchor inside the toolbar's roving tabindex.
|
|
56
|
+
*
|
|
57
|
+
* Kept distinct from `ToolbarButton` because the element matters: a link
|
|
58
|
+
* navigates and must stay an `<a>` for middle-click, "open in new tab" and the
|
|
59
|
+
* screen-reader link rotor. Radix also gives it the toolbar's Enter/Space
|
|
60
|
+
* handling without turning it into a button.
|
|
61
|
+
*
|
|
62
|
+
* @stability Beta
|
|
63
|
+
*/
|
|
64
|
+
declare const ToolbarLink: React.ForwardRefExoticComponent<ToolbarLinkProps & React.RefAttributes<HTMLAnchorElement>>;
|
|
65
|
+
interface ToolbarSeparatorProps extends React.ComponentPropsWithoutRef<typeof Toolbar$1.Separator> {
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* ToolbarSeparator — a decorative divider between toolbar groups.
|
|
69
|
+
*
|
|
70
|
+
* Radix excludes it from the roving tabindex, so arrow keys skip straight over
|
|
71
|
+
* it instead of landing on a 1px line.
|
|
72
|
+
*
|
|
73
|
+
* Note the inverted axis, which is easy to get backwards: Radix gives the
|
|
74
|
+
* separator the orientation PERPENDICULAR to the toolbar's, so a horizontal
|
|
75
|
+
* toolbar contains separators with `data-orientation="vertical"`. The classes
|
|
76
|
+
* below are keyed on the separator's own orientation accordingly — a vertical
|
|
77
|
+
* separator is the tall thin rule.
|
|
78
|
+
*
|
|
79
|
+
* @stability Beta
|
|
80
|
+
*/
|
|
81
|
+
declare const ToolbarSeparator: React.ForwardRefExoticComponent<ToolbarSeparatorProps & React.RefAttributes<HTMLDivElement>>;
|
|
82
|
+
/**
|
|
83
|
+
* ToolbarToggleGroup — a set of pressed/unpressed controls inside a toolbar
|
|
84
|
+
* (the classic bold / italic / underline cluster).
|
|
85
|
+
*
|
|
86
|
+
* @stability Beta
|
|
87
|
+
*/
|
|
88
|
+
declare const ToolbarToggleGroup: React.ForwardRefExoticComponent<(Omit<Toolbar$1.ToolbarToggleGroupSingleProps & React.RefAttributes<HTMLDivElement>, "ref"> | Omit<Toolbar$1.ToolbarToggleGroupMultipleProps & React.RefAttributes<HTMLDivElement>, "ref">) & React.RefAttributes<HTMLDivElement>>;
|
|
89
|
+
interface ToolbarToggleItemProps extends React.ComponentPropsWithoutRef<typeof Toolbar$1.ToggleItem>, VariantProps<typeof toggleVariants> {
|
|
90
|
+
/** Stable test/automation selector (emitted as `data-testid`). */
|
|
91
|
+
testID?: string;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* ToolbarToggleItem — one member of a `ToolbarToggleGroup`.
|
|
95
|
+
*
|
|
96
|
+
* Reuses `toggleVariants` for the same reason `ToolbarButton` reuses
|
|
97
|
+
* `buttonVariants`: `Toggle` already answers "what does a pressed control look
|
|
98
|
+
* like?", and a second answer is how two implementations get born.
|
|
99
|
+
*
|
|
100
|
+
* @stability Beta
|
|
101
|
+
*/
|
|
102
|
+
declare const ToolbarToggleItem: React.ForwardRefExoticComponent<ToolbarToggleItemProps & React.RefAttributes<HTMLButtonElement>>;
|
|
103
|
+
|
|
104
|
+
export { Toolbar, ToolbarButton, type ToolbarButtonProps, ToolbarLink, type ToolbarLinkProps, type ToolbarProps, ToolbarSeparator, type ToolbarSeparatorProps, ToolbarToggleGroup, ToolbarToggleItem, type ToolbarToggleItemProps, toolbarVariants };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { Toolbar, ToolbarButton, ToolbarLink, ToolbarSeparator, ToolbarToggleGroup, ToolbarToggleItem, toolbarVariants } from '../../chunk-YYEGAFUE.js';
|
|
2
|
+
import '../../chunk-C46ITXE4.js';
|
|
3
|
+
import '../../chunk-NWSCYLPT.js';
|
|
4
|
+
import '../../chunk-NZ5WBA4R.js';
|
|
5
|
+
//# sourceMappingURL=toolbar.js.map
|
|
6
|
+
//# sourceMappingURL=toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"toolbar.js"}
|
|
@@ -1,10 +1,51 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
1
|
import * as React from 'react';
|
|
3
2
|
|
|
4
|
-
interface TooltipProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
5
|
-
|
|
3
|
+
interface TooltipProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "content"> {
|
|
4
|
+
/**
|
|
5
|
+
* Tooltip body. Accepts any `ReactNode` — icons, formatted or multi-line
|
|
6
|
+
* content — not just a plain string.
|
|
7
|
+
*/
|
|
8
|
+
content: React.ReactNode;
|
|
6
9
|
side?: "top" | "bottom" | "left" | "right";
|
|
10
|
+
/**
|
|
11
|
+
* Milliseconds a POINTER must rest on the trigger before the tooltip
|
|
12
|
+
* opens. Keyboard focus is never delayed — Radix opens instantly on focus
|
|
13
|
+
* regardless of this value.
|
|
14
|
+
*
|
|
15
|
+
* Defaults to `0` rather than Radix's own `700`: the CSS-only
|
|
16
|
+
* implementation this replaced revealed the bubble the instant the pointer
|
|
17
|
+
* entered, and inheriting a 700ms delay on upgrade would read as the
|
|
18
|
+
* tooltip having broken. Raise it to get the "don't fire while the cursor
|
|
19
|
+
* sweeps across the UI" behaviour the hand-rolled version could not offer.
|
|
20
|
+
*/
|
|
21
|
+
delayDuration?: number;
|
|
7
22
|
}
|
|
8
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Tooltip — hover/focus hint anchored to its trigger child.
|
|
25
|
+
*
|
|
26
|
+
* Backed by Radix `Tooltip`, which owns the parts a design system should not
|
|
27
|
+
* be maintaining itself: open/close state, the pointer delay, opening on
|
|
28
|
+
* keyboard focus and closing on blur/Escape/scroll, the portal, collision
|
|
29
|
+
* detection against the viewport, and the `aria-describedby` ↔ `role="tooltip"`
|
|
30
|
+
* association. The previous implementation was CSS-only — a `group` wrapper
|
|
31
|
+
* plus `group-hover:block` / `group-focus-within:block` — which meant no
|
|
32
|
+
* portal (so the bubble was clipped by any `overflow:hidden` ancestor), no
|
|
33
|
+
* collision handling (so it ran off-screen at the edges), no dismissal, and no
|
|
34
|
+
* delay.
|
|
35
|
+
*
|
|
36
|
+
* The wrapper `<div>` stays, and keeps `group relative inline-flex`: it is
|
|
37
|
+
* where `className` and the rest of `HTMLAttributes<HTMLDivElement>` land, so
|
|
38
|
+
* removing it would silently drop props callers already pass. Positioning no
|
|
39
|
+
* longer depends on it.
|
|
40
|
+
*
|
|
41
|
+
* The bubble keeps `whitespace-nowrap`, so rich `content` does not soft wrap
|
|
42
|
+
* by itself — long multi-line content needs an explicit `<br />`, or a
|
|
43
|
+
* `whitespace-normal` + width class on the node you pass in. Dropping
|
|
44
|
+
* `whitespace-nowrap` here would re-wrap every existing single-line string
|
|
45
|
+
* tooltip, so it stays opt-out rather than opt-in.
|
|
46
|
+
*
|
|
47
|
+
* @stability Stable
|
|
48
|
+
*/
|
|
49
|
+
declare function Tooltip({ content, side, delayDuration, className, children, ...props }: TooltipProps): React.JSX.Element;
|
|
9
50
|
|
|
10
|
-
export { Tooltip };
|
|
51
|
+
export { Tooltip, type TooltipProps };
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
1
|
import * as React from 'react';
|
|
3
2
|
|
|
4
|
-
declare function H1({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>):
|
|
5
|
-
declare function H2({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>):
|
|
6
|
-
declare function H3({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>):
|
|
7
|
-
declare function H4({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>):
|
|
8
|
-
declare function P({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>):
|
|
9
|
-
declare function Lead({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>):
|
|
10
|
-
declare function Large({ className, ...props }: React.HTMLAttributes<HTMLDivElement>):
|
|
11
|
-
declare function Small({ className, ...props }: React.HTMLAttributes<HTMLElement>):
|
|
12
|
-
declare function Muted({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>):
|
|
3
|
+
declare function H1({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>): React.JSX.Element;
|
|
4
|
+
declare function H2({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>): React.JSX.Element;
|
|
5
|
+
declare function H3({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>): React.JSX.Element;
|
|
6
|
+
declare function H4({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>): React.JSX.Element;
|
|
7
|
+
declare function P({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>): React.JSX.Element;
|
|
8
|
+
declare function Lead({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>): React.JSX.Element;
|
|
9
|
+
declare function Large({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
|
|
10
|
+
declare function Small({ className, ...props }: React.HTMLAttributes<HTMLElement>): React.JSX.Element;
|
|
11
|
+
declare function Muted({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>): React.JSX.Element;
|
|
13
12
|
|
|
14
13
|
export { H1, H2, H3, H4, Large, Lead, Muted, P, Small };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { VisuallyHidden as VisuallyHidden$1 } from 'radix-ui';
|
|
3
|
+
|
|
4
|
+
interface VisuallyHiddenProps extends React.ComponentPropsWithoutRef<typeof VisuallyHidden$1.Root> {
|
|
5
|
+
/** Stable test/automation selector (emitted as `data-testid`). */
|
|
6
|
+
testID?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* VisuallyHidden — content removed from the visual layout but kept in the
|
|
10
|
+
* accessibility tree.
|
|
11
|
+
*
|
|
12
|
+
* This is the correct tool for the label an icon-only control needs, for the
|
|
13
|
+
* `DialogTitle` a dialog must have even when the design shows none, and for
|
|
14
|
+
* live-region status text. It is NOT `display: none` and it is NOT
|
|
15
|
+
* `visibility: hidden` — both of those remove the node from the a11y tree too,
|
|
16
|
+
* which is the exact opposite of the intent.
|
|
17
|
+
*
|
|
18
|
+
* Why Radix rather than Tailwind's `sr-only`: the two produce the same result,
|
|
19
|
+
* but `sr-only` is a class a consumer's `@apply`, a purge misconfiguration, or
|
|
20
|
+
* a competing utility can quietly defeat, and the failure is silent — the text
|
|
21
|
+
* simply becomes visible, or the layout shifts, and nothing in a build catches
|
|
22
|
+
* it. Radix applies the clip rectangle as inline styles on the element itself,
|
|
23
|
+
* so there is no stylesheet for the consumer's build to lose.
|
|
24
|
+
*
|
|
25
|
+
* **That robustness cuts both ways, and it is the one thing to know before
|
|
26
|
+
* reaching for this.** An inline style beats any ordinary class declaration, so
|
|
27
|
+
* a `className` cannot override the clipping either — not accidentally, and
|
|
28
|
+
* not on purpose. `className` is merged for non-visual concerns (a test hook, a
|
|
29
|
+
* data attribute target); it is NOT a way to reveal the content.
|
|
30
|
+
*
|
|
31
|
+
* The escape hatch is the `style` prop, which Radix spreads *after* its own
|
|
32
|
+
* (`{...VISUALLY_HIDDEN_STYLES, ...props.style}`) and which therefore wins.
|
|
33
|
+
* Both behaviours are pinned in this component's tests, because the docs above
|
|
34
|
+
* depend on them.
|
|
35
|
+
*
|
|
36
|
+
* **This is therefore the wrong primitive for a skip link.** A skip link is
|
|
37
|
+
* hidden until focused, and "until focused" is state, not a class — a static
|
|
38
|
+
* `style` prop cannot express it and `focus-within:` utilities cannot win
|
|
39
|
+
* against the inline rule. Give a skip link its own element with real CSS, or
|
|
40
|
+
* drive the `style` prop from `onFocus`/`onBlur`. Use `VisuallyHidden` for text
|
|
41
|
+
* that stays hidden: control labels, dialog titles a design omits, live-region
|
|
42
|
+
* status text.
|
|
43
|
+
*
|
|
44
|
+
* @stability Beta
|
|
45
|
+
*/
|
|
46
|
+
declare const VisuallyHidden: React.ForwardRefExoticComponent<VisuallyHiddenProps & React.RefAttributes<HTMLSpanElement>>;
|
|
47
|
+
|
|
48
|
+
export { VisuallyHidden, type VisuallyHiddenProps };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"visually-hidden.js"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
3
|
+
import { VariantProps } from 'class-variance-authority';
|
|
4
|
+
|
|
5
|
+
declare const gridVariants: (props?: ({
|
|
6
|
+
cols?: 1 | 2 | 4 | 3 | 5 | 6 | null | undefined;
|
|
7
|
+
gap?: "sm" | "lg" | "none" | "xs" | "md" | "xl" | "2xl" | "3xl" | null | undefined;
|
|
8
|
+
align?: "center" | "end" | "start" | "stretch" | null | undefined;
|
|
9
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
10
|
+
interface GridProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof gridVariants> {
|
|
11
|
+
/** Stable test/automation selector (emitted as `data-testid`). */
|
|
12
|
+
testID?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Grid — two-dimensional flow for card and tile collections.
|
|
16
|
+
*
|
|
17
|
+
* `cols` is the count at the widest breakpoint; the class it emits is a
|
|
18
|
+
* responsive ramp, so a card grid reflows on its own without the consumer
|
|
19
|
+
* writing a single breakpoint.
|
|
20
|
+
*
|
|
21
|
+
* ```tsx
|
|
22
|
+
* <Grid cols={3} gap="lg">
|
|
23
|
+
* {people.map((p) => <PersonCard key={p.id} person={p} />)}
|
|
24
|
+
* </Grid>
|
|
25
|
+
*
|
|
26
|
+
* <Grid cols={4} gap="sm" align="start">
|
|
27
|
+
* {stats.map((s) => <StatCard key={s.id} {...s} />)}
|
|
28
|
+
* </Grid>
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* Deliberately NOT here: `grid-template-areas`, explicit row/column
|
|
32
|
+
* placement, and per-child spans. A component that positions a *named*
|
|
33
|
+
* child has stopped positioning things without knowing what they are, and
|
|
34
|
+
* a grid whose children each carry placement props is a CSS file wearing a
|
|
35
|
+
* React costume — reach for `className` at that point.
|
|
36
|
+
*
|
|
37
|
+
* @stability Beta
|
|
38
|
+
*/
|
|
39
|
+
declare const Grid: React.ForwardRefExoticComponent<GridProps & React.RefAttributes<HTMLDivElement>>;
|
|
40
|
+
|
|
41
|
+
interface DashboardPageProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
42
|
+
/** Page title. Rendered as the page's single `<h1>`. */
|
|
43
|
+
title: React.ReactNode;
|
|
44
|
+
/** Supporting line under the title — a date range, a scope, a filter. */
|
|
45
|
+
subtitle?: React.ReactNode;
|
|
46
|
+
/** Trailing controls — a period picker, an export, a refresh. */
|
|
47
|
+
actions?: React.ReactNode;
|
|
48
|
+
/**
|
|
49
|
+
* The stat row: `StatCard`s, or anything tile-shaped. Laid out in a `Grid`
|
|
50
|
+
* that ramps down to one column on a phone. Omit it and no grid renders.
|
|
51
|
+
*/
|
|
52
|
+
stats?: React.ReactNode;
|
|
53
|
+
/**
|
|
54
|
+
* Tiles across the stat row at the widest breakpoint. Default `4`.
|
|
55
|
+
* Reuses `Grid`'s `cols` scale, so the responsive ramp is the same one
|
|
56
|
+
* every other card grid in the app gets.
|
|
57
|
+
*/
|
|
58
|
+
statColumns?: NonNullable<GridProps["cols"]>;
|
|
59
|
+
/** Stable test/automation selector (emitted as `data-testid`). */
|
|
60
|
+
testID?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* DashboardPage — a stat row over a flexible region of charts, tables and
|
|
64
|
+
* sections.
|
|
65
|
+
*
|
|
66
|
+
* ```tsx
|
|
67
|
+
* <DashboardPage
|
|
68
|
+
* title="This quarter"
|
|
69
|
+
* subtitle="1 Apr – 30 Jun"
|
|
70
|
+
* actions={<DatePicker … />}
|
|
71
|
+
* stats={
|
|
72
|
+
* <>
|
|
73
|
+
* <StatCard label="Active clients" value={42} />
|
|
74
|
+
* <StatCard label="Sessions" value={318} trend={{ value: 12, label: "vs Q1" }} />
|
|
75
|
+
* </>
|
|
76
|
+
* }
|
|
77
|
+
* >
|
|
78
|
+
* <Section title="Revenue"><ChartContainer …/></Section>
|
|
79
|
+
* <Section title="At risk"><DataTable …/></Section>
|
|
80
|
+
* </DashboardPage>
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* The two regions are separated on purpose. Stats are a fixed-shape row that
|
|
84
|
+
* must reflow as a unit; everything below is free-form and stacks. Folding
|
|
85
|
+
* both into one `children` is how the stat row ends up hand-gridded per page,
|
|
86
|
+
* with a different breakpoint each time — the exact drift `Grid` exists to
|
|
87
|
+
* stop.
|
|
88
|
+
*
|
|
89
|
+
* Children stack at `gap-8`, wider than the page's own `gap-6`, so a chart
|
|
90
|
+
* and the table under it don't read as one block.
|
|
91
|
+
*
|
|
92
|
+
* The header row is markup, not a component, and deliberately not
|
|
93
|
+
* `PageHeader` — see `./detail-page` for the measured reasons composing it
|
|
94
|
+
* was rejected across all four templates. Width is left to `Container` —
|
|
95
|
+
* wrap, don't duplicate.
|
|
96
|
+
*
|
|
97
|
+
* This is a **layout**: it positions tiles and regions and never fetches a
|
|
98
|
+
* metric. There is deliberately no data-bound twin — binding a dashboard
|
|
99
|
+
* needs an aggregate/metric contract, and `genesis-core` ships none. Adding
|
|
100
|
+
* a template ahead of its contract is what `docs/FRAMEWORK.md` warns against
|
|
101
|
+
* in "Why templates need the contract first".
|
|
102
|
+
*
|
|
103
|
+
* @stability Beta
|
|
104
|
+
*/
|
|
105
|
+
declare const DashboardPage: React.ForwardRefExoticComponent<DashboardPageProps & React.RefAttributes<HTMLDivElement>>;
|
|
106
|
+
|
|
107
|
+
export { DashboardPage as D, Grid as G, type DashboardPageProps as a, type GridProps as b, gridVariants as g };
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -6,10 +6,9 @@ export { useViewPreference } from './use-view-preference.js';
|
|
|
6
6
|
export { Density, ViewSettings, useViewSettings } from './use-view-settings.js';
|
|
7
7
|
export { UseSavedViewsReturn, useSavedViews } from './use-saved-views.js';
|
|
8
8
|
export { RouteMap, createPrefetch } from './use-prefetch.js';
|
|
9
|
-
export { R as ResourceActions, a as ResourceColumnDef, U as UseResourcePageProps, b as UseResourcePageReturn, u as useResourcePage } from '../use-resource-page-
|
|
9
|
+
export { R as ResourceActions, a as ResourceColumnDef, U as UseResourcePageProps, b as UseResourcePageReturn, u as useResourcePage } from '../use-resource-page-DTQS011Q.js';
|
|
10
10
|
export { CommandPalette, CommandPaletteItem, CommandPaletteProps, useCommandPaletteHotkey } from '../components/ui/command-palette.js';
|
|
11
11
|
import '../navigation-CpOEyUSb.js';
|
|
12
12
|
import 'react';
|
|
13
|
-
import '../
|
|
14
|
-
import 'react/jsx-runtime';
|
|
13
|
+
import '../view-toggle-CahQ87PW.js';
|
|
15
14
|
import '@marktiderman/genesis-core/provider';
|
package/dist/hooks/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
export { useResourcePage } from '../chunk-
|
|
1
|
+
export { useResourcePage } from '../chunk-GDFNAHI4.js';
|
|
2
2
|
export { useSavedViews } from '../chunk-GCQFVMPI.js';
|
|
3
|
-
export { useViewPreference } from '../chunk-
|
|
3
|
+
export { useViewPreference } from '../chunk-FTTNGGLA.js';
|
|
4
4
|
export { useViewSettings } from '../chunk-OZ7ZAYCS.js';
|
|
5
|
-
export { CommandPalette, useCommandPaletteHotkey } from '../chunk-
|
|
6
|
-
import '../chunk-
|
|
7
|
-
import '../chunk-
|
|
5
|
+
export { CommandPalette, useCommandPaletteHotkey } from '../chunk-CNTWQSUT.js';
|
|
6
|
+
import '../chunk-SEFK4NZV.js';
|
|
7
|
+
import '../chunk-7XMZVISM.js';
|
|
8
8
|
import '../chunk-NZ5WBA4R.js';
|
|
9
9
|
export { useDataFilters } from '../chunk-D4JTQYP5.js';
|
|
10
10
|
import '../chunk-6NPEMLBA.js';
|
|
11
|
-
export { useKeyboardNavigation } from '../chunk-
|
|
11
|
+
export { useKeyboardNavigation } from '../chunk-YJ6MPS6U.js';
|
|
12
12
|
export { useIsMobile } from '../chunk-M7AU5DDM.js';
|
|
13
13
|
export { createPrefetch } from '../chunk-HSHIZHYR.js';
|
|
14
14
|
export { useOne, useResource, useResourceForm, useWizard } from '@marktiderman/genesis-core/hooks';
|
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Vim/Superhuman-style list navigation: j/k (or Arrow Up/Down) move a
|
|
5
|
+
* focused-item cursor *one row at a time*, Enter opens the focused item, x
|
|
6
|
+
* toggles its selection, and Backspace goes "back" (e.g. closes an open
|
|
7
|
+
* detail view). In a multi-column grid the vertical keys step by the
|
|
8
|
+
* container's live column count and Arrow Left/Right step by one, so the
|
|
9
|
+
* cursor follows the grid the user can see rather than treating it as a flat
|
|
10
|
+
* list. Intended for list/grid views such as `DataGrid` — attach
|
|
11
|
+
* `containerRef` to the scrollable item container so the column count can be
|
|
12
|
+
* measured and focus changes can scroll the focused item into view.
|
|
13
|
+
*
|
|
14
|
+
* Deliberately inert, so a default-on consumer can't break the surrounding
|
|
15
|
+
* app: modified chords (Ctrl/Meta/Alt) are never captured, text-entry
|
|
16
|
+
* surfaces keep every key, focused controls (or anything inside a
|
|
17
|
+
* dialog/menu/listbox) keep theirs, composite widgets keep Backspace, and a
|
|
18
|
+
* key that *does nothing* is never swallowed — Arrow Up/Down fall through to
|
|
19
|
+
* the browser's page scrolling on an empty list, or at either end of a full
|
|
20
|
+
* one, instead of dying silently.
|
|
21
|
+
*
|
|
22
|
+
* @stability Beta
|
|
23
|
+
*/
|
|
3
24
|
interface KeyboardNavOptions {
|
|
4
25
|
/** Total number of navigable items */
|
|
5
26
|
itemCount: number;
|
|
@@ -7,13 +28,47 @@ interface KeyboardNavOptions {
|
|
|
7
28
|
onOpen?: (index: number) => void;
|
|
8
29
|
/** Called when x is pressed on focused item */
|
|
9
30
|
onToggleSelect?: (index: number) => void;
|
|
31
|
+
/**
|
|
32
|
+
* Called when Backspace (⌫) is pressed — the conventional "go back" key,
|
|
33
|
+
* e.g. to close an open detail panel/modal and return to the list. Fires
|
|
34
|
+
* regardless of whether an item is currently focused (mirrors Escape),
|
|
35
|
+
* since "go back" should still work if a detail view was opened by mouse
|
|
36
|
+
* click rather than keyboard navigation. Not gated behind `focusedIndex`.
|
|
37
|
+
*
|
|
38
|
+
* Backspace is only intercepted (and its default suppressed) while this
|
|
39
|
+
* is supplied — pass it conditionally, i.e. only while there is something
|
|
40
|
+
* to go back from, so the key stays available to the browser and the
|
|
41
|
+
* surrounding app the rest of the time. Even then it is left alone for
|
|
42
|
+
* text-entry surfaces and for composite widgets that use Backspace
|
|
43
|
+
* themselves (see `KEEPS_BACKSPACE_SELECTOR`).
|
|
44
|
+
*/
|
|
45
|
+
onBack?: (focusedIndex: number) => void;
|
|
10
46
|
/** Ref to the search input to focus on "/" */
|
|
11
47
|
searchInputRef?: React.RefObject<HTMLInputElement | null>;
|
|
12
48
|
/** Whether navigation is enabled. Default true */
|
|
13
49
|
enabled?: boolean;
|
|
14
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* Columns in the navigable grid. Drives the vertical stride: Arrow
|
|
52
|
+
* Down/Up (and j/k) move by `columns`, Arrow Left/Right by one — so in a
|
|
53
|
+
* 3-up grid ArrowDown moves *down* a row instead of one card to the right.
|
|
54
|
+
*
|
|
55
|
+
* Leave unset (the default) to measure the live count off `containerRef`'s
|
|
56
|
+
* resolved `grid-template-columns` on each keypress, which is the only
|
|
57
|
+
* value that stays correct across a responsive column ramp. Pass a number
|
|
58
|
+
* only to override that measurement. Either way a single-column container
|
|
59
|
+
* behaves exactly as a flat list: stride 1, Left/Right inert.
|
|
60
|
+
*/
|
|
15
61
|
columns?: number;
|
|
62
|
+
/**
|
|
63
|
+
* An overlay (detail panel, modal, form) is open above the list. Cursor
|
|
64
|
+
* movement and activation keys are suspended so they can't drive the list
|
|
65
|
+
* hidden behind it, while the dismissal keys (`onBack`/Backspace, Escape)
|
|
66
|
+
* stay live so the overlay can still be closed from the keyboard.
|
|
67
|
+
* Default false.
|
|
68
|
+
*/
|
|
69
|
+
overlayOpen?: boolean;
|
|
16
70
|
}
|
|
71
|
+
/** @stability Beta */
|
|
17
72
|
interface KeyboardNavResult {
|
|
18
73
|
/** Currently focused item index (-1 = none) */
|
|
19
74
|
focusedIndex: number;
|
|
@@ -24,6 +79,7 @@ interface KeyboardNavResult {
|
|
|
24
79
|
/** Whether keyboard nav is actively engaged (user has pressed j/k) */
|
|
25
80
|
isActive: boolean;
|
|
26
81
|
}
|
|
27
|
-
|
|
82
|
+
/** @stability Beta */
|
|
83
|
+
declare function useKeyboardNavigation({ itemCount, onOpen, onToggleSelect, onBack, searchInputRef, enabled, columns, overlayOpen, }: KeyboardNavOptions): KeyboardNavResult;
|
|
28
84
|
|
|
29
85
|
export { type KeyboardNavOptions, type KeyboardNavResult, useKeyboardNavigation };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import 'react';
|
|
2
|
-
export { R as ResourceActions, a as ResourceColumnDef, U as UseResourcePageProps, b as UseResourcePageReturn, t as titleCase, u as useResourcePage } from '../use-resource-page-
|
|
3
|
-
import '../
|
|
2
|
+
export { R as ResourceActions, a as ResourceColumnDef, U as UseResourcePageProps, b as UseResourcePageReturn, t as titleCase, u as useResourcePage } from '../use-resource-page-DTQS011Q.js';
|
|
3
|
+
import '../view-toggle-CahQ87PW.js';
|
|
4
4
|
import '@marktiderman/genesis-core/provider';
|
|
5
|
-
import 'react/jsx-runtime';
|
|
6
5
|
import './use-view-settings.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { titleCase, useResourcePage } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { titleCase, useResourcePage } from '../chunk-GDFNAHI4.js';
|
|
2
|
+
import '../chunk-FTTNGGLA.js';
|
|
3
3
|
//# sourceMappingURL=use-resource-page.js.map
|
|
4
4
|
//# sourceMappingURL=use-resource-page.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { V as ViewMode } from '../
|
|
2
|
-
import 'react
|
|
1
|
+
import { V as ViewMode } from '../view-toggle-CahQ87PW.js';
|
|
2
|
+
import 'react';
|
|
3
3
|
|
|
4
4
|
declare function useViewPreference(key: string, defaultMode?: ViewMode): [ViewMode, (mode: ViewMode) => void];
|
|
5
5
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export { Button, ButtonProps } from './components/ui/button.js';
|
|
1
|
+
export { Button, ButtonAsChildProps, ButtonProps } from './components/ui/button.js';
|
|
2
2
|
export { Badge, BadgeProps } from './components/ui/badge.js';
|
|
3
|
+
export { StatusBadge, StatusBadgeProps, StatusBadgeStatus, statusBadgeVariants } from './components/patterns/status-badge.js';
|
|
3
4
|
export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './components/ui/card.js';
|
|
4
5
|
export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from './components/ui/dialog.js';
|
|
5
6
|
export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger } from './components/ui/alert-dialog.js';
|
|
@@ -11,17 +12,19 @@ export { Progress } from './components/ui/progress.js';
|
|
|
11
12
|
export { Skeleton } from './components/ui/skeleton.js';
|
|
12
13
|
export { Separator } from './components/ui/separator.js';
|
|
13
14
|
export { ScrollArea } from './components/ui/scroll-area.js';
|
|
14
|
-
export { Tooltip } from './components/ui/tooltip.js';
|
|
15
|
+
export { Tooltip, TooltipProps } from './components/ui/tooltip.js';
|
|
15
16
|
export { Collapsible, CollapsibleContent, CollapsibleTrigger } from './components/ui/collapsible.js';
|
|
16
17
|
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './components/ui/dropdown-menu.js';
|
|
17
18
|
export { Popover, PopoverContent, PopoverTrigger } from './components/ui/popover.js';
|
|
18
19
|
export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from './components/ui/table.js';
|
|
19
20
|
export { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut } from './components/ui/command.js';
|
|
20
21
|
export { CommandPalette, CommandPaletteItem, CommandPaletteProps, useCommandPaletteHotkey } from './components/ui/command-palette.js';
|
|
21
|
-
export { EmptyState, NoFeaturesFound, NoFeedbackFound, NoSearchResults } from './components/
|
|
22
|
+
export { EmptyState, EmptyStateProps, NoFeaturesFound, NoFeedbackFound, NoSearchResults } from './components/patterns/empty-state.js';
|
|
22
23
|
export { Label } from './components/ui/label.js';
|
|
23
24
|
export { Textarea } from './components/ui/textarea.js';
|
|
24
25
|
export { Switch } from './components/ui/switch.js';
|
|
26
|
+
export { SettingsRow, SettingsRowProps } from './components/patterns/settings-row.js';
|
|
27
|
+
export { ToggleRow, ToggleRowProps } from './components/patterns/toggle-row.js';
|
|
25
28
|
export { RadioGroup, RadioGroupItem } from './components/ui/radio-group.js';
|
|
26
29
|
export { Alert, AlertDescription, AlertTitle, alertVariants } from './components/ui/alert.js';
|
|
27
30
|
export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from './components/ui/pagination.js';
|
|
@@ -30,6 +33,7 @@ export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHe
|
|
|
30
33
|
export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger } from './components/ui/drawer.js';
|
|
31
34
|
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from './components/ui/accordion.js';
|
|
32
35
|
export { Avatar, AvatarFallback, AvatarImage } from './components/ui/avatar.js';
|
|
36
|
+
export { UserAvatar, UserAvatarProps, userAvatarVariants } from './components/patterns/user-avatar.js';
|
|
33
37
|
export { Slider } from './components/ui/slider.js';
|
|
34
38
|
export { Toggle, toggleVariants } from './components/ui/toggle.js';
|
|
35
39
|
export { ToggleGroup, ToggleGroupItem } from './components/ui/toggle-group.js';
|
|
@@ -43,6 +47,7 @@ export { Carousel, CarouselApi, CarouselContent, CarouselItem, CarouselNext, Car
|
|
|
43
47
|
export { ResizableHandle, ResizablePanel, ResizablePanelGroup } from './components/ui/resizable.js';
|
|
44
48
|
export { Toaster } from './components/ui/sonner.js';
|
|
45
49
|
export { Spinner, SpinnerProps } from './components/ui/spinner.js';
|
|
50
|
+
export { PageLoading, PageLoadingProps, pageLoadingVariants } from './components/patterns/page-loading.js';
|
|
46
51
|
export { Kbd, KbdProps } from './components/ui/kbd.js';
|
|
47
52
|
export { H1, H2, H3, H4, Large, Lead, Muted, P, Small } from './components/ui/typography.js';
|
|
48
53
|
export { ButtonGroup, ButtonGroupProps } from './components/ui/button-group.js';
|
|
@@ -50,36 +55,28 @@ export { InputGroup, InputGroupInput, InputGroupPrefix, InputGroupProps, InputGr
|
|
|
50
55
|
export { Calendar, CalendarDayButton } from './components/ui/calendar.js';
|
|
51
56
|
export { DatePicker, DatePickerProps } from './components/ui/date-picker.js';
|
|
52
57
|
export { ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent } from './components/ui/chart.js';
|
|
53
|
-
export { FormDescription, FormError, FormField, FormLabel } from './components/
|
|
58
|
+
export { FormDescription, FormError, FormField, FormLabel } from './components/patterns/form-field.js';
|
|
59
|
+
export { Toolbar, ToolbarButton, ToolbarButtonProps, ToolbarLink, ToolbarLinkProps, ToolbarProps, ToolbarSeparator, ToolbarSeparatorProps, ToolbarToggleGroup, ToolbarToggleItem, ToolbarToggleItemProps, toolbarVariants } from './components/ui/toolbar.js';
|
|
60
|
+
export { VisuallyHidden, VisuallyHiddenProps } from './components/ui/visually-hidden.js';
|
|
61
|
+
export { AccessibleIcon, AccessibleIconProps } from './components/ui/accessible-icon.js';
|
|
62
|
+
export { PasswordToggleField, PasswordToggleFieldIcon, PasswordToggleFieldIconProps, PasswordToggleFieldInput, PasswordToggleFieldInputProps, PasswordToggleFieldProps, PasswordToggleFieldSlot, PasswordToggleFieldSlotProps, PasswordToggleFieldToggle, PasswordToggleFieldToggleProps } from './components/ui/password-toggle-field.js';
|
|
63
|
+
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';
|
|
64
|
+
export { D as DashboardPage, a as DashboardPageProps, G as Grid, b as GridProps, g as gridVariants } from './dashboard-page-C0TihRl5.js';
|
|
65
|
+
export { S as Split, a as SplitBreakpoint, b as SplitProps, c as SplitRatio, s as splitVariants } from './split-Dk9f4Mi0.js';
|
|
66
|
+
export { DetailPage, DetailPageProps } from './components/layout/detail-page.js';
|
|
67
|
+
export { FormPage, FormPageProps } from './components/layout/form-page.js';
|
|
68
|
+
export { SettingsPage, SettingsPageProps, SettingsPageSection } from './components/layout/settings-page.js';
|
|
54
69
|
export { cn } from './utils.js';
|
|
55
70
|
export { D as DefaultLink, G as GenesisLinkProps, L as LinkComponent, N as NavigateFn, S as SearchParamsAdapter, d as defaultNavigate, i as isPathActive, u as useBrowserSearchParams } from './navigation-CpOEyUSb.js';
|
|
56
71
|
export { toast } from 'sonner';
|
|
57
|
-
import 'react/jsx-runtime';
|
|
58
72
|
import 'class-variance-authority/types';
|
|
59
73
|
import 'react';
|
|
60
74
|
import 'class-variance-authority';
|
|
61
|
-
import '@
|
|
62
|
-
import '
|
|
63
|
-
import '@radix-ui/react-checkbox';
|
|
64
|
-
import '@radix-ui/react-select';
|
|
65
|
-
import '@radix-ui/react-collapsible';
|
|
66
|
-
import '@radix-ui/react-dropdown-menu';
|
|
67
|
-
import '@radix-ui/react-popover';
|
|
75
|
+
import '@marktiderman/genesis-design-system/tokens';
|
|
76
|
+
import 'radix-ui';
|
|
68
77
|
import 'lucide-react';
|
|
69
|
-
import '@radix-ui/react-label';
|
|
70
|
-
import '@radix-ui/react-switch';
|
|
71
|
-
import '@radix-ui/react-radio-group';
|
|
72
78
|
import 'vaul';
|
|
73
|
-
import '@radix-ui/react-
|
|
74
|
-
import '@radix-ui/react-avatar';
|
|
75
|
-
import '@radix-ui/react-slider';
|
|
76
|
-
import '@radix-ui/react-toggle';
|
|
77
|
-
import '@radix-ui/react-toggle-group';
|
|
78
|
-
import '@radix-ui/react-context-menu';
|
|
79
|
-
import '@radix-ui/react-hover-card';
|
|
80
|
-
import '@radix-ui/react-navigation-menu';
|
|
81
|
-
import '@radix-ui/react-menubar';
|
|
82
|
-
import '@radix-ui/react-aspect-ratio';
|
|
79
|
+
import '@radix-ui/react-dialog';
|
|
83
80
|
import 'input-otp';
|
|
84
81
|
import 'embla-carousel-react';
|
|
85
82
|
import 'react-resizable-panels';
|