@jfrader/ui 0.5.1 → 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-DLul6vIl.js → accordion-D6myONB9.js} +36 -35
- 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-Dlbq5-9D.js → announcement-bar-B5J33QUh.js} +132 -131
- package/dist/announcement-bar.js +1 -1
- package/dist/{avatar-CaGJHy1N.js → avatar-B6idYC59.js} +11 -10
- package/dist/{avatar-group-M1opAQEG.js → avatar-group-DvP8mAE-.js} +10 -9
- package/dist/avatar-group.js +1 -1
- package/dist/avatar.js +1 -1
- package/dist/{badge-CjM5Agqk.js → badge-CfhTcA-Z.js} +10 -9
- 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-DjZOPq4k.js → bottom-sheet-BFQKO0Wo.js} +282 -264
- package/dist/bottom-sheet.js +1 -1
- package/dist/{breadcrumbs-BDK_LiwH.js → breadcrumbs-CG3akw-b.js} +19 -18
- package/dist/breadcrumbs.js +1 -1
- package/dist/{button-NLY0h6EJ.js → button-C6OV0C7J.js} +14 -13
- 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-B7OrvD6J.js → carousel-lTH4Foke.js} +13 -12
- package/dist/carousel.js +1 -1
- package/dist/chat-thread-DVa17BRC.js +864 -0
- package/dist/chat-thread.js +2 -0
- package/dist/{checkbox-DKSzExj2.js → checkbox-CClE61GV.js} +9 -8
- package/dist/checkbox.js +1 -1
- package/dist/{chip-group-DjQ0_6Y9.js → chip-group-BZUX9KPF.js} +17 -16
- package/dist/chip-group.js +1 -1
- package/dist/{choice-control-5kJkLXgv.js → choice-control-BsWOZPc9.js} +1 -1
- package/dist/{code-block-B5we2lZa.js → code-block-CYP89_6h.js} +35 -34
- package/dist/code-block.js +1 -1
- package/dist/{combobox-DFFqOBCi.js → combobox-D2Oc-co7.js} +21 -20
- 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 +1 -1
- package/dist/{container-BOaSptJa.js → container-BxtwJSSD.js} +3 -2
- package/dist/container.js +1 -1
- package/dist/{context-menu-__1c2Dk9.js → context-menu-I4i0LRpm.js} +52 -51
- package/dist/context-menu.js +1 -1
- package/dist/{copy-button-DCSLcYS-.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-BiPN7yeK.js → date-picker-D-bn-iHs.js} +14 -13
- 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-Cp7aNbhM.js → divider-zOJzkcHh.js} +7 -6
- 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-rUATve0o.js → expandable-card-W97vjix9.js} +52 -51
- package/dist/expandable-card.js +1 -1
- package/dist/{expanding-search-BxOwtdwt.js → expanding-search-Bb2_YfNx.js} +16 -15
- package/dist/expanding-search.js +1 -1
- package/dist/{field-anatomy-COVdNpf5.js → field-anatomy-BDIP42MI.js} +2 -1
- package/dist/{file-dropzone-BuXm3Tea.js → file-dropzone-Bi5ikRIz.js} +14 -13
- package/dist/file-dropzone.js +1 -1
- package/dist/{filter-toolbar-Cy5Hqur-.js → filter-toolbar-QRnC4S_H.js} +33 -32
- 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-CoMJKg1g.js → hover-card-DN1EAlQA.js} +20 -19
- package/dist/hover-card.js +1 -1
- package/dist/{icon-wrapper-stN8sD7R.js → icon-wrapper-C-zMD0uL.js} +1 -1
- package/dist/{image-compare-BxY8Ykzt.js → image-compare-Ln2UUqTU.js} +20 -19
- package/dist/image-compare.js +1 -1
- package/dist/index.js +98 -83
- 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-DgWqyU75.js → json-viewer-Dro3WrjS.js} +31 -30
- 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-sq61si9L.js → mention-input-BjjAbJCf.js} +6 -6
- package/dist/mention-input.js +1 -1
- package/dist/{menu-DDKgmK2F.js → menu-CVzpsyXn.js} +113 -96
- package/dist/menu.js +1 -1
- package/dist/{metric-card--lVTz5Wn.js → metric-card-BnFssTXj.js} +12 -11
- package/dist/metric-card.js +1 -1
- package/dist/{multi-select-DG1BCFX7.js → multi-select-B3puEVo0.js} +67 -66
- package/dist/multi-select.js +1 -1
- package/dist/{navigation-CC26JDr-.js → navigation-C_JD43gA.js} +41 -40
- 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-motion-Cr77ihn2.js +90 -0
- package/dist/{overlay-portal-C4JZFq2M.js → overlay-portal-C9igMHnC.js} +1 -1
- package/dist/{pagination-BfkeWbmP.js → pagination-Dkh4bJQh.js} +10 -9
- 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-BaS-uIbn.js → pill-Dd7pog19.js} +10 -9
- package/dist/pill.js +1 -1
- package/dist/{popover-CErIw2q3.js → popover-CUMOcMtj.js} +5 -4
- package/dist/popover.js +1 -1
- package/dist/presence-spring-4zwtUDQN.js +12 -0
- package/dist/{progress-DAQkfhPd.js → progress-Bcuz3Ob4.js} +11 -10
- package/dist/progress.js +1 -1
- package/dist/{radio-cards-Cu9cBssN.js → radio-cards-FkAhESb5.js} +35 -34
- package/dist/radio-cards.js +1 -1
- package/dist/{radio-group-TIK0-iPX.js → radio-group-DItMf2YM.js} +18 -17
- package/dist/radio-group.js +1 -1
- package/dist/{resizable-panels-DUpQEpwG.js → resizable-panels-61h9hA3B.js} +13 -12
- 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-DMvho0KQ.js → search-field-CbsajaZb.js} +93 -92
- package/dist/search-field.js +1 -1
- package/dist/{segmented-control-8ZUGnsZm.js → segmented-control-DCh-4ca-.js} +26 -25
- package/dist/segmented-control.js +1 -1
- package/dist/{select-D5rhJ8gi.js → select-SrcQqZjo.js} +27 -26
- 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-_bTeguN9.js → signature-pad-khL2yhQI.js} +15 -14
- 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-CYKT_Ng7.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-BCw4zZom.js → split-button-Bu41f2AY.js} +20 -19
- 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-CBuJREU1.js → swipe-actions-1H5UOZKE.js} +26 -25
- package/dist/swipe-actions.js +1 -1
- package/dist/{switch-C1WrKrf-.js → switch-79-hkQqg.js} +15 -14
- package/dist/switch.js +1 -1
- package/dist/sx-BJXJ2xJK.js +23 -0
- package/dist/{tabs-XluwRjgg.js → tabs-Bb5-noYE.js} +43 -42
- 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-hU72iSVS.js → text-field-D0VP7b4P.js} +3 -3
- package/dist/text-field.js +1 -1
- package/dist/{textarea-3k4Y0QQ3.js → textarea-D1YwEPmn.js} +3 -3
- 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-C505TtU8.js → theme-switch-CP42mVDb.js} +12 -11
- package/dist/theme-switch.js +1 -1
- package/dist/thread-parts-DfZNz70v.js +683 -0
- package/dist/{time-picker-CPlhW0tr.js → time-picker-Tnd-JBLC.js} +16 -15
- package/dist/time-picker.js +1 -1
- package/dist/{timeline-B0uAAVfT.js → timeline-DaldDMX7.js} +22 -21
- package/dist/timeline.js +1 -1
- package/dist/{toast-B7wo3sX1.js → toast-CSAbl5yK.js} +12 -11
- package/dist/{toast-stack-B40VpS4M.js → toast-stack-BCR4Cu7V.js} +10 -9
- package/dist/toast-stack.js +1 -1
- package/dist/toast.js +1 -1
- package/dist/{toggle-group-B2fpFZwV.js → toggle-group-C7ye1v4s.js} +23 -22
- package/dist/toggle-group.js +1 -1
- package/dist/{tooltip-BvgVTCTN.js → tooltip-IajLwdUb.js} +48 -39
- package/dist/tooltip.js +1 -1
- package/dist/{tree-view-j8qLqkb_.js → tree-view-CoW4oJIZ.js} +15 -14
- 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/comment-thread/comment-thread.d.ts +3 -3
- package/dist/types/components/drawer/drawer.d.ts +7 -1
- 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 +29 -5
- 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/photo-grid/index.d.ts +2 -0
- package/dist/types/components/photo-grid/photo-grid.d.ts +82 -0
- 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/stretch-refresh/index.d.ts +1 -0
- package/dist/types/components/stretch-refresh/stretch-refresh.d.ts +49 -0
- 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/{comment-thread → thread}/thread-parts.d.ts +7 -2
- package/dist/types/components/tooltip/tooltip.d.ts +8 -1
- 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 +14 -1
- package/dist/types/overlay/exit-motion.d.ts +24 -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/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-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 +72 -6
- package/dist/calendar-BzJdv_SZ.js +0 -449
- package/dist/card-Ca4KQKYQ.js +0 -154
- package/dist/command-palette-BmQu2w4H.js +0 -391
- package/dist/comment-thread-ASaXDcGo.js +0 -1410
- package/dist/date-range-picker-DQpUeKqV.js +0 -570
- package/dist/dialog-BX1zYMs-.js +0 -219
- package/dist/drawer-DsASTiP-.js +0 -553
- package/dist/elastic-slider-BG6K019r.js +0 -395
- package/dist/elastic-slider.js +0 -2
- package/dist/slider-DVG6-Awh.js +0 -308
- package/dist/sx-Dx9JUKp5.js +0 -23
- package/dist/theme-root-Bs1U3uPA.js +0 -46
- package/dist/theme-scope-t7nAKc2c.js +0 -27
- package/dist/types/components/elastic-slider/elastic-slider.d.ts +0 -53
- package/dist/types/components/elastic-slider/index.d.ts +0 -1
- package/dist/use-native-dialog-DWpIUVO1.js +0 -84
- package/dist/use-slider-interaction-ChL-208h.js +0 -234
- /package/dist/types/components/{comment-thread → thread}/thread-core.d.ts +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type ComponentPropsWithRef, type ReactNode } from 'react';
|
|
2
|
+
import { type Interpolation, type Theme } from '../../styling/css';
|
|
3
|
+
import { type SxProps } from '../../styling/sx';
|
|
4
|
+
import { type ButtonProps } from '../button';
|
|
5
|
+
type Slot<E extends 'div' | 'header' | 'h2' | 'ul' | 'li'> = Omit<ComponentPropsWithRef<E>, 'children'> & {
|
|
6
|
+
css?: Interpolation<Theme>;
|
|
7
|
+
};
|
|
8
|
+
export interface StretchRefreshSlotProps<T> {
|
|
9
|
+
header?: Slot<'header'>;
|
|
10
|
+
title?: Slot<'h2'>;
|
|
11
|
+
subtitle?: Slot<'div'>;
|
|
12
|
+
feed?: Slot<'div'>;
|
|
13
|
+
list?: Slot<'ul'>;
|
|
14
|
+
item?: Slot<'li'> | ((item: T, index: number) => Slot<'li'>);
|
|
15
|
+
indicator?: Omit<Slot<'div'>, 'aria-hidden'>;
|
|
16
|
+
refreshButton?: Omit<ButtonProps, 'children' | 'type' | 'disabled' | 'loading' | 'render' | 'sx'>;
|
|
17
|
+
status?: Omit<Slot<'div'>, 'role' | 'aria-atomic'>;
|
|
18
|
+
empty?: Slot<'div'>;
|
|
19
|
+
}
|
|
20
|
+
export interface StretchRefreshLabels {
|
|
21
|
+
refresh?: string;
|
|
22
|
+
refreshing?: string;
|
|
23
|
+
pull?: string;
|
|
24
|
+
release?: string;
|
|
25
|
+
done?: string;
|
|
26
|
+
error?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface StretchRefreshProps<T> extends Omit<ComponentPropsWithRef<'div'>, 'children' | 'title'>, SxProps {
|
|
29
|
+
title: ReactNode;
|
|
30
|
+
headingLevel?: 2 | 3 | 4 | 5 | 6;
|
|
31
|
+
subtitle?: ReactNode;
|
|
32
|
+
items: readonly T[];
|
|
33
|
+
getKey: (item: T) => string;
|
|
34
|
+
renderItem: (item: T, index: number) => ReactNode;
|
|
35
|
+
onRefresh: () => Promise<string | void>;
|
|
36
|
+
refreshing?: boolean;
|
|
37
|
+
defaultRefreshing?: boolean;
|
|
38
|
+
onRefreshingChange?: (refreshing: boolean) => void;
|
|
39
|
+
disabled?: boolean;
|
|
40
|
+
threshold?: number;
|
|
41
|
+
emptyContent?: ReactNode;
|
|
42
|
+
labels?: StretchRefreshLabels;
|
|
43
|
+
slotProps?: StretchRefreshSlotProps<T>;
|
|
44
|
+
}
|
|
45
|
+
export declare function StretchRefresh<T>({ title, headingLevel, subtitle, items, getKey, renderItem, onRefresh, refreshing, defaultRefreshing, onRefreshingChange, disabled, threshold: thresholdProp, emptyContent, labels, slotProps, ref, className, sx, onKeyDown, ...props }: StretchRefreshProps<T>): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
46
|
+
export declare namespace StretchRefresh {
|
|
47
|
+
var displayName: string;
|
|
48
|
+
}
|
|
49
|
+
export {};
|
|
@@ -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
|
}
|
|
@@ -71,12 +71,14 @@ export interface ThreadReactionsProps {
|
|
|
71
71
|
onToggle: (emoji: string) => void;
|
|
72
72
|
pickerId: string;
|
|
73
73
|
part?: ThreadPartProps;
|
|
74
|
+
overlay?: boolean;
|
|
75
|
+
counts?: ReadonlyMap<string, number>;
|
|
74
76
|
}
|
|
75
77
|
/**
|
|
76
78
|
* Picker keyboard: Left/Right (mirrored in RTL) wrap across the emoji, Home/End jump; Escape and
|
|
77
79
|
* a chosen emoji close it and return focus to the add button. Pressing outside leaves it open.
|
|
78
80
|
*/
|
|
79
|
-
export declare function ThreadReactions({ ui: owner, reactions, offered, currentUserId, formatters, labels, readOnly, disabled, pickerOpen, onPickerOpenChange, onToggle, pickerId, part, }: ThreadReactionsProps): import("@emotion/react/jsx-runtime").JSX.Element | null;
|
|
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;
|
|
80
82
|
export interface ThreadComposerProps {
|
|
81
83
|
ui: string;
|
|
82
84
|
draft: string;
|
|
@@ -108,7 +110,10 @@ export interface ThreadComposerProps {
|
|
|
108
110
|
part?: ThreadPartProps;
|
|
109
111
|
/** Distinguishes composers inside one thread (`data-composer`). */
|
|
110
112
|
kind: string;
|
|
113
|
+
submitOnEnter?: boolean;
|
|
114
|
+
allowEmpty?: boolean;
|
|
115
|
+
lockWhilePending?: boolean;
|
|
111
116
|
}
|
|
112
117
|
/** Per-size layout variables read by the parts; the owning root applies them. */
|
|
113
118
|
export declare const threadSizeStyles: Record<ThreadSize, SerializedStyles>;
|
|
114
|
-
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, }: ThreadComposerProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
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,6 +16,13 @@ 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
28
|
declare function TooltipContent(props: TooltipContentProps): import("@emotion/react/jsx-runtime").JSX.Element | null;
|
|
@@ -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,15 +1,19 @@
|
|
|
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';
|
|
@@ -25,7 +29,6 @@ export * from './components/date-range-picker';
|
|
|
25
29
|
export * from './components/dialog';
|
|
26
30
|
export * from './components/divider';
|
|
27
31
|
export * from './components/drawer';
|
|
28
|
-
export * from './components/elastic-slider';
|
|
29
32
|
export * from './components/empty-state';
|
|
30
33
|
export * from './components/expandable-card';
|
|
31
34
|
export * from './components/expanding-search';
|
|
@@ -38,13 +41,19 @@ export * from './components/inline-edit';
|
|
|
38
41
|
export * from './components/hover-card';
|
|
39
42
|
export * from './components/json-viewer';
|
|
40
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';
|
|
41
48
|
export * from './components/mention-input';
|
|
42
49
|
export * from './components/menu';
|
|
43
50
|
export * from './components/metric-card';
|
|
44
51
|
export * from './components/multi-select';
|
|
45
52
|
export * from './components/navigation';
|
|
53
|
+
export * from './components/now-playing';
|
|
46
54
|
export * from './components/pagination';
|
|
47
55
|
export * from './components/password-field';
|
|
56
|
+
export * from './components/photo-grid';
|
|
48
57
|
export * from './components/pill';
|
|
49
58
|
export * from './components/popover';
|
|
50
59
|
export * from './components/progress';
|
|
@@ -55,6 +64,8 @@ export * from './components/scroll-area';
|
|
|
55
64
|
export * from './components/search-field';
|
|
56
65
|
export * from './components/segmented-control';
|
|
57
66
|
export * from './components/select';
|
|
67
|
+
export * from './components/sheet-stack';
|
|
68
|
+
export * from './components/shortcut-recorder';
|
|
58
69
|
export * from './components/signature-pad';
|
|
59
70
|
export * from './components/skeleton';
|
|
60
71
|
export * from './components/slider';
|
|
@@ -63,6 +74,7 @@ export * from './components/spinner';
|
|
|
63
74
|
export * from './components/split-button';
|
|
64
75
|
export * from './components/stack';
|
|
65
76
|
export * from './components/stepper';
|
|
77
|
+
export * from './components/stretch-refresh';
|
|
66
78
|
export * from './components/swipe-actions';
|
|
67
79
|
export * from './components/switch';
|
|
68
80
|
export * from './components/tabs';
|
|
@@ -80,6 +92,7 @@ export * from './components/toggle-group';
|
|
|
80
92
|
export * from './components/tooltip';
|
|
81
93
|
export * from './components/tree-view';
|
|
82
94
|
export * from './components/usage-meter';
|
|
95
|
+
export * from './components/user-menu';
|
|
83
96
|
export { styled } from './styling/styled';
|
|
84
97
|
export type { SxProps } from './styling/sx';
|
|
85
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
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entrance and exit of a modal surface (Drawer, BottomSheet): critically damped, so it never
|
|
3
|
+
* overshoots, and at rest once within a pixel and slow, so a retained exit releases the modal promptly.
|
|
4
|
+
*/
|
|
5
|
+
export declare const PRESENCE_SPRING: {
|
|
6
|
+
readonly type: 'spring';
|
|
7
|
+
readonly stiffness: 900;
|
|
8
|
+
readonly damping: 60;
|
|
9
|
+
readonly mass: 1;
|
|
10
|
+
readonly restDelta: 1;
|
|
11
|
+
readonly restSpeed: 30;
|
|
12
|
+
};
|
|
@@ -12,6 +12,14 @@ export interface NativeDialogHandlers {
|
|
|
12
12
|
onClick?: MouseEventHandler<HTMLDialogElement>;
|
|
13
13
|
onClose?: ReactEventHandler<HTMLDialogElement>;
|
|
14
14
|
}
|
|
15
|
+
/** Surface motion around the native lifecycle. */
|
|
16
|
+
export interface NativeDialogTransition {
|
|
17
|
+
/** Runs after showModal() succeeds, and when a reopen interrupts a running exit. */
|
|
18
|
+
enter: (dialog: HTMLDialogElement) => void;
|
|
19
|
+
/** Runs on a logical close; the native close waits for the promise. Return nothing to close at once. */
|
|
20
|
+
exit: (dialog: HTMLDialogElement) => Promise<unknown> | undefined;
|
|
21
|
+
}
|
|
22
|
+
export type NativeDialogState = 'open' | 'closing' | 'closed';
|
|
15
23
|
export declare function requestNativeDialogClose(dialog: HTMLDialogElement | null, setOpen: (open: boolean) => void): void;
|
|
16
24
|
/** Root half: logical open requests, the repair token and the registered dialog element. */
|
|
17
25
|
export declare function useNativeDialogRoot(open: boolean, requestOpenChange: (open: boolean) => void): {
|
|
@@ -31,9 +39,10 @@ export declare function omitNativeOpen<P extends object>(props: P & {
|
|
|
31
39
|
* Content half: syncs the native dialog to the logical `open`, and returns the `ref` and
|
|
32
40
|
* event handlers to spread on the <dialog> (after the consumer's props).
|
|
33
41
|
*/
|
|
34
|
-
export declare function useNativeDialog({ open, setOpen, requestClose, repairToken, setDialogElement }: NativeDialogController, { onCancel, onClick, onClose }: NativeDialogHandlers, forwardedRef: Ref<HTMLDialogElement> | undefined, contentRef?: MutableRefObject<HTMLDialogElement | null
|
|
42
|
+
export declare function useNativeDialog({ open, setOpen, requestClose, repairToken, setDialogElement }: NativeDialogController, { onCancel, onClick, onClose }: NativeDialogHandlers, forwardedRef: Ref<HTMLDialogElement> | undefined, contentRef?: MutableRefObject<HTMLDialogElement | null>, transition?: NativeDialogTransition): {
|
|
35
43
|
ref: (element: HTMLDialogElement | null) => void;
|
|
36
44
|
onCancel: (event: SyntheticEvent<HTMLDialogElement>) => void;
|
|
37
45
|
onClick: (event: MouseEvent<HTMLDialogElement>) => void;
|
|
38
46
|
onClose: (event: SyntheticEvent<HTMLDialogElement>) => void;
|
|
47
|
+
'data-state': NativeDialogState;
|
|
39
48
|
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CSSProperties } from 'react';
|
|
2
|
+
import { type JfraderTheme } from './theme';
|
|
3
|
+
import type { ThemeName } from './theme-scope';
|
|
4
|
+
type TokenOverrides<T> = {
|
|
5
|
+
readonly [K in keyof T]?: T[K] extends string ? string : TokenOverrides<T[K]>;
|
|
6
|
+
};
|
|
7
|
+
/** Sparse token overrides for a ThemeRoot scope, typed from the palette: any path, any depth. */
|
|
8
|
+
export type ThemeTokens = TokenOverrides<JfraderTheme>;
|
|
9
|
+
export interface CreateThemeOptions {
|
|
10
|
+
/** The named theme the scope wears; picks the dark or light accent derivation. */
|
|
11
|
+
base?: ThemeName;
|
|
12
|
+
/** Accent fill as `#rgb` or `#rrggbb`; the accent family is derived from it. */
|
|
13
|
+
accent?: string;
|
|
14
|
+
/** Explicit overrides; they win over the derived accent family. */
|
|
15
|
+
tokens?: ThemeTokens;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A ThemeRoot `tokens` map: the named theme's palette, then the accent family derived for `base`,
|
|
19
|
+
* then `tokens` (explicit wins per token path). Pass the same `base` as the ThemeRoot's `theme`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createTheme({ base, accent, tokens }?: CreateThemeOptions): ThemeTokens;
|
|
22
|
+
/** `tokens` as inline custom-property declarations, named after the generated `var()` references. */
|
|
23
|
+
export declare function themeTokenStyle(tokens: ThemeTokens): CSSProperties;
|
|
24
|
+
export {};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { ClassNames, css, keyframes, ThemeProvider as EmotionThemeProvider, useTheme as useEmotionTheme, } from '@emotion/react';
|
|
1
|
+
export { CacheProvider, ClassNames, css, keyframes, ThemeProvider as EmotionThemeProvider, useTheme as useEmotionTheme, } from '@emotion/react';
|
|
2
2
|
export type { ClassNamesContent, Interpolation, SerializedStyles, Theme } from '@emotion/react';
|
|
3
3
|
export type { JfraderTheme } from './theme';
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/** Scale a centered modal panel grows from. */
|
|
2
|
+
export declare const MODAL_ENTER_SCALE = 0.96;
|
|
3
|
+
/** A command palette comes in from a little further, for a quicker "summoned" feel. */
|
|
4
|
+
export declare const PALETTE_ENTER_SCALE = 0.92;
|
|
5
|
+
/** Timing of an entrance; exits are quicker. */
|
|
6
|
+
export declare const enterTransition: {
|
|
7
|
+
readonly transitionDuration: "var(--ui-motion-duration-base)";
|
|
8
|
+
readonly transitionTimingFunction: "var(--ui-motion-ease-standard)";
|
|
9
|
+
};
|
|
10
|
+
export declare const exitTransition: {
|
|
11
|
+
readonly transitionDuration: "var(--ui-motion-duration-fast)";
|
|
12
|
+
};
|
|
13
|
+
/** Panel inside a native <dialog> rendered with `styledDialogTransition`. */
|
|
14
|
+
export declare function modalPanelMotion(scale: number): {
|
|
15
|
+
readonly transitionDuration: "var(--ui-motion-duration-base)";
|
|
16
|
+
readonly transitionTimingFunction: "var(--ui-motion-ease-standard)";
|
|
17
|
+
readonly transitionProperty: 'opacity, scale, translate';
|
|
18
|
+
readonly '@starting-style': {
|
|
19
|
+
opacity: number;
|
|
20
|
+
scale: string;
|
|
21
|
+
translate: string;
|
|
22
|
+
};
|
|
23
|
+
readonly '[data-state="closing"] > &': {
|
|
24
|
+
readonly transitionDuration: "var(--ui-motion-duration-fast)";
|
|
25
|
+
readonly opacity: number;
|
|
26
|
+
readonly scale: string;
|
|
27
|
+
readonly translate: string;
|
|
28
|
+
};
|
|
29
|
+
readonly "@media (prefers-reduced-motion: reduce)": {
|
|
30
|
+
readonly '&, [data-state="closing"] > &': {
|
|
31
|
+
readonly transitionDuration: '0s';
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
/** The scrim of a native <dialog> fades with its panel. */
|
|
36
|
+
export declare const modalBackdropMotion: {
|
|
37
|
+
readonly '&::backdrop': {
|
|
38
|
+
readonly transitionDuration: "var(--ui-motion-duration-base)";
|
|
39
|
+
readonly transitionTimingFunction: "var(--ui-motion-ease-standard)";
|
|
40
|
+
readonly transitionProperty: 'opacity';
|
|
41
|
+
};
|
|
42
|
+
readonly '&[open]::backdrop': {
|
|
43
|
+
readonly '@starting-style': {
|
|
44
|
+
readonly opacity: 0;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
readonly '&[data-state="closing"]::backdrop': {
|
|
48
|
+
readonly transitionDuration: "var(--ui-motion-duration-fast)";
|
|
49
|
+
readonly opacity: 0;
|
|
50
|
+
};
|
|
51
|
+
readonly '&[data-state="closing"]': {
|
|
52
|
+
readonly pointerEvents: 'none';
|
|
53
|
+
};
|
|
54
|
+
readonly "@media (prefers-reduced-motion: reduce)": {
|
|
55
|
+
readonly '&::backdrop, &[data-state="closing"]::backdrop': {
|
|
56
|
+
readonly transitionDuration: '0s';
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Floating surface that slides a little from its anchor: set `data-side` to the resolved side and
|
|
62
|
+
* `data-state="closing"` on the surface while it exits (see `useExitPresence`).
|
|
63
|
+
*/
|
|
64
|
+
export declare const floatingSurfaceMotion: {
|
|
65
|
+
readonly transitionDuration: "var(--ui-motion-duration-base)";
|
|
66
|
+
readonly transitionTimingFunction: "var(--ui-motion-ease-standard)";
|
|
67
|
+
readonly transitionProperty: 'opacity, translate';
|
|
68
|
+
readonly '@starting-style': {
|
|
69
|
+
readonly opacity: 0;
|
|
70
|
+
readonly translate: 'var(--overlay-enter-x, 0) var(--overlay-enter-y, 0)';
|
|
71
|
+
};
|
|
72
|
+
readonly '&[data-state="closing"]': {
|
|
73
|
+
readonly transitionDuration: "var(--ui-motion-duration-fast)";
|
|
74
|
+
readonly opacity: 0;
|
|
75
|
+
readonly translate: 'var(--overlay-enter-x, 0) var(--overlay-enter-y, 0)';
|
|
76
|
+
readonly pointerEvents: 'none';
|
|
77
|
+
};
|
|
78
|
+
readonly '&[data-side="bottom"]': {
|
|
79
|
+
readonly '--overlay-enter-y': "calc(-1 * var(--ui-space-1))";
|
|
80
|
+
};
|
|
81
|
+
readonly '&[data-side="top"]': {
|
|
82
|
+
readonly '--overlay-enter-y': "var(--ui-space-1)";
|
|
83
|
+
};
|
|
84
|
+
readonly '&[data-side="left"]': {
|
|
85
|
+
readonly '--overlay-enter-x': "var(--ui-space-1)";
|
|
86
|
+
};
|
|
87
|
+
readonly '&[data-side="right"]': {
|
|
88
|
+
readonly '--overlay-enter-x': "calc(-1 * var(--ui-space-1))";
|
|
89
|
+
};
|
|
90
|
+
readonly "@media (prefers-reduced-motion: reduce)": {
|
|
91
|
+
readonly '&, &[data-state="closing"]': {
|
|
92
|
+
readonly transitionDuration: '0s';
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
};
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import type { ThemeName } from './theme-scope';
|
|
2
|
+
/** Surface appearance: `contrast` wears the dark theme plus the elevated-charcoal overrides. */
|
|
3
|
+
export type SurfaceAppearance = 'default' | 'contrast';
|
|
4
|
+
/** The theme a surface appearance wears; `default` keeps whatever theme is in scope. */
|
|
5
|
+
export declare function surfaceTheme(appearance: SurfaceAppearance): ThemeName | null;
|
|
6
|
+
/** Attributes a surface sets for its appearance: the theme it wears and the overrides that go with it. */
|
|
7
|
+
export declare function surfaceAttributes(appearance: SurfaceAppearance): Record<string, string> | null;
|
|
1
8
|
/** Raised panel: surface color, hairline border and the base text setup. */
|
|
2
9
|
export declare const raisedSurface: {
|
|
3
10
|
readonly boxSizing: 'border-box';
|
|
@@ -1,16 +1,42 @@
|
|
|
1
|
-
import { type ReactNode } from 'react';
|
|
1
|
+
import { type CSSProperties, type ReactNode } from 'react';
|
|
2
2
|
export type ThemeName = 'dark' | 'light';
|
|
3
|
+
/** Surface palette in scope: `contrast` adds the elevated-charcoal overrides on the dark theme. */
|
|
4
|
+
export type AppearanceName = 'default' | 'contrast';
|
|
3
5
|
export interface ThemeScope {
|
|
4
6
|
theme: ThemeName;
|
|
7
|
+
appearance: AppearanceName;
|
|
5
8
|
/** `undefined` keeps default portal routing; `null` holds portals until the host exists. */
|
|
6
9
|
portalContainer: HTMLElement | null | undefined;
|
|
10
|
+
/** The scope root's `tokens` as inline custom properties, re-declared wherever `theme` is. */
|
|
11
|
+
tokenStyle: CSSProperties | undefined;
|
|
7
12
|
}
|
|
8
13
|
export declare const ThemeScopeContext: import("react").Context<ThemeScope | null>;
|
|
9
|
-
/** The nearest ThemeRoot
|
|
14
|
+
/** The nearest theme scope (ThemeRoot or contrast surface), or `null` outside any. */
|
|
10
15
|
export declare function useThemeScope(): ThemeScope | null;
|
|
16
|
+
/**
|
|
17
|
+
* The enclosing scope's `tokens` for an element that re-declares `theme`: kept when it names the
|
|
18
|
+
* same theme, dropped for another (they were derived for the enclosing one) or for `null`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function carriedTokenStyle(parent: ThemeScope | null, theme: ThemeName | null): CSSProperties | undefined;
|
|
21
|
+
/** Inline `style` for a scope element: carried tokens first, the consumer's own `style` last. */
|
|
22
|
+
export declare function scopeStyle(tokenStyle: CSSProperties | undefined, style: CSSProperties | undefined): CSSProperties | undefined;
|
|
23
|
+
/** `style` for a surface that re-declares `theme` (`null`: it re-declares nothing) inside the scope. */
|
|
24
|
+
export declare function useSurfaceStyle(theme: ThemeName | null, style: CSSProperties | undefined): CSSProperties | undefined;
|
|
25
|
+
/** The appearance a surface wears: its own value, else the enclosing scope's, else the theme's own. */
|
|
26
|
+
export declare function useSurfaceAppearance(appearance?: AppearanceName): AppearanceName;
|
|
11
27
|
/** What a `data-theme` scope root sets besides the attribute: inherited text color and color-scheme. */
|
|
12
28
|
export declare const themeScopeStyle: import("@emotion/react").SerializedStyles;
|
|
13
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* Publishes a surface's theme and appearance to its subtree without taking over the enclosing
|
|
31
|
+
* `portalContainer`, so overlays opened inside a contrast surface keep its palette through their
|
|
32
|
+
* portal. `theme: null` keeps the enclosing theme; publishes only when the pair changes the scope.
|
|
33
|
+
*/
|
|
34
|
+
export declare function AppearanceScope({ theme, appearance, children, }: {
|
|
35
|
+
theme: ThemeName | null;
|
|
36
|
+
appearance: AppearanceName;
|
|
37
|
+
children?: ReactNode;
|
|
38
|
+
}): string | number | bigint | boolean | import("@emotion/react/jsx-runtime").JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | Iterable<ReactNode> | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | import("react").ReactPortal | null | undefined> | null | undefined;
|
|
39
|
+
/** Re-applies the nearest scope (theme, appearance and tokens) around portaled content. */
|
|
14
40
|
export declare function ThemeBoundary({ children }: {
|
|
15
41
|
children?: ReactNode;
|
|
16
42
|
}): string | number | bigint | boolean | import("@emotion/react/jsx-runtime").JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | Iterable<ReactNode> | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | import("react").ReactPortal | null | undefined> | null | undefined;
|