@hjmds/react 1.12.0 → 1.13.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/actions.d.ts +4 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +4 -1
- package/dist/actions.js.map +1 -1
- package/dist/activity-heatmap.d.ts +4 -1
- package/dist/activity-heatmap.d.ts.map +1 -1
- package/dist/activity-heatmap.js +1 -1
- package/dist/activity-heatmap.js.map +1 -1
- package/dist/advanced-display.d.ts +31 -3
- package/dist/advanced-display.d.ts.map +1 -1
- package/dist/advanced-display.js +26 -27
- package/dist/advanced-display.js.map +1 -1
- package/dist/advanced-forms.d.ts +27 -2
- package/dist/advanced-forms.d.ts.map +1 -1
- package/dist/advanced-forms.js +11 -7
- package/dist/advanced-forms.js.map +1 -1
- package/dist/affix.d.ts +4 -1
- package/dist/affix.d.ts.map +1 -1
- package/dist/affix.js +2 -2
- package/dist/affix.js.map +1 -1
- package/dist/agreement.d.ts +3 -0
- package/dist/agreement.d.ts.map +1 -1
- package/dist/agreement.js +14 -3
- package/dist/agreement.js.map +1 -1
- package/dist/anchor.d.ts +5 -0
- package/dist/anchor.d.ts.map +1 -1
- package/dist/anchor.js +2 -2
- package/dist/anchor.js.map +1 -1
- package/dist/asset.d.ts +8 -1
- package/dist/asset.d.ts.map +1 -1
- package/dist/asset.js +4 -4
- package/dist/asset.js.map +1 -1
- package/dist/auth-screen.d.ts +5 -0
- package/dist/auth-screen.d.ts.map +1 -1
- package/dist/auth-screen.js +2 -1
- package/dist/auth-screen.js.map +1 -1
- package/dist/bottom-cta.d.ts +5 -0
- package/dist/bottom-cta.d.ts.map +1 -1
- package/dist/bottom-cta.js +2 -2
- package/dist/bottom-cta.js.map +1 -1
- package/dist/bottom-info.d.ts +5 -0
- package/dist/bottom-info.d.ts.map +1 -1
- package/dist/bottom-info.js +2 -2
- package/dist/bottom-info.js.map +1 -1
- package/dist/bottom-navigation.d.ts +3 -0
- package/dist/bottom-navigation.d.ts.map +1 -1
- package/dist/bottom-navigation.js +2 -1
- package/dist/bottom-navigation.js.map +1 -1
- package/dist/breadcrumb.d.ts +3 -0
- package/dist/breadcrumb.d.ts.map +1 -1
- package/dist/breadcrumb.js +2 -2
- package/dist/breadcrumb.js.map +1 -1
- package/dist/calendar.d.ts +4 -1
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +2 -2
- package/dist/calendar.js.map +1 -1
- package/dist/carousel-motion.d.ts +3 -0
- package/dist/carousel-motion.d.ts.map +1 -1
- package/dist/carousel-motion.js +1 -1
- package/dist/carousel-motion.js.map +1 -1
- package/dist/carousel.d.ts +3 -0
- package/dist/carousel.d.ts.map +1 -1
- package/dist/carousel.js +2 -2
- package/dist/carousel.js.map +1 -1
- package/dist/celebration.d.ts.map +1 -1
- package/dist/celebration.js.map +1 -1
- package/dist/clipboard.d.ts.map +1 -1
- package/dist/clipboard.js +6 -2
- package/dist/clipboard.js.map +1 -1
- package/dist/code-block.d.ts +4 -1
- package/dist/code-block.d.ts.map +1 -1
- package/dist/code-block.js +1 -1
- package/dist/code-block.js.map +1 -1
- package/dist/collapsible.d.ts +3 -0
- package/dist/collapsible.d.ts.map +1 -1
- package/dist/collapsible.js +2 -2
- package/dist/collapsible.js.map +1 -1
- package/dist/color-picker.d.ts +4 -1
- package/dist/color-picker.d.ts.map +1 -1
- package/dist/color-picker.js +2 -2
- package/dist/color-picker.js.map +1 -1
- package/dist/command-palette.d.ts +6 -0
- package/dist/command-palette.d.ts.map +1 -1
- package/dist/command-palette.js +49 -15
- package/dist/command-palette.js.map +1 -1
- package/dist/composition-style.d.ts +14 -1
- package/dist/composition-style.d.ts.map +1 -1
- package/dist/composition-style.js.map +1 -1
- package/dist/content-transition.d.ts +6 -2
- package/dist/content-transition.d.ts.map +1 -1
- package/dist/content-transition.js +4 -4
- package/dist/content-transition.js.map +1 -1
- package/dist/context-menu.d.ts +4 -1
- package/dist/context-menu.d.ts.map +1 -1
- package/dist/context-menu.js +2 -2
- package/dist/context-menu.js.map +1 -1
- package/dist/data-table.d.ts +3 -0
- package/dist/data-table.d.ts.map +1 -1
- package/dist/data-table.js +31 -11
- package/dist/data-table.js.map +1 -1
- package/dist/date-picker.d.ts +4 -1
- package/dist/date-picker.d.ts.map +1 -1
- package/dist/date-picker.js +2 -2
- package/dist/date-picker.js.map +1 -1
- package/dist/date-range.d.ts +4 -1
- package/dist/date-range.d.ts.map +1 -1
- package/dist/date-range.js +2 -2
- package/dist/date-range.js.map +1 -1
- package/dist/display.d.ts +4 -0
- package/dist/display.d.ts.map +1 -1
- package/dist/display.js.map +1 -1
- package/dist/duration-field.d.ts +4 -2
- package/dist/duration-field.d.ts.map +1 -1
- package/dist/duration-field.js +2 -2
- package/dist/duration-field.js.map +1 -1
- package/dist/effect-surface.d.ts +4 -2
- package/dist/effect-surface.d.ts.map +1 -1
- package/dist/effect-surface.js +2 -2
- package/dist/effect-surface.js.map +1 -1
- package/dist/evidence.d.ts +1 -1
- package/dist/evidence.js +1 -1
- package/dist/evidence.js.map +1 -1
- package/dist/feedback.d.ts +24 -13
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.js +17 -15
- package/dist/feedback.js.map +1 -1
- package/dist/file-picker.d.ts +5 -0
- package/dist/file-picker.d.ts.map +1 -1
- package/dist/file-picker.js +2 -2
- package/dist/file-picker.js.map +1 -1
- package/dist/floating-action-button.d.ts.map +1 -1
- package/dist/floating-action-button.js.map +1 -1
- package/dist/folder-preview.d.ts +4 -1
- package/dist/folder-preview.d.ts.map +1 -1
- package/dist/folder-preview.js +2 -2
- package/dist/folder-preview.js.map +1 -1
- package/dist/forms.d.ts +35 -3
- package/dist/forms.d.ts.map +1 -1
- package/dist/forms.js +55 -36
- package/dist/forms.js.map +1 -1
- package/dist/gravity-letters.d.ts +4 -2
- package/dist/gravity-letters.d.ts.map +1 -1
- package/dist/gravity-letters.js +2 -2
- package/dist/gravity-letters.js.map +1 -1
- package/dist/grid-reveal.d.ts +4 -2
- package/dist/grid-reveal.d.ts.map +1 -1
- package/dist/grid-reveal.js +2 -2
- package/dist/grid-reveal.js.map +1 -1
- package/dist/heading.d.ts +5 -0
- package/dist/heading.d.ts.map +1 -1
- package/dist/heading.js +8 -1
- package/dist/heading.js.map +1 -1
- package/dist/inline-confirm.d.ts +3 -0
- package/dist/inline-confirm.d.ts.map +1 -1
- package/dist/inline-confirm.js +3 -3
- package/dist/inline-confirm.js.map +1 -1
- package/dist/internal/message-reactions.d.ts +16 -0
- package/dist/internal/message-reactions.d.ts.map +1 -0
- package/dist/internal/message-reactions.js +42 -0
- package/dist/internal/message-reactions.js.map +1 -0
- package/dist/internal/spinner.d.ts +18 -0
- package/dist/internal/spinner.d.ts.map +1 -0
- package/dist/internal/spinner.js +10 -0
- package/dist/internal/spinner.js.map +1 -0
- package/dist/layout.d.ts +12 -0
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +6 -6
- package/dist/layout.js.map +1 -1
- package/dist/masonry.d.ts +4 -1
- package/dist/masonry.d.ts.map +1 -1
- package/dist/masonry.js +5 -3
- package/dist/masonry.js.map +1 -1
- package/dist/mentions.d.ts.map +1 -1
- package/dist/mentions.js +12 -3
- package/dist/mentions.js.map +1 -1
- package/dist/menu-morph.d.ts +8 -1
- package/dist/menu-morph.d.ts.map +1 -1
- package/dist/menu-morph.js +3 -3
- package/dist/menu-morph.js.map +1 -1
- package/dist/menubar.d.ts +4 -1
- package/dist/menubar.d.ts.map +1 -1
- package/dist/menubar.js +4 -3
- package/dist/menubar.js.map +1 -1
- package/dist/modal.d.ts.map +1 -1
- package/dist/modal.js +4 -1
- package/dist/modal.js.map +1 -1
- package/dist/navigation-bar.d.ts +4 -1
- package/dist/navigation-bar.d.ts.map +1 -1
- package/dist/navigation-bar.js +2 -2
- package/dist/navigation-bar.js.map +1 -1
- package/dist/navigation.d.ts +5 -0
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +6 -6
- package/dist/navigation.js.map +1 -1
- package/dist/notification-bell.d.ts +4 -1
- package/dist/notification-bell.d.ts.map +1 -1
- package/dist/notification-bell.js +5 -3
- package/dist/notification-bell.js.map +1 -1
- package/dist/number-field.d.ts +11 -0
- package/dist/number-field.d.ts.map +1 -1
- package/dist/number-field.js +8 -3
- package/dist/number-field.js.map +1 -1
- package/dist/overlay-stack.d.ts.map +1 -1
- package/dist/overlay-stack.js.map +1 -1
- package/dist/overlays.d.ts +5 -0
- package/dist/overlays.d.ts.map +1 -1
- package/dist/overlays.js +35 -11
- package/dist/overlays.js.map +1 -1
- package/dist/pagination.d.ts +5 -0
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +2 -2
- package/dist/pagination.js.map +1 -1
- package/dist/popover.d.ts.map +1 -1
- package/dist/popover.js +5 -4
- package/dist/popover.js.map +1 -1
- package/dist/portal.d.ts.map +1 -1
- package/dist/portal.js +2 -1
- package/dist/portal.js.map +1 -1
- package/dist/provider-button.d.ts +5 -0
- package/dist/provider-button.d.ts.map +1 -1
- package/dist/provider-button.js +2 -2
- package/dist/provider-button.js.map +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js.map +1 -1
- package/dist/qr-code.d.ts +4 -1
- package/dist/qr-code.d.ts.map +1 -1
- package/dist/qr-code.js +2 -2
- package/dist/qr-code.js.map +1 -1
- package/dist/reaction-picker.d.ts +6 -2
- package/dist/reaction-picker.d.ts.map +1 -1
- package/dist/reaction-picker.js +20 -4
- package/dist/reaction-picker.js.map +1 -1
- package/dist/saved-items.d.ts +33 -0
- package/dist/saved-items.d.ts.map +1 -0
- package/dist/saved-items.js +19 -0
- package/dist/saved-items.js.map +1 -0
- package/dist/screen-flows.d.ts +323 -0
- package/dist/screen-flows.d.ts.map +1 -0
- package/dist/screen-flows.js +212 -0
- package/dist/screen-flows.js.map +1 -0
- package/dist/screens.d.ts +120 -0
- package/dist/screens.d.ts.map +1 -0
- package/dist/screens.js +66 -0
- package/dist/screens.js.map +1 -0
- package/dist/select.d.ts +6 -0
- package/dist/select.d.ts.map +1 -1
- package/dist/select.js +13 -3
- package/dist/select.js.map +1 -1
- package/dist/selection.d.ts +28 -1
- package/dist/selection.d.ts.map +1 -1
- package/dist/selection.js +12 -12
- package/dist/selection.js.map +1 -1
- package/dist/side-panel.d.ts.map +1 -1
- package/dist/side-panel.js.map +1 -1
- package/dist/sidebar.d.ts +3 -0
- package/dist/sidebar.d.ts.map +1 -1
- package/dist/sidebar.js +2 -2
- package/dist/sidebar.js.map +1 -1
- package/dist/skip-nav.d.ts.map +1 -1
- package/dist/skip-nav.js.map +1 -1
- package/dist/slider.d.ts +5 -0
- package/dist/slider.d.ts.map +1 -1
- package/dist/slider.js +2 -1
- package/dist/slider.js.map +1 -1
- package/dist/sortable.d.ts +3 -0
- package/dist/sortable.d.ts.map +1 -1
- package/dist/sortable.js +1 -1
- package/dist/sortable.js.map +1 -1
- package/dist/splitter.d.ts +5 -0
- package/dist/splitter.d.ts.map +1 -1
- package/dist/splitter.js +28 -3
- package/dist/splitter.js.map +1 -1
- package/dist/step-player.d.ts +4 -1
- package/dist/step-player.d.ts.map +1 -1
- package/dist/step-player.js +2 -2
- package/dist/step-player.js.map +1 -1
- package/dist/steps.d.ts +5 -0
- package/dist/steps.d.ts.map +1 -1
- package/dist/steps.js +2 -2
- package/dist/steps.js.map +1 -1
- package/dist/styles.css +245 -65
- package/dist/styles.layered.css +245 -65
- package/dist/supplemental-display.d.ts +4 -0
- package/dist/supplemental-display.d.ts.map +1 -1
- package/dist/supplemental-display.js +7 -4
- package/dist/supplemental-display.js.map +1 -1
- package/dist/supplemental-navigation.d.ts +5 -0
- package/dist/supplemental-navigation.d.ts.map +1 -1
- package/dist/supplemental-navigation.js +2 -2
- package/dist/supplemental-navigation.js.map +1 -1
- package/dist/swipe-actions.d.ts +4 -1
- package/dist/swipe-actions.d.ts.map +1 -1
- package/dist/swipe-actions.js +2 -2
- package/dist/swipe-actions.js.map +1 -1
- package/dist/tags-input.d.ts +5 -0
- package/dist/tags-input.d.ts.map +1 -1
- package/dist/tags-input.js +2 -2
- package/dist/tags-input.js.map +1 -1
- package/dist/task-list.d.ts +4 -1
- package/dist/task-list.d.ts.map +1 -1
- package/dist/task-list.js +3 -3
- package/dist/task-list.js.map +1 -1
- package/dist/text-formats.d.ts +5 -0
- package/dist/text-formats.d.ts.map +1 -1
- package/dist/text-formats.js +2 -1
- package/dist/text-formats.js.map +1 -1
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +22 -2
- package/dist/theme.js.map +1 -1
- package/dist/thinking-orb.d.ts +4 -1
- package/dist/thinking-orb.d.ts.map +1 -1
- package/dist/thinking-orb.js +2 -2
- package/dist/thinking-orb.js.map +1 -1
- package/dist/toast.d.ts.map +1 -1
- package/dist/toast.js +10 -4
- package/dist/toast.js.map +1 -1
- package/dist/toggle-group.d.ts +3 -0
- package/dist/toggle-group.d.ts.map +1 -1
- package/dist/toggle-group.js +2 -1
- package/dist/toggle-group.js.map +1 -1
- package/dist/top-bar.d.ts +5 -0
- package/dist/top-bar.d.ts.map +1 -1
- package/dist/top-bar.js +2 -2
- package/dist/top-bar.js.map +1 -1
- package/dist/top.d.ts +5 -0
- package/dist/top.d.ts.map +1 -1
- package/dist/top.js +2 -2
- package/dist/top.js.map +1 -1
- package/dist/tour.d.ts.map +1 -1
- package/dist/tour.js +3 -2
- package/dist/tour.js.map +1 -1
- package/dist/transfer-list.d.ts +3 -0
- package/dist/transfer-list.d.ts.map +1 -1
- package/dist/transfer-list.js +2 -2
- package/dist/transfer-list.js.map +1 -1
- package/dist/tree.d.ts +3 -0
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +17 -5
- package/dist/tree.js.map +1 -1
- package/dist/upload-item.d.ts +5 -0
- package/dist/upload-item.d.ts.map +1 -1
- package/dist/upload-item.js +2 -2
- package/dist/upload-item.js.map +1 -1
- package/dist/virtual-list.d.ts +4 -1
- package/dist/virtual-list.d.ts.map +1 -1
- package/dist/virtual-list.js +2 -2
- package/dist/virtual-list.js.map +1 -1
- package/dist/voice-note.d.ts +4 -1
- package/dist/voice-note.d.ts.map +1 -1
- package/dist/voice-note.js +2 -2
- package/dist/voice-note.js.map +1 -1
- package/dist/watermark.d.ts +4 -1
- package/dist/watermark.d.ts.map +1 -1
- package/dist/watermark.js +2 -2
- package/dist/watermark.js.map +1 -1
- package/package.json +18 -3
package/dist/actions.d.ts
CHANGED
|
@@ -74,6 +74,8 @@ export type LinkProps = AnchorHTMLAttributes<HTMLAnchorElement> & Readonly<{
|
|
|
74
74
|
trailing?: ReactNode;
|
|
75
75
|
/** Framework adapter, for example Next.js Link, while HJM keeps link semantics and state. */
|
|
76
76
|
renderAnchor?: (props: LinkRenderProps) => ReactElement;
|
|
77
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
78
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
77
79
|
}>;
|
|
78
80
|
export declare const Link: import("react").ForwardRefExoticComponent<AnchorHTMLAttributes<HTMLAnchorElement> & Readonly<{
|
|
79
81
|
tone?: LinkTone;
|
|
@@ -83,5 +85,7 @@ export declare const Link: import("react").ForwardRefExoticComponent<AnchorHTMLA
|
|
|
83
85
|
trailing?: ReactNode;
|
|
84
86
|
/** Framework adapter, for example Next.js Link, while HJM keeps link semantics and state. */
|
|
85
87
|
renderAnchor?: (props: LinkRenderProps) => ReactElement;
|
|
88
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
89
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
86
90
|
}> & import("react").RefAttributes<HTMLAnchorElement>>;
|
|
87
91
|
//# sourceMappingURL=actions.d.ts.map
|
package/dist/actions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,sCAAsC,CAAC;AAE9C,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACzC,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,WAAW,EACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EAEjB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AACnF,YAAY,EACV,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,MAAM,WAAW,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAC/D,QAAQ,CAAC;IACP,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,kFAAkF;IAClF,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,iFAAiF;IACjF,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACnB,4EAA4E;IAC9E,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACzC,CAAC,CAAC;AAEH,eAAO,MAAM,MAAM;WAfR,UAAU;WACV,UAAU;IACjB,kFAAkF;YAC1E,WAAW;IACnB,iFAAiF;YACzE,WAAW;IACnB,2EAA2E;eAChE,OAAO;cACR,OAAO;cACP,SAAS;eACR,SAAS;IAClB,4EAA4E;kBAChE,uBAAuB;sDA4DvC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,YAAY,CACb,GACC,QAAQ,CAAC;IACP,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IAClB,4EAA4E;IAC9E,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACzC,CAAC,CAAC;AAEH,eAAO,MAAM,UAAU;WAZZ,MAAM;WACN,cAAc;WACd,cAAc;YACb,eAAe;IACvB,2EAA2E;eAChE,OAAO;cACR,OAAO;cACP,SAAS;IACjB,4EAA4E;kBAChE,uBAAuB;sDAwDxC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GACnE,QAAQ,CAAC;IACP,QAAQ,EAAE,SAAS,CAAC;IACpB,GAAG,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC;IACrC,WAAW,EAAE,QAAQ,CAAC;IACtB,cAAc,EAAE,WAAW,CAAC;IAC5B,YAAY,EAAE,UAAU,GAAG,MAAM,CAAC;CACnC,CAAC,CAAC;AAEL,MAAM,MAAM,SAAS,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAC7D,QAAQ,CAAC;IACP,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,6FAA6F;IAC7F,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,YAAY,CAAC;IACxD,gGAAgG;IAChG,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC,CAAC,CAAC;AAEL,eAAO,MAAM,IAAI;WAXN,QAAQ;cACL,WAAW;eACV,OAAO;cACR,SAAS;eACR,SAAS;IACpB,6FAA6F;mBAC9E,CAAC,KAAK,EAAE,eAAe,KAAK,YAAY;IACvD,gGAAgG;kBAClF,uBAAuB;sDAqDvC,CAAC"}
|
package/dist/actions.js
CHANGED
|
@@ -33,7 +33,7 @@ export const IconButton = forwardRef(function IconButton({ label, tone = iconBut
|
|
|
33
33
|
};
|
|
34
34
|
return (_jsx("button", { ...props, style: { ...style, ...layoutStyle }, ref: ref, type: type, className: classNames("hjm-icon-button", className), "data-tone": tone, "data-size": size, "data-shape": shape, ...(selected === undefined ? {} : { "data-selected": selected, "aria-pressed": selected }), "data-state": loading ? "loading" : unavailable ? "disabled" : "idle", "aria-label": label, "aria-busy": loading || undefined, "aria-disabled": unavailable || undefined, disabled: disabled, onClick: handleClick, children: loading ? _jsx("span", { className: "hjm-button__spinner", "aria-hidden": "true" }) : children }));
|
|
35
35
|
});
|
|
36
|
-
export const Link = forwardRef(function Link({ tone = linkRecipe.defaults.tone, variant = linkRecipe.defaults.variant, disabled = false, leading, trailing, renderAnchor, target, rel, tabIndex, onClick, className, children, ...props }, ref) {
|
|
36
|
+
export const Link = forwardRef(function Link({ tone = linkRecipe.defaults.tone, variant = linkRecipe.defaults.variant, disabled = false, leading, trailing, renderAnchor, target, rel, tabIndex, onClick, className, children, layoutStyle, ...props }, ref) {
|
|
37
37
|
const handleClick = (event) => {
|
|
38
38
|
if (disabled) {
|
|
39
39
|
event.preventDefault();
|
|
@@ -43,6 +43,9 @@ export const Link = forwardRef(function Link({ tone = linkRecipe.defaults.tone,
|
|
|
43
43
|
};
|
|
44
44
|
const anchorProps = {
|
|
45
45
|
...props,
|
|
46
|
+
// `renderAnchor` adapters receive the merged placement, so a framework Link
|
|
47
|
+
// gets the same position as the plain <a>.
|
|
48
|
+
...(props.style === undefined && layoutStyle === undefined ? {} : { style: { ...props.style, ...layoutStyle } }),
|
|
46
49
|
ref,
|
|
47
50
|
className: classNames("hjm-link", className),
|
|
48
51
|
"data-tone": tone,
|
package/dist/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n buttonRecipe,\n type ButtonAlign,\n type ButtonShape,\n type ButtonSize,\n type ButtonTone,\n} from \"@hjmds/design-contracts/recipes/base\";\n\nexport type { ButtonAlign, ButtonShape };\nimport {\n iconButtonRecipe,\n linkRecipe,\n type IconButtonShape,\n type IconButtonSize,\n type IconButtonTone,\n type LinkTone,\n type LinkVariant,\n} from \"@hjmds/design-contracts/recipes\";\nimport {\n forwardRef,\n type AnchorHTMLAttributes,\n type CSSProperties,\n type ButtonHTMLAttributes,\n type ForwardedRef,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { classNames } from \"./internal.js\";\n\nexport type { ButtonSize, ButtonTone } from \"@hjmds/design-contracts/recipes/base\";\nexport type {\n IconButtonShape,\n IconButtonSize,\n IconButtonTone,\n} from \"@hjmds/design-contracts/recipes\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\nexport type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> &\n Readonly<{\n tone?: ButtonTone;\n size?: ButtonSize;\n /** Frame geometry. `pill` replaces product code that overrode `border-radius`. */\n shape?: ButtonShape;\n /** Label placement inside the frame; `leading` suits a full-width row action. */\n align?: ButtonAlign;\n /** Toggle state. Paints the selected treatment and sets `aria-pressed`. */\n selected?: boolean;\n loading?: boolean;\n leading?: ReactNode;\n trailing?: ReactNode;\n /** Canonical layout-only placement. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n tone = buttonRecipe.defaults.tone,\n size = buttonRecipe.defaults.size,\n shape = buttonRecipe.defaults.shape,\n align = buttonRecipe.defaults.align,\n selected,\n loading = false,\n leading,\n trailing,\n disabled,\n onClick,\n type = \"button\",\n className,\n children,\n layoutStyle,\n style,\n ...props\n },\n ref,\n) {\n // Preserve a focusable disabled action (e.g. a Carousel boundary).\n const ariaDisabled = props[\"aria-disabled\"] === true || props[\"aria-disabled\"] === \"true\";\n const unavailable = disabled === true || loading || ariaDisabled;\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n if (unavailable) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n onClick?.(event);\n };\n return (\n <button\n {...props}\n // The cap lives in the recipe, not in the stylesheet: one number, one place.\n style={{ \"--hjm-button-label-lines\": buttonRecipe.label.maxLines, ...style, ...layoutStyle } as CSSProperties}\n ref={ref}\n type={type}\n className={classNames(\"hjm-button\", className)}\n data-tone={tone}\n data-size={size}\n data-shape={shape}\n data-align={align}\n {...(selected === undefined ? {} : { \"data-selected\": selected, \"aria-pressed\": selected })}\n data-state={loading ? \"loading\" : unavailable ? \"disabled\" : \"idle\"}\n aria-busy={loading || undefined}\n aria-disabled={unavailable || undefined}\n disabled={disabled}\n onClick={handleClick}\n >\n {leading}\n <span className=\"hjm-button__label\">{children}</span>\n {trailing}\n {loading ? <span className=\"hjm-button__loading-indicator\" aria-hidden=\"true\"><span className=\"hjm-button__spinner\" /></span> : null}\n </button>\n );\n});\n\nexport type IconButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"aria-label\"\n> &\n Readonly<{\n label: string;\n tone?: IconButtonTone;\n size?: IconButtonSize;\n shape?: IconButtonShape;\n /** Toggle state. Paints the selected treatment and sets `aria-pressed`. */\n selected?: boolean;\n loading?: boolean;\n children: ReactNode;\n /** Canonical layout-only placement. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n function IconButton(\n {\n label,\n tone = iconButtonRecipe.defaults.tone,\n size = iconButtonRecipe.defaults.size,\n shape = iconButtonRecipe.defaults.shape,\n selected,\n loading = false,\n disabled,\n onClick,\n type = \"button\",\n className,\n children,\n layoutStyle,\n style,\n ...props\n },\n ref,\n ) {\n // Preserve a focusable disabled action (e.g. a Carousel boundary).\n const ariaDisabled = props[\"aria-disabled\"] === true || props[\"aria-disabled\"] === \"true\";\n const unavailable = disabled === true || loading || ariaDisabled;\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n if (unavailable) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n onClick?.(event);\n };\n return (\n <button\n {...props}\n style={{ ...style, ...layoutStyle }}\n ref={ref}\n type={type}\n className={classNames(\"hjm-icon-button\", className)}\n data-tone={tone}\n data-size={size}\n data-shape={shape}\n {...(selected === undefined ? {} : { \"data-selected\": selected, \"aria-pressed\": selected })}\n data-state={loading ? \"loading\" : unavailable ? \"disabled\" : \"idle\"}\n aria-label={label}\n aria-busy={loading || undefined}\n aria-disabled={unavailable || undefined}\n disabled={disabled}\n onClick={handleClick}\n >\n {loading ? <span className=\"hjm-button__spinner\" aria-hidden=\"true\" /> : children}\n </button>\n );\n },\n);\n\nexport type LinkRenderProps = AnchorHTMLAttributes<HTMLAnchorElement> &\n Readonly<{\n children: ReactNode;\n ref: ForwardedRef<HTMLAnchorElement>;\n \"data-tone\": LinkTone;\n \"data-variant\": LinkVariant;\n \"data-state\": \"disabled\" | \"idle\";\n }>;\n\nexport type LinkProps = AnchorHTMLAttributes<HTMLAnchorElement> &\n Readonly<{\n tone?: LinkTone;\n variant?: LinkVariant;\n disabled?: boolean;\n leading?: ReactNode;\n trailing?: ReactNode;\n /** Framework adapter, for example Next.js Link, while HJM keeps link semantics and state. */\n renderAnchor?: (props: LinkRenderProps) => ReactElement;\n }>;\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(function Link(\n {\n tone = linkRecipe.defaults.tone,\n variant = linkRecipe.defaults.variant,\n disabled = false,\n leading,\n trailing,\n renderAnchor,\n target,\n rel,\n tabIndex,\n onClick,\n className,\n children,\n ...props\n },\n ref,\n) {\n const handleClick = (event: MouseEvent<HTMLAnchorElement>) => {\n if (disabled) {\n event.preventDefault();\n return;\n }\n onClick?.(event);\n };\n const anchorProps: LinkRenderProps = {\n ...props,\n ref,\n className: classNames(\"hjm-link\", className),\n \"data-tone\": tone,\n \"data-variant\": variant,\n \"data-state\": disabled ? \"disabled\" : \"idle\",\n \"aria-disabled\": disabled || undefined,\n tabIndex: disabled ? -1 : tabIndex,\n target,\n rel: rel ?? (target === \"_blank\" ? \"noreferrer noopener\" : undefined),\n onClick: handleClick,\n children: (\n <>\n {leading}\n <span>{children}</span>\n {trailing}\n </>\n ),\n };\n return renderAnchor ? renderAnchor(anchorProps) : <a {...anchorProps} />;\n});\n"]}
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n buttonRecipe,\n type ButtonAlign,\n type ButtonShape,\n type ButtonSize,\n type ButtonTone,\n} from \"@hjmds/design-contracts/recipes/base\";\n\nexport type { ButtonAlign, ButtonShape };\nimport {\n iconButtonRecipe,\n linkRecipe,\n type IconButtonShape,\n type IconButtonSize,\n type IconButtonTone,\n type LinkTone,\n type LinkVariant,\n} from \"@hjmds/design-contracts/recipes\";\nimport {\n forwardRef,\n type AnchorHTMLAttributes,\n type CSSProperties,\n type ButtonHTMLAttributes,\n type ForwardedRef,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { classNames } from \"./internal.js\";\n\nexport type { ButtonSize, ButtonTone } from \"@hjmds/design-contracts/recipes/base\";\nexport type {\n IconButtonShape,\n IconButtonSize,\n IconButtonTone,\n} from \"@hjmds/design-contracts/recipes\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\nexport type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> &\n Readonly<{\n tone?: ButtonTone;\n size?: ButtonSize;\n /** Frame geometry. `pill` replaces product code that overrode `border-radius`. */\n shape?: ButtonShape;\n /** Label placement inside the frame; `leading` suits a full-width row action. */\n align?: ButtonAlign;\n /** Toggle state. Paints the selected treatment and sets `aria-pressed`. */\n selected?: boolean;\n loading?: boolean;\n leading?: ReactNode;\n trailing?: ReactNode;\n /** Canonical layout-only placement. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n tone = buttonRecipe.defaults.tone,\n size = buttonRecipe.defaults.size,\n shape = buttonRecipe.defaults.shape,\n align = buttonRecipe.defaults.align,\n selected,\n loading = false,\n leading,\n trailing,\n disabled,\n onClick,\n type = \"button\",\n className,\n children,\n layoutStyle,\n style,\n ...props\n },\n ref,\n) {\n // Preserve a focusable disabled action (e.g. a Carousel boundary).\n const ariaDisabled = props[\"aria-disabled\"] === true || props[\"aria-disabled\"] === \"true\";\n const unavailable = disabled === true || loading || ariaDisabled;\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n if (unavailable) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n onClick?.(event);\n };\n return (\n <button\n {...props}\n // The cap lives in the recipe, not in the stylesheet: one number, one place.\n style={{ \"--hjm-button-label-lines\": buttonRecipe.label.maxLines, ...style, ...layoutStyle } as CSSProperties}\n ref={ref}\n type={type}\n className={classNames(\"hjm-button\", className)}\n data-tone={tone}\n data-size={size}\n data-shape={shape}\n data-align={align}\n {...(selected === undefined ? {} : { \"data-selected\": selected, \"aria-pressed\": selected })}\n data-state={loading ? \"loading\" : unavailable ? \"disabled\" : \"idle\"}\n aria-busy={loading || undefined}\n aria-disabled={unavailable || undefined}\n disabled={disabled}\n onClick={handleClick}\n >\n {leading}\n <span className=\"hjm-button__label\">{children}</span>\n {trailing}\n {loading ? <span className=\"hjm-button__loading-indicator\" aria-hidden=\"true\"><span className=\"hjm-button__spinner\" /></span> : null}\n </button>\n );\n});\n\nexport type IconButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"aria-label\"\n> &\n Readonly<{\n label: string;\n tone?: IconButtonTone;\n size?: IconButtonSize;\n shape?: IconButtonShape;\n /** Toggle state. Paints the selected treatment and sets `aria-pressed`. */\n selected?: boolean;\n loading?: boolean;\n children: ReactNode;\n /** Canonical layout-only placement. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n function IconButton(\n {\n label,\n tone = iconButtonRecipe.defaults.tone,\n size = iconButtonRecipe.defaults.size,\n shape = iconButtonRecipe.defaults.shape,\n selected,\n loading = false,\n disabled,\n onClick,\n type = \"button\",\n className,\n children,\n layoutStyle,\n style,\n ...props\n },\n ref,\n ) {\n // Preserve a focusable disabled action (e.g. a Carousel boundary).\n const ariaDisabled = props[\"aria-disabled\"] === true || props[\"aria-disabled\"] === \"true\";\n const unavailable = disabled === true || loading || ariaDisabled;\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n if (unavailable) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n onClick?.(event);\n };\n return (\n <button\n {...props}\n style={{ ...style, ...layoutStyle }}\n ref={ref}\n type={type}\n className={classNames(\"hjm-icon-button\", className)}\n data-tone={tone}\n data-size={size}\n data-shape={shape}\n {...(selected === undefined ? {} : { \"data-selected\": selected, \"aria-pressed\": selected })}\n data-state={loading ? \"loading\" : unavailable ? \"disabled\" : \"idle\"}\n aria-label={label}\n aria-busy={loading || undefined}\n aria-disabled={unavailable || undefined}\n disabled={disabled}\n onClick={handleClick}\n >\n {loading ? <span className=\"hjm-button__spinner\" aria-hidden=\"true\" /> : children}\n </button>\n );\n },\n);\n\nexport type LinkRenderProps = AnchorHTMLAttributes<HTMLAnchorElement> &\n Readonly<{\n children: ReactNode;\n ref: ForwardedRef<HTMLAnchorElement>;\n \"data-tone\": LinkTone;\n \"data-variant\": LinkVariant;\n \"data-state\": \"disabled\" | \"idle\";\n }>;\n\nexport type LinkProps = AnchorHTMLAttributes<HTMLAnchorElement> &\n Readonly<{\n tone?: LinkTone;\n variant?: LinkVariant;\n disabled?: boolean;\n leading?: ReactNode;\n trailing?: ReactNode;\n /** Framework adapter, for example Next.js Link, while HJM keeps link semantics and state. */\n renderAnchor?: (props: LinkRenderProps) => ReactElement;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n }>;\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(function Link(\n {\n tone = linkRecipe.defaults.tone,\n variant = linkRecipe.defaults.variant,\n disabled = false,\n leading,\n trailing,\n renderAnchor,\n target,\n rel,\n tabIndex,\n onClick,\n className,\n children,\n layoutStyle,\n ...props\n },\n ref,\n) {\n const handleClick = (event: MouseEvent<HTMLAnchorElement>) => {\n if (disabled) {\n event.preventDefault();\n return;\n }\n onClick?.(event);\n };\n const anchorProps: LinkRenderProps = {\n ...props,\n // `renderAnchor` adapters receive the merged placement, so a framework Link\n // gets the same position as the plain <a>.\n ...(props.style === undefined && layoutStyle === undefined ? {} : { style: { ...props.style, ...layoutStyle } }),\n ref,\n className: classNames(\"hjm-link\", className),\n \"data-tone\": tone,\n \"data-variant\": variant,\n \"data-state\": disabled ? \"disabled\" : \"idle\",\n \"aria-disabled\": disabled || undefined,\n tabIndex: disabled ? -1 : tabIndex,\n target,\n rel: rel ?? (target === \"_blank\" ? \"noreferrer noopener\" : undefined),\n onClick: handleClick,\n children: (\n <>\n {leading}\n <span>{children}</span>\n {trailing}\n </>\n ),\n };\n return renderAnchor ? renderAnchor(anchorProps) : <a {...anchorProps} />;\n});\n"]}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { type ActivityHeatmapDescriptor } from '@hjmds/design-contracts/activity-heatmap';
|
|
2
|
+
import type { HjmCompositionStyleProp } from "./composition-style.js";
|
|
2
3
|
export type ActivityHeatmapProps = Readonly<{
|
|
3
4
|
descriptor: ActivityHeatmapDescriptor;
|
|
4
5
|
label: string;
|
|
5
6
|
formatDay: (date: string, value: number | null) => string;
|
|
6
7
|
view?: 'grid' | 'list';
|
|
8
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
9
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
7
10
|
}>;
|
|
8
11
|
/** The product formats both missing data and measured zero; color never owns meaning. */
|
|
9
|
-
export declare function ActivityHeatmap({ descriptor, label, formatDay, view }: ActivityHeatmapProps): import("react").JSX.Element;
|
|
12
|
+
export declare function ActivityHeatmap({ descriptor, label, formatDay, view, layoutStyle }: ActivityHeatmapProps): import("react").JSX.Element;
|
|
10
13
|
//# sourceMappingURL=activity-heatmap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-heatmap.d.ts","sourceRoot":"","sources":["../src/activity-heatmap.tsx"],"names":[],"mappings":"AAAA,OAAM,EAAwB,KAAK,yBAAyB,EAAC,MAAI,0CAA0C,CAAC;AAC5G,MAAM,MAAM,oBAAoB,GAAC,QAAQ,CAAC;IAAC,UAAU,EAAC,yBAAyB,CAAC;IAAA,KAAK,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,CAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,GAAC,IAAI,KAAG,MAAM,CAAC;IAAA,IAAI,CAAC,EAAC,MAAM,GAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"activity-heatmap.d.ts","sourceRoot":"","sources":["../src/activity-heatmap.tsx"],"names":[],"mappings":"AAAA,OAAM,EAAwB,KAAK,yBAAyB,EAAC,MAAI,0CAA0C,CAAC;AAC5G,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,MAAM,MAAM,oBAAoB,GAAC,QAAQ,CAAC;IAAC,UAAU,EAAC,yBAAyB,CAAC;IAAA,KAAK,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,CAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,GAAC,IAAI,KAAG,MAAM,CAAC;IAAA,IAAI,CAAC,EAAC,MAAM,GAAC,MAAM,CAAC;IACjK,gGAAgG;IAChG,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC,CAAC,CAAC;AAEH,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,EAAC,UAAU,EAAC,KAAK,EAAC,SAAS,EAAC,IAAW,EAAC,WAAW,EAAC,EAAC,oBAAoB,+BAA87B"}
|
package/dist/activity-heatmap.js
CHANGED
|
@@ -2,5 +2,5 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { resolveActivityHeatmap } from '@hjmds/design-contracts/activity-heatmap';
|
|
3
3
|
// Compact data cells use a quarter of the control radius so the grid reads as dates, not round controls.
|
|
4
4
|
/** The product formats both missing data and measured zero; color never owns meaning. */
|
|
5
|
-
export function ActivityHeatmap({ descriptor, label, formatDay, view = 'grid' }) { const { days, columns } = resolveActivityHeatmap(descriptor); return _jsx("div", { role: "region", "aria-label": label, tabIndex: view === 'grid' ? 0 : undefined, style: { overflowX: 'auto' }, children: _jsx("ul", { "aria-label": label, style: view === 'grid' ? { display: 'grid', gridTemplateRows: 'repeat(7, 1rem)', gridTemplateColumns: `repeat(${columns}, 1rem)`, gap: 'var(--hjm-space-xxs)', listStyle: 'none', padding: 0, margin: 0 } : undefined, children: days.map(day => _jsx("li", { "aria-label": view === 'grid' ? formatDay(day.date, day.value) : undefined, title: formatDay(day.date, day.value), style: view === 'grid' ? { gridRow: day.row + 1, gridColumn: day.column + 1, borderRadius: 'calc(var(--hjm-radius-sm) / 4)', background: day.level === 0 ? 'var(--hjm-color-surface-alt)' : `color-mix(in srgb, var(--hjm-color-content-brand) ${25 * day.level}%, var(--hjm-color-surface-alt))`, outline: day.value === null ? '1px dashed var(--hjm-color-border)' : undefined } : undefined, children: view === 'list' ? formatDay(day.date, day.value) : null }, day.date)) }) }); }
|
|
5
|
+
export function ActivityHeatmap({ descriptor, label, formatDay, view = 'grid', layoutStyle }) { const { days, columns } = resolveActivityHeatmap(descriptor); return _jsx("div", { role: "region", "aria-label": label, tabIndex: view === 'grid' ? 0 : undefined, style: { ...layoutStyle, overflowX: 'auto' }, children: _jsx("ul", { "aria-label": label, style: view === 'grid' ? { display: 'grid', gridTemplateRows: 'repeat(7, 1rem)', gridTemplateColumns: `repeat(${columns}, 1rem)`, gap: 'var(--hjm-space-xxs)', listStyle: 'none', padding: 0, margin: 0 } : undefined, children: days.map(day => _jsx("li", { "aria-label": view === 'grid' ? formatDay(day.date, day.value) : undefined, title: formatDay(day.date, day.value), style: view === 'grid' ? { gridRow: day.row + 1, gridColumn: day.column + 1, borderRadius: 'calc(var(--hjm-radius-sm) / 4)', background: day.level === 0 ? 'var(--hjm-color-surface-alt)' : `color-mix(in srgb, var(--hjm-color-content-brand) ${25 * day.level}%, var(--hjm-color-surface-alt))`, outline: day.value === null ? '1px dashed var(--hjm-color-border)' : undefined } : undefined, children: view === 'list' ? formatDay(day.date, day.value) : null }, day.date)) }) }); }
|
|
6
6
|
//# sourceMappingURL=activity-heatmap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-heatmap.js","sourceRoot":"","sources":["../src/activity-heatmap.tsx"],"names":[],"mappings":";AAAA,OAAM,EAAC,sBAAsB,EAAgC,MAAI,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"activity-heatmap.js","sourceRoot":"","sources":["../src/activity-heatmap.tsx"],"names":[],"mappings":";AAAA,OAAM,EAAC,sBAAsB,EAAgC,MAAI,0CAA0C,CAAC;AAM5G,yGAAyG;AACzG,yFAAyF;AACzF,MAAM,UAAU,eAAe,CAAC,EAAC,UAAU,EAAC,KAAK,EAAC,SAAS,EAAC,IAAI,GAAC,MAAM,EAAC,WAAW,EAAsB,IAAE,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,GAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAA,OAAO,cAAK,IAAI,EAAC,QAAQ,gBAAa,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAG,MAAM,CAAA,CAAC,CAAA,CAAC,CAAA,CAAC,CAAA,SAAS,EAAE,KAAK,EAAE,EAAC,GAAG,WAAW,EAAC,SAAS,EAAC,MAAM,EAAC,YAAE,2BAAgB,KAAK,EAAE,KAAK,EAAE,IAAI,KAAG,MAAM,CAAA,CAAC,CAAA,EAAC,OAAO,EAAC,MAAM,EAAC,gBAAgB,EAAC,iBAAiB,EAAC,mBAAmB,EAAC,UAAU,OAAO,SAAS,EAAC,GAAG,EAAC,sBAAsB,EAAC,SAAS,EAAC,MAAM,EAAC,OAAO,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,CAAA,CAAC,CAAA,SAAS,YAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA,EAAE,CAAA,2BAA+B,IAAI,KAAG,MAAM,CAAA,CAAC,CAAA,SAAS,CAAC,GAAG,CAAC,IAAI,EAAC,GAAG,CAAC,KAAK,CAAC,CAAA,CAAC,CAAA,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,EAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,KAAG,MAAM,CAAA,CAAC,CAAA,EAAC,OAAO,EAAC,GAAG,CAAC,GAAG,GAAC,CAAC,EAAC,UAAU,EAAC,GAAG,CAAC,MAAM,GAAC,CAAC,EAAC,YAAY,EAAC,gCAAgC,EAAC,UAAU,EAAC,GAAG,CAAC,KAAK,KAAG,CAAC,CAAA,CAAC,CAAA,8BAA8B,CAAA,CAAC,CAAA,qDAAqD,EAAE,GAAC,GAAG,CAAC,KAAK,kCAAkC,EAAC,OAAO,EAAC,GAAG,CAAC,KAAK,KAAG,IAAI,CAAA,CAAC,CAAA,oCAAoC,CAAA,CAAC,CAAA,SAAS,EAAC,CAAA,CAAC,CAAA,SAAS,YAAG,IAAI,KAAG,MAAM,CAAA,CAAC,CAAA,SAAS,CAAC,GAAG,CAAC,IAAI,EAAC,GAAG,CAAC,KAAK,CAAC,CAAA,CAAC,CAAA,IAAI,IAAlgB,GAAG,CAAC,IAAI,CAAggB,CAAC,GAAM,GAAM,CAAC,CAAA,CAAC","sourcesContent":["import{resolveActivityHeatmap,type ActivityHeatmapDescriptor}from'@hjmds/design-contracts/activity-heatmap';\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\nexport type ActivityHeatmapProps=Readonly<{descriptor:ActivityHeatmapDescriptor;label:string;formatDay:(date:string,value:number|null)=>string;view?:'grid'|'list';\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n// Compact data cells use a quarter of the control radius so the grid reads as dates, not round controls.\n/** The product formats both missing data and measured zero; color never owns meaning. */\nexport function ActivityHeatmap({descriptor,label,formatDay,view='grid',layoutStyle}:ActivityHeatmapProps){const {days,columns}=resolveActivityHeatmap(descriptor);return <div role=\"region\" aria-label={label} tabIndex={view==='grid'?0:undefined} style={{...layoutStyle,overflowX:'auto'}}><ul aria-label={label} style={view==='grid'?{display:'grid',gridTemplateRows:'repeat(7, 1rem)',gridTemplateColumns:`repeat(${columns}, 1rem)`,gap:'var(--hjm-space-xxs)',listStyle:'none',padding:0,margin:0}:undefined}>{days.map(day=><li key={day.date} aria-label={view==='grid'?formatDay(day.date,day.value):undefined} title={formatDay(day.date,day.value)} style={view==='grid'?{gridRow:day.row+1,gridColumn:day.column+1,borderRadius:'calc(var(--hjm-radius-sm) / 4)',background:day.level===0?'var(--hjm-color-surface-alt)':`color-mix(in srgb, var(--hjm-color-content-brand) ${25*day.level}%, var(--hjm-color-surface-alt))`,outline:day.value===null?'1px dashed var(--hjm-color-border)':undefined}:undefined}>{view==='list'?formatDay(day.date,day.value):null}</li>)}</ul></div>;}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type AvatarFallbackContext } from "@hjmds/design-contracts/avatar-fallback";
|
|
2
2
|
import { type DescriptionItemDescriptor, type DescriptionListColumns } from "@hjmds/design-contracts/components/description-list";
|
|
3
3
|
import { type ComposeTimelineAccessibleName, type TimelineItemDescriptor } from "@hjmds/design-contracts/components/timeline";
|
|
4
4
|
import { type ResolvedStatisticDescriptor, type StatisticDescriptor, type StatisticGroupDescriptor } from "@hjmds/design-contracts/components/statistic";
|
|
@@ -19,6 +19,8 @@ export type AccordionProps = Omit<HTMLAttributes<HTMLDivElement>, "onChange"> &
|
|
|
19
19
|
allowsMultipleExpanded?: boolean;
|
|
20
20
|
density?: AccordionDensity;
|
|
21
21
|
headingLevel?: 2 | 3 | 4 | 5 | 6;
|
|
22
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
23
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
22
24
|
}>;
|
|
23
25
|
export declare const Accordion: import("react").ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLDivElement>, "onChange"> & Readonly<{
|
|
24
26
|
items: readonly AccordionItem[];
|
|
@@ -28,6 +30,8 @@ export declare const Accordion: import("react").ForwardRefExoticComponent<Omit<H
|
|
|
28
30
|
allowsMultipleExpanded?: boolean;
|
|
29
31
|
density?: AccordionDensity;
|
|
30
32
|
headingLevel?: 2 | 3 | 4 | 5 | 6;
|
|
33
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
34
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
31
35
|
}> & RefAttributes<HTMLDivElement>>;
|
|
32
36
|
export type AvatarProps = Omit<HTMLAttributes<HTMLSpanElement>, "children"> & Readonly<{
|
|
33
37
|
name: string;
|
|
@@ -38,6 +42,8 @@ export type AvatarProps = Omit<HTMLAttributes<HTMLSpanElement>, "children"> & Re
|
|
|
38
42
|
size?: AvatarSize;
|
|
39
43
|
shape?: AvatarShape;
|
|
40
44
|
imageProps?: Omit<ImgHTMLAttributes<HTMLImageElement>, "alt" | "src">;
|
|
45
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
46
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
41
47
|
}>;
|
|
42
48
|
export declare const Avatar: import("react").ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLSpanElement>, "children"> & Readonly<{
|
|
43
49
|
name: string;
|
|
@@ -48,6 +54,8 @@ export declare const Avatar: import("react").ForwardRefExoticComponent<Omit<HTML
|
|
|
48
54
|
size?: AvatarSize;
|
|
49
55
|
shape?: AvatarShape;
|
|
50
56
|
imageProps?: Omit<ImgHTMLAttributes<HTMLImageElement>, "alt" | "src">;
|
|
57
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
58
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
51
59
|
}> & RefAttributes<HTMLSpanElement>>;
|
|
52
60
|
export type AvatarGroupProps = Omit<HTMLAttributes<HTMLSpanElement>, "children"> & Readonly<{
|
|
53
61
|
/** Required: a pile of faces is meaningless to a screen reader otherwise. */
|
|
@@ -56,6 +64,8 @@ export type AvatarGroupProps = Omit<HTMLAttributes<HTMLSpanElement>, "children">
|
|
|
56
64
|
size?: AvatarSize;
|
|
57
65
|
/** Product-composed overflow copy such as "+3"; the count is the product's. */
|
|
58
66
|
overflow?: ReactNode;
|
|
67
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
68
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
59
69
|
}>;
|
|
60
70
|
/**
|
|
61
71
|
* Overlapping avatars. The overlap comes from the recipe ratio rather than a
|
|
@@ -69,6 +79,8 @@ export declare const AvatarGroup: import("react").ForwardRefExoticComponent<Omit
|
|
|
69
79
|
size?: AvatarSize;
|
|
70
80
|
/** Product-composed overflow copy such as "+3"; the count is the product's. */
|
|
71
81
|
overflow?: ReactNode;
|
|
82
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
83
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
72
84
|
}> & RefAttributes<HTMLSpanElement>>;
|
|
73
85
|
export type DividerOrientation = "horizontal" | "vertical";
|
|
74
86
|
export type DividerInset = keyof typeof dividerRecipe.insets;
|
|
@@ -76,11 +88,15 @@ export type DividerProps = HTMLAttributes<HTMLElement> & Readonly<{
|
|
|
76
88
|
orientation?: DividerOrientation;
|
|
77
89
|
inset?: DividerInset;
|
|
78
90
|
decorative?: boolean;
|
|
91
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
92
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
79
93
|
}>;
|
|
80
94
|
export declare const Divider: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLElement> & Readonly<{
|
|
81
95
|
orientation?: DividerOrientation;
|
|
82
96
|
inset?: DividerInset;
|
|
83
97
|
decorative?: boolean;
|
|
98
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
99
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
84
100
|
}> & RefAttributes<HTMLElement>>;
|
|
85
101
|
export type ListAppearance = "grouped" | "plain";
|
|
86
102
|
export type ListProps = Omit<HTMLAttributes<HTMLDivElement>, "children"> & Readonly<{
|
|
@@ -88,6 +104,8 @@ export type ListProps = Omit<HTMLAttributes<HTMLDivElement>, "children"> & Reado
|
|
|
88
104
|
children: ReactNode;
|
|
89
105
|
separator?: keyof typeof listRecipe.separators;
|
|
90
106
|
appearance?: ListAppearance;
|
|
107
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
108
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
91
109
|
}>;
|
|
92
110
|
/** Semantic list container that owns separators around composed rows. */
|
|
93
111
|
export declare const List: import("react").ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLDivElement>, "children"> & Readonly<{
|
|
@@ -95,6 +113,8 @@ export declare const List: import("react").ForwardRefExoticComponent<Omit<HTMLAt
|
|
|
95
113
|
children: ReactNode;
|
|
96
114
|
separator?: keyof typeof listRecipe.separators;
|
|
97
115
|
appearance?: ListAppearance;
|
|
116
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
117
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
98
118
|
}> & RefAttributes<HTMLDivElement>>;
|
|
99
119
|
export type StatisticTrendMarkRenderProps = Readonly<{
|
|
100
120
|
name: "trendUp" | "trendDown" | "trendFlat";
|
|
@@ -116,8 +136,10 @@ export type StatisticProps<Id extends string = string> = Omit<HTMLAttributes<HTM
|
|
|
116
136
|
renderTrendMark?: (props: StatisticTrendMarkRenderProps) => ReactNode;
|
|
117
137
|
/** Optional visual adapter; the descriptor remains the accessible value source. */
|
|
118
138
|
renderValue?: (value: string) => ReactNode;
|
|
139
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
140
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
119
141
|
}>;
|
|
120
|
-
export declare function Statistic<Id extends string = string>({ descriptor, density, presentation, contextLabel, accessibilityLabel, composeAccessibilityLabel, renderTrendMark, renderValue, className, ...props }: StatisticProps<Id>): import("react").JSX.Element;
|
|
142
|
+
export declare function Statistic<Id extends string = string>({ descriptor, density, presentation, contextLabel, accessibilityLabel, composeAccessibilityLabel, renderTrendMark, renderValue, className, layoutStyle, ...props }: StatisticProps<Id>): import("react").JSX.Element;
|
|
121
143
|
export type StatisticGroupProps<Id extends string = string> = Omit<HTMLAttributes<HTMLDivElement>, "children"> & Readonly<{
|
|
122
144
|
label: string;
|
|
123
145
|
descriptor: StatisticGroupDescriptor<Id>;
|
|
@@ -125,8 +147,10 @@ export type StatisticGroupProps<Id extends string = string> = Omit<HTMLAttribute
|
|
|
125
147
|
presentation?: StatisticPresentation;
|
|
126
148
|
composeAccessibilityLabel?: ComposeStatisticAccessibilityLabel<Id>;
|
|
127
149
|
renderTrendMark?: (props: StatisticTrendMarkRenderProps) => ReactNode;
|
|
150
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
151
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
128
152
|
}>;
|
|
129
|
-
export declare function StatisticGroup<Id extends string = string>({ label, descriptor, density, presentation, composeAccessibilityLabel, renderTrendMark, className, style, ...props }: StatisticGroupProps<Id>): import("react").JSX.Element;
|
|
153
|
+
export declare function StatisticGroup<Id extends string = string>({ label, descriptor, density, presentation, composeAccessibilityLabel, renderTrendMark, className, style, layoutStyle, ...props }: StatisticGroupProps<Id>): import("react").JSX.Element;
|
|
130
154
|
export type DescriptionListProps<Id extends string = string> = Omit<HTMLAttributes<HTMLDListElement>, "children"> & Readonly<{
|
|
131
155
|
items: readonly DescriptionItemDescriptor<Id>[];
|
|
132
156
|
columns?: DescriptionListColumns;
|
|
@@ -152,11 +176,15 @@ export type TableProps<Row> = Omit<TableHTMLAttributes<HTMLTableElement>, "child
|
|
|
152
176
|
emptyState: ReactNode;
|
|
153
177
|
onSortChange?: (columnId: string, direction: TableSortDirection) => void;
|
|
154
178
|
wrapperClassName?: string;
|
|
179
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
180
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
155
181
|
}>;
|
|
156
182
|
export declare const Table: <Row>(props: TableProps<Row> & RefAttributes<HTMLTableElement>) => ReactElement;
|
|
157
183
|
export type TimelineProps<Id extends string = string> = Omit<HTMLAttributes<HTMLOListElement>, "children"> & Readonly<{
|
|
158
184
|
items: readonly TimelineItemDescriptor<Id>[];
|
|
159
185
|
composeAccessibleName: ComposeTimelineAccessibleName;
|
|
186
|
+
/** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */
|
|
187
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
160
188
|
}>;
|
|
161
189
|
export declare const Timeline: <Id extends string = string>(props: TimelineProps<Id> & RefAttributes<HTMLOListElement>) => ReactElement;
|
|
162
190
|
//# sourceMappingURL=advanced-display.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"advanced-display.d.ts","sourceRoot":"","sources":["../src/advanced-display.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"advanced-display.d.ts","sourceRoot":"","sources":["../src/advanced-display.tsx"],"names":[],"mappings":"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"}
|
package/dist/advanced-display.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { resolveAvatarInitials } from "@hjmds/design-contracts/avatar-fallback";
|
|
2
3
|
import { TableSortButton } from "./table-sort-button.js";
|
|
3
4
|
import { getNextDataTableSortState } from "@hjmds/design-contracts/components/data-table";
|
|
4
5
|
import { resolveDescriptionListColumnCount, resolveDescriptionListDescriptor, } from "@hjmds/design-contracts/components/description-list";
|
|
@@ -40,7 +41,7 @@ function accordionFocusTarget(items, currentIndex, key) {
|
|
|
40
41
|
}
|
|
41
42
|
return currentIndex;
|
|
42
43
|
}
|
|
43
|
-
export const Accordion = forwardRef(function Accordion({ items, value: valueProp, defaultValue = [], onValueChange, allowsMultipleExpanded = accordionRecipe.defaults.allowsMultipleExpanded, density = accordionRecipe.defaults.density, headingLevel = 3, className, ...props }, ref) {
|
|
44
|
+
export const Accordion = forwardRef(function Accordion({ items, value: valueProp, defaultValue = [], onValueChange, allowsMultipleExpanded = accordionRecipe.defaults.allowsMultipleExpanded, density = accordionRecipe.defaults.density, headingLevel = 3, className, layoutStyle, ...props }, ref) {
|
|
44
45
|
validateAccordionItems(items);
|
|
45
46
|
const [value, setValue] = useControllableState({
|
|
46
47
|
...(valueProp === undefined ? {} : { value: valueProp }),
|
|
@@ -69,7 +70,7 @@ export const Accordion = forwardRef(function Accordion({ items, value: valueProp
|
|
|
69
70
|
? [...value, id]
|
|
70
71
|
: [id]);
|
|
71
72
|
};
|
|
72
|
-
return (_jsx("div", { ...props, ref: ref, className: classNames("hjm-accordion", className), "data-density": density, "data-multiple": allowsMultipleExpanded || undefined, children: items.map((item, index) => {
|
|
73
|
+
return (_jsx("div", { ...props, style: { ...props.style, ...layoutStyle }, ref: ref, className: classNames("hjm-accordion", className), "data-density": density, "data-multiple": allowsMultipleExpanded || undefined, children: items.map((item, index) => {
|
|
73
74
|
const expanded = value.includes(item.id);
|
|
74
75
|
const triggerId = `${baseId}-accordion-trigger-${index}`;
|
|
75
76
|
const panelId = `${baseId}-accordion-panel-${index}`;
|
|
@@ -88,40 +89,35 @@ export const Accordion = forwardRef(function Accordion({ items, value: valueProp
|
|
|
88
89
|
return (_jsxs("div", { className: "hjm-accordion__item", "data-state": item.disabled ? "disabled" : expanded ? "expanded" : "collapsed", children: [createElement(`h${headingLevel}`, { className: "hjm-accordion__header" }, trigger), _jsx("div", { id: panelId, role: "region", className: "hjm-accordion__panel", "aria-labelledby": triggerId, hidden: !expanded, children: item.panel })] }, item.id));
|
|
89
90
|
}) }));
|
|
90
91
|
});
|
|
91
|
-
function
|
|
92
|
-
return name
|
|
93
|
-
.trim()
|
|
94
|
-
.split(/\s+/u)
|
|
95
|
-
.slice(0, 2)
|
|
96
|
-
.map((part) => Array.from(part)[0] ?? "")
|
|
97
|
-
.join("")
|
|
98
|
-
.toLocaleUpperCase();
|
|
99
|
-
}
|
|
100
|
-
export const Avatar = forwardRef(function Avatar({ name, src, alt = name, fallback, renderFallback, size = avatarRecipe.defaults.size, shape = avatarRecipe.defaults.shape, imageProps, className, ...props }, ref) {
|
|
92
|
+
export const Avatar = forwardRef(function Avatar({ name, src, alt = name, fallback, renderFallback, size = avatarRecipe.defaults.size, shape = avatarRecipe.defaults.shape, imageProps, className, layoutStyle, ...props }, ref) {
|
|
101
93
|
if (name.trim().length === 0)
|
|
102
94
|
throw new TypeError("Avatar name must not be empty");
|
|
103
95
|
const [imageAvailable, setImageAvailable] = useState(Boolean(src));
|
|
104
96
|
useEffect(() => setImageAvailable(Boolean(src)), [src]);
|
|
105
97
|
const { onError, className: imageClassName, ...restImageProps } = imageProps ?? {};
|
|
106
|
-
return (_jsx("span", { ...props, ref: ref, className: classNames("hjm-avatar", className), "data-size": size, "data-shape": shape, "data-state": imageAvailable ? "image" : "fallback", children: src && imageAvailable ? (_jsx("img", { ...restImageProps, src: src, alt: alt, className: classNames("hjm-avatar__image", imageClassName), onError: (event) => {
|
|
98
|
+
return (_jsx("span", { ...props, style: { ...props.style, ...layoutStyle }, ref: ref, className: classNames("hjm-avatar", className), "data-size": size, "data-shape": shape, "data-state": imageAvailable ? "image" : "fallback", children: src && imageAvailable ? (_jsx("img", { ...restImageProps, src: src, alt: alt, className: classNames("hjm-avatar__image", imageClassName), onError: (event) => {
|
|
107
99
|
setImageAvailable(false);
|
|
108
100
|
onError?.(event);
|
|
109
|
-
} })) : (_jsx("span", { className: "hjm-avatar__fallback", role: alt.length > 0 ? "img" : undefined, "aria-label": alt.length > 0 ? alt : undefined, "aria-hidden": alt.length === 0 || undefined, children: renderFallback?.({ size: avatarRecipe.sizes[size], decorative: true }) ?? fallback ??
|
|
101
|
+
} })) : (_jsx("span", { className: "hjm-avatar__fallback", role: alt.length > 0 ? "img" : undefined, "aria-label": alt.length > 0 ? alt : undefined, "aria-hidden": alt.length === 0 || undefined, children: renderFallback?.({ size: avatarRecipe.sizes[size], decorative: true }) ?? fallback ?? resolveAvatarInitials(name) })) }));
|
|
110
102
|
});
|
|
111
103
|
/**
|
|
112
104
|
* Overlapping avatars. The overlap comes from the recipe ratio rather than a
|
|
113
105
|
* pixel value so it holds across all four sizes, and the group carries one
|
|
114
106
|
* accessible name instead of letting a reader walk five unlabelled images.
|
|
115
107
|
*/
|
|
116
|
-
export const AvatarGroup = forwardRef(function AvatarGroup({ label, children, size = avatarRecipe.defaults.size, overflow, className, ...props }, ref) {
|
|
108
|
+
export const AvatarGroup = forwardRef(function AvatarGroup({ label, children, size = avatarRecipe.defaults.size, overflow, className, layoutStyle, style, ...props }, ref) {
|
|
117
109
|
if (label.trim().length === 0)
|
|
118
110
|
throw new TypeError("AvatarGroup label must not be empty");
|
|
119
111
|
const offset = Math.round(avatarRecipe.sizes[size] * avatarRecipe.overlapRatio);
|
|
120
|
-
return (_jsxs("span", { ...props, ref: ref, role: "group", "aria-label": label, className: classNames("hjm-avatar-group", className), "data-size": size,
|
|
112
|
+
return (_jsxs("span", { ...props, ref: ref, role: "group", "aria-label": label, className: classNames("hjm-avatar-group", className), "data-size": size,
|
|
113
|
+
// The caller `style` used to be replaced by the overlap variable; merge it
|
|
114
|
+
// and keep the recipe overlap last so it stays size-derived.
|
|
115
|
+
style: { ...style, ...layoutStyle, "--hjm-avatar-overlap": `${offset}px` }, children: [children, overflow ? _jsx("span", { className: "hjm-avatar-group__overflow", "aria-hidden": "true", children: overflow }) : null] }));
|
|
121
116
|
});
|
|
122
|
-
export const Divider = forwardRef(function Divider({ orientation = dividerRecipe.defaults.orientation, inset = dividerRecipe.defaults.inset, decorative = false, className, ...props }, ref) {
|
|
117
|
+
export const Divider = forwardRef(function Divider({ orientation = dividerRecipe.defaults.orientation, inset = dividerRecipe.defaults.inset, decorative = false, className, layoutStyle, ...props }, ref) {
|
|
123
118
|
return createElement(orientation === "horizontal" ? "hr" : "div", {
|
|
124
119
|
...props,
|
|
120
|
+
style: { ...props.style, ...layoutStyle },
|
|
125
121
|
ref,
|
|
126
122
|
className: classNames("hjm-divider", className),
|
|
127
123
|
"data-orientation": orientation,
|
|
@@ -132,13 +128,13 @@ export const Divider = forwardRef(function Divider({ orientation = dividerRecipe
|
|
|
132
128
|
});
|
|
133
129
|
});
|
|
134
130
|
/** Semantic list container that owns separators around composed rows. */
|
|
135
|
-
export const List = forwardRef(function List({ label, children, separator = listRecipe.defaults.separator, appearance = "plain", className, ...props }, ref) {
|
|
131
|
+
export const List = forwardRef(function List({ label, children, separator = listRecipe.defaults.separator, appearance = "plain", className, layoutStyle, ...props }, ref) {
|
|
136
132
|
if (!label.trim())
|
|
137
133
|
throw new TypeError("List label must not be empty");
|
|
138
134
|
const items = Children.toArray(children);
|
|
139
|
-
return (_jsx("div", { ...props, ref: ref, "aria-label": label, className: classNames("hjm-list", className), "data-appearance": appearance, "data-separator": separator, role: "list", children: items.map((item, index) => (_jsx("div", { className: "hjm-list__item", role: "listitem", children: item }, isValidElement(item) && item.key !== null ? item.key : `hjm-list-${index}`))) }));
|
|
135
|
+
return (_jsx("div", { ...props, style: { ...props.style, ...layoutStyle }, ref: ref, "aria-label": label, className: classNames("hjm-list", className), "data-appearance": appearance, "data-separator": separator, role: "list", children: items.map((item, index) => (_jsx("div", { className: "hjm-list__item", role: "listitem", children: item }, isValidElement(item) && item.key !== null ? item.key : `hjm-list-${index}`))) }));
|
|
140
136
|
});
|
|
141
|
-
export function Statistic({ descriptor, density = "comfortable", presentation = "plain", contextLabel, accessibilityLabel, composeAccessibilityLabel, renderTrendMark, renderValue, className, ...props }) {
|
|
137
|
+
export function Statistic({ descriptor, density = "comfortable", presentation = "plain", contextLabel, accessibilityLabel, composeAccessibilityLabel, renderTrendMark, renderValue, className, layoutStyle, ...props }) {
|
|
142
138
|
const resolved = resolveStatisticDescriptor(descriptor);
|
|
143
139
|
const valueText = `${resolved.prefix ?? ""}${resolved.value}${resolved.suffix ?? ""}`;
|
|
144
140
|
const announcement = accessibilityLabel ?? composeAccessibilityLabel?.({
|
|
@@ -153,13 +149,13 @@ export function Statistic({ descriptor, density = "comfortable", presentation =
|
|
|
153
149
|
const trendName = resolved.trend
|
|
154
150
|
? statisticRecipe.trend.marks[resolved.trend.direction]
|
|
155
151
|
: undefined;
|
|
156
|
-
return (_jsxs("article", { ...props, "aria-label": announcement, className: classNames("hjm-statistic", className), "data-density": density, "data-presentation": presentation, children: [_jsx("span", { "aria-hidden": "true", className: "hjm-statistic__label", children: resolved.label }), _jsxs("span", { "aria-hidden": "true", className: "hjm-statistic__value-row", children: [resolved.prefix ? _jsx("span", { className: "hjm-statistic__affix", children: resolved.prefix }) : null, _jsx("strong", { className: "hjm-statistic__value", children: renderValue?.(resolved.value) ?? resolved.value }), resolved.suffix ? _jsx("span", { className: "hjm-statistic__affix", children: resolved.suffix }) : null] }), resolved.trend ? (_jsxs("span", { "aria-hidden": "true", className: "hjm-statistic__trend", "data-tone": resolved.trend.tone, children: [_jsx("span", { className: "hjm-statistic__trend-mark", children: renderTrendMark?.({ name: trendName, color: "currentColor", size: 16 }) ?? (resolved.trend.direction === "up" ? "↑" : resolved.trend.direction === "down" ? "↓" : "—") }), resolved.trend.label] })) : null, resolved.hint ? _jsx("span", { "aria-hidden": "true", className: "hjm-statistic__hint", children: resolved.hint }) : null] }));
|
|
152
|
+
return (_jsxs("article", { ...props, style: { ...props.style, ...layoutStyle }, "aria-label": announcement, className: classNames("hjm-statistic", className), "data-density": density, "data-presentation": presentation, children: [_jsx("span", { "aria-hidden": "true", className: "hjm-statistic__label", children: resolved.label }), _jsxs("span", { "aria-hidden": "true", className: "hjm-statistic__value-row", children: [resolved.prefix ? _jsx("span", { className: "hjm-statistic__affix", children: resolved.prefix }) : null, _jsx("strong", { className: "hjm-statistic__value", children: renderValue?.(resolved.value) ?? resolved.value }), resolved.suffix ? _jsx("span", { className: "hjm-statistic__affix", children: resolved.suffix }) : null] }), resolved.trend ? (_jsxs("span", { "aria-hidden": "true", className: "hjm-statistic__trend", "data-tone": resolved.trend.tone, children: [_jsx("span", { className: "hjm-statistic__trend-mark", children: renderTrendMark?.({ name: trendName, color: "currentColor", size: 16 }) ?? (resolved.trend.direction === "up" ? "↑" : resolved.trend.direction === "down" ? "↓" : "—") }), resolved.trend.label] })) : null, resolved.hint ? _jsx("span", { "aria-hidden": "true", className: "hjm-statistic__hint", children: resolved.hint }) : null] }));
|
|
157
153
|
}
|
|
158
|
-
export function StatisticGroup({ label, descriptor, density, presentation, composeAccessibilityLabel, renderTrendMark, className, style, ...props }) {
|
|
154
|
+
export function StatisticGroup({ label, descriptor, density, presentation, composeAccessibilityLabel, renderTrendMark, className, style, layoutStyle, ...props }) {
|
|
159
155
|
validateStatisticGroup(descriptor);
|
|
160
156
|
if (!label.trim())
|
|
161
157
|
throw new TypeError("StatisticGroup label must not be empty");
|
|
162
|
-
return (_jsx("div", { ...props, "aria-label": label, className: classNames("hjm-statistic-group", className), role: "list", style: { ...style, "--hjm-statistic-columns": descriptor.columns ?? statisticRecipe.defaults.columns }, children: descriptor.items.map((item) => (_jsx("div", { role: "listitem", children: _jsx(Statistic, { contextLabel: label, descriptor: item, ...(composeAccessibilityLabel === undefined ? {} : { composeAccessibilityLabel }), ...(density === undefined ? {} : { density }), ...(presentation === undefined ? {} : { presentation }), ...(renderTrendMark === undefined ? {} : { renderTrendMark }) }) }, item.id))) }));
|
|
158
|
+
return (_jsx("div", { ...props, "aria-label": label, className: classNames("hjm-statistic-group", className), role: "list", style: { ...style, ...layoutStyle, "--hjm-statistic-columns": descriptor.columns ?? statisticRecipe.defaults.columns }, children: descriptor.items.map((item) => (_jsx("div", { role: "listitem", children: _jsx(Statistic, { contextLabel: label, descriptor: item, ...(composeAccessibilityLabel === undefined ? {} : { composeAccessibilityLabel }), ...(density === undefined ? {} : { density }), ...(presentation === undefined ? {} : { presentation }), ...(renderTrendMark === undefined ? {} : { renderTrendMark }) }) }, item.id))) }));
|
|
163
159
|
}
|
|
164
160
|
function DescriptionListInner({ items, columns, className, layoutStyle, style, ...props }, forwardedRef) {
|
|
165
161
|
const descriptor = resolveDescriptionListDescriptor({
|
|
@@ -178,7 +174,7 @@ function DescriptionListInner({ items, columns, className, layoutStyle, style, .
|
|
|
178
174
|
}
|
|
179
175
|
export const DescriptionList = forwardRef(DescriptionListInner);
|
|
180
176
|
// Table's callback cannot express null; share the sort policy with a two-state cycle.
|
|
181
|
-
function TableInner({ columns, rows, getRowKey, caption, emptyState, onSortChange, wrapperClassName, className, ...props }, ref) {
|
|
177
|
+
function TableInner({ columns, rows, getRowKey, caption, emptyState, onSortChange, wrapperClassName, className, layoutStyle, ...props }, ref) {
|
|
182
178
|
if (columns.length === 0)
|
|
183
179
|
throw new TypeError("Table requires at least one column");
|
|
184
180
|
const ids = new Set();
|
|
@@ -201,15 +197,18 @@ function TableInner({ columns, rows, getRowKey, caption, emptyState, onSortChang
|
|
|
201
197
|
throw new TypeError(`Duplicate Table row key: ${rowKey}`);
|
|
202
198
|
seenRowKeys.add(rowKey);
|
|
203
199
|
}
|
|
204
|
-
return (
|
|
200
|
+
return (
|
|
201
|
+
// Placement belongs to the scroll wrapper (the visual root); `style` keeps
|
|
202
|
+
// going to the <table>, where it always went.
|
|
203
|
+
_jsx("div", { className: classNames("hjm-table-scroll", wrapperClassName), style: layoutStyle, tabIndex: 0, children: _jsxs("table", { ...props, ref: ref, className: classNames("hjm-table", className), children: [caption ? _jsx("caption", { className: "hjm-table__caption", children: caption }) : null, _jsx("thead", { children: _jsx("tr", { children: columns.map((column) => (_jsx("th", { scope: "col", className: "hjm-table__header", "data-align": column.align ?? "start", "aria-sort": column.sortDirection ?? (column.sortable ? "none" : undefined), children: column.sortable ? (_jsx(TableSortButton, { header: column.header, ...(column.sortDirection === undefined ? {} : { direction: column.sortDirection }), glyphs: { ascending: " ↑", descending: " ↓", none: " ↕" }, className: "hjm-table__sort", onSort: () => {
|
|
205
204
|
const next = getNextDataTableSortState(column.sortDirection ? { columnId: column.id, direction: column.sortDirection } : null, column.id, "two-state");
|
|
206
205
|
onSortChange?.(column.id, next.direction);
|
|
207
206
|
} })) : column.header }, column.id))) }) }), _jsx("tbody", { children: rows.length === 0 ? (_jsx("tr", { children: _jsx("td", { className: "hjm-table__empty", colSpan: columns.length, children: emptyState }) })) : (rows.map((row, rowIndex) => (_jsx("tr", { className: "hjm-table__row", children: columns.map((column) => (_jsx("td", { className: "hjm-table__cell", "data-align": column.align ?? "start", children: column.cell(row, rowIndex) }, column.id))) }, rowKeys[rowIndex])))) })] }) }));
|
|
208
207
|
}
|
|
209
208
|
export const Table = forwardRef(TableInner);
|
|
210
|
-
function TimelineInner({ items, composeAccessibleName, className, ...props }, ref) {
|
|
209
|
+
function TimelineInner({ items, composeAccessibleName, className, layoutStyle, ...props }, ref) {
|
|
211
210
|
const resolved = resolveTimelineDescriptor({ items }, { composeAccessibleName });
|
|
212
|
-
return (_jsx("ol", { ...props, ref: ref, className: classNames("hjm-timeline", className), children: resolved.map((item, index) => (_jsxs("li", { "aria-label": item.accessibleName, className: "hjm-timeline__item", "data-tone": item.tone, children: [_jsxs("span", { className: "hjm-timeline__rail", "aria-hidden": "true", children: [_jsx("span", { className: "hjm-timeline__dot" }), index < resolved.length - 1 ? (_jsx("span", { className: "hjm-timeline__connector" })) : null] }), _jsxs("span", { className: "hjm-timeline__content", children: [_jsxs("span", { className: "hjm-timeline__heading", children: [_jsx("strong", { className: "hjm-timeline__label", children: item.label }), item.timestamp ? (_jsx("time", { className: "hjm-timeline__timestamp", children: item.timestamp })) : null] }), item.description ? (_jsx("span", { className: "hjm-timeline__description", children: item.description })) : null] })] }, item.id))) }));
|
|
211
|
+
return (_jsx("ol", { ...props, style: { ...props.style, ...layoutStyle }, ref: ref, className: classNames("hjm-timeline", className), children: resolved.map((item, index) => (_jsxs("li", { "aria-label": item.accessibleName, className: "hjm-timeline__item", "data-tone": item.tone, children: [_jsxs("span", { className: "hjm-timeline__rail", "aria-hidden": "true", children: [_jsx("span", { className: "hjm-timeline__dot" }), index < resolved.length - 1 ? (_jsx("span", { className: "hjm-timeline__connector" })) : null] }), _jsxs("span", { className: "hjm-timeline__content", children: [_jsxs("span", { className: "hjm-timeline__heading", children: [_jsx("strong", { className: "hjm-timeline__label", children: item.label }), item.timestamp ? (_jsx("time", { className: "hjm-timeline__timestamp", children: item.timestamp })) : null] }), item.description ? (_jsx("span", { className: "hjm-timeline__description", children: item.description })) : null] })] }, item.id))) }));
|
|
213
212
|
}
|
|
214
213
|
export const Timeline = forwardRef(TimelineInner);
|
|
215
214
|
//# sourceMappingURL=advanced-display.js.map
|