@jfrader/ui 0.5.0 → 0.6.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/README.md +18 -1
- package/dist/accordion-D6myONB9.js +206 -0
- package/dist/accordion.js +1 -1
- package/dist/activity-rings-Uszvwqdl.js +528 -0
- package/dist/activity-rings.js +2 -0
- package/dist/{alert-DS_einpy.js → alert-Bhj-qSMs.js} +15 -14
- package/dist/alert.js +1 -1
- package/dist/{announcement-bar-B58xempt.js → announcement-bar-B5J33QUh.js} +132 -131
- package/dist/announcement-bar.js +1 -1
- package/dist/avatar-B6idYC59.js +146 -0
- package/dist/{avatar-group-DOQQuV51.js → avatar-group-DvP8mAE-.js} +10 -9
- package/dist/avatar-group.js +1 -1
- package/dist/avatar.js +1 -1
- package/dist/badge-CfhTcA-Z.js +120 -0
- package/dist/badge.js +1 -1
- package/dist/billing-toggle-CgC7yxxo.js +349 -0
- package/dist/billing-toggle.js +2 -0
- package/dist/{bottom-sheet-DPJBFkie.js → bottom-sheet-BFQKO0Wo.js} +287 -268
- package/dist/bottom-sheet.js +1 -1
- package/dist/{breadcrumbs-Cfw_hgt2.js → breadcrumbs-CG3akw-b.js} +28 -20
- package/dist/breadcrumbs.js +1 -1
- package/dist/{button-C92uYFJW.js → button-C6OV0C7J.js} +21 -20
- package/dist/button-group-B9wP2ddS.js +611 -0
- package/dist/button-group.js +2 -0
- package/dist/button.js +1 -1
- package/dist/calendar-Bg6D2sul.js +377 -0
- package/dist/calendar.js +1 -1
- package/dist/calendar.utils-azmB4Ej7.js +79 -0
- package/dist/card-C008OQCp.js +164 -0
- package/dist/card.js +1 -1
- package/dist/carousel-lTH4Foke.js +475 -0
- package/dist/carousel.js +1 -1
- package/dist/chat-thread-DVa17BRC.js +864 -0
- package/dist/chat-thread.js +2 -0
- package/dist/{checkbox-cFquiSdy.js → checkbox-CClE61GV.js} +23 -21
- package/dist/checkbox.js +1 -1
- package/dist/{chip-group-DTQd_M-G.js → chip-group-BZUX9KPF.js} +19 -17
- package/dist/chip-group.js +1 -1
- package/dist/{choice-control-5kJkLXgv.js → choice-control-BsWOZPc9.js} +1 -1
- package/dist/{code-block-ahnRi-g8.js → code-block-CYP89_6h.js} +99 -97
- package/dist/code-block.js +1 -1
- package/dist/{combobox-Bhzvu9ma.js → combobox-D2Oc-co7.js} +131 -125
- package/dist/combobox.js +1 -1
- package/dist/command-palette-BrT1n9bb.js +394 -0
- package/dist/command-palette.js +1 -1
- package/dist/comment-thread-BnUHxviq.js +772 -0
- package/dist/comment-thread.js +2 -0
- package/dist/{container-BOaSptJa.js → container-BxtwJSSD.js} +3 -2
- package/dist/container.js +1 -1
- package/dist/context-menu-I4i0LRpm.js +371 -0
- package/dist/context-menu.js +2 -0
- package/dist/{copy-button-ByiA6D3R.js → copy-button-C0p_qrgf.js} +4 -4
- package/dist/copy-button.js +1 -1
- package/dist/{countdown-Dp_TD1VP.js → countdown-EcpV6rXy.js} +18 -17
- package/dist/countdown.js +1 -1
- package/dist/css-BYJhdGh-.js +2 -0
- package/dist/{date-picker-5zKSSuFF.js → date-picker-D-bn-iHs.js} +15 -14
- package/dist/date-picker.js +1 -1
- package/dist/date-range-picker-rXcZsI1Y.js +589 -0
- package/dist/date-range-picker.js +1 -1
- package/dist/dialog-CR1xdkrC.js +222 -0
- package/dist/dialog.js +1 -1
- package/dist/{divider-DYoJf0I_.js → divider-zOJzkcHh.js} +23 -21
- package/dist/divider.js +1 -1
- package/dist/drawer-CceaEhCr.js +590 -0
- package/dist/drawer.js +1 -1
- package/dist/{empty-state-CDgrjPPf.js → empty-state-DO0ApylK.js} +2 -1
- package/dist/empty-state.js +1 -1
- package/dist/{expandable-card-C-qJcZ14.js → expandable-card-W97vjix9.js} +59 -51
- package/dist/expandable-card.js +1 -1
- package/dist/expanding-search-Bb2_YfNx.js +239 -0
- package/dist/expanding-search.js +2 -0
- package/dist/{field-anatomy-COVdNpf5.js → field-anatomy-BDIP42MI.js} +2 -1
- package/dist/file-dropzone-Bi5ikRIz.js +458 -0
- package/dist/file-dropzone.js +1 -1
- package/dist/{filter-toolbar-D5KEKTSe.js → filter-toolbar-QRnC4S_H.js} +36 -33
- package/dist/filter-toolbar.js +1 -1
- package/dist/{flex-Dh-_J5-U.js → flex-CS7eMRcK.js} +2 -2
- package/dist/flex.js +1 -1
- package/dist/{hold-to-confirm-DjB2EVjM.js → hold-to-confirm-CVBA0wNT.js} +18 -17
- package/dist/hold-to-confirm.js +1 -1
- package/dist/{hover-card-B-nrCIy2.js → hover-card-DN1EAlQA.js} +26 -25
- package/dist/hover-card.js +1 -1
- package/dist/{icon-wrapper-stN8sD7R.js → icon-wrapper-C-zMD0uL.js} +1 -1
- package/dist/{image-compare-ciuhPtQZ.js → image-compare-Ln2UUqTU.js} +20 -19
- package/dist/image-compare.js +1 -1
- package/dist/index.js +98 -78
- package/dist/{inline-edit-C0eeml65.js → inline-edit-D-pR2RPC.js} +22 -21
- package/dist/inline-edit.js +1 -1
- package/dist/{input-control-DmMuAuPS.js → input-control-B6HVBgwl.js} +1 -1
- package/dist/{json-viewer-BcySQfjZ.js → json-viewer-Dro3WrjS.js} +34 -29
- package/dist/json-viewer.js +1 -1
- package/dist/{kbd-C3ACoMoE.js → kbd-BI_9qzYr.js} +2 -1
- package/dist/kbd.js +1 -1
- package/dist/keycap-keyboard-Cdx-OAS1.js +311 -0
- package/dist/keycap-keyboard.js +2 -0
- package/dist/{layout-style-Cbd1Vilw.js → layout-style-BE0gSqrH.js} +1 -1
- package/dist/lightbox-gallery-D0YaSTut.js +777 -0
- package/dist/lightbox-gallery.js +2 -0
- package/dist/link-unfurl-CReyIjyy.js +695 -0
- package/dist/link-unfurl.js +2 -0
- package/dist/{listbox-style-WX-RASp1.js → listbox-style-DNOxAulu.js} +1 -1
- package/dist/{loading-ring-B8-30Dl1.js → loading-ring-D0lGrK8z.js} +1 -1
- package/dist/locale-switcher-CZF7XNYG.js +295 -0
- package/dist/locale-switcher.js +2 -0
- package/dist/mention-input-BjjAbJCf.js +600 -0
- package/dist/mention-input.js +1 -1
- package/dist/menu-CVzpsyXn.js +312 -0
- package/dist/menu.js +1 -1
- package/dist/{metric-card-Bh9K4fZs.js → metric-card-BnFssTXj.js} +12 -11
- package/dist/metric-card.js +1 -1
- package/dist/{multi-select-Pce_IYnz.js → multi-select-B3puEVo0.js} +78 -69
- package/dist/multi-select.js +1 -1
- package/dist/{navigation-sP5fiuQS.js → navigation-C_JD43gA.js} +56 -49
- package/dist/navigation.js +1 -1
- package/dist/next.js +65 -0
- package/dist/now-playing-DjVm1Phm.js +439 -0
- package/dist/now-playing.js +2 -0
- package/dist/{overlay-layer-SeUyyEPD.js → overlay-layer-qEbpEtb8.js} +16 -2
- package/dist/overlay-motion-Cr77ihn2.js +90 -0
- package/dist/{overlay-portal-C4JZFq2M.js → overlay-portal-C9igMHnC.js} +1 -1
- package/dist/{pagination-DmXZ8E85.js → pagination-Dkh4bJQh.js} +31 -29
- package/dist/pagination.js +1 -1
- package/dist/{password-field-03pWRkuY.js → password-field-Da58GP1g.js} +4 -4
- package/dist/password-field.js +1 -1
- package/dist/photo-grid-Dtl17D74.js +830 -0
- package/dist/photo-grid.js +2 -0
- package/dist/pill-Dd7pog19.js +59 -0
- package/dist/pill.js +1 -1
- package/dist/popover-CUMOcMtj.js +126 -0
- package/dist/popover.js +1 -1
- package/dist/presence-spring-4zwtUDQN.js +12 -0
- package/dist/{progress-CbOWBUdA.js → progress-Bcuz3Ob4.js} +12 -11
- package/dist/progress.js +1 -1
- package/dist/{radio-cards-D2QZENI_.js → radio-cards-FkAhESb5.js} +65 -63
- package/dist/radio-cards.js +1 -1
- package/dist/{radio-group-E6mMRgo7.js → radio-group-DItMf2YM.js} +32 -28
- package/dist/radio-group.js +1 -1
- package/dist/{resizable-panels-BhjUVXZZ.js → resizable-panels-61h9hA3B.js} +16 -14
- package/dist/resizable-panels.js +1 -1
- package/dist/{scroll-area-CcZyiSOQ.js → scroll-area-B8KkCPOM.js} +16 -15
- package/dist/scroll-area.js +1 -1
- package/dist/{search-field-IxF0IJXm.js → search-field-CbsajaZb.js} +94 -93
- package/dist/search-field.js +1 -1
- package/dist/{segmented-control-yO1K1nbi.js → segmented-control-DCh-4ca-.js} +28 -26
- package/dist/segmented-control.js +1 -1
- package/dist/{select-n_H52W1Z.js → select-SrcQqZjo.js} +29 -27
- package/dist/select.js +1 -1
- package/dist/sheet-stack-DYX1SGSB.js +820 -0
- package/dist/sheet-stack.js +2 -0
- package/dist/shortcut-recorder-VgTQdjjn.js +688 -0
- package/dist/shortcut-recorder.js +2 -0
- package/dist/signature-pad-khL2yhQI.js +646 -0
- package/dist/signature-pad.js +1 -1
- package/dist/{skeleton-XQQDkCHd.js → skeleton-LJsQsveI.js} +9 -8
- package/dist/skeleton.js +1 -1
- package/dist/slider-DjAnGmlC.js +535 -0
- package/dist/slider.js +1 -1
- package/dist/{sortable-data-table-tirqlLY2.js → sortable-data-table-Bpitup_d.js} +29 -28
- package/dist/sortable-data-table.js +1 -1
- package/dist/{spinner-DtxvDPdM.js → spinner-CvzajSg9.js} +11 -10
- package/dist/spinner.js +1 -1
- package/dist/{split-button-Cb3EHs64.js → split-button-Bu41f2AY.js} +88 -93
- package/dist/split-button.js +1 -1
- package/dist/{stack-DC3IbtWk.js → stack-Bac4sJeI.js} +2 -2
- package/dist/stack.js +1 -1
- package/dist/{stepper-CruHbXxX.js → stepper-C8Ncavbr.js} +22 -21
- package/dist/stepper.js +1 -1
- package/dist/stretch-refresh-OrnTEj7P.js +349 -0
- package/dist/stretch-refresh.js +2 -0
- package/dist/{surface-DZ4d-2aL.js → surface-C69kwSuk.js} +13 -3
- package/dist/{swipe-actions-DiZC57-3.js → swipe-actions-1H5UOZKE.js} +29 -26
- package/dist/swipe-actions.js +1 -1
- package/dist/switch-79-hkQqg.js +146 -0
- package/dist/switch.js +1 -1
- package/dist/sx-BJXJ2xJK.js +23 -0
- package/dist/tabs-Bb5-noYE.js +211 -0
- package/dist/tabs.js +1 -1
- package/dist/{tag-input-DSRCyrX2.js → tag-input-BQaueKEb.js} +5 -5
- package/dist/tag-input.js +1 -1
- package/dist/{text-field-C8TWG-tY.js → text-field-D0VP7b4P.js} +18 -16
- package/dist/text-field.js +1 -1
- package/dist/{textarea-BrW0XcG_.js → textarea-D1YwEPmn.js} +21 -19
- package/dist/textarea.js +1 -1
- package/dist/theme-provider-BvcY-iJu.js +20 -0
- package/dist/theme-root-BrYVcTzt.js +163 -0
- package/dist/theme-root.js +1 -1
- package/dist/theme-scope-DGWy4H0C.js +62 -0
- package/dist/theme-switch-CP42mVDb.js +167 -0
- package/dist/theme-switch.js +2 -0
- package/dist/thread-parts-DfZNz70v.js +683 -0
- package/dist/{time-picker-Db8D49cP.js → time-picker-Tnd-JBLC.js} +39 -32
- package/dist/time-picker.js +1 -1
- package/dist/{timeline-k3nURuCP.js → timeline-DaldDMX7.js} +28 -21
- package/dist/timeline.js +1 -1
- package/dist/{toast-BHxI32ZA.js → toast-CSAbl5yK.js} +107 -87
- package/dist/{toast-stack-DqrAzdg5.js → toast-stack-BCR4Cu7V.js} +25 -10
- package/dist/toast-stack.js +1 -1
- package/dist/toast.js +1 -1
- package/dist/{toggle-group-fcjzpifI.js → toggle-group-C7ye1v4s.js} +24 -23
- package/dist/toggle-group.js +1 -1
- package/dist/tooltip-IajLwdUb.js +129 -0
- package/dist/tooltip.js +1 -1
- package/dist/{tree-view-C2liIxqy.js → tree-view-CoW4oJIZ.js} +18 -13
- package/dist/tree-view.js +1 -1
- package/dist/{trigger-style-B1KVC8O1.js → trigger-style-CtOrdPk4.js} +1 -1
- package/dist/types/components/activity-rings/activity-rings.d.ts +115 -0
- package/dist/types/components/activity-rings/index.d.ts +2 -0
- package/dist/types/components/billing-toggle/billing-toggle.d.ts +57 -0
- package/dist/types/components/billing-toggle/index.d.ts +2 -0
- package/dist/types/components/button-group/button-group.d.ts +72 -0
- package/dist/types/components/button-group/index.d.ts +2 -0
- package/dist/types/components/card/card.d.ts +4 -1
- package/dist/types/components/chat-thread/chat-thread.d.ts +130 -0
- package/dist/types/components/chat-thread/index.d.ts +2 -0
- package/dist/types/components/checkbox/checkbox.d.ts +1 -1
- package/dist/types/components/command-palette/command-palette.d.ts +1 -1
- package/dist/types/components/comment-thread/comment-thread.d.ts +118 -0
- package/dist/types/components/comment-thread/index.d.ts +1 -0
- package/dist/types/components/context-menu/context-menu.d.ts +55 -0
- package/dist/types/components/context-menu/index.d.ts +2 -0
- package/dist/types/components/date-range-picker/date-range-picker.d.ts +1 -1
- package/dist/types/components/drawer/drawer.d.ts +7 -1
- package/dist/types/components/expanding-search/expanding-search.d.ts +22 -0
- package/dist/types/components/expanding-search/index.d.ts +1 -0
- package/dist/types/components/keycap-keyboard/index.d.ts +2 -0
- package/dist/types/components/keycap-keyboard/keycap-keyboard.d.ts +32 -0
- package/dist/types/components/lightbox-gallery/index.d.ts +2 -0
- package/dist/types/components/lightbox-gallery/lightbox-gallery.d.ts +74 -0
- package/dist/types/components/link-unfurl/index.d.ts +2 -0
- package/dist/types/components/link-unfurl/link-unfurl.d.ts +94 -0
- package/dist/types/components/locale-switcher/index.d.ts +2 -0
- package/dist/types/components/locale-switcher/locale-switcher.d.ts +58 -0
- package/dist/types/components/menu/menu.d.ts +74 -7
- package/dist/types/components/next/emotion-registry.d.ts +16 -0
- package/dist/types/components/next/index.d.ts +2 -0
- package/dist/types/components/next/registry.d.ts +21 -0
- package/dist/types/components/now-playing/index.d.ts +1 -0
- package/dist/types/components/now-playing/now-playing.d.ts +88 -0
- package/dist/types/components/pagination/pagination.d.ts +1 -1
- package/dist/types/components/photo-grid/index.d.ts +2 -0
- package/dist/types/components/photo-grid/photo-grid.d.ts +82 -0
- package/dist/types/components/radio-cards/radio-cards.d.ts +1 -1
- package/dist/types/components/radio-group/radio-group.d.ts +1 -1
- package/dist/types/components/sheet-stack/index.d.ts +2 -0
- package/dist/types/components/sheet-stack/sheet-stack.d.ts +78 -0
- package/dist/types/components/shortcut-recorder/index.d.ts +2 -0
- package/dist/types/components/shortcut-recorder/shortcut-recorder.d.ts +117 -0
- package/dist/types/components/slider/slider-style.d.ts +14 -0
- package/dist/types/components/slider/slider.d.ts +2 -10
- package/dist/types/components/slider/use-slider-interaction.d.ts +79 -0
- package/dist/types/components/split-button/split-button.d.ts +2 -2
- package/dist/types/components/stretch-refresh/index.d.ts +1 -0
- package/dist/types/components/stretch-refresh/stretch-refresh.d.ts +49 -0
- package/dist/types/components/tabs/tabs.d.ts +1 -1
- package/dist/types/components/text-field/text-field.d.ts +1 -1
- package/dist/types/components/textarea/textarea.d.ts +1 -1
- package/dist/types/components/theme-root/index.d.ts +1 -0
- package/dist/types/components/theme-root/theme-root.d.ts +9 -1
- package/dist/types/components/theme-switch/index.d.ts +1 -0
- package/dist/types/components/theme-switch/theme-switch.d.ts +33 -0
- package/dist/types/components/thread/thread-core.d.ts +96 -0
- package/dist/types/components/thread/thread-parts.d.ts +119 -0
- package/dist/types/components/tooltip/tooltip.d.ts +9 -2
- package/dist/types/components/usage-meter/usage-meter.d.ts +2 -12
- package/dist/types/components/usage-meter/usage-model.d.ts +30 -0
- package/dist/types/components/user-menu/index.d.ts +2 -0
- package/dist/types/components/user-menu/user-menu.d.ts +119 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/overlay/exit-motion.d.ts +24 -0
- package/dist/types/overlay/overlay-layer.d.ts +20 -0
- package/dist/types/overlay/presence-spring.d.ts +12 -0
- package/dist/types/overlay/use-native-dialog.d.ts +10 -1
- package/dist/types/overlay/use-overlay-floating.d.ts +9 -2
- package/dist/types/styling/create-theme.d.ts +24 -0
- package/dist/types/styling/css.d.ts +1 -1
- package/dist/types/styling/overlay-motion.d.ts +95 -0
- package/dist/types/styling/surface.d.ts +7 -0
- package/dist/types/styling/theme-scope.d.ts +29 -3
- package/dist/types/styling/theme.d.ts +5 -0
- package/dist/{usage-meter-qyQ3rYVv.js → usage-meter-CYvlB6l3.js} +165 -175
- package/dist/usage-meter.js +1 -1
- package/dist/usage-model-C0fS47w4.js +32 -0
- package/dist/use-native-dialog-FB0p7lkg.js +93 -0
- package/dist/{use-overlay-floating-DvJifLpF.js → use-overlay-floating-Bx2jBKAA.js} +8 -6
- package/dist/use-scroll-lock-40gXwwAy.js +23 -0
- package/dist/user-menu-DzELTg1x.js +757 -0
- package/dist/user-menu.js +2 -0
- package/dist/{visually-hidden-BJdvqqvn.js → visually-hidden-DgVO3NaB.js} +1 -1
- package/package.json +88 -2
- package/dist/accordion-xCI_u0BV.js +0 -198
- package/dist/avatar-BahDVO9t.js +0 -132
- package/dist/badge-B_sLygxU.js +0 -108
- package/dist/calendar-B3Svu0X2.js +0 -447
- package/dist/card-D-aI2QHx.js +0 -158
- package/dist/carousel-IvPqN-oM.js +0 -472
- package/dist/command-palette-BQ5LleGb.js +0 -384
- package/dist/date-range-picker-B5uFWsm-.js +0 -562
- package/dist/dialog-ciiv9H2b.js +0 -218
- package/dist/drawer-DsASTiP-.js +0 -553
- package/dist/file-dropzone-pR4v7owg.js +0 -457
- package/dist/mention-input-BcQKX2EJ.js +0 -599
- package/dist/menu-xwOOUtWP.js +0 -275
- package/dist/pill-DO2gHzMb.js +0 -56
- package/dist/popover-QHcEvf9c.js +0 -119
- package/dist/signature-pad-q2SAsrdD.js +0 -640
- package/dist/slider-t0B5cecO.js +0 -477
- package/dist/switch-qwv8jQnR.js +0 -142
- package/dist/sx-Dx9JUKp5.js +0 -23
- package/dist/tabs-CAVJndX1.js +0 -203
- package/dist/theme-root-BbTBuLMQ.js +0 -46
- package/dist/theme-scope-t7nAKc2c.js +0 -27
- package/dist/tooltip-CkeiW9C1.js +0 -113
- package/dist/use-native-dialog-DWpIUVO1.js +0 -84
|
@@ -18,7 +18,7 @@ export interface TabsPanelProps extends ComponentPropsWithRef<'div'>, SxProps {
|
|
|
18
18
|
}
|
|
19
19
|
declare function TabsRoot({ ref, value: valueProp, defaultValue, onValueChange, orientation, activation, className, sx, ...rest }: TabsProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
20
20
|
declare function TabsList({ ref, onKeyDown, className, sx, ...rest }: TabsListProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
21
|
-
declare function TabsTab({ ref, value, disabled, onClick, onFocus, className, sx, ...rest }: TabsTabProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
21
|
+
declare function TabsTab({ ref, value, disabled, onClick, onFocus, onPointerDown, className, sx, ...rest }: TabsTabProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
22
22
|
declare function TabsPanel({ ref, value, tabIndex, 'aria-labelledby': ariaLabelledByProp, className, sx, ...rest }: TabsPanelProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
23
23
|
export declare const Tabs: typeof TabsRoot & {
|
|
24
24
|
List: typeof TabsList;
|
|
@@ -12,7 +12,7 @@ export interface TextFieldProps extends Omit<ComponentPropsWithRef<'input'>, 'si
|
|
|
12
12
|
onValueChange?: (value: string) => void;
|
|
13
13
|
slotProps?: FieldSlotProps<TextFieldPartProps>;
|
|
14
14
|
}
|
|
15
|
-
export declare function TextField({ ref, label, description, error, size, onChange, onValueChange, slotProps, className, sx, required, id: idProp, 'aria-describedby': ariaDescribedByProp, 'aria-invalid': ariaInvalidProp, ...rest }: TextFieldProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
15
|
+
export declare function TextField({ ref, label, description, error, size, onChange, onValueChange, slotProps, className, sx, required, id: idProp, dir, 'aria-describedby': ariaDescribedByProp, 'aria-invalid': ariaInvalidProp, ...rest }: TextFieldProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
16
16
|
export declare namespace TextField {
|
|
17
17
|
var displayName: string;
|
|
18
18
|
}
|
|
@@ -15,7 +15,7 @@ export interface TextareaProps extends ComponentPropsWithRef<'textarea'>, SxProp
|
|
|
15
15
|
onValueChange?: (value: string) => void;
|
|
16
16
|
slotProps?: FieldSlotProps<TextareaPartProps>;
|
|
17
17
|
}
|
|
18
|
-
export declare function Textarea({ ref, label, description, error, size, resize, autoResize, rows, onChange, onValueChange, slotProps, className, sx, required, id: idProp, 'aria-describedby': ariaDescribedByProp, 'aria-invalid': ariaInvalidProp, ...rest }: TextareaProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
18
|
+
export declare function Textarea({ ref, label, description, error, size, resize, autoResize, rows, onChange, onValueChange, slotProps, className, sx, dir, required, id: idProp, 'aria-describedby': ariaDescribedByProp, 'aria-invalid': ariaInvalidProp, ...rest }: TextareaProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
19
19
|
export declare namespace Textarea {
|
|
20
20
|
var displayName: string;
|
|
21
21
|
}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import { type ComponentPropsWithRef, type ReactNode } from 'react';
|
|
2
|
+
import { type ThemeTokens } from '../../styling/create-theme';
|
|
2
3
|
import { type SxProps } from '../../styling/sx';
|
|
3
4
|
import { type ThemeName } from '../../styling/theme-scope';
|
|
4
5
|
export type { ThemeName };
|
|
5
6
|
export interface ThemeRootProps extends ComponentPropsWithRef<'div'>, SxProps {
|
|
7
|
+
/** The named palette the scope wears; `tokens` are declared over it. */
|
|
6
8
|
theme?: ThemeName;
|
|
9
|
+
/**
|
|
10
|
+
* Token overrides for this scope (`createTheme()` builds them from an accent), declared as inline
|
|
11
|
+
* custom properties on the root. Omitted: a root naming the enclosing root's theme keeps that
|
|
12
|
+
* root's tokens; a root naming another theme drops them.
|
|
13
|
+
*/
|
|
14
|
+
tokens?: ThemeTokens;
|
|
7
15
|
/**
|
|
8
16
|
* Where overlays inside this root portal to. Omitted: the enclosing ThemeRoot's container, else
|
|
9
17
|
* the default (`body`). `null`: overlays wait until the host element is set.
|
|
@@ -11,7 +19,7 @@ export interface ThemeRootProps extends ComponentPropsWithRef<'div'>, SxProps {
|
|
|
11
19
|
portalContainer?: HTMLElement | null;
|
|
12
20
|
children?: ReactNode;
|
|
13
21
|
}
|
|
14
|
-
export declare function ThemeRoot({ ref, theme, portalContainer, className, sx, ...rest }: ThemeRootProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
22
|
+
export declare function ThemeRoot({ ref, theme, tokens, portalContainer, className, style, sx, ...rest }: ThemeRootProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
15
23
|
export declare namespace ThemeRoot {
|
|
16
24
|
var displayName: string;
|
|
17
25
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ThemeSwitch, type ThemeSwitchProps, type ThemeSwitchValue, type ThemeSwitchTransition, type ThemeSwitchChangeDetails, } from './theme-switch';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type SwitchPartProps, type SwitchProps } from '../switch';
|
|
3
|
+
export type ThemeSwitchValue = 'light' | 'dark';
|
|
4
|
+
export type ThemeSwitchTransition = 'reveal' | 'eclipse' | 'split' | 'rise';
|
|
5
|
+
export interface ThemeSwitchChangeDetails {
|
|
6
|
+
transition: ThemeSwitchTransition;
|
|
7
|
+
trigger: HTMLInputElement;
|
|
8
|
+
reducedMotion: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface ThemeSwitchProps extends Omit<SwitchProps, 'value' | 'defaultValue' | 'checked' | 'defaultChecked' | 'onCheckedChange' | 'children' | 'slotProps'> {
|
|
11
|
+
value?: ThemeSwitchValue;
|
|
12
|
+
defaultValue?: ThemeSwitchValue;
|
|
13
|
+
onValueChange?: (next: ThemeSwitchValue, details: ThemeSwitchChangeDetails) => void;
|
|
14
|
+
label: ReactNode;
|
|
15
|
+
iconOnly?: boolean;
|
|
16
|
+
lightIcon?: ReactNode;
|
|
17
|
+
darkIcon?: ReactNode;
|
|
18
|
+
transition?: ThemeSwitchTransition;
|
|
19
|
+
loading?: boolean;
|
|
20
|
+
slotProps?: SwitchProps['slotProps'] & {
|
|
21
|
+
iconFrame?: SwitchPartProps;
|
|
22
|
+
lightIcon?: SwitchPartProps;
|
|
23
|
+
darkIcon?: SwitchPartProps;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** Composes Switch: Space toggles dark appearance; the accessible name stays stable.
|
|
27
|
+
* The consumer applies the requested theme. The ref reaches Switch's native input.
|
|
28
|
+
* The decorative icon frame is a hidden label for the input, so clicking the glyph toggles too.
|
|
29
|
+
*/
|
|
30
|
+
export declare function ThemeSwitch({ value: valueProp, defaultValue, onValueChange, label, iconOnly, lightIcon, darkIcon, transition, loading, className, sx, slotProps, onChange, onClick, dir, id: idProp, ...rest }: ThemeSwitchProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
31
|
+
export declare namespace ThemeSwitch {
|
|
32
|
+
var displayName: string;
|
|
33
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
export interface ThreadAuthor {
|
|
2
|
+
/** Stable identity: ownership, reactions and mention candidates compare it. */
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
/** Portrait URL; initials are shown without it. */
|
|
6
|
+
avatar?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ThreadReaction {
|
|
9
|
+
emoji: string;
|
|
10
|
+
/** Ids of the people who reacted. */
|
|
11
|
+
users: readonly string[];
|
|
12
|
+
}
|
|
13
|
+
/** Epoch ms, a Date, or an ISO date-time with `Z` or an explicit offset. */
|
|
14
|
+
export type ThreadTimestamp = Date | string | number;
|
|
15
|
+
export interface ThreadMessage {
|
|
16
|
+
/** Unique, stable identity across updates. */
|
|
17
|
+
id: string;
|
|
18
|
+
author: ThreadAuthor;
|
|
19
|
+
/** Plain text, rendered as escaped text with its line breaks. */
|
|
20
|
+
body: string;
|
|
21
|
+
createdAt: ThreadTimestamp;
|
|
22
|
+
edited?: boolean;
|
|
23
|
+
deleted?: boolean;
|
|
24
|
+
reactions?: readonly ThreadReaction[];
|
|
25
|
+
}
|
|
26
|
+
export interface ThreadComment extends ThreadMessage {
|
|
27
|
+
replies?: readonly ThreadComment[];
|
|
28
|
+
}
|
|
29
|
+
export interface ThreadEntry {
|
|
30
|
+
comment: ThreadComment;
|
|
31
|
+
parentId: string | null;
|
|
32
|
+
/** Reply edges below a root comment; roots are 0. */
|
|
33
|
+
depth: number;
|
|
34
|
+
}
|
|
35
|
+
export interface ThreadIndex {
|
|
36
|
+
entries: ReadonlyMap<string, ThreadEntry>;
|
|
37
|
+
/** Ids in reading (depth-first) order. */
|
|
38
|
+
order: readonly string[];
|
|
39
|
+
duplicates: readonly string[];
|
|
40
|
+
/** True when a comment appears among its own replies; the repeat is skipped. */
|
|
41
|
+
cyclic: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface ThreadFormatters {
|
|
44
|
+
relative: Intl.RelativeTimeFormat;
|
|
45
|
+
full: Intl.DateTimeFormat;
|
|
46
|
+
number: Intl.NumberFormat;
|
|
47
|
+
plural: Intl.PluralRules;
|
|
48
|
+
/** Joins names ("Ada and Grace"). */
|
|
49
|
+
people: Intl.ListFormat;
|
|
50
|
+
/** Joins short facts ("4 comments, 2 people"). */
|
|
51
|
+
facts: Intl.ListFormat;
|
|
52
|
+
}
|
|
53
|
+
export declare const DEFAULT_TIME_ZONE = "UTC";
|
|
54
|
+
export declare const validEpoch: (epoch: number) => boolean;
|
|
55
|
+
export declare function toEpoch(value: ThreadTimestamp): number | null;
|
|
56
|
+
/** Signed relative text ("5 minutes ago", "in 2 days", "now") from the caller-owned clock. */
|
|
57
|
+
export declare function relativeTime(epoch: number, now: number, format: Intl.RelativeTimeFormat): string;
|
|
58
|
+
/** Formatters for the requested locale and zone; unusable values fall back and are reported. */
|
|
59
|
+
export declare function resolveFormatters(owner: string, locale: Intl.LocalesArgument, timeZone: string): {
|
|
60
|
+
formatters: ThreadFormatters;
|
|
61
|
+
problems: string[];
|
|
62
|
+
};
|
|
63
|
+
/** "1 reply" / "3 replies" through the locale's plural rules and digits. */
|
|
64
|
+
export declare const formatCount: (format: ThreadFormatters, count: number, one: string, other: string) => string;
|
|
65
|
+
/** Every comment by id with its parent and depth; repeated ids keep their first occurrence. */
|
|
66
|
+
export declare function indexThread(roots: readonly ThreadComment[]): ThreadIndex;
|
|
67
|
+
/**
|
|
68
|
+
* Replaces (or, for `null`, removes) the first comment with `id`, copying only the path to it.
|
|
69
|
+
* Returns the same array when nothing changed, so callers can skip no-op events.
|
|
70
|
+
*/
|
|
71
|
+
export declare function updateComment(comments: readonly ThreadComment[], id: string, update: (comment: ThreadComment) => ThreadComment | null, path?: ReadonlySet<ThreadComment>): readonly ThreadComment[];
|
|
72
|
+
/**
|
|
73
|
+
* The comment a reply to `parentId` attaches to: the parent itself while the reply stays within
|
|
74
|
+
* `maxDepth` reply edges, otherwise its ancestor at depth `maxDepth - 1`; `null` adds a root
|
|
75
|
+
* comment (always for `maxDepth` 0). `undefined` when the parent is unknown.
|
|
76
|
+
*/
|
|
77
|
+
export declare function resolveReplyParent(index: ThreadIndex, parentId: string | null, maxDepth: number): string | null | undefined;
|
|
78
|
+
export declare function appendComment(comments: readonly ThreadComment[], parentId: string | null, comment: ThreadComment): readonly ThreadComment[];
|
|
79
|
+
/** New body for a live comment; unchanged or deleted comments are left alone. */
|
|
80
|
+
export declare function editComment(comments: readonly ThreadComment[], id: string, body: string): readonly ThreadComment[];
|
|
81
|
+
/**
|
|
82
|
+
* A leaf disappears; a comment with replies becomes a tombstone that keeps its id, author, time
|
|
83
|
+
* and replies but drops its body and reactions.
|
|
84
|
+
*/
|
|
85
|
+
export declare function deleteComment(comments: readonly ThreadComment[], id: string): readonly ThreadComment[];
|
|
86
|
+
/** Adds or removes `userId` from the `emoji` reaction; empty reactions are dropped. */
|
|
87
|
+
export declare function toggleReaction(reactions: readonly ThreadReaction[], emoji: string, userId: string): {
|
|
88
|
+
reactions: ThreadReaction[];
|
|
89
|
+
added: boolean;
|
|
90
|
+
};
|
|
91
|
+
export declare function reactToComment(comments: readonly ThreadComment[], id: string, emoji: string, userId: string): {
|
|
92
|
+
comments: readonly ThreadComment[];
|
|
93
|
+
added: boolean;
|
|
94
|
+
};
|
|
95
|
+
/** First occurrence of each value, keyed by `key`. */
|
|
96
|
+
export declare function uniqueBy<T>(items: readonly T[], key: (item: T) => string): T[];
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { type KeyboardEvent, type ReactNode } from 'react';
|
|
2
|
+
import { type Interpolation, type SerializedStyles, type Theme } from '../../styling/css';
|
|
3
|
+
import { type ButtonProps } from '../button';
|
|
4
|
+
import { type TextareaProps } from '../textarea';
|
|
5
|
+
import { type ThreadAuthor, type ThreadFormatters, type ThreadReaction } from './thread-core';
|
|
6
|
+
export type ThreadSize = 'sm' | 'md';
|
|
7
|
+
export interface ThreadPartProps {
|
|
8
|
+
className?: string;
|
|
9
|
+
css?: Interpolation<Theme>;
|
|
10
|
+
}
|
|
11
|
+
/** Textarea props a consumer may add; the thread owns value, change and mention wiring. */
|
|
12
|
+
export type ThreadTextareaProps = Omit<TextareaProps, 'value' | 'defaultValue' | 'onValueChange' | 'label' | 'children'>;
|
|
13
|
+
/** Button props a consumer may add to a submit button; the thread owns its label and state. */
|
|
14
|
+
export type ThreadButtonProps = Omit<ButtonProps, 'children' | 'loading' | 'type' | 'render'>;
|
|
15
|
+
export declare const isComposing: (event: KeyboardEvent<HTMLElement>) => boolean;
|
|
16
|
+
export interface ThreadTimeProps {
|
|
17
|
+
epoch: number | null;
|
|
18
|
+
/** Caller-owned clock; `null` shows the full date instead of a relative one. */
|
|
19
|
+
now: number | null;
|
|
20
|
+
formatters: ThreadFormatters;
|
|
21
|
+
invalidLabel: string;
|
|
22
|
+
id: string;
|
|
23
|
+
/** Id of the hidden full date, for the message's `aria-describedby`. */
|
|
24
|
+
fullId: string;
|
|
25
|
+
ui: string;
|
|
26
|
+
part?: ThreadPartProps;
|
|
27
|
+
}
|
|
28
|
+
export declare function ThreadTime({ epoch, now, formatters, invalidLabel, id, fullId, ui: owner, part }: ThreadTimeProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
29
|
+
export interface ThreadMessageViewProps {
|
|
30
|
+
ui: string;
|
|
31
|
+
author: ThreadAuthor;
|
|
32
|
+
/** Replaces the author/time name, e.g. for a deleted message. */
|
|
33
|
+
label?: string;
|
|
34
|
+
epoch: number | null;
|
|
35
|
+
now: number | null;
|
|
36
|
+
formatters: ThreadFormatters;
|
|
37
|
+
invalidTimeLabel: string;
|
|
38
|
+
/** Text after the time, e.g. "(edited)". */
|
|
39
|
+
meta?: ReactNode;
|
|
40
|
+
size: ThreadSize;
|
|
41
|
+
baseId: string;
|
|
42
|
+
messageId: string;
|
|
43
|
+
/** Body, editor and footer rows. */
|
|
44
|
+
children: ReactNode;
|
|
45
|
+
slots?: {
|
|
46
|
+
article?: ThreadPartProps;
|
|
47
|
+
time?: ThreadPartProps;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export declare function ThreadMessageView({ ui: owner, author, label, epoch, now, formatters, invalidTimeLabel, meta, size, baseId, messageId, children, slots, }: ThreadMessageViewProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
51
|
+
export interface ThreadReactionLabels {
|
|
52
|
+
addReaction: string;
|
|
53
|
+
closeReactions: string;
|
|
54
|
+
reactions: string;
|
|
55
|
+
reactWith: (emoji: string) => string;
|
|
56
|
+
reactionCount: (emoji: string, count: number, mine: boolean) => string;
|
|
57
|
+
}
|
|
58
|
+
export interface ThreadReactionsProps {
|
|
59
|
+
ui: string;
|
|
60
|
+
reactions: readonly ThreadReaction[];
|
|
61
|
+
/** Emoji offered by the picker; empty hides the picker. */
|
|
62
|
+
offered: readonly string[];
|
|
63
|
+
currentUserId: string;
|
|
64
|
+
formatters: ThreadFormatters;
|
|
65
|
+
labels: ThreadReactionLabels;
|
|
66
|
+
/** Mutations hidden: chips render as text. */
|
|
67
|
+
readOnly: boolean;
|
|
68
|
+
disabled: boolean;
|
|
69
|
+
pickerOpen: boolean;
|
|
70
|
+
onPickerOpenChange: (open: boolean) => void;
|
|
71
|
+
onToggle: (emoji: string) => void;
|
|
72
|
+
pickerId: string;
|
|
73
|
+
part?: ThreadPartProps;
|
|
74
|
+
overlay?: boolean;
|
|
75
|
+
counts?: ReadonlyMap<string, number>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Picker keyboard: Left/Right (mirrored in RTL) wrap across the emoji, Home/End jump; Escape and
|
|
79
|
+
* a chosen emoji close it and return focus to the add button. Pressing outside leaves it open.
|
|
80
|
+
*/
|
|
81
|
+
export declare function ThreadReactions({ ui: owner, reactions, offered, currentUserId, formatters, labels, readOnly, disabled, pickerOpen, onPickerOpenChange, onToggle, pickerId, part, overlay, counts, }: ThreadReactionsProps): import("@emotion/react/jsx-runtime").JSX.Element | null;
|
|
82
|
+
export interface ThreadComposerProps {
|
|
83
|
+
ui: string;
|
|
84
|
+
draft: string;
|
|
85
|
+
onDraftChange: (draft: string) => void;
|
|
86
|
+
/** Called with the trimmed text for a non-empty, non-pending submit. */
|
|
87
|
+
onSubmit: (text: string, container: HTMLElement) => void;
|
|
88
|
+
/** The cancel button, and Escape (with no suggestions open) unless `cancelOnEscape` is false. */
|
|
89
|
+
onCancel?: (container: HTMLElement) => void;
|
|
90
|
+
cancelOnEscape?: boolean;
|
|
91
|
+
/** Shows the cancel button. */
|
|
92
|
+
cancelable: boolean;
|
|
93
|
+
label: string;
|
|
94
|
+
placeholder?: string;
|
|
95
|
+
submitLabel: string;
|
|
96
|
+
cancelLabel: string;
|
|
97
|
+
mentionsLabel: string;
|
|
98
|
+
people: readonly ThreadAuthor[];
|
|
99
|
+
locale: Intl.LocalesArgument;
|
|
100
|
+
disabled: boolean;
|
|
101
|
+
/** A submit is waiting for its parent to accept it; further submits are ignored. */
|
|
102
|
+
pending: boolean;
|
|
103
|
+
/** Focus the field on mount; only set when a user action opened this composer. */
|
|
104
|
+
autoFocus?: boolean;
|
|
105
|
+
size: ThreadSize;
|
|
106
|
+
/** Decorative portrait shown at inline-start. */
|
|
107
|
+
author?: ThreadAuthor;
|
|
108
|
+
textareaProps?: ThreadTextareaProps;
|
|
109
|
+
submitProps?: ThreadButtonProps;
|
|
110
|
+
part?: ThreadPartProps;
|
|
111
|
+
/** Distinguishes composers inside one thread (`data-composer`). */
|
|
112
|
+
kind: string;
|
|
113
|
+
submitOnEnter?: boolean;
|
|
114
|
+
allowEmpty?: boolean;
|
|
115
|
+
lockWhilePending?: boolean;
|
|
116
|
+
}
|
|
117
|
+
/** Per-size layout variables read by the parts; the owning root applies them. */
|
|
118
|
+
export declare const threadSizeStyles: Record<ThreadSize, SerializedStyles>;
|
|
119
|
+
export declare function ThreadComposer({ ui: owner, draft, onDraftChange, onSubmit, onCancel, cancelOnEscape, cancelable, label, placeholder, submitLabel, cancelLabel, mentionsLabel, people, locale, disabled, pending, autoFocus, size, author, textareaProps, submitProps, part, kind, submitOnEnter, allowEmpty, lockWhilePending, }: ThreadComposerProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ComponentPropsWithRef, type ReactNode } from 'react';
|
|
2
|
-
import { type Placement } from '@floating-ui/react';
|
|
2
|
+
import { type FloatingRootContext, type Placement, type UseInteractionsReturn } from '@floating-ui/react';
|
|
3
3
|
import { type SxProps } from '../../styling/sx';
|
|
4
4
|
export interface TooltipProps {
|
|
5
5
|
open?: boolean;
|
|
@@ -16,9 +16,16 @@ export interface TooltipTriggerProps extends ComponentPropsWithRef<'button'>, Sx
|
|
|
16
16
|
}
|
|
17
17
|
export interface TooltipContentProps extends ComponentPropsWithRef<'div'>, SxProps {
|
|
18
18
|
}
|
|
19
|
+
export declare const tooltipContentStyle: import("@emotion/react").SerializedStyles;
|
|
20
|
+
/** The tooltip interaction chain, shared with parts whose operative element cannot be a Tooltip.Trigger. */
|
|
21
|
+
export declare function useTooltipInteractions(context: FloatingRootContext, { enabled, openDelay, closeDelay, }?: {
|
|
22
|
+
enabled?: boolean;
|
|
23
|
+
openDelay?: number;
|
|
24
|
+
closeDelay?: number;
|
|
25
|
+
}): UseInteractionsReturn;
|
|
19
26
|
declare function TooltipRoot(props: TooltipProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
20
27
|
declare function TooltipTrigger({ ref, 'aria-describedby': ariaDescribedByProp, className, sx, ...rest }: TooltipTriggerProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
21
|
-
declare function TooltipContent(
|
|
28
|
+
declare function TooltipContent(props: TooltipContentProps): import("@emotion/react/jsx-runtime").JSX.Element | null;
|
|
22
29
|
export declare const Tooltip: typeof TooltipRoot & {
|
|
23
30
|
Trigger: typeof TooltipTrigger;
|
|
24
31
|
Content: typeof TooltipContent;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type ComponentPropsWithRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';
|
|
2
2
|
import { type Interpolation, type Theme } from '../../styling/css';
|
|
3
3
|
import { type SxProps } from '../../styling/sx';
|
|
4
|
-
|
|
4
|
+
import { type UsageMeterState, type UsageMeterSummary } from './usage-model';
|
|
5
|
+
export type { UsageMeterState, UsageMeterSummary } from './usage-model';
|
|
5
6
|
export type UsageMeterSize = 'sm' | 'md' | 'lg';
|
|
6
7
|
export type UsageMeterSelection = {
|
|
7
8
|
kind: 'segment';
|
|
@@ -20,17 +21,6 @@ export type UsageMeterItem = UsageMeterSelection & {
|
|
|
20
21
|
label: string;
|
|
21
22
|
value: number;
|
|
22
23
|
};
|
|
23
|
-
export interface UsageMeterSummary {
|
|
24
|
-
total: number;
|
|
25
|
-
limit: number;
|
|
26
|
-
free: number;
|
|
27
|
-
over: number;
|
|
28
|
-
ratio: number;
|
|
29
|
-
state: UsageMeterState;
|
|
30
|
-
formattedTotal: string;
|
|
31
|
-
formattedLimit: string;
|
|
32
|
-
formattedPercent: string;
|
|
33
|
-
}
|
|
34
24
|
export interface UsageMeterLabels {
|
|
35
25
|
free: string;
|
|
36
26
|
near: string;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type UsageMeterState = 'normal' | 'near-limit' | 'over-limit' | 'unavailable';
|
|
2
|
+
export interface UsageMeterSummary {
|
|
3
|
+
total: number;
|
|
4
|
+
limit: number;
|
|
5
|
+
free: number;
|
|
6
|
+
over: number;
|
|
7
|
+
ratio: number;
|
|
8
|
+
state: UsageMeterState;
|
|
9
|
+
formattedTotal: string;
|
|
10
|
+
formattedLimit: string;
|
|
11
|
+
formattedPercent: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const DEFAULT_WARN_AT = 0.9;
|
|
14
|
+
export interface UsageFormats {
|
|
15
|
+
amount: Intl.NumberFormat;
|
|
16
|
+
percent: Intl.NumberFormat;
|
|
17
|
+
index: Intl.NumberFormat;
|
|
18
|
+
}
|
|
19
|
+
export declare function createUsageFormats(locale: Intl.LocalesArgument, numberFormatOptions?: Intl.NumberFormatOptions): UsageFormats;
|
|
20
|
+
interface SummarizeOptions {
|
|
21
|
+
warnAt?: number;
|
|
22
|
+
formats: UsageFormats;
|
|
23
|
+
/** Text for amounts that cannot be computed. */
|
|
24
|
+
unavailable: string;
|
|
25
|
+
/** Formats amounts instead of `formats.amount` (consumer unit formatters). */
|
|
26
|
+
formatAmount?: (amount: number) => string;
|
|
27
|
+
}
|
|
28
|
+
/** Summarizes `total` against `limit`; nonpositive or nonfinite limits are `unavailable`. */
|
|
29
|
+
export declare function summarizeUsage(total: number, limit: number, { warnAt, formats, unavailable, formatAmount }: SummarizeOptions): UsageMeterSummary;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { UserMenu } from './user-menu';
|
|
2
|
+
export type { UserMenuContentProps, UserMenuGroupSlotProps, UserMenuIdentityProps, UserMenuItemProps, UserMenuItemTone, UserMenuPartProps, UserMenuProps, UserMenuSeparatorProps, UserMenuSignOutProps, UserMenuStatus, UserMenuStatusGroupProps, UserMenuTheme, UserMenuThemeGroupProps, UserMenuTriggerProps, UserMenuUser, UserMenuVariant, } from './user-menu';
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { type ComponentPropsWithRef, type ReactNode } from 'react';
|
|
2
|
+
import { type Placement } from '@floating-ui/react';
|
|
3
|
+
import { type Interpolation, type Theme } from '../../styling/css';
|
|
4
|
+
import { type SxProps } from '../../styling/sx';
|
|
5
|
+
import { type AvatarStatus } from '../avatar';
|
|
6
|
+
import { type MenuItemTone } from '../menu/menu';
|
|
7
|
+
declare const THEME_OPTIONS: readonly ['light', 'dark', 'system'];
|
|
8
|
+
declare const STATUS_OPTIONS: readonly ['available', 'busy', 'away'];
|
|
9
|
+
export type UserMenuTheme = (typeof THEME_OPTIONS)[number];
|
|
10
|
+
export type UserMenuStatus = (typeof STATUS_OPTIONS)[number];
|
|
11
|
+
export type UserMenuVariant = 'adaptive' | 'menu' | 'sheet';
|
|
12
|
+
export type UserMenuItemTone = MenuItemTone;
|
|
13
|
+
export interface UserMenuUser {
|
|
14
|
+
name: string;
|
|
15
|
+
email: string;
|
|
16
|
+
/** Plan or role label shown next to the email; `0` renders. */
|
|
17
|
+
plan?: ReactNode;
|
|
18
|
+
avatarSrc?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface UserMenuPartProps {
|
|
21
|
+
className?: string;
|
|
22
|
+
css?: Interpolation<Theme>;
|
|
23
|
+
}
|
|
24
|
+
export interface UserMenuProps {
|
|
25
|
+
user: UserMenuUser;
|
|
26
|
+
open?: boolean;
|
|
27
|
+
defaultOpen?: boolean;
|
|
28
|
+
onOpenChange?: (open: boolean) => void;
|
|
29
|
+
/** Desktop placement next to the Trigger; flips when there is no room. */
|
|
30
|
+
placement?: Placement;
|
|
31
|
+
/** Viewport width in px below which `variant="adaptive"` content becomes a sheet. */
|
|
32
|
+
compactBreakpoint?: number;
|
|
33
|
+
children?: ReactNode;
|
|
34
|
+
}
|
|
35
|
+
export interface UserMenuTriggerProps extends Omit<ComponentPropsWithRef<'button'>, 'children'>, SxProps {
|
|
36
|
+
/** Translated name of the button, e.g. "Account menu, Ada Lovelace". */
|
|
37
|
+
'aria-label': string;
|
|
38
|
+
/** Shows the user's name next to the avatar outside compact viewports. */
|
|
39
|
+
showName?: boolean;
|
|
40
|
+
status?: AvatarStatus;
|
|
41
|
+
/** Translated status word, exposed as the Trigger's description. */
|
|
42
|
+
statusLabel?: string;
|
|
43
|
+
}
|
|
44
|
+
interface UserMenuContentBaseProps extends ComponentPropsWithRef<'div'>, SxProps {
|
|
45
|
+
slotProps?: {
|
|
46
|
+
menu?: UserMenuPartProps;
|
|
47
|
+
handle?: UserMenuPartProps;
|
|
48
|
+
close?: UserMenuPartProps;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export type UserMenuContentProps = UserMenuContentBaseProps & ({
|
|
52
|
+
variant: 'menu';
|
|
53
|
+
closeLabel?: string;
|
|
54
|
+
} | {
|
|
55
|
+
variant?: 'adaptive' | 'sheet';
|
|
56
|
+
/** Translated name of the sheet's Close button. */
|
|
57
|
+
closeLabel: string;
|
|
58
|
+
});
|
|
59
|
+
export interface UserMenuIdentityProps extends ComponentPropsWithRef<'div'>, SxProps {
|
|
60
|
+
}
|
|
61
|
+
export interface UserMenuItemProps extends Omit<ComponentPropsWithRef<'button'>, 'onSelect'>, SxProps {
|
|
62
|
+
/** Called once when the item is activated. The menu then closes unless a click handler called
|
|
63
|
+
* `event.preventDefault()`. */
|
|
64
|
+
onSelect?: () => void;
|
|
65
|
+
disabled?: boolean;
|
|
66
|
+
tone?: UserMenuItemTone;
|
|
67
|
+
/** Decorative icon before the label. */
|
|
68
|
+
icon?: ReactNode;
|
|
69
|
+
/** Shortcut hint keys, shown as decoration only; no shortcut is registered. */
|
|
70
|
+
keys?: readonly string[];
|
|
71
|
+
}
|
|
72
|
+
export interface UserMenuGroupSlotProps {
|
|
73
|
+
label?: UserMenuPartProps;
|
|
74
|
+
option?: UserMenuPartProps;
|
|
75
|
+
}
|
|
76
|
+
interface ChoiceGroupProps<V extends string> extends Omit<ComponentPropsWithRef<'div'>, 'defaultValue'>, SxProps {
|
|
77
|
+
value?: V;
|
|
78
|
+
defaultValue?: V;
|
|
79
|
+
onValueChange?: (value: V) => void;
|
|
80
|
+
/** Translated group name and option labels. */
|
|
81
|
+
labels: {
|
|
82
|
+
group: string;
|
|
83
|
+
} & Record<V, string>;
|
|
84
|
+
slotProps?: UserMenuGroupSlotProps;
|
|
85
|
+
}
|
|
86
|
+
export type UserMenuThemeGroupProps = ChoiceGroupProps<UserMenuTheme>;
|
|
87
|
+
export type UserMenuStatusGroupProps = ChoiceGroupProps<UserMenuStatus>;
|
|
88
|
+
export interface UserMenuSignOutProps extends Omit<UserMenuItemProps, 'onSelect' | 'disabled'> {
|
|
89
|
+
/** Signs the user out. A returned promise keeps the item busy until it settles. */
|
|
90
|
+
onSignOut: () => void | PromiseLike<unknown>;
|
|
91
|
+
/** Translated label shown while the action is pending. */
|
|
92
|
+
pendingLabel: string;
|
|
93
|
+
/** Translated message announced when the action fails. */
|
|
94
|
+
errorMessage: string;
|
|
95
|
+
/** Receives the failure (a rejection or a synchronous throw). */
|
|
96
|
+
onSignOutError?: (error: unknown) => void;
|
|
97
|
+
}
|
|
98
|
+
export interface UserMenuSeparatorProps extends ComponentPropsWithRef<'div'>, SxProps {
|
|
99
|
+
}
|
|
100
|
+
declare function UserMenuRoot({ user, open, defaultOpen, onOpenChange, placement, compactBreakpoint, children, }: UserMenuProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
101
|
+
declare function UserMenuTrigger({ ref, showName, status, statusLabel, 'aria-describedby': ariaDescribedBy, className, sx, ...rest }: UserMenuTriggerProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
102
|
+
declare function UserMenuContent({ variant, id, ...props }: UserMenuContentProps): import("@emotion/react/jsx-runtime").JSX.Element | null;
|
|
103
|
+
declare function UserMenuIdentity({ ref, className, sx, ...rest }: UserMenuIdentityProps): import("react").ReactPortal | null;
|
|
104
|
+
declare function UserMenuItem({ tone, icon, keys, children, ...props }: UserMenuItemProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
105
|
+
declare function UserMenuThemeGroup(props: UserMenuThemeGroupProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
106
|
+
declare function UserMenuStatusGroup(props: UserMenuStatusGroupProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
107
|
+
declare function UserMenuSignOut({ onSignOut, pendingLabel, errorMessage, onSignOutError, tone, icon, keys, children, ...props }: UserMenuSignOutProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
108
|
+
declare function UserMenuSeparator(props: UserMenuSeparatorProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
109
|
+
export declare const UserMenu: typeof UserMenuRoot & {
|
|
110
|
+
Trigger: typeof UserMenuTrigger;
|
|
111
|
+
Content: typeof UserMenuContent;
|
|
112
|
+
Identity: typeof UserMenuIdentity;
|
|
113
|
+
Item: typeof UserMenuItem;
|
|
114
|
+
ThemeGroup: typeof UserMenuThemeGroup;
|
|
115
|
+
StatusGroup: typeof UserMenuStatusGroup;
|
|
116
|
+
SignOut: typeof UserMenuSignOut;
|
|
117
|
+
Separator: typeof UserMenuSeparator;
|
|
118
|
+
};
|
|
119
|
+
export {};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,21 +1,27 @@
|
|
|
1
1
|
export * from './components/accordion';
|
|
2
|
+
export * from './components/activity-rings';
|
|
2
3
|
export * from './components/alert';
|
|
3
4
|
export * from './components/announcement-bar';
|
|
4
5
|
export * from './components/avatar';
|
|
5
6
|
export * from './components/avatar-group';
|
|
6
7
|
export * from './components/badge';
|
|
8
|
+
export * from './components/billing-toggle';
|
|
7
9
|
export * from './components/bottom-sheet';
|
|
8
10
|
export * from './components/breadcrumbs';
|
|
9
11
|
export * from './components/button';
|
|
12
|
+
export * from './components/button-group';
|
|
10
13
|
export * from './components/calendar';
|
|
11
14
|
export * from './components/card';
|
|
12
15
|
export * from './components/carousel';
|
|
16
|
+
export * from './components/chat-thread';
|
|
13
17
|
export * from './components/checkbox';
|
|
14
18
|
export * from './components/chip-group';
|
|
15
19
|
export * from './components/code-block';
|
|
16
20
|
export * from './components/command-palette';
|
|
17
21
|
export * from './components/combobox';
|
|
22
|
+
export * from './components/comment-thread';
|
|
18
23
|
export * from './components/container';
|
|
24
|
+
export * from './components/context-menu';
|
|
19
25
|
export * from './components/copy-button';
|
|
20
26
|
export * from './components/countdown';
|
|
21
27
|
export * from './components/date-picker';
|
|
@@ -25,6 +31,7 @@ export * from './components/divider';
|
|
|
25
31
|
export * from './components/drawer';
|
|
26
32
|
export * from './components/empty-state';
|
|
27
33
|
export * from './components/expandable-card';
|
|
34
|
+
export * from './components/expanding-search';
|
|
28
35
|
export * from './components/file-dropzone';
|
|
29
36
|
export * from './components/filter-toolbar';
|
|
30
37
|
export * from './components/flex';
|
|
@@ -34,13 +41,19 @@ export * from './components/inline-edit';
|
|
|
34
41
|
export * from './components/hover-card';
|
|
35
42
|
export * from './components/json-viewer';
|
|
36
43
|
export * from './components/kbd';
|
|
44
|
+
export * from './components/keycap-keyboard';
|
|
45
|
+
export * from './components/lightbox-gallery';
|
|
46
|
+
export * from './components/link-unfurl';
|
|
47
|
+
export * from './components/locale-switcher';
|
|
37
48
|
export * from './components/mention-input';
|
|
38
49
|
export * from './components/menu';
|
|
39
50
|
export * from './components/metric-card';
|
|
40
51
|
export * from './components/multi-select';
|
|
41
52
|
export * from './components/navigation';
|
|
53
|
+
export * from './components/now-playing';
|
|
42
54
|
export * from './components/pagination';
|
|
43
55
|
export * from './components/password-field';
|
|
56
|
+
export * from './components/photo-grid';
|
|
44
57
|
export * from './components/pill';
|
|
45
58
|
export * from './components/popover';
|
|
46
59
|
export * from './components/progress';
|
|
@@ -51,6 +64,8 @@ export * from './components/scroll-area';
|
|
|
51
64
|
export * from './components/search-field';
|
|
52
65
|
export * from './components/segmented-control';
|
|
53
66
|
export * from './components/select';
|
|
67
|
+
export * from './components/sheet-stack';
|
|
68
|
+
export * from './components/shortcut-recorder';
|
|
54
69
|
export * from './components/signature-pad';
|
|
55
70
|
export * from './components/skeleton';
|
|
56
71
|
export * from './components/slider';
|
|
@@ -59,6 +74,7 @@ export * from './components/spinner';
|
|
|
59
74
|
export * from './components/split-button';
|
|
60
75
|
export * from './components/stack';
|
|
61
76
|
export * from './components/stepper';
|
|
77
|
+
export * from './components/stretch-refresh';
|
|
62
78
|
export * from './components/swipe-actions';
|
|
63
79
|
export * from './components/switch';
|
|
64
80
|
export * from './components/tabs';
|
|
@@ -67,6 +83,7 @@ export * from './components/text-field';
|
|
|
67
83
|
export * from './components/textarea';
|
|
68
84
|
export { ThemeProvider, useTheme, type ThemeProviderProps } from './components/theme-provider/theme-provider';
|
|
69
85
|
export * from './components/theme-root';
|
|
86
|
+
export * from './components/theme-switch';
|
|
70
87
|
export * from './components/time-picker';
|
|
71
88
|
export * from './components/timeline';
|
|
72
89
|
export * from './components/toast';
|
|
@@ -75,6 +92,7 @@ export * from './components/toggle-group';
|
|
|
75
92
|
export * from './components/tooltip';
|
|
76
93
|
export * from './components/tree-view';
|
|
77
94
|
export * from './components/usage-meter';
|
|
95
|
+
export * from './components/user-menu';
|
|
78
96
|
export { styled } from './styling/styled';
|
|
79
97
|
export type { SxProps } from './styling/sx';
|
|
80
98
|
export { theme, type JfraderTheme } from './styling/theme';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { NativeDialogTransition } from './use-native-dialog';
|
|
2
|
+
/**
|
|
3
|
+
* Settles once the finite animations and transitions running on `element` (and, with `subtree`,
|
|
4
|
+
* its descendants and pseudo-elements such as `::backdrop`) have finished or been canceled.
|
|
5
|
+
* Infinite animations (spinners) never hold the exit.
|
|
6
|
+
*/
|
|
7
|
+
export declare function exitMotionFinished(element: Element, { subtree }?: {
|
|
8
|
+
subtree?: boolean | undefined;
|
|
9
|
+
}): Promise<unknown>;
|
|
10
|
+
/**
|
|
11
|
+
* Native dialog transition for styled motion: `useNativeDialog` renders `data-state="closing"`
|
|
12
|
+
* before the exit runs, so the exit only waits for the transitions that state started.
|
|
13
|
+
*/
|
|
14
|
+
export declare const styledDialogTransition: NativeDialogTransition;
|
|
15
|
+
/**
|
|
16
|
+
* Presence for a floating surface that unmounts when closed: it stays mounted while `closing`
|
|
17
|
+
* so its exit transition (styled through `data-state="closing"`) can run. Attach `ref` to the
|
|
18
|
+
* surface; reopening during the exit keeps the same mount.
|
|
19
|
+
*/
|
|
20
|
+
export declare function useExitPresence<T extends Element>(open: boolean): {
|
|
21
|
+
ref: import("react").RefObject<T | null>;
|
|
22
|
+
present: boolean;
|
|
23
|
+
closing: boolean;
|
|
24
|
+
};
|