@womp/kookie-ui 0.3.25 → 0.4.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/AUTHORS +27 -0
- package/LICENSE +29 -0
- package/README.md +21 -1
- package/components.css +163 -118
- package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-button.js +1 -1
- package/dist/cjs/components/_internal/base-button.js.map +4 -4
- package/dist/cjs/components/_internal/dropdown-menu-drill-down.js +1 -1
- package/dist/cjs/components/_internal/dropdown-menu-drill-down.js.map +3 -3
- package/dist/cjs/components/_internal/shell-bottom.js +1 -1
- package/dist/cjs/components/_internal/shell-bottom.js.map +4 -4
- package/dist/cjs/components/_internal/shell-handles.d.ts.map +1 -1
- package/dist/cjs/components/_internal/shell-handles.js +1 -1
- package/dist/cjs/components/_internal/shell-handles.js.map +3 -3
- package/dist/cjs/components/_internal/shell-inspector.js +1 -1
- package/dist/cjs/components/_internal/shell-inspector.js.map +4 -4
- package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
- package/dist/cjs/components/_internal/shell-sidebar.js.map +4 -4
- package/dist/cjs/components/accordion.d.ts.map +1 -1
- package/dist/cjs/components/accordion.js +1 -1
- package/dist/cjs/components/accordion.js.map +4 -4
- package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
- package/dist/cjs/components/alert-dialog.js +1 -1
- package/dist/cjs/components/alert-dialog.js.map +4 -4
- package/dist/cjs/components/avatar.js +1 -1
- package/dist/cjs/components/avatar.js.map +4 -4
- package/dist/cjs/components/badge.d.ts.map +1 -1
- package/dist/cjs/components/badge.js +1 -1
- package/dist/cjs/components/badge.js.map +4 -4
- package/dist/cjs/components/blockquote.js +1 -1
- package/dist/cjs/components/blockquote.js.map +4 -4
- package/dist/cjs/components/box.js +1 -1
- package/dist/cjs/components/box.js.map +4 -4
- package/dist/cjs/components/button.js +1 -1
- package/dist/cjs/components/button.js.map +4 -4
- package/dist/cjs/components/callout.js +1 -1
- package/dist/cjs/components/callout.js.map +4 -4
- package/dist/cjs/components/card.js +1 -1
- package/dist/cjs/components/card.js.map +4 -4
- package/dist/cjs/components/chatbar.js +2 -2
- package/dist/cjs/components/chatbar.js.map +4 -4
- package/dist/cjs/components/checkbox-cards.js +1 -1
- package/dist/cjs/components/checkbox-cards.js.map +4 -4
- package/dist/cjs/components/checkbox-group.js +1 -1
- package/dist/cjs/components/checkbox-group.js.map +4 -4
- package/dist/cjs/components/checkbox.js +1 -1
- package/dist/cjs/components/checkbox.js.map +4 -4
- package/dist/cjs/components/code.js +1 -1
- package/dist/cjs/components/code.js.map +4 -4
- package/dist/cjs/components/combobox.js +1 -1
- package/dist/cjs/components/combobox.js.map +4 -4
- package/dist/cjs/components/container.js +1 -1
- package/dist/cjs/components/container.js.map +4 -4
- package/dist/cjs/components/context-menu.d.ts.map +1 -1
- package/dist/cjs/components/context-menu.js +1 -1
- package/dist/cjs/components/context-menu.js.map +4 -4
- package/dist/cjs/components/data-list.js +1 -1
- package/dist/cjs/components/data-list.js.map +4 -4
- package/dist/cjs/components/dialog.d.ts.map +1 -1
- package/dist/cjs/components/dialog.js +1 -1
- package/dist/cjs/components/dialog.js.map +4 -4
- package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
- package/dist/cjs/components/dropdown-menu.js +1 -1
- package/dist/cjs/components/dropdown-menu.js.map +4 -4
- package/dist/cjs/components/em.js +1 -1
- package/dist/cjs/components/em.js.map +4 -4
- package/dist/cjs/components/flex.js +1 -1
- package/dist/cjs/components/flex.js.map +4 -4
- package/dist/cjs/components/grid.js +1 -1
- package/dist/cjs/components/grid.js.map +4 -4
- package/dist/cjs/components/heading.js +1 -1
- package/dist/cjs/components/heading.js.map +4 -4
- package/dist/cjs/components/hover-card.js +1 -1
- package/dist/cjs/components/hover-card.js.map +4 -4
- package/dist/cjs/components/icon-button.js +2 -2
- package/dist/cjs/components/icon-button.js.map +4 -4
- package/dist/cjs/components/image.js +1 -1
- package/dist/cjs/components/image.js.map +4 -4
- package/dist/cjs/components/index.js +5 -5
- package/dist/cjs/components/index.js.map +4 -4
- package/dist/cjs/components/inset.js +1 -1
- package/dist/cjs/components/inset.js.map +4 -4
- package/dist/cjs/components/kbd.js +1 -1
- package/dist/cjs/components/kbd.js.map +4 -4
- package/dist/cjs/components/link.js +1 -1
- package/dist/cjs/components/link.js.map +4 -4
- package/dist/cjs/components/navbar.js +1 -1
- package/dist/cjs/components/navbar.js.map +4 -4
- package/dist/cjs/components/popover.js +1 -1
- package/dist/cjs/components/popover.js.map +4 -4
- package/dist/cjs/components/progress.js +1 -1
- package/dist/cjs/components/progress.js.map +4 -4
- package/dist/cjs/components/quote.js +1 -1
- package/dist/cjs/components/quote.js.map +4 -4
- package/dist/cjs/components/radio-cards.js +1 -1
- package/dist/cjs/components/radio-cards.js.map +4 -4
- package/dist/cjs/components/radio-group.js +1 -1
- package/dist/cjs/components/radio-group.js.map +4 -4
- package/dist/cjs/components/radio.js +1 -1
- package/dist/cjs/components/radio.js.map +4 -4
- package/dist/cjs/components/schemas/base-button.schema.d.ts +2 -2
- package/dist/cjs/components/schemas/button.schema.d.ts +2 -2
- package/dist/cjs/components/schemas/icon-button.schema.d.ts +4 -4
- package/dist/cjs/components/schemas/shell.schema.d.ts +2 -2
- package/dist/cjs/components/schemas/toggle-button.schema.d.ts +6 -6
- package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts +8 -8
- package/dist/cjs/components/scroll-area.js +1 -1
- package/dist/cjs/components/scroll-area.js.map +4 -4
- package/dist/cjs/components/section.js +1 -1
- package/dist/cjs/components/section.js.map +4 -4
- package/dist/cjs/components/segmented-control.js +1 -1
- package/dist/cjs/components/segmented-control.js.map +4 -4
- package/dist/cjs/components/select.js +1 -1
- package/dist/cjs/components/select.js.map +4 -4
- package/dist/cjs/components/separator.js +1 -1
- package/dist/cjs/components/separator.js.map +4 -4
- package/dist/cjs/components/sheet.d.ts.map +1 -1
- package/dist/cjs/components/sheet.js +1 -1
- package/dist/cjs/components/sheet.js.map +4 -4
- package/dist/cjs/components/shell.js +1 -1
- package/dist/cjs/components/shell.js.map +4 -4
- package/dist/cjs/components/sidebar.js +1 -1
- package/dist/cjs/components/sidebar.js.map +4 -4
- package/dist/cjs/components/skeleton.js +1 -1
- package/dist/cjs/components/skeleton.js.map +4 -4
- package/dist/cjs/components/slider.js +1 -1
- package/dist/cjs/components/slider.js.map +4 -4
- package/dist/cjs/components/spinner.js +1 -1
- package/dist/cjs/components/spinner.js.map +4 -4
- package/dist/cjs/components/strong.js +1 -1
- package/dist/cjs/components/strong.js.map +4 -4
- package/dist/cjs/components/switch.js +1 -1
- package/dist/cjs/components/switch.js.map +4 -4
- package/dist/cjs/components/tab-nav.js +1 -1
- package/dist/cjs/components/tab-nav.js.map +4 -4
- package/dist/cjs/components/table.js +1 -1
- package/dist/cjs/components/table.js.map +4 -4
- package/dist/cjs/components/tabs.js +1 -1
- package/dist/cjs/components/tabs.js.map +4 -4
- package/dist/cjs/components/text-area.js +1 -1
- package/dist/cjs/components/text-area.js.map +4 -4
- package/dist/cjs/components/text-field.js +2 -2
- package/dist/cjs/components/text-field.js.map +4 -4
- package/dist/cjs/components/text.js +1 -1
- package/dist/cjs/components/text.js.map +4 -4
- package/dist/cjs/components/theme-panel.js +3 -3
- package/dist/cjs/components/theme-panel.js.map +4 -4
- package/dist/cjs/components/theme.d.ts +3 -0
- package/dist/cjs/components/theme.d.ts.map +1 -1
- package/dist/cjs/components/theme.js +1 -1
- package/dist/cjs/components/theme.js.map +4 -4
- package/dist/cjs/components/theme.props.d.ts +15 -1
- package/dist/cjs/components/theme.props.d.ts.map +1 -1
- package/dist/cjs/components/theme.props.js +1 -1
- package/dist/cjs/components/theme.props.js.map +2 -2
- package/dist/cjs/components/toggle-button.js +2 -2
- package/dist/cjs/components/toggle-button.js.map +4 -4
- package/dist/cjs/components/toggle-icon-button.js +3 -3
- package/dist/cjs/components/toggle-icon-button.js.map +4 -4
- package/dist/cjs/components/toolbar.js +1 -1
- package/dist/cjs/components/toolbar.js.map +4 -4
- package/dist/cjs/components/tooltip.js +1 -1
- package/dist/cjs/components/tooltip.js.map +4 -4
- package/dist/cjs/components/user-card.js +1 -1
- package/dist/cjs/components/user-card.js.map +4 -4
- package/dist/cjs/helpers/compile-prop-defs.d.ts +49 -0
- package/dist/cjs/helpers/compile-prop-defs.d.ts.map +1 -0
- package/dist/cjs/helpers/compile-prop-defs.js +2 -0
- package/dist/cjs/helpers/compile-prop-defs.js.map +7 -0
- package/dist/cjs/helpers/extract-props.d.ts.map +1 -1
- package/dist/cjs/helpers/extract-props.js +1 -1
- package/dist/cjs/helpers/extract-props.js.map +4 -4
- package/dist/cjs/helpers/font-config.d.ts +84 -77
- package/dist/cjs/helpers/font-config.d.ts.map +1 -1
- package/dist/cjs/helpers/font-config.js +5 -2
- package/dist/cjs/helpers/font-config.js.map +3 -3
- package/dist/cjs/helpers/get-margin-styles.d.ts.map +1 -1
- package/dist/cjs/helpers/get-margin-styles.js +1 -1
- package/dist/cjs/helpers/get-margin-styles.js.map +3 -3
- package/dist/cjs/helpers/get-responsive-styles.d.ts +5 -2
- package/dist/cjs/helpers/get-responsive-styles.d.ts.map +1 -1
- package/dist/cjs/helpers/get-responsive-styles.js +1 -1
- package/dist/cjs/helpers/get-responsive-styles.js.map +3 -3
- package/dist/cjs/helpers/index.js +5 -2
- package/dist/cjs/helpers/index.js.map +4 -4
- package/dist/cjs/helpers/use-deprecation-warning.d.ts +10 -0
- package/dist/cjs/helpers/use-deprecation-warning.d.ts.map +1 -0
- package/dist/cjs/helpers/use-deprecation-warning.js +2 -0
- package/dist/cjs/helpers/use-deprecation-warning.js.map +7 -0
- package/dist/cjs/hooks/index.js +2 -2
- package/dist/cjs/hooks/index.js.map +3 -3
- package/dist/cjs/hooks/use-body-pointer-events-cleanup.d.ts.map +1 -1
- package/dist/cjs/hooks/use-body-pointer-events-cleanup.js +1 -1
- package/dist/cjs/hooks/use-body-pointer-events-cleanup.js.map +3 -3
- package/dist/cjs/hooks/use-breakpoint.d.ts +7 -3
- package/dist/cjs/hooks/use-breakpoint.d.ts.map +1 -1
- package/dist/cjs/hooks/use-breakpoint.js +1 -1
- package/dist/cjs/hooks/use-breakpoint.js.map +3 -3
- package/dist/cjs/hooks/use-prop-synced-state.d.ts +14 -0
- package/dist/cjs/hooks/use-prop-synced-state.d.ts.map +1 -0
- package/dist/cjs/hooks/use-prop-synced-state.js +2 -0
- package/dist/cjs/hooks/use-prop-synced-state.js.map +7 -0
- package/dist/cjs/index.js +5 -5
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/props/index.js +1 -1
- package/dist/cjs/props/index.js.map +2 -2
- package/dist/esm/{chunk-WYA4IRU6.js → chunk-25WZA7ZU.js} +2 -2
- package/dist/esm/{chunk-ARGX2ZZK.js → chunk-2FYJTSOP.js} +2 -2
- package/dist/esm/chunk-2UPAYDKR.js +2 -0
- package/dist/esm/chunk-2UPAYDKR.js.map +7 -0
- package/dist/esm/chunk-374ZYJUP.js +2 -0
- package/dist/esm/chunk-374ZYJUP.js.map +7 -0
- package/dist/esm/{chunk-K3R4AH3E.js → chunk-3MWWP4MW.js} +2 -2
- package/dist/esm/{chunk-HQ35PM4O.js → chunk-43A5GUSI.js} +2 -2
- package/dist/esm/{chunk-Z5DQ6FSA.js → chunk-4AQTUBVP.js} +2 -2
- package/dist/esm/{chunk-QLIELX4I.js → chunk-4ME6O27S.js} +2 -2
- package/dist/esm/chunk-4XJY6FIK.js +2 -0
- package/dist/esm/chunk-4XJY6FIK.js.map +7 -0
- package/dist/esm/{chunk-JQOFJNCV.js → chunk-4YFJWXL2.js} +2 -2
- package/dist/esm/chunk-5TXQLK4G.js +2 -0
- package/dist/esm/chunk-5TXQLK4G.js.map +7 -0
- package/dist/esm/{chunk-IPJUHVM6.js → chunk-666GX7O5.js} +2 -2
- package/dist/esm/chunk-6FLLFCBU.js +2 -0
- package/dist/esm/chunk-6FLLFCBU.js.map +7 -0
- package/dist/esm/{chunk-7CBAHIVG.js → chunk-6IGTK4JE.js} +2 -2
- package/dist/esm/chunk-6XGZPIUT.js +2 -0
- package/dist/esm/{chunk-T27QHMW7.js.map → chunk-6XGZPIUT.js.map} +2 -2
- package/dist/esm/{chunk-DJBPM5QK.js → chunk-7FC7HF76.js} +2 -2
- package/dist/esm/{chunk-SVLY6B5F.js → chunk-7QDTSBJF.js} +2 -2
- package/dist/esm/{chunk-7MURQ6CR.js → chunk-A2RZGGMY.js} +2 -2
- package/dist/esm/{chunk-VF5TRT3H.js → chunk-AU3D6F42.js} +2 -2
- package/dist/esm/chunk-AX5S56DS.js +2 -0
- package/dist/esm/chunk-AX5S56DS.js.map +7 -0
- package/dist/esm/{chunk-DK5MHD6I.js → chunk-B24BDVG2.js} +2 -2
- package/dist/esm/{chunk-BJTJUIYJ.js → chunk-CRWYCLTE.js} +2 -2
- package/dist/esm/{chunk-OHJVFZMH.js → chunk-CSKZZOI2.js} +2 -2
- package/dist/esm/{chunk-4N5JU7XQ.js → chunk-CVWCKOHO.js} +2 -2
- package/dist/esm/chunk-CWRNW44F.js +2 -0
- package/dist/esm/chunk-CWRNW44F.js.map +7 -0
- package/dist/esm/{chunk-ADYTQCZX.js → chunk-D6B7IMZU.js} +2 -2
- package/dist/esm/{chunk-U7AASKZI.js → chunk-DNHUQLXO.js} +2 -2
- package/dist/esm/{chunk-USGTBZ43.js → chunk-E67CIG6A.js} +2 -2
- package/dist/esm/{chunk-YUZPSUJE.js → chunk-F7IYL2VW.js} +2 -2
- package/dist/esm/{chunk-FVCWNSRU.js → chunk-FHOCUZDR.js} +2 -2
- package/dist/esm/{chunk-APRBRAOT.js → chunk-FXUUI6Z2.js} +2 -2
- package/dist/esm/{chunk-WNSPLWRV.js → chunk-GJSGKE7B.js} +2 -2
- package/dist/esm/{chunk-OGOOZLUD.js → chunk-GLERJXVS.js} +2 -2
- package/dist/esm/{chunk-6VGPTAHM.js → chunk-GWXVETMF.js} +2 -2
- package/dist/esm/{chunk-ES7MK2MM.js → chunk-GYBLXQ4R.js} +2 -2
- package/dist/esm/{chunk-4OBMRJHC.js → chunk-H7ST535H.js} +2 -2
- package/dist/esm/{chunk-QLZ5XAW6.js → chunk-HF5WY5YE.js} +2 -2
- package/dist/esm/{chunk-RDP4UQ42.js → chunk-IEWCQU2S.js} +2 -2
- package/dist/esm/{chunk-XLOHPURR.js → chunk-IHK3H2OM.js} +2 -2
- package/dist/esm/{chunk-EJWAAFCI.js → chunk-IKSN4RNB.js} +2 -2
- package/dist/esm/{chunk-3F6I7YOR.js → chunk-JDGJSNWT.js} +2 -2
- package/dist/esm/chunk-JUY7CBSL.js +2 -0
- package/dist/esm/chunk-JUY7CBSL.js.map +7 -0
- package/dist/esm/{chunk-ZSEFZM5H.js → chunk-K6QZMNCD.js} +2 -2
- package/dist/esm/chunk-KKBP2CRH.js +2 -0
- package/dist/esm/chunk-KKBP2CRH.js.map +7 -0
- package/dist/esm/{chunk-ZHYOJNWV.js → chunk-LKAK5GXF.js} +2 -2
- package/dist/esm/{chunk-GWYFT3EI.js → chunk-M24UXMOQ.js} +2 -2
- package/dist/esm/{chunk-JCYI4NTV.js → chunk-MBCBP73P.js} +2 -2
- package/dist/esm/{chunk-UYNYUR7O.js → chunk-MBE2YSBU.js} +2 -2
- package/dist/esm/chunk-MHANZINI.js +2 -0
- package/dist/esm/chunk-MHANZINI.js.map +7 -0
- package/dist/esm/chunk-MK2R6DAU.js +2 -0
- package/dist/esm/chunk-MK2R6DAU.js.map +7 -0
- package/dist/esm/{chunk-DNI4QRXQ.js → chunk-MOR3NSXQ.js} +2 -2
- package/dist/esm/{chunk-H2G446JG.js → chunk-NMKPFUNP.js} +2 -2
- package/dist/esm/{chunk-TEULZKBM.js → chunk-OGXZHAQL.js} +2 -2
- package/dist/esm/{chunk-M3ZYJANH.js → chunk-OSRJRBKP.js} +2 -2
- package/dist/esm/{chunk-2AEELIG6.js → chunk-OWAUCLRT.js} +2 -2
- package/dist/esm/{chunk-7CXVHFMQ.js → chunk-P7HYVJSU.js} +2 -2
- package/dist/esm/{chunk-4532RT2B.js → chunk-P7IAHW4V.js} +2 -2
- package/dist/esm/{chunk-GLC4QJBF.js → chunk-PLWXTEVE.js} +2 -2
- package/dist/esm/{chunk-SGU4HUHF.js → chunk-PTLFMWCN.js} +2 -2
- package/dist/esm/{chunk-QOWA5LK5.js → chunk-QEOAXJLN.js} +2 -2
- package/dist/esm/{chunk-XHQGMOXV.js → chunk-RMKXWYOV.js} +2 -2
- package/dist/esm/chunk-S2HA3W3V.js +2 -0
- package/dist/esm/chunk-S2HA3W3V.js.map +7 -0
- package/dist/esm/{chunk-WZCZHCVE.js → chunk-S56YSRHP.js} +2 -2
- package/dist/esm/{chunk-E6IWYD3U.js → chunk-S5C5YRBS.js} +2 -2
- package/dist/esm/{chunk-A24PYRVV.js → chunk-SO67YEVQ.js} +2 -2
- package/dist/esm/chunk-TLWTUKKL.js +2 -0
- package/dist/esm/chunk-TLWTUKKL.js.map +7 -0
- package/dist/esm/{chunk-RQ2ZPMHJ.js → chunk-TOLLPRMM.js} +2 -2
- package/dist/esm/{chunk-HACQF6F4.js → chunk-TOOSHJOA.js} +2 -2
- package/dist/esm/{chunk-42HFGCHX.js → chunk-UGD7Z3L4.js} +2 -2
- package/dist/esm/chunk-VA5A4MHU.js +6 -0
- package/dist/esm/chunk-VA5A4MHU.js.map +7 -0
- package/dist/esm/{chunk-DXI5P5O4.js → chunk-VX6ARMWP.js} +2 -2
- package/dist/esm/{chunk-25U7DENY.js → chunk-W7N7V5YD.js} +2 -2
- package/dist/esm/chunk-WAURCNAS.js +2 -0
- package/dist/esm/chunk-WAURCNAS.js.map +7 -0
- package/dist/esm/chunk-WFMYNZXZ.js +2 -0
- package/dist/esm/chunk-WFMYNZXZ.js.map +7 -0
- package/dist/esm/{chunk-6FAICIYS.js → chunk-XMRIRFM7.js} +2 -2
- package/dist/esm/chunk-YEB3H7QN.js +2 -0
- package/dist/esm/chunk-YEB3H7QN.js.map +7 -0
- package/dist/esm/chunk-YUP6EICB.js +2 -0
- package/dist/esm/chunk-YUP6EICB.js.map +7 -0
- package/dist/esm/chunk-YV2KYHGR.js +2 -0
- package/dist/esm/chunk-YV2KYHGR.js.map +7 -0
- package/dist/esm/{chunk-UIEUZLZZ.js → chunk-ZY6SQWHT.js} +2 -2
- package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-button.js +1 -1
- package/dist/esm/components/_internal/dropdown-menu-drill-down.js +1 -1
- package/dist/esm/components/_internal/shell-bottom.js +1 -1
- package/dist/esm/components/_internal/shell-handles.d.ts.map +1 -1
- package/dist/esm/components/_internal/shell-handles.js +1 -1
- package/dist/esm/components/_internal/shell-inspector.js +1 -1
- package/dist/esm/components/_internal/shell-sidebar.js +1 -1
- package/dist/esm/components/accordion.d.ts.map +1 -1
- package/dist/esm/components/accordion.js +1 -1
- package/dist/esm/components/alert-dialog.d.ts.map +1 -1
- package/dist/esm/components/alert-dialog.js +1 -1
- package/dist/esm/components/avatar.js +1 -1
- package/dist/esm/components/badge.d.ts.map +1 -1
- package/dist/esm/components/badge.js +1 -1
- package/dist/esm/components/blockquote.js +1 -1
- package/dist/esm/components/box.js +1 -1
- package/dist/esm/components/button.js +1 -1
- package/dist/esm/components/callout.js +1 -1
- package/dist/esm/components/card.js +1 -1
- package/dist/esm/components/chatbar.js +1 -1
- package/dist/esm/components/checkbox-cards.js +1 -1
- package/dist/esm/components/checkbox-group.js +1 -1
- package/dist/esm/components/checkbox.js +1 -1
- package/dist/esm/components/code.js +1 -1
- package/dist/esm/components/combobox.js +1 -1
- package/dist/esm/components/container.js +1 -1
- package/dist/esm/components/context-menu.d.ts.map +1 -1
- package/dist/esm/components/context-menu.js +1 -1
- package/dist/esm/components/data-list.js +1 -1
- package/dist/esm/components/dialog.d.ts.map +1 -1
- package/dist/esm/components/dialog.js +1 -1
- package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
- package/dist/esm/components/dropdown-menu.js +1 -1
- package/dist/esm/components/em.js +1 -1
- package/dist/esm/components/flex.js +1 -1
- package/dist/esm/components/grid.js +1 -1
- package/dist/esm/components/heading.js +1 -1
- package/dist/esm/components/hover-card.js +1 -1
- package/dist/esm/components/icon-button.js +1 -1
- package/dist/esm/components/image.js +1 -1
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/inset.js +1 -1
- package/dist/esm/components/kbd.js +1 -1
- package/dist/esm/components/link.js +1 -1
- package/dist/esm/components/navbar.js +1 -1
- package/dist/esm/components/popover.js +1 -1
- package/dist/esm/components/progress.js +1 -1
- package/dist/esm/components/quote.js +1 -1
- package/dist/esm/components/radio-cards.js +1 -1
- package/dist/esm/components/radio-group.js +1 -1
- package/dist/esm/components/radio.js +1 -1
- package/dist/esm/components/schemas/base-button.schema.d.ts +2 -2
- package/dist/esm/components/schemas/button.schema.d.ts +2 -2
- package/dist/esm/components/schemas/icon-button.schema.d.ts +4 -4
- package/dist/esm/components/schemas/shell.schema.d.ts +2 -2
- package/dist/esm/components/schemas/toggle-button.schema.d.ts +6 -6
- package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts +8 -8
- package/dist/esm/components/scroll-area.js +1 -1
- package/dist/esm/components/section.js +1 -1
- package/dist/esm/components/segmented-control.js +1 -1
- package/dist/esm/components/select.js +1 -1
- package/dist/esm/components/separator.js +1 -1
- package/dist/esm/components/sheet.d.ts.map +1 -1
- package/dist/esm/components/sheet.js +1 -1
- package/dist/esm/components/shell.js +1 -1
- package/dist/esm/components/sidebar.js +1 -1
- package/dist/esm/components/skeleton.js +1 -1
- package/dist/esm/components/slider.js +1 -1
- package/dist/esm/components/spinner.js +1 -1
- package/dist/esm/components/strong.js +1 -1
- package/dist/esm/components/switch.js +1 -1
- package/dist/esm/components/tab-nav.js +1 -1
- package/dist/esm/components/table.js +1 -1
- package/dist/esm/components/tabs.js +1 -1
- package/dist/esm/components/text-area.js +1 -1
- package/dist/esm/components/text-field.js +1 -1
- package/dist/esm/components/text.js +1 -1
- package/dist/esm/components/theme-panel.js +1 -1
- package/dist/esm/components/theme.d.ts +3 -0
- package/dist/esm/components/theme.d.ts.map +1 -1
- package/dist/esm/components/theme.js +1 -1
- package/dist/esm/components/theme.props.d.ts +15 -1
- package/dist/esm/components/theme.props.d.ts.map +1 -1
- package/dist/esm/components/theme.props.js +1 -1
- package/dist/esm/components/toggle-button.js +1 -1
- package/dist/esm/components/toggle-icon-button.js +1 -1
- package/dist/esm/components/toolbar.js +1 -1
- package/dist/esm/components/tooltip.js +1 -1
- package/dist/esm/components/user-card.js +1 -1
- package/dist/esm/helpers/compile-prop-defs.d.ts +49 -0
- package/dist/esm/helpers/compile-prop-defs.d.ts.map +1 -0
- package/dist/esm/helpers/compile-prop-defs.js +2 -0
- package/dist/esm/helpers/compile-prop-defs.js.map +7 -0
- package/dist/esm/helpers/extract-props.d.ts.map +1 -1
- package/dist/esm/helpers/extract-props.js +1 -1
- package/dist/esm/helpers/font-config.d.ts +84 -77
- package/dist/esm/helpers/font-config.d.ts.map +1 -1
- package/dist/esm/helpers/font-config.js +1 -1
- package/dist/esm/helpers/get-margin-styles.d.ts.map +1 -1
- package/dist/esm/helpers/get-margin-styles.js +1 -1
- package/dist/esm/helpers/get-responsive-styles.d.ts +5 -2
- package/dist/esm/helpers/get-responsive-styles.d.ts.map +1 -1
- package/dist/esm/helpers/get-responsive-styles.js +1 -1
- package/dist/esm/helpers/index.js +1 -1
- package/dist/esm/helpers/use-deprecation-warning.d.ts +10 -0
- package/dist/esm/helpers/use-deprecation-warning.d.ts.map +1 -0
- package/dist/esm/helpers/use-deprecation-warning.js +2 -0
- package/dist/esm/helpers/use-deprecation-warning.js.map +7 -0
- package/dist/esm/hooks/index.js +1 -1
- package/dist/esm/hooks/use-body-pointer-events-cleanup.d.ts.map +1 -1
- package/dist/esm/hooks/use-body-pointer-events-cleanup.js +1 -1
- package/dist/esm/hooks/use-breakpoint.d.ts +7 -3
- package/dist/esm/hooks/use-breakpoint.d.ts.map +1 -1
- package/dist/esm/hooks/use-breakpoint.js +1 -1
- package/dist/esm/hooks/use-prop-synced-state.d.ts +14 -0
- package/dist/esm/hooks/use-prop-synced-state.d.ts.map +1 -0
- package/dist/esm/hooks/use-prop-synced-state.js +2 -0
- package/dist/esm/hooks/use-prop-synced-state.js.map +7 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/props/index.js +1 -1
- package/fonts.css +8 -0
- package/package.json +18 -7
- package/schemas/base-button.json +0 -1
- package/schemas/button.json +0 -1
- package/schemas/icon-button.json +0 -1
- package/schemas/index.json +0 -6
- package/schemas/toggle-button.json +0 -1
- package/schemas/toggle-icon-button.json +0 -1
- package/src/components/_internal/base-button.css +2 -2
- package/src/components/_internal/base-button.tsx +3 -58
- package/src/components/_internal/base-card.css +19 -4
- package/src/components/_internal/base-checkbox.css +2 -2
- package/src/components/_internal/base-dialog.css +7 -0
- package/src/components/_internal/base-menu.css +7 -0
- package/src/components/_internal/base-radio.css +2 -2
- package/src/components/_internal/base-sidebar.css +7 -0
- package/src/components/_internal/base-tab-list.css +2 -2
- package/src/components/_internal/shell-handles.tsx +27 -0
- package/src/components/accordion.css +6 -6
- package/src/components/accordion.tsx +2 -8
- package/src/components/alert-dialog.tsx +22 -20
- package/src/components/avatar.css +2 -2
- package/src/components/badge.css +2 -2
- package/src/components/badge.tsx +2 -8
- package/src/components/callout.css +2 -2
- package/src/components/chatbar.css +1 -1
- package/src/components/context-menu.tsx +2 -8
- package/src/components/dialog.tsx +22 -20
- package/src/components/dropdown-menu.tsx +2 -8
- package/src/components/heading.css +10 -3
- package/src/components/popover.css +7 -0
- package/src/components/progress.css +21 -8
- package/src/components/segmented-control.css +2 -2
- package/src/components/select.css +9 -2
- package/src/components/sheet.tsx +31 -28
- package/src/components/shell.css +106 -69
- package/src/components/slider.css +2 -2
- package/src/components/switch.css +2 -2
- package/src/components/table.css +7 -0
- package/src/components/text-area.css +2 -2
- package/src/components/text-field.css +2 -2
- package/src/components/text.css +10 -3
- package/src/components/theme.props.tsx +13 -1
- package/src/components/theme.tsx +53 -34
- package/src/helpers/compile-prop-defs.ts +121 -0
- package/src/helpers/extract-props.ts +104 -83
- package/src/helpers/font-config.ts +130 -148
- package/src/helpers/get-margin-styles.ts +38 -71
- package/src/helpers/get-responsive-styles.ts +37 -38
- package/src/helpers/use-deprecation-warning.ts +26 -0
- package/src/hooks/use-body-pointer-events-cleanup.ts +36 -6
- package/src/hooks/use-breakpoint.ts +94 -53
- package/src/hooks/use-prop-synced-state.ts +24 -0
- package/src/styles/fonts.css +24 -29
- package/src/styles/index.css +0 -1
- package/src/styles/tokens/base.css +1 -0
- package/src/styles/tokens/blur.css +28 -0
- package/src/styles/tokens/color.css +3 -3
- package/src/styles/tokens/constants.css +11 -0
- package/src/styles/tokens/font-family.css +263 -0
- package/src/styles/tokens/typography.css +2 -216
- package/styles.css +8776 -8727
- package/tokens/base.css +50 -30
- package/tokens.css +53 -30
- package/dist/esm/chunk-2SS3FA3N.js +0 -2
- package/dist/esm/chunk-2SS3FA3N.js.map +0 -7
- package/dist/esm/chunk-5U2Q23K3.js +0 -2
- package/dist/esm/chunk-5U2Q23K3.js.map +0 -7
- package/dist/esm/chunk-6ELPYR73.js +0 -2
- package/dist/esm/chunk-6ELPYR73.js.map +0 -7
- package/dist/esm/chunk-DZ4H2KTP.js +0 -2
- package/dist/esm/chunk-DZ4H2KTP.js.map +0 -7
- package/dist/esm/chunk-H4MMVAGQ.js +0 -2
- package/dist/esm/chunk-H4MMVAGQ.js.map +0 -7
- package/dist/esm/chunk-ITRVKLYU.js +0 -2
- package/dist/esm/chunk-ITRVKLYU.js.map +0 -7
- package/dist/esm/chunk-KCAFSCOV.js +0 -2
- package/dist/esm/chunk-KCAFSCOV.js.map +0 -7
- package/dist/esm/chunk-KMPBTEZH.js +0 -2
- package/dist/esm/chunk-KMPBTEZH.js.map +0 -7
- package/dist/esm/chunk-LN5SP46K.js +0 -2
- package/dist/esm/chunk-LN5SP46K.js.map +0 -7
- package/dist/esm/chunk-OKJNS7Z7.js +0 -2
- package/dist/esm/chunk-OKJNS7Z7.js.map +0 -7
- package/dist/esm/chunk-Q73Y5O5P.js +0 -2
- package/dist/esm/chunk-Q73Y5O5P.js.map +0 -7
- package/dist/esm/chunk-Q7P6BTVU.js +0 -3
- package/dist/esm/chunk-Q7P6BTVU.js.map +0 -7
- package/dist/esm/chunk-T27QHMW7.js +0 -2
- package/dist/esm/chunk-UUX42HBM.js +0 -2
- package/dist/esm/chunk-UUX42HBM.js.map +0 -7
- package/dist/esm/chunk-X7BD5FLE.js +0 -2
- package/dist/esm/chunk-X7BD5FLE.js.map +0 -7
- package/dist/esm/chunk-YEA646GM.js +0 -2
- package/dist/esm/chunk-YEA646GM.js.map +0 -7
- package/dist/esm/chunk-ZMEXIPWM.js +0 -2
- package/dist/esm/chunk-ZMEXIPWM.js.map +0 -7
- /package/dist/esm/{chunk-WYA4IRU6.js.map → chunk-25WZA7ZU.js.map} +0 -0
- /package/dist/esm/{chunk-ARGX2ZZK.js.map → chunk-2FYJTSOP.js.map} +0 -0
- /package/dist/esm/{chunk-K3R4AH3E.js.map → chunk-3MWWP4MW.js.map} +0 -0
- /package/dist/esm/{chunk-HQ35PM4O.js.map → chunk-43A5GUSI.js.map} +0 -0
- /package/dist/esm/{chunk-Z5DQ6FSA.js.map → chunk-4AQTUBVP.js.map} +0 -0
- /package/dist/esm/{chunk-QLIELX4I.js.map → chunk-4ME6O27S.js.map} +0 -0
- /package/dist/esm/{chunk-JQOFJNCV.js.map → chunk-4YFJWXL2.js.map} +0 -0
- /package/dist/esm/{chunk-IPJUHVM6.js.map → chunk-666GX7O5.js.map} +0 -0
- /package/dist/esm/{chunk-7CBAHIVG.js.map → chunk-6IGTK4JE.js.map} +0 -0
- /package/dist/esm/{chunk-DJBPM5QK.js.map → chunk-7FC7HF76.js.map} +0 -0
- /package/dist/esm/{chunk-SVLY6B5F.js.map → chunk-7QDTSBJF.js.map} +0 -0
- /package/dist/esm/{chunk-7MURQ6CR.js.map → chunk-A2RZGGMY.js.map} +0 -0
- /package/dist/esm/{chunk-VF5TRT3H.js.map → chunk-AU3D6F42.js.map} +0 -0
- /package/dist/esm/{chunk-DK5MHD6I.js.map → chunk-B24BDVG2.js.map} +0 -0
- /package/dist/esm/{chunk-BJTJUIYJ.js.map → chunk-CRWYCLTE.js.map} +0 -0
- /package/dist/esm/{chunk-OHJVFZMH.js.map → chunk-CSKZZOI2.js.map} +0 -0
- /package/dist/esm/{chunk-4N5JU7XQ.js.map → chunk-CVWCKOHO.js.map} +0 -0
- /package/dist/esm/{chunk-ADYTQCZX.js.map → chunk-D6B7IMZU.js.map} +0 -0
- /package/dist/esm/{chunk-U7AASKZI.js.map → chunk-DNHUQLXO.js.map} +0 -0
- /package/dist/esm/{chunk-USGTBZ43.js.map → chunk-E67CIG6A.js.map} +0 -0
- /package/dist/esm/{chunk-YUZPSUJE.js.map → chunk-F7IYL2VW.js.map} +0 -0
- /package/dist/esm/{chunk-FVCWNSRU.js.map → chunk-FHOCUZDR.js.map} +0 -0
- /package/dist/esm/{chunk-APRBRAOT.js.map → chunk-FXUUI6Z2.js.map} +0 -0
- /package/dist/esm/{chunk-WNSPLWRV.js.map → chunk-GJSGKE7B.js.map} +0 -0
- /package/dist/esm/{chunk-OGOOZLUD.js.map → chunk-GLERJXVS.js.map} +0 -0
- /package/dist/esm/{chunk-6VGPTAHM.js.map → chunk-GWXVETMF.js.map} +0 -0
- /package/dist/esm/{chunk-ES7MK2MM.js.map → chunk-GYBLXQ4R.js.map} +0 -0
- /package/dist/esm/{chunk-4OBMRJHC.js.map → chunk-H7ST535H.js.map} +0 -0
- /package/dist/esm/{chunk-QLZ5XAW6.js.map → chunk-HF5WY5YE.js.map} +0 -0
- /package/dist/esm/{chunk-RDP4UQ42.js.map → chunk-IEWCQU2S.js.map} +0 -0
- /package/dist/esm/{chunk-XLOHPURR.js.map → chunk-IHK3H2OM.js.map} +0 -0
- /package/dist/esm/{chunk-EJWAAFCI.js.map → chunk-IKSN4RNB.js.map} +0 -0
- /package/dist/esm/{chunk-3F6I7YOR.js.map → chunk-JDGJSNWT.js.map} +0 -0
- /package/dist/esm/{chunk-ZSEFZM5H.js.map → chunk-K6QZMNCD.js.map} +0 -0
- /package/dist/esm/{chunk-ZHYOJNWV.js.map → chunk-LKAK5GXF.js.map} +0 -0
- /package/dist/esm/{chunk-GWYFT3EI.js.map → chunk-M24UXMOQ.js.map} +0 -0
- /package/dist/esm/{chunk-JCYI4NTV.js.map → chunk-MBCBP73P.js.map} +0 -0
- /package/dist/esm/{chunk-UYNYUR7O.js.map → chunk-MBE2YSBU.js.map} +0 -0
- /package/dist/esm/{chunk-DNI4QRXQ.js.map → chunk-MOR3NSXQ.js.map} +0 -0
- /package/dist/esm/{chunk-H2G446JG.js.map → chunk-NMKPFUNP.js.map} +0 -0
- /package/dist/esm/{chunk-TEULZKBM.js.map → chunk-OGXZHAQL.js.map} +0 -0
- /package/dist/esm/{chunk-M3ZYJANH.js.map → chunk-OSRJRBKP.js.map} +0 -0
- /package/dist/esm/{chunk-2AEELIG6.js.map → chunk-OWAUCLRT.js.map} +0 -0
- /package/dist/esm/{chunk-7CXVHFMQ.js.map → chunk-P7HYVJSU.js.map} +0 -0
- /package/dist/esm/{chunk-4532RT2B.js.map → chunk-P7IAHW4V.js.map} +0 -0
- /package/dist/esm/{chunk-GLC4QJBF.js.map → chunk-PLWXTEVE.js.map} +0 -0
- /package/dist/esm/{chunk-SGU4HUHF.js.map → chunk-PTLFMWCN.js.map} +0 -0
- /package/dist/esm/{chunk-QOWA5LK5.js.map → chunk-QEOAXJLN.js.map} +0 -0
- /package/dist/esm/{chunk-XHQGMOXV.js.map → chunk-RMKXWYOV.js.map} +0 -0
- /package/dist/esm/{chunk-WZCZHCVE.js.map → chunk-S56YSRHP.js.map} +0 -0
- /package/dist/esm/{chunk-E6IWYD3U.js.map → chunk-S5C5YRBS.js.map} +0 -0
- /package/dist/esm/{chunk-A24PYRVV.js.map → chunk-SO67YEVQ.js.map} +0 -0
- /package/dist/esm/{chunk-RQ2ZPMHJ.js.map → chunk-TOLLPRMM.js.map} +0 -0
- /package/dist/esm/{chunk-HACQF6F4.js.map → chunk-TOOSHJOA.js.map} +0 -0
- /package/dist/esm/{chunk-42HFGCHX.js.map → chunk-UGD7Z3L4.js.map} +0 -0
- /package/dist/esm/{chunk-DXI5P5O4.js.map → chunk-VX6ARMWP.js.map} +0 -0
- /package/dist/esm/{chunk-25U7DENY.js.map → chunk-W7N7V5YD.js.map} +0 -0
- /package/dist/esm/{chunk-6FAICIYS.js.map → chunk-XMRIRFM7.js.map} +0 -0
- /package/dist/esm/{chunk-UIEUZLZZ.js.map → chunk-ZY6SQWHT.js.map} +0 -0
package/src/components/theme.tsx
CHANGED
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import classNames from 'classnames';
|
|
5
5
|
import { Direction, Slot, Tooltip as TooltipPrimitive } from 'radix-ui';
|
|
6
|
+
import { useComposedRefs, useLayoutEffect } from 'radix-ui/internal';
|
|
6
7
|
|
|
7
8
|
import { getMatchingGrayColor } from '../helpers/get-matching-gray-color.js';
|
|
9
|
+
import { usePropSyncedState } from '../hooks/use-prop-synced-state.js';
|
|
10
|
+
import { useDeprecatedPanelBackgroundWarning } from '../helpers/use-deprecation-warning.js';
|
|
8
11
|
import { themePropDefs } from './theme.props.js';
|
|
9
12
|
|
|
10
13
|
import type { ThemeOwnProps } from './theme.props.js';
|
|
@@ -20,6 +23,9 @@ type ThemePanelBackground = (typeof themePropDefs.panelBackground.values)[number
|
|
|
20
23
|
type ThemeRadius = (typeof themePropDefs.radius.values)[number];
|
|
21
24
|
type ThemeScaling = (typeof themePropDefs.scaling.values)[number];
|
|
22
25
|
type ThemeFontFamily = (typeof themePropDefs.fontFamily.values)[number];
|
|
26
|
+
// Headings follow the body font until something sets this, so `undefined` is a
|
|
27
|
+
// meaningful value here rather than a missing one.
|
|
28
|
+
type ThemeHeadingFontFamily = ThemeFontFamily | undefined;
|
|
23
29
|
|
|
24
30
|
interface ThemeChangeHandlers {
|
|
25
31
|
onAppearanceChange: (appearance: ThemeAppearance) => void;
|
|
@@ -30,6 +36,7 @@ interface ThemeChangeHandlers {
|
|
|
30
36
|
onRadiusChange: (radius: ThemeRadius) => void;
|
|
31
37
|
onScalingChange: (scaling: ThemeScaling) => void;
|
|
32
38
|
onFontFamilyChange: (fontFamily: ThemeFontFamily) => void;
|
|
39
|
+
onHeadingFontFamilyChange: (headingFontFamily: ThemeHeadingFontFamily) => void;
|
|
33
40
|
}
|
|
34
41
|
|
|
35
42
|
interface ThemeContextValue extends ThemeChangeHandlers {
|
|
@@ -42,6 +49,7 @@ interface ThemeContextValue extends ThemeChangeHandlers {
|
|
|
42
49
|
radius: ThemeRadius;
|
|
43
50
|
scaling: ThemeScaling;
|
|
44
51
|
fontFamily: ThemeFontFamily;
|
|
52
|
+
headingFontFamily: ThemeHeadingFontFamily;
|
|
45
53
|
}
|
|
46
54
|
// Default theme values used when components render outside a Theme provider
|
|
47
55
|
const defaultThemeContext: ThemeContextValue = {
|
|
@@ -54,6 +62,7 @@ const defaultThemeContext: ThemeContextValue = {
|
|
|
54
62
|
radius: themePropDefs.radius.default,
|
|
55
63
|
scaling: themePropDefs.scaling.default,
|
|
56
64
|
fontFamily: themePropDefs.fontFamily.default,
|
|
65
|
+
headingFontFamily: undefined,
|
|
57
66
|
onAppearanceChange: noop,
|
|
58
67
|
onAccentColorChange: noop,
|
|
59
68
|
onGrayColorChange: noop,
|
|
@@ -62,6 +71,7 @@ const defaultThemeContext: ThemeContextValue = {
|
|
|
62
71
|
onRadiusChange: noop,
|
|
63
72
|
onScalingChange: noop,
|
|
64
73
|
onFontFamilyChange: noop,
|
|
74
|
+
onHeadingFontFamilyChange: noop,
|
|
65
75
|
};
|
|
66
76
|
|
|
67
77
|
const ThemeContext = React.createContext<ThemeContextValue | undefined>(undefined);
|
|
@@ -100,46 +110,33 @@ const ThemeRoot = React.forwardRef<ThemeImplElement, ThemeImplPublicProps>(
|
|
|
100
110
|
radius: radiusProp = themePropDefs.radius.default,
|
|
101
111
|
scaling: scalingProp = themePropDefs.scaling.default,
|
|
102
112
|
fontFamily: fontFamilyProp = themePropDefs.fontFamily.default,
|
|
113
|
+
headingFontFamily: headingFontFamilyProp,
|
|
103
114
|
hasBackground = themePropDefs.hasBackground.default,
|
|
104
115
|
...rootProps
|
|
105
116
|
} = props;
|
|
106
117
|
|
|
107
|
-
|
|
108
|
-
React.useEffect(() => {
|
|
109
|
-
if (props.panelBackground !== undefined) {
|
|
110
|
-
console.warn(
|
|
111
|
-
'Warning: The `panelBackground` prop is deprecated and will be removed in a future version. Use `material` prop instead.',
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
}, [props.panelBackground]);
|
|
118
|
+
useDeprecatedPanelBackgroundWarning(props.panelBackground);
|
|
115
119
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const [grayColor, setGrayColor] =
|
|
123
|
-
React.useEffect(() => setGrayColor(grayColorProp), [grayColorProp]);
|
|
120
|
+
// Each of these follows its prop but stays independently settable, so
|
|
121
|
+
// `ThemePanel` can change the theme at runtime. Syncing during render
|
|
122
|
+
// rather than in an effect matters here: an effect would commit the old
|
|
123
|
+
// theme first and re-render every consumer of the context a second time.
|
|
124
|
+
const [appearance, setAppearance] = usePropSyncedState(appearanceProp);
|
|
125
|
+
const [accentColor, setAccentColor] = usePropSyncedState(accentColorProp);
|
|
126
|
+
const [grayColor, setGrayColor] = usePropSyncedState(grayColorProp);
|
|
124
127
|
|
|
125
128
|
// Material takes precedence over panelBackground
|
|
126
129
|
const effectiveMaterial =
|
|
127
130
|
materialProp !== themePropDefs.material.default ? materialProp : panelBackgroundProp;
|
|
128
|
-
const [material, setMaterial] =
|
|
129
|
-
React.useEffect(() => setMaterial(effectiveMaterial), [effectiveMaterial]);
|
|
131
|
+
const [material, setMaterial] = usePropSyncedState(effectiveMaterial);
|
|
130
132
|
|
|
131
133
|
// Keep panelBackground in sync with material for backward compatibility
|
|
132
|
-
const [panelBackground, setPanelBackground] =
|
|
133
|
-
React.useEffect(() => setPanelBackground(material), [material]);
|
|
134
|
-
|
|
135
|
-
const [radius, setRadius] = React.useState(radiusProp);
|
|
136
|
-
React.useEffect(() => setRadius(radiusProp), [radiusProp]);
|
|
137
|
-
|
|
138
|
-
const [scaling, setScaling] = React.useState(scalingProp);
|
|
139
|
-
React.useEffect(() => setScaling(scalingProp), [scalingProp]);
|
|
134
|
+
const [panelBackground, setPanelBackground] = usePropSyncedState(material);
|
|
140
135
|
|
|
141
|
-
const [
|
|
142
|
-
|
|
136
|
+
const [radius, setRadius] = usePropSyncedState(radiusProp);
|
|
137
|
+
const [scaling, setScaling] = usePropSyncedState(scalingProp);
|
|
138
|
+
const [fontFamily, setFontFamily] = usePropSyncedState(fontFamilyProp);
|
|
139
|
+
const [headingFontFamily, setHeadingFontFamily] = usePropSyncedState(headingFontFamilyProp);
|
|
143
140
|
|
|
144
141
|
return (
|
|
145
142
|
<ThemeImpl
|
|
@@ -156,6 +153,7 @@ const ThemeRoot = React.forwardRef<ThemeImplElement, ThemeImplPublicProps>(
|
|
|
156
153
|
radius={radius}
|
|
157
154
|
scaling={scaling}
|
|
158
155
|
fontFamily={fontFamily}
|
|
156
|
+
headingFontFamily={headingFontFamily}
|
|
159
157
|
//
|
|
160
158
|
onAppearanceChange={setAppearance}
|
|
161
159
|
onAccentColorChange={setAccentColor}
|
|
@@ -165,6 +163,7 @@ const ThemeRoot = React.forwardRef<ThemeImplElement, ThemeImplPublicProps>(
|
|
|
165
163
|
onRadiusChange={setRadius}
|
|
166
164
|
onScalingChange={setScaling}
|
|
167
165
|
onFontFamilyChange={setFontFamily}
|
|
166
|
+
onHeadingFontFamilyChange={setHeadingFontFamily}
|
|
168
167
|
/>
|
|
169
168
|
);
|
|
170
169
|
},
|
|
@@ -205,6 +204,7 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
205
204
|
radius = props.radius ?? context?.radius ?? themePropDefs.radius.default,
|
|
206
205
|
scaling = props.scaling ?? context?.scaling ?? themePropDefs.scaling.default,
|
|
207
206
|
fontFamily = props.fontFamily ?? context?.fontFamily ?? themePropDefs.fontFamily.default,
|
|
207
|
+
headingFontFamily = props.headingFontFamily ?? context?.headingFontFamily,
|
|
208
208
|
//
|
|
209
209
|
onAppearanceChange = noop,
|
|
210
210
|
onAccentColorChange = noop,
|
|
@@ -214,6 +214,7 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
214
214
|
onRadiusChange = noop,
|
|
215
215
|
onScalingChange = noop,
|
|
216
216
|
onFontFamilyChange = noop,
|
|
217
|
+
onHeadingFontFamilyChange = noop,
|
|
217
218
|
//
|
|
218
219
|
...themeProps
|
|
219
220
|
} = props;
|
|
@@ -223,10 +224,24 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
223
224
|
const hasBackground =
|
|
224
225
|
hasBackgroundProp === undefined ? isRoot || isExplicitAppearance : hasBackgroundProp;
|
|
225
226
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
227
|
+
// `data-os` can only be resolved on the client. Writing it straight to the
|
|
228
|
+
// DOM keeps it out of the server markup — so hydration still matches — without
|
|
229
|
+
// spending a render pass, and a state update here would re-render the whole
|
|
230
|
+
// application on mount.
|
|
231
|
+
const rootRef = React.useRef<ThemeImplElement>(null);
|
|
232
|
+
const composedRef = useComposedRefs(forwardedRef, rootRef);
|
|
233
|
+
const hasExplicitOS = 'data-os' in themeProps;
|
|
234
|
+
|
|
235
|
+
useLayoutEffect(() => {
|
|
236
|
+
if (!isRoot || hasExplicitOS) return;
|
|
237
|
+
const node = rootRef.current;
|
|
238
|
+
if (!node) return;
|
|
239
|
+
|
|
240
|
+
const os = getClientOS();
|
|
241
|
+
if (!os) return;
|
|
242
|
+
node.setAttribute('data-os', os);
|
|
243
|
+
return () => node.removeAttribute('data-os');
|
|
244
|
+
}, [isRoot, hasExplicitOS]);
|
|
230
245
|
|
|
231
246
|
return (
|
|
232
247
|
<ThemeContext.Provider
|
|
@@ -241,6 +256,7 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
241
256
|
radius,
|
|
242
257
|
scaling,
|
|
243
258
|
fontFamily,
|
|
259
|
+
headingFontFamily,
|
|
244
260
|
//
|
|
245
261
|
onAppearanceChange,
|
|
246
262
|
onAccentColorChange,
|
|
@@ -250,6 +266,7 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
250
266
|
onRadiusChange,
|
|
251
267
|
onScalingChange,
|
|
252
268
|
onFontFamilyChange,
|
|
269
|
+
onHeadingFontFamilyChange,
|
|
253
270
|
}),
|
|
254
271
|
[
|
|
255
272
|
appearance,
|
|
@@ -261,6 +278,7 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
261
278
|
radius,
|
|
262
279
|
scaling,
|
|
263
280
|
fontFamily,
|
|
281
|
+
headingFontFamily,
|
|
264
282
|
//
|
|
265
283
|
onAppearanceChange,
|
|
266
284
|
onAccentColorChange,
|
|
@@ -270,6 +288,7 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
270
288
|
onRadiusChange,
|
|
271
289
|
onScalingChange,
|
|
272
290
|
onFontFamilyChange,
|
|
291
|
+
onHeadingFontFamilyChange,
|
|
273
292
|
],
|
|
274
293
|
)}
|
|
275
294
|
>
|
|
@@ -284,8 +303,8 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
284
303
|
data-radius={radius}
|
|
285
304
|
data-scaling={scaling}
|
|
286
305
|
data-font-family={fontFamily}
|
|
287
|
-
data-
|
|
288
|
-
ref={
|
|
306
|
+
data-heading-font-family={headingFontFamily}
|
|
307
|
+
ref={composedRef}
|
|
289
308
|
{...themeProps}
|
|
290
309
|
className={classNames(
|
|
291
310
|
'radix-themes',
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { PropDef } from '../props/prop-def.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A prop def pre-processed into the exact shape `extractProps` needs at render
|
|
5
|
+
* time. Everything that can be derived from the static prop def — enum
|
|
6
|
+
* membership sets, whether the def is responsive, whether it carries a default
|
|
7
|
+
* — is computed once here instead of on every render.
|
|
8
|
+
*/
|
|
9
|
+
interface CompiledPropDef {
|
|
10
|
+
key: string;
|
|
11
|
+
type: PropDef['type'];
|
|
12
|
+
default: unknown;
|
|
13
|
+
hasDefault: boolean;
|
|
14
|
+
responsive: boolean;
|
|
15
|
+
className?: string;
|
|
16
|
+
customProperties?: `--${string}`[];
|
|
17
|
+
parseValue?: (value: string) => string | undefined;
|
|
18
|
+
/** The prop def's own enum values, kept for the responsive class name helpers. */
|
|
19
|
+
values: readonly string[];
|
|
20
|
+
/** O(1) membership for `values`. */
|
|
21
|
+
valueSet: ReadonlySet<string>;
|
|
22
|
+
/**
|
|
23
|
+
* `values` plus the default, used to coerce invalid enum values back to the
|
|
24
|
+
* default. Only present for `type: 'enum'` — `'enum | string'` props accept
|
|
25
|
+
* arbitrary strings and must not be coerced.
|
|
26
|
+
*/
|
|
27
|
+
enumValueSet?: ReadonlySet<unknown>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
interface CompiledPropDefs {
|
|
31
|
+
/** Defs that contribute a class name and/or custom properties. */
|
|
32
|
+
styling: CompiledPropDef[];
|
|
33
|
+
/**
|
|
34
|
+
* Defs that pass through to the element but still need a default applied or
|
|
35
|
+
* an invalid enum value coerced. Defs that can do neither are omitted
|
|
36
|
+
* entirely — they are already correct as passed.
|
|
37
|
+
*/
|
|
38
|
+
passthrough: CompiledPropDef[];
|
|
39
|
+
/** Keys consumed by `styling`, so they can be skipped when copying props. */
|
|
40
|
+
stylingKeys: ReadonlySet<string>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const EMPTY_VALUES: readonly string[] = [];
|
|
44
|
+
const EMPTY_SET: ReadonlySet<string> = new Set();
|
|
45
|
+
|
|
46
|
+
function compile(propDefs: readonly Record<string, PropDef>[]): CompiledPropDefs {
|
|
47
|
+
const merged: Record<string, PropDef> = Object.assign({}, ...propDefs);
|
|
48
|
+
const styling: CompiledPropDef[] = [];
|
|
49
|
+
const passthrough: CompiledPropDef[] = [];
|
|
50
|
+
const stylingKeys = new Set<string>();
|
|
51
|
+
|
|
52
|
+
for (const key in merged) {
|
|
53
|
+
// The PropDef union is narrowed per-field below; reading the optional
|
|
54
|
+
// members off the union directly is what the runtime actually needs.
|
|
55
|
+
const def = merged[key] as PropDef & {
|
|
56
|
+
default?: unknown;
|
|
57
|
+
values?: readonly string[];
|
|
58
|
+
className?: string;
|
|
59
|
+
customProperties?: `--${string}`[];
|
|
60
|
+
parseValue?: (value: string) => string | undefined;
|
|
61
|
+
responsive?: true;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const values = def.values ?? EMPTY_VALUES;
|
|
65
|
+
const compiled: CompiledPropDef = {
|
|
66
|
+
key,
|
|
67
|
+
type: def.type,
|
|
68
|
+
default: def.default,
|
|
69
|
+
hasDefault: def.default !== undefined,
|
|
70
|
+
responsive: 'responsive' in def,
|
|
71
|
+
className: def.className,
|
|
72
|
+
customProperties: def.customProperties,
|
|
73
|
+
parseValue: def.parseValue,
|
|
74
|
+
values,
|
|
75
|
+
valueSet: values.length > 0 ? new Set(values) : EMPTY_SET,
|
|
76
|
+
enumValueSet: def.type === 'enum' ? new Set<unknown>([def.default, ...values]) : undefined,
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
if (def.className) {
|
|
80
|
+
styling.push(compiled);
|
|
81
|
+
stylingKeys.add(key);
|
|
82
|
+
} else if (compiled.hasDefault || def.type === 'enum') {
|
|
83
|
+
// Anything else is copied through untouched, so there is nothing to do.
|
|
84
|
+
passthrough.push(compiled);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return { styling, passthrough, stylingKeys };
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
interface CacheNode {
|
|
92
|
+
children: WeakMap<object, CacheNode>;
|
|
93
|
+
compiled?: CompiledPropDefs;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const cacheRoot: CacheNode = { children: new WeakMap() };
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Compiles a set of prop defs, memoized on the identity of the prop def objects
|
|
100
|
+
* themselves. Components always pass the same module-level constants, so after
|
|
101
|
+
* the first render of a given component this is a couple of WeakMap lookups
|
|
102
|
+
* instead of merging 50-odd prop defs into a fresh object.
|
|
103
|
+
*/
|
|
104
|
+
function getCompiledPropDefs(propDefs: readonly Record<string, PropDef>[]): CompiledPropDefs {
|
|
105
|
+
let node = cacheRoot;
|
|
106
|
+
|
|
107
|
+
for (let i = 0; i < propDefs.length; i++) {
|
|
108
|
+
const propDef = propDefs[i];
|
|
109
|
+
let child = node.children.get(propDef);
|
|
110
|
+
if (child === undefined) {
|
|
111
|
+
child = { children: new WeakMap() };
|
|
112
|
+
node.children.set(propDef, child);
|
|
113
|
+
}
|
|
114
|
+
node = child;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return (node.compiled ??= compile(propDefs));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export { getCompiledPropDefs };
|
|
121
|
+
export type { CompiledPropDef, CompiledPropDefs };
|
|
@@ -1,18 +1,41 @@
|
|
|
1
1
|
import classNames from 'classnames';
|
|
2
2
|
|
|
3
|
+
import { getCompiledPropDefs } from './compile-prop-defs.js';
|
|
3
4
|
import { getResponsiveClassNames, getResponsiveStyles } from './get-responsive-styles.js';
|
|
4
5
|
import { isResponsiveObject } from './is-responsive-object.js';
|
|
5
6
|
import { mergeStyles } from './merge-styles.js';
|
|
6
7
|
|
|
8
|
+
import type { CompiledPropDef } from './compile-prop-defs.js';
|
|
7
9
|
import type * as React from 'react';
|
|
8
10
|
import type { PropDef } from '../props/prop-def.js';
|
|
9
11
|
|
|
10
|
-
type PropDefsWithClassName<T> = T extends Record<string, PropDef>
|
|
11
|
-
? { [K in keyof T]: T[K] extends { className: string } ? K : never }[keyof T]
|
|
12
|
-
: never;
|
|
12
|
+
type PropDefsWithClassName<T> = T extends Record<string, PropDef> ? { [K in keyof T]: T[K] extends { className: string } ? K : never }[keyof T] : never;
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
type ResponsiveValue = Record<string, string | undefined>;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Fills in the `initial` breakpoint of a responsive value from the prop def's
|
|
18
|
+
* default, and coerces an invalid `initial` enum value back to that default.
|
|
19
|
+
*
|
|
20
|
+
* Returns the value untouched when nothing needs changing, and a copy otherwise
|
|
21
|
+
* — callers routinely hoist responsive objects to module scope, so mutating the
|
|
22
|
+
* caller's object would corrupt it for every later render.
|
|
23
|
+
*/
|
|
24
|
+
function normalizeResponsiveValue(value: ResponsiveValue, propDef: CompiledPropDef) {
|
|
25
|
+
let initial = value.initial;
|
|
26
|
+
let changed = false;
|
|
27
|
+
|
|
28
|
+
if (propDef.hasDefault && initial === undefined) {
|
|
29
|
+
initial = propDef.default as string | undefined;
|
|
30
|
+
changed = true;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (propDef.enumValueSet !== undefined && !propDef.enumValueSet.has(initial)) {
|
|
34
|
+
initial = propDef.default as string | undefined;
|
|
35
|
+
changed = true;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return changed ? { ...value, initial } : value;
|
|
16
39
|
}
|
|
17
40
|
|
|
18
41
|
/**
|
|
@@ -21,104 +44,102 @@ function mergePropDefs<T extends Record<string, PropDef>[]>(...args: T): Record<
|
|
|
21
44
|
* the corresponding prop defs that were used to formulate the new `className`
|
|
22
45
|
* and `style` values. Also applies prop def defaults to every prop.
|
|
23
46
|
*/
|
|
24
|
-
function extractProps<
|
|
25
|
-
P extends { className?: string; style?: React.CSSProperties; [key: string]: any },
|
|
26
|
-
T extends Record<string, PropDef>[]
|
|
27
|
-
>(
|
|
47
|
+
function extractProps<P extends { className?: string; style?: React.CSSProperties; [key: string]: any }, T extends Record<string, PropDef>[]>(
|
|
28
48
|
props: P,
|
|
29
49
|
...propDefs: T
|
|
30
50
|
): Omit<P & { className?: string; style?: React.CSSProperties }, PropDefsWithClassName<T[number]>> {
|
|
31
|
-
|
|
51
|
+
const { styling, passthrough, stylingKeys } = getCompiledPropDefs(propDefs);
|
|
52
|
+
|
|
53
|
+
// Copy the props that survive to the element rather than spreading and then
|
|
54
|
+
// deleting the styling keys. Deleting off a spread demotes the object to
|
|
55
|
+
// dictionary mode in V8, and this object is on the render path of every
|
|
56
|
+
// component in the library.
|
|
57
|
+
const extractedProps: Record<string, any> = {};
|
|
58
|
+
for (const key in props) {
|
|
59
|
+
if (stylingKeys.has(key)) continue;
|
|
60
|
+
extractedProps[key] = props[key];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
for (let i = 0; i < passthrough.length; i++) {
|
|
64
|
+
const propDef = passthrough[i];
|
|
65
|
+
const value = extractedProps[propDef.key];
|
|
66
|
+
|
|
67
|
+
if (value === undefined) {
|
|
68
|
+
if (propDef.hasDefault) extractedProps[propDef.key] = propDef.default;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Fall back to the default when the value is not a valid enum value
|
|
73
|
+
if (propDef.enumValueSet !== undefined && !propDef.enumValueSet.has(value) && !isResponsiveObject(value)) {
|
|
74
|
+
extractedProps[propDef.key] = propDef.default;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
32
78
|
let style: ReturnType<typeof mergeStyles>;
|
|
33
|
-
const
|
|
34
|
-
const allPropDefs = mergePropDefs(...propDefs);
|
|
79
|
+
const classes: string[] = [];
|
|
35
80
|
|
|
36
|
-
for (
|
|
37
|
-
|
|
38
|
-
|
|
81
|
+
for (let i = 0; i < styling.length; i++) {
|
|
82
|
+
const propDef = styling[i];
|
|
83
|
+
let value = props[propDef.key];
|
|
39
84
|
|
|
40
85
|
// Apply prop def defaults
|
|
41
|
-
if (
|
|
86
|
+
if (value === undefined && propDef.hasDefault) {
|
|
42
87
|
value = propDef.default;
|
|
43
88
|
}
|
|
44
89
|
|
|
45
90
|
// Apply the default value if the value is not a valid enum value
|
|
46
|
-
if (propDef.
|
|
47
|
-
|
|
91
|
+
if (propDef.enumValueSet !== undefined && !propDef.enumValueSet.has(value) && !isResponsiveObject(value)) {
|
|
92
|
+
value = propDef.default;
|
|
93
|
+
}
|
|
48
94
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
95
|
+
if (!value) continue;
|
|
96
|
+
|
|
97
|
+
if (isResponsiveObject(value)) {
|
|
98
|
+
// Make sure we are not threading through responsive values for non-responsive prop defs
|
|
99
|
+
if (!propDef.responsive) continue;
|
|
100
|
+
value = normalizeResponsiveValue(value, propDef);
|
|
52
101
|
}
|
|
53
102
|
|
|
54
|
-
|
|
55
|
-
|
|
103
|
+
if (propDef.type === 'enum') {
|
|
104
|
+
const propClassName = getResponsiveClassNames({
|
|
105
|
+
allowArbitraryValues: false,
|
|
106
|
+
value,
|
|
107
|
+
className: propDef.className!,
|
|
108
|
+
propValues: propDef.values,
|
|
109
|
+
propValueSet: propDef.valueSet,
|
|
110
|
+
parseValue: propDef.parseValue,
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
if (propClassName) classes.push(propClassName);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
56
116
|
|
|
57
|
-
if ('
|
|
58
|
-
|
|
117
|
+
if (propDef.type === 'string' || propDef.type === 'enum | string') {
|
|
118
|
+
const [propClassNames, propCustomProperties] = getResponsiveStyles({
|
|
119
|
+
className: propDef.className!,
|
|
120
|
+
customProperties: propDef.customProperties!,
|
|
121
|
+
// `string` prop defs have no enum values, so every value is arbitrary
|
|
122
|
+
propValues: propDef.type === 'string' ? [] : propDef.values,
|
|
123
|
+
propValueSet: propDef.type === 'string' ? undefined : propDef.valueSet,
|
|
124
|
+
parseValue: propDef.parseValue,
|
|
125
|
+
value,
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
if (propCustomProperties) style = mergeStyles(style, propCustomProperties);
|
|
129
|
+
if (propClassNames) classes.push(propClassNames);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
59
132
|
|
|
60
|
-
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (isResponsiveObject(value)) {
|
|
67
|
-
// Apply prop def defaults to the `initial` breakpoint
|
|
68
|
-
if (propDef.default !== undefined && value.initial === undefined) {
|
|
69
|
-
value.initial = propDef.default;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Apply the default value to the `initial` breakpoint when it is not a valid enum value
|
|
73
|
-
if (propDef.type === 'enum') {
|
|
74
|
-
const values = [propDef.default, ...propDef.values];
|
|
75
|
-
|
|
76
|
-
if (!values.includes(value.initial)) {
|
|
77
|
-
value.initial = propDef.default;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
if (propDef.type === 'enum') {
|
|
83
|
-
const propClassName = getResponsiveClassNames({
|
|
84
|
-
allowArbitraryValues: false,
|
|
85
|
-
value,
|
|
86
|
-
className: propDef.className,
|
|
87
|
-
propValues: propDef.values,
|
|
88
|
-
parseValue: propDef.parseValue,
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
className = classNames(className, propClassName);
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (propDef.type === 'string' || propDef.type === 'enum | string') {
|
|
96
|
-
const propDefValues = propDef.type === 'string' ? [] : propDef.values;
|
|
97
|
-
|
|
98
|
-
const [propClassNames, propCustomProperties] = getResponsiveStyles({
|
|
99
|
-
className: propDef.className,
|
|
100
|
-
customProperties: propDef.customProperties,
|
|
101
|
-
propValues: propDefValues,
|
|
102
|
-
parseValue: propDef.parseValue,
|
|
103
|
-
value,
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
style = mergeStyles(style, propCustomProperties);
|
|
107
|
-
className = classNames(className, propClassNames);
|
|
108
|
-
continue;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
if (propDef.type === 'boolean' && value) {
|
|
112
|
-
// TODO handle responsive boolean props
|
|
113
|
-
className = classNames(className, propDef.className);
|
|
114
|
-
continue;
|
|
115
|
-
}
|
|
133
|
+
if (propDef.type === 'boolean') {
|
|
134
|
+
// TODO handle responsive boolean props
|
|
135
|
+
classes.push(propDef.className!);
|
|
136
|
+
continue;
|
|
116
137
|
}
|
|
117
138
|
}
|
|
118
139
|
|
|
119
|
-
extractedProps.className = classNames(
|
|
140
|
+
extractedProps.className = classNames(classes.length > 0 ? classes.join(' ') : undefined, props.className);
|
|
120
141
|
extractedProps.style = mergeStyles(style, props.style);
|
|
121
|
-
return extractedProps
|
|
142
|
+
return extractedProps as ReturnType<typeof extractProps<P, T>>;
|
|
122
143
|
}
|
|
123
144
|
|
|
124
145
|
export { extractProps };
|