@womp/kookie-ui 0.3.25 → 0.3.26
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/components.css +159 -114
- 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.map +1 -1
- package/dist/cjs/components/theme.js +1 -1
- package/dist/cjs/components/theme.js.map +4 -4
- 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/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 +2 -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/esm/{chunk-RQ2ZPMHJ.js → chunk-22HGLMPQ.js} +2 -2
- package/dist/esm/{chunk-WYA4IRU6.js → chunk-25WZA7ZU.js} +2 -2
- package/dist/esm/chunk-2UPAYDKR.js +2 -0
- package/dist/esm/chunk-2UPAYDKR.js.map +7 -0
- package/dist/esm/{chunk-XHQGMOXV.js → chunk-36ZQVP7F.js} +2 -2
- 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-25U7DENY.js → chunk-4BBOHEF4.js} +2 -2
- package/dist/esm/{chunk-ARGX2ZZK.js → chunk-4CKDU6FY.js} +2 -2
- package/dist/esm/{chunk-ZSEFZM5H.js → chunk-4IY2PR6N.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-DNI4QRXQ.js → chunk-5IBGFL6O.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-DJBPM5QK.js → chunk-7FC7HF76.js} +2 -2
- package/dist/esm/{chunk-SVLY6B5F.js → chunk-7QDTSBJF.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-WZCZHCVE.js → chunk-BJYUPIXO.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-D5N627TH.js +2 -0
- package/dist/esm/chunk-D5N627TH.js.map +7 -0
- package/dist/esm/{chunk-ADYTQCZX.js → chunk-D6B7IMZU.js} +2 -2
- package/dist/esm/chunk-DL2O3GKG.js +2 -0
- package/dist/esm/chunk-DL2O3GKG.js.map +7 -0
- package/dist/esm/{chunk-USGTBZ43.js → chunk-E67CIG6A.js} +2 -2
- package/dist/esm/{chunk-42HFGCHX.js → chunk-ETMLMDW4.js} +2 -2
- package/dist/esm/{chunk-7CBAHIVG.js → chunk-F2HYQ3ZR.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-7MURQ6CR.js → chunk-FLFAXVFB.js} +2 -2
- package/dist/esm/{chunk-APRBRAOT.js → chunk-FOEZLQTW.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-ICIGZ3N7.js +2 -0
- package/dist/esm/chunk-ICIGZ3N7.js.map +7 -0
- 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-3F6I7YOR.js → chunk-JDGJSNWT.js} +2 -2
- package/dist/esm/chunk-JQQIPEGY.js +2 -0
- package/dist/esm/chunk-JQQIPEGY.js.map +7 -0
- package/dist/esm/chunk-JR2YOGII.js +2 -0
- package/dist/esm/chunk-JR2YOGII.js.map +7 -0
- package/dist/esm/chunk-JUY7CBSL.js +2 -0
- package/dist/esm/chunk-JUY7CBSL.js.map +7 -0
- package/dist/esm/{chunk-VF5TRT3H.js → chunk-KKM6T5P7.js} +2 -2
- package/dist/esm/{chunk-ZHYOJNWV.js → chunk-LKAK5GXF.js} +2 -2
- package/dist/esm/chunk-LOGJJF4I.js +2 -0
- package/dist/esm/chunk-LOGJJF4I.js.map +7 -0
- 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-MRECKC4D.js +2 -0
- package/dist/esm/chunk-MRECKC4D.js.map +7 -0
- package/dist/esm/{chunk-H2G446JG.js → chunk-NMKPFUNP.js} +2 -2
- package/dist/esm/{chunk-4N5JU7XQ.js → chunk-O3CDWEZA.js} +2 -2
- package/dist/esm/{chunk-TEULZKBM.js → chunk-OGXZHAQL.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-M3ZYJANH.js → chunk-PQZXQ4ST.js} +2 -2
- package/dist/esm/{chunk-SGU4HUHF.js → chunk-PTLFMWCN.js} +2 -2
- package/dist/esm/chunk-S2HA3W3V.js +2 -0
- package/dist/esm/chunk-S2HA3W3V.js.map +7 -0
- 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-HACQF6F4.js → chunk-TOOSHJOA.js} +2 -2
- package/dist/esm/{chunk-QOWA5LK5.js → chunk-U2X2CAW4.js} +2 -2
- package/dist/esm/{chunk-U7AASKZI.js → chunk-UVCH7QKO.js} +2 -2
- package/dist/esm/{chunk-GWYFT3EI.js → chunk-VLO7NXSP.js} +2 -2
- package/dist/esm/{chunk-DXI5P5O4.js → chunk-VX6ARMWP.js} +2 -2
- package/dist/esm/chunk-WAURCNAS.js +2 -0
- package/dist/esm/chunk-WAURCNAS.js.map +7 -0
- package/dist/esm/{chunk-EJWAAFCI.js → chunk-WO43WW3A.js} +2 -2
- package/dist/esm/{chunk-GLC4QJBF.js → chunk-WTYNFBFV.js} +2 -2
- package/dist/esm/{chunk-6FAICIYS.js → chunk-XMRIRFM7.js} +2 -2
- 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.map +1 -1
- package/dist/esm/components/theme.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/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/package.json +2 -1
- 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/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/theme.tsx +35 -34
- package/src/helpers/compile-prop-defs.ts +121 -0
- package/src/helpers/extract-props.ts +104 -83
- 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/tokens/blur.css +28 -0
- package/src/styles/tokens/color.css +3 -3
- package/src/styles/tokens/constants.css +11 -0
- package/styles.css +175 -117
- package/tokens/base.css +13 -3
- package/tokens.css +16 -3
- 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-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-RQ2ZPMHJ.js.map → chunk-22HGLMPQ.js.map} +0 -0
- /package/dist/esm/{chunk-WYA4IRU6.js.map → chunk-25WZA7ZU.js.map} +0 -0
- /package/dist/esm/{chunk-XHQGMOXV.js.map → chunk-36ZQVP7F.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-25U7DENY.js.map → chunk-4BBOHEF4.js.map} +0 -0
- /package/dist/esm/{chunk-ARGX2ZZK.js.map → chunk-4CKDU6FY.js.map} +0 -0
- /package/dist/esm/{chunk-ZSEFZM5H.js.map → chunk-4IY2PR6N.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-DNI4QRXQ.js.map → chunk-5IBGFL6O.js.map} +0 -0
- /package/dist/esm/{chunk-IPJUHVM6.js.map → chunk-666GX7O5.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-DK5MHD6I.js.map → chunk-B24BDVG2.js.map} +0 -0
- /package/dist/esm/{chunk-WZCZHCVE.js.map → chunk-BJYUPIXO.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-ADYTQCZX.js.map → chunk-D6B7IMZU.js.map} +0 -0
- /package/dist/esm/{chunk-USGTBZ43.js.map → chunk-E67CIG6A.js.map} +0 -0
- /package/dist/esm/{chunk-42HFGCHX.js.map → chunk-ETMLMDW4.js.map} +0 -0
- /package/dist/esm/{chunk-7CBAHIVG.js.map → chunk-F2HYQ3ZR.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-7MURQ6CR.js.map → chunk-FLFAXVFB.js.map} +0 -0
- /package/dist/esm/{chunk-APRBRAOT.js.map → chunk-FOEZLQTW.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-3F6I7YOR.js.map → chunk-JDGJSNWT.js.map} +0 -0
- /package/dist/esm/{chunk-VF5TRT3H.js.map → chunk-KKM6T5P7.js.map} +0 -0
- /package/dist/esm/{chunk-ZHYOJNWV.js.map → chunk-LKAK5GXF.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-H2G446JG.js.map → chunk-NMKPFUNP.js.map} +0 -0
- /package/dist/esm/{chunk-4N5JU7XQ.js.map → chunk-O3CDWEZA.js.map} +0 -0
- /package/dist/esm/{chunk-TEULZKBM.js.map → chunk-OGXZHAQL.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-M3ZYJANH.js.map → chunk-PQZXQ4ST.js.map} +0 -0
- /package/dist/esm/{chunk-SGU4HUHF.js.map → chunk-PTLFMWCN.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-HACQF6F4.js.map → chunk-TOOSHJOA.js.map} +0 -0
- /package/dist/esm/{chunk-QOWA5LK5.js.map → chunk-U2X2CAW4.js.map} +0 -0
- /package/dist/esm/{chunk-U7AASKZI.js.map → chunk-UVCH7QKO.js.map} +0 -0
- /package/dist/esm/{chunk-GWYFT3EI.js.map → chunk-VLO7NXSP.js.map} +0 -0
- /package/dist/esm/{chunk-DXI5P5O4.js.map → chunk-VX6ARMWP.js.map} +0 -0
- /package/dist/esm/{chunk-EJWAAFCI.js.map → chunk-WO43WW3A.js.map} +0 -0
- /package/dist/esm/{chunk-GLC4QJBF.js.map → chunk-WTYNFBFV.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/shell.css
CHANGED
|
@@ -70,47 +70,51 @@
|
|
|
70
70
|
height: 100%;
|
|
71
71
|
overflow: hidden;
|
|
72
72
|
|
|
73
|
-
/*
|
|
74
|
-
|
|
73
|
+
/* Above the panel, so a collapsing panel tucks behind it rather than across it. */
|
|
74
|
+
position: relative;
|
|
75
|
+
z-index: 2;
|
|
75
76
|
}
|
|
76
77
|
|
|
78
|
+
/* Steps to its width in one layout pass — see .rt-ShellPanel for why. */
|
|
77
79
|
.rt-ShellRail[data-mode='expanded'] {
|
|
78
80
|
width: var(--rail-size, 64px);
|
|
79
81
|
}
|
|
80
82
|
|
|
81
|
-
/* Collapsed rail: stay in flow during transition, then hide */
|
|
82
83
|
.rt-ShellRail[data-mode='collapsed'] {
|
|
83
84
|
width: 0px;
|
|
84
|
-
|
|
85
|
-
transition-delay: var(--motion-duration-small);
|
|
85
|
+
transition: width 0s var(--motion-duration-small);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
/* Peek overlay rules consolidated later to avoid duplication */
|
|
89
89
|
|
|
90
90
|
.rt-ShellRailContent {
|
|
91
|
+
position: absolute;
|
|
92
|
+
inset-block: 0;
|
|
93
|
+
inset-inline-start: 0;
|
|
94
|
+
|
|
91
95
|
display: flex;
|
|
92
96
|
flex-direction: column;
|
|
93
|
-
width:
|
|
97
|
+
width: 100%;
|
|
94
98
|
height: 100%;
|
|
95
99
|
gap: var(--space-2);
|
|
96
100
|
|
|
97
|
-
/* Content animation
|
|
101
|
+
/* Content animation */
|
|
98
102
|
opacity: 0;
|
|
99
103
|
pointer-events: none;
|
|
100
|
-
|
|
104
|
+
transform: translateX(-100%);
|
|
105
|
+
transition:
|
|
106
|
+
transform var(--motion-duration-small) var(--motion-ease-standard),
|
|
107
|
+
opacity var(--motion-duration-small) var(--motion-ease-standard);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
:where([dir='rtl']) .rt-ShellRailContent {
|
|
111
|
+
transform: translateX(100%);
|
|
101
112
|
}
|
|
102
113
|
|
|
103
114
|
.rt-ShellRailContent[data-visible] {
|
|
104
115
|
opacity: 1;
|
|
105
116
|
pointer-events: auto;
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
.rt-ShellRail[data-mode='collapsed'] .rt-ShellRailContent {
|
|
109
|
-
/* Exit animation: fade out content first, then collapse */
|
|
110
|
-
opacity: 0;
|
|
111
|
-
width: 0;
|
|
112
|
-
visibility: hidden;
|
|
113
|
-
transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
|
|
117
|
+
transform: translateX(0);
|
|
114
118
|
}
|
|
115
119
|
|
|
116
120
|
/* Panel - sidebar content next to Rail */
|
|
@@ -122,46 +126,67 @@
|
|
|
122
126
|
overflow: visible;
|
|
123
127
|
position: relative;
|
|
124
128
|
z-index: 1;
|
|
125
|
-
|
|
126
|
-
/* Animation setup */
|
|
127
|
-
transition: width var(--motion-duration-small) var(--motion-ease-standard);
|
|
128
129
|
}
|
|
129
130
|
|
|
131
|
+
/*
|
|
132
|
+
* The pane takes its width in one step rather than animating it. `width` is a
|
|
133
|
+
* layout property, so animating it re-lays-out everything in `.rt-ShellContent`
|
|
134
|
+
* on every frame of a collapse: measured on this stylesheet, that is 11 layout
|
|
135
|
+
* passes per toggle and 5.3ms per frame with 100 rows of content beside it,
|
|
136
|
+
* 10.1ms with 300 and 17.2ms with 800. Stepping to the final width costs one
|
|
137
|
+
* layout pass, and the pane's contents slide on `transform`, which the
|
|
138
|
+
* compositor handles without laying anything out.
|
|
139
|
+
*
|
|
140
|
+
* Expanding applies the width immediately, so the contents have somewhere to
|
|
141
|
+
* slide into. Collapsing holds the width until the slide has finished — a `0s`
|
|
142
|
+
* transition with a delay — so the contents are never sliding across
|
|
143
|
+
* `.rt-ShellContent`, and the content area widens once, at the end.
|
|
144
|
+
*/
|
|
130
145
|
.rt-ShellPanel[data-visible] {
|
|
131
146
|
width: var(--panel-size, 288px);
|
|
132
147
|
}
|
|
133
148
|
|
|
134
|
-
/* Collapsed panel: stay in flow during transition, then hide */
|
|
135
149
|
.rt-ShellPanel:not([data-visible]) {
|
|
136
150
|
width: 0px;
|
|
137
|
-
|
|
138
|
-
transition-delay: var(--motion-duration-small);
|
|
151
|
+
transition: width 0s var(--motion-duration-small);
|
|
139
152
|
}
|
|
140
153
|
|
|
141
154
|
.rt-ShellPanelContent {
|
|
155
|
+
/*
|
|
156
|
+
* Taken out of flow so it can slide across the space the pane no longer
|
|
157
|
+
* occupies. `.rt-ShellBody` clips it at the edge of the shell.
|
|
158
|
+
*/
|
|
159
|
+
position: absolute;
|
|
160
|
+
inset-block: 0;
|
|
161
|
+
inset-inline-start: 0;
|
|
162
|
+
|
|
142
163
|
display: flex;
|
|
143
164
|
flex-direction: column;
|
|
144
|
-
width:
|
|
165
|
+
width: 100%;
|
|
145
166
|
height: 100%;
|
|
146
167
|
overflow: hidden;
|
|
147
168
|
|
|
148
169
|
/* Content animation */
|
|
149
170
|
opacity: 0;
|
|
150
171
|
pointer-events: none;
|
|
151
|
-
|
|
172
|
+
transform: translateX(-100%);
|
|
173
|
+
transition:
|
|
174
|
+
transform var(--motion-duration-small) var(--motion-ease-standard),
|
|
175
|
+
opacity var(--motion-duration-small) var(--motion-ease-standard);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
:where([dir='rtl']) .rt-ShellPanelContent {
|
|
179
|
+
transform: translateX(100%);
|
|
152
180
|
}
|
|
153
181
|
|
|
154
182
|
.rt-ShellPanelContent[data-visible] {
|
|
155
183
|
opacity: 1;
|
|
156
184
|
pointer-events: auto;
|
|
185
|
+
transform: translateX(0);
|
|
157
186
|
}
|
|
158
187
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
opacity: 0;
|
|
162
|
-
width: 0;
|
|
163
|
-
visibility: hidden;
|
|
164
|
-
transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
|
|
188
|
+
:where([dir='rtl']) .rt-ShellPanelContent[data-visible] {
|
|
189
|
+
transform: translateX(0);
|
|
165
190
|
}
|
|
166
191
|
|
|
167
192
|
/* Sidebar - alternative to Rail+Panel */
|
|
@@ -174,10 +199,17 @@
|
|
|
174
199
|
position: relative;
|
|
175
200
|
z-index: 1;
|
|
176
201
|
|
|
177
|
-
/* Animation setup */
|
|
178
|
-
transition: width var(--motion-duration-small) var(--motion-ease-standard);
|
|
179
202
|
}
|
|
180
203
|
|
|
204
|
+
/*
|
|
205
|
+
* Steps to its width in one layout pass — see .rt-ShellPanel for why.
|
|
206
|
+
*
|
|
207
|
+
* Sidebar has two open sizes, so expanded and thin both apply immediately and
|
|
208
|
+
* the switch between them is a step rather than a slide: there is no composited
|
|
209
|
+
* way to move a pane between two widths that both take space in the flow. The
|
|
210
|
+
* phase rules below already fade the contents out across that switch, so the
|
|
211
|
+
* step lands while they are not visible.
|
|
212
|
+
*/
|
|
181
213
|
.rt-ShellSidebar[data-mode='expanded'] {
|
|
182
214
|
width: var(--sidebar-size, 288px);
|
|
183
215
|
}
|
|
@@ -186,19 +218,16 @@
|
|
|
186
218
|
width: var(--sidebar-thin-size, 64px);
|
|
187
219
|
}
|
|
188
220
|
|
|
189
|
-
/* Ensure content matches thin width in thin mode */
|
|
190
|
-
.rt-ShellSidebar[data-mode='thin'] .rt-ShellSidebarContent {
|
|
191
|
-
width: var(--sidebar-thin-size, 64px);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/* Collapsed sidebar: stay in flow during transition, then hide */
|
|
195
221
|
.rt-ShellSidebar[data-mode='collapsed'] {
|
|
196
222
|
width: 0px;
|
|
197
|
-
|
|
198
|
-
transition-delay: var(--motion-duration-small);
|
|
223
|
+
transition: width 0s var(--motion-duration-small);
|
|
199
224
|
}
|
|
200
225
|
|
|
201
226
|
.rt-ShellSidebarContent {
|
|
227
|
+
position: absolute;
|
|
228
|
+
inset-block: 0;
|
|
229
|
+
inset-inline-start: 0;
|
|
230
|
+
|
|
202
231
|
display: flex;
|
|
203
232
|
flex-direction: column;
|
|
204
233
|
width: 100%;
|
|
@@ -208,7 +237,14 @@
|
|
|
208
237
|
/* Content animation */
|
|
209
238
|
opacity: 0;
|
|
210
239
|
pointer-events: none;
|
|
211
|
-
|
|
240
|
+
transform: translateX(-100%);
|
|
241
|
+
transition:
|
|
242
|
+
transform var(--motion-duration-small) var(--motion-ease-standard),
|
|
243
|
+
opacity var(--motion-duration-small) var(--motion-ease-standard);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
:where([dir='rtl']) .rt-ShellSidebarContent {
|
|
247
|
+
transform: translateX(100%);
|
|
212
248
|
}
|
|
213
249
|
|
|
214
250
|
/* Hide resizer in thin mode */
|
|
@@ -219,6 +255,7 @@
|
|
|
219
255
|
.rt-ShellSidebarContent[data-visible] {
|
|
220
256
|
opacity: 1;
|
|
221
257
|
pointer-events: auto;
|
|
258
|
+
transform: translateX(0);
|
|
222
259
|
}
|
|
223
260
|
|
|
224
261
|
/* Sidebar presentation switch sequencing (thin ↔ expanded) */
|
|
@@ -237,13 +274,6 @@
|
|
|
237
274
|
transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
|
|
238
275
|
}
|
|
239
276
|
|
|
240
|
-
.rt-ShellSidebar[data-mode='collapsed'] .rt-ShellSidebarContent {
|
|
241
|
-
/* Exit animation: fade out content first, then collapse */
|
|
242
|
-
opacity: 0;
|
|
243
|
-
width: 0;
|
|
244
|
-
visibility: hidden;
|
|
245
|
-
transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
|
|
246
|
-
}
|
|
247
277
|
|
|
248
278
|
/* Stacked Sidebar: left side, floating without reflow */
|
|
249
279
|
.rt-ShellSidebar[data-presentation='stacked'] {
|
|
@@ -291,10 +321,9 @@
|
|
|
291
321
|
position: relative;
|
|
292
322
|
z-index: 1;
|
|
293
323
|
|
|
294
|
-
/* Animation setup */
|
|
295
|
-
transition: width var(--motion-duration-small) var(--motion-ease-standard);
|
|
296
324
|
}
|
|
297
325
|
|
|
326
|
+
/* Steps to its width in one layout pass — see .rt-ShellPanel for why. */
|
|
298
327
|
.rt-ShellInspector[data-mode='expanded'] {
|
|
299
328
|
width: var(--inspector-size, 320px);
|
|
300
329
|
}
|
|
@@ -302,34 +331,37 @@
|
|
|
302
331
|
/* Collapsed inspector: stay in flow during transition, then hide */
|
|
303
332
|
.rt-ShellInspector[data-mode='collapsed'] {
|
|
304
333
|
width: 0px;
|
|
305
|
-
|
|
306
|
-
transition-delay: var(--motion-duration-small);
|
|
334
|
+
transition: width 0s var(--motion-duration-small);
|
|
307
335
|
}
|
|
308
336
|
|
|
309
337
|
.rt-ShellInspectorContent {
|
|
338
|
+
position: absolute;
|
|
339
|
+
inset-block: 0;
|
|
340
|
+
inset-inline-end: 0;
|
|
341
|
+
|
|
310
342
|
display: flex;
|
|
311
343
|
flex-direction: column;
|
|
312
|
-
width:
|
|
344
|
+
width: 100%;
|
|
313
345
|
height: 100%;
|
|
314
346
|
overflow: hidden;
|
|
315
347
|
|
|
316
348
|
/* Content animation */
|
|
317
349
|
opacity: 0;
|
|
318
350
|
pointer-events: none;
|
|
319
|
-
|
|
351
|
+
transform: translateX(100%);
|
|
352
|
+
transition:
|
|
353
|
+
transform var(--motion-duration-small) var(--motion-ease-standard),
|
|
354
|
+
opacity var(--motion-duration-small) var(--motion-ease-standard);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
:where([dir='rtl']) .rt-ShellInspectorContent {
|
|
358
|
+
transform: translateX(-100%);
|
|
320
359
|
}
|
|
321
360
|
|
|
322
361
|
.rt-ShellInspectorContent[data-visible] {
|
|
323
362
|
opacity: 1;
|
|
324
363
|
pointer-events: auto;
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
.rt-ShellInspector[data-mode='collapsed'] .rt-ShellInspectorContent {
|
|
328
|
-
/* Exit animation: fade out content first, then collapse */
|
|
329
|
-
opacity: 0;
|
|
330
|
-
width: 0;
|
|
331
|
-
visibility: hidden;
|
|
332
|
-
transition: opacity var(--motion-duration-small) var(--motion-ease-standard);
|
|
364
|
+
transform: translateX(0);
|
|
333
365
|
}
|
|
334
366
|
|
|
335
367
|
/* Bottom - bottom panel */
|
|
@@ -342,37 +374,42 @@
|
|
|
342
374
|
flex-shrink: 0;
|
|
343
375
|
position: relative;
|
|
344
376
|
|
|
345
|
-
/* Animation setup */
|
|
346
|
-
transition: height var(--motion-duration-small) var(--motion-ease-standard);
|
|
347
377
|
}
|
|
348
378
|
|
|
379
|
+
/* Steps to its height in one layout pass — see .rt-ShellPanel for why. */
|
|
349
380
|
.rt-ShellBottom[data-mode='expanded'] {
|
|
350
381
|
height: var(--bottom-size, 200px);
|
|
351
382
|
}
|
|
352
383
|
|
|
353
|
-
/* Collapsed bottom: stay in flow during transition, then hide */
|
|
354
384
|
.rt-ShellBottom[data-mode='collapsed'] {
|
|
355
385
|
height: 0px;
|
|
356
|
-
|
|
357
|
-
transition-delay: var(--motion-duration-small);
|
|
386
|
+
transition: height 0s var(--motion-duration-small);
|
|
358
387
|
}
|
|
359
388
|
|
|
360
389
|
.rt-ShellBottomContent {
|
|
390
|
+
position: absolute;
|
|
391
|
+
inset-inline: 0;
|
|
392
|
+
inset-block-end: 0;
|
|
393
|
+
|
|
361
394
|
display: flex;
|
|
362
395
|
flex-direction: column;
|
|
363
396
|
width: 100%;
|
|
364
|
-
height:
|
|
397
|
+
height: 100%;
|
|
365
398
|
overflow: hidden;
|
|
366
399
|
|
|
367
400
|
/* Content animation */
|
|
368
401
|
opacity: 0;
|
|
369
402
|
pointer-events: none;
|
|
370
|
-
|
|
403
|
+
transform: translateY(100%);
|
|
404
|
+
transition:
|
|
405
|
+
transform var(--motion-duration-small) var(--motion-ease-standard),
|
|
406
|
+
opacity var(--motion-duration-small) var(--motion-ease-standard);
|
|
371
407
|
}
|
|
372
408
|
|
|
373
409
|
.rt-ShellBottomContent[data-visible] {
|
|
374
410
|
opacity: 1;
|
|
375
411
|
pointer-events: auto;
|
|
412
|
+
transform: translateY(0);
|
|
376
413
|
}
|
|
377
414
|
|
|
378
415
|
/* Disable transitions during active resize */
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
*/
|
|
21
21
|
:where([data-panel-background='translucent'], [data-material='translucent']) & {
|
|
22
22
|
backdrop-filter: var(--backdrop-filter-components);
|
|
23
|
-
--backdrop-filter-components:
|
|
23
|
+
--backdrop-filter-components: var(--backdrop-filter-components-enabled);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
/* Prevent backdrop-filter stacking with parent elements */
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
|
|
38
38
|
&:where([data-panel-background='translucent'], [data-material='translucent']) {
|
|
39
39
|
backdrop-filter: var(--backdrop-filter-components);
|
|
40
|
-
--backdrop-filter-components:
|
|
40
|
+
--backdrop-filter-components: var(--backdrop-filter-components-enabled);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
&:where([data-orientation='horizontal']) {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
*/
|
|
21
21
|
:where([data-panel-background='translucent'], [data-material='translucent']) & {
|
|
22
22
|
backdrop-filter: var(--backdrop-filter-components);
|
|
23
|
-
--backdrop-filter-components:
|
|
23
|
+
--backdrop-filter-components: var(--backdrop-filter-components-enabled);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
/* Prevent backdrop-filter stacking with parent elements */
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
|
|
38
38
|
&:where([data-panel-background='translucent'], [data-material='translucent']) {
|
|
39
39
|
backdrop-filter: var(--backdrop-filter-components);
|
|
40
|
-
--backdrop-filter-components:
|
|
40
|
+
--backdrop-filter-components: var(--backdrop-filter-components-enabled);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
&::before {
|
package/src/components/table.css
CHANGED
|
@@ -121,6 +121,13 @@
|
|
|
121
121
|
/* surface */
|
|
122
122
|
|
|
123
123
|
.rt-TableRoot:where(.rt-variant-surface) {
|
|
124
|
+
/*
|
|
125
|
+
* This surface blurs its own backdrop, which makes it the backdrop root for
|
|
126
|
+
* everything inside it. A component nested here would re-blur an already
|
|
127
|
+
* blurred, already flat surface for the full cost of another blur pass, so
|
|
128
|
+
* switch the component filter off for the subtree. See tokens/blur.css.
|
|
129
|
+
*/
|
|
130
|
+
--backdrop-filter-components-enabled: none;
|
|
124
131
|
box-sizing: border-box;
|
|
125
132
|
border: 1px solid var(--gray-a5);
|
|
126
133
|
border-radius: var(--table-border-radius);
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
/* Theme-level translucent override */
|
|
48
48
|
:where([data-panel-background='translucent'], [data-material='translucent']) & {
|
|
49
49
|
backdrop-filter: var(--backdrop-filter-components);
|
|
50
|
-
--backdrop-filter-components:
|
|
50
|
+
--backdrop-filter-components: var(--backdrop-filter-components-enabled);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
/* Prevent backdrop-filter stacking with parents */
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
|
|
62
62
|
&:where([data-panel-background='translucent'], [data-material='translucent']) {
|
|
63
63
|
backdrop-filter: var(--backdrop-filter-components);
|
|
64
|
-
--backdrop-filter-components:
|
|
64
|
+
--backdrop-filter-components: var(--backdrop-filter-components-enabled);
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
&:where(:focus-within) {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
/* Theme-level translucent override */
|
|
13
13
|
:where([data-panel-background='translucent'], [data-material='translucent']) & {
|
|
14
14
|
backdrop-filter: var(--backdrop-filter-components);
|
|
15
|
-
--backdrop-filter-components:
|
|
15
|
+
--backdrop-filter-components: var(--backdrop-filter-components-enabled);
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
/* Prevent backdrop-filter stacking with parents */
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
&:where([data-panel-background='translucent'], [data-material='translucent']) {
|
|
28
28
|
backdrop-filter: var(--backdrop-filter-components);
|
|
29
|
-
--backdrop-filter-components:
|
|
29
|
+
--backdrop-filter-components: var(--backdrop-filter-components-enabled);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
@supports selector(:has(*)) {
|
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';
|
|
@@ -104,42 +107,27 @@ const ThemeRoot = React.forwardRef<ThemeImplElement, ThemeImplPublicProps>(
|
|
|
104
107
|
...rootProps
|
|
105
108
|
} = props;
|
|
106
109
|
|
|
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]);
|
|
110
|
+
useDeprecatedPanelBackgroundWarning(props.panelBackground);
|
|
115
111
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const [grayColor, setGrayColor] =
|
|
123
|
-
React.useEffect(() => setGrayColor(grayColorProp), [grayColorProp]);
|
|
112
|
+
// Each of these follows its prop but stays independently settable, so
|
|
113
|
+
// `ThemePanel` can change the theme at runtime. Syncing during render
|
|
114
|
+
// rather than in an effect matters here: an effect would commit the old
|
|
115
|
+
// theme first and re-render every consumer of the context a second time.
|
|
116
|
+
const [appearance, setAppearance] = usePropSyncedState(appearanceProp);
|
|
117
|
+
const [accentColor, setAccentColor] = usePropSyncedState(accentColorProp);
|
|
118
|
+
const [grayColor, setGrayColor] = usePropSyncedState(grayColorProp);
|
|
124
119
|
|
|
125
120
|
// Material takes precedence over panelBackground
|
|
126
121
|
const effectiveMaterial =
|
|
127
122
|
materialProp !== themePropDefs.material.default ? materialProp : panelBackgroundProp;
|
|
128
|
-
const [material, setMaterial] =
|
|
129
|
-
React.useEffect(() => setMaterial(effectiveMaterial), [effectiveMaterial]);
|
|
123
|
+
const [material, setMaterial] = usePropSyncedState(effectiveMaterial);
|
|
130
124
|
|
|
131
125
|
// 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]);
|
|
126
|
+
const [panelBackground, setPanelBackground] = usePropSyncedState(material);
|
|
140
127
|
|
|
141
|
-
const [
|
|
142
|
-
|
|
128
|
+
const [radius, setRadius] = usePropSyncedState(radiusProp);
|
|
129
|
+
const [scaling, setScaling] = usePropSyncedState(scalingProp);
|
|
130
|
+
const [fontFamily, setFontFamily] = usePropSyncedState(fontFamilyProp);
|
|
143
131
|
|
|
144
132
|
return (
|
|
145
133
|
<ThemeImpl
|
|
@@ -223,10 +211,24 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
223
211
|
const hasBackground =
|
|
224
212
|
hasBackgroundProp === undefined ? isRoot || isExplicitAppearance : hasBackgroundProp;
|
|
225
213
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
214
|
+
// `data-os` can only be resolved on the client. Writing it straight to the
|
|
215
|
+
// DOM keeps it out of the server markup — so hydration still matches — without
|
|
216
|
+
// spending a render pass, and a state update here would re-render the whole
|
|
217
|
+
// application on mount.
|
|
218
|
+
const rootRef = React.useRef<ThemeImplElement>(null);
|
|
219
|
+
const composedRef = useComposedRefs(forwardedRef, rootRef);
|
|
220
|
+
const hasExplicitOS = 'data-os' in themeProps;
|
|
221
|
+
|
|
222
|
+
useLayoutEffect(() => {
|
|
223
|
+
if (!isRoot || hasExplicitOS) return;
|
|
224
|
+
const node = rootRef.current;
|
|
225
|
+
if (!node) return;
|
|
226
|
+
|
|
227
|
+
const os = getClientOS();
|
|
228
|
+
if (!os) return;
|
|
229
|
+
node.setAttribute('data-os', os);
|
|
230
|
+
return () => node.removeAttribute('data-os');
|
|
231
|
+
}, [isRoot, hasExplicitOS]);
|
|
230
232
|
|
|
231
233
|
return (
|
|
232
234
|
<ThemeContext.Provider
|
|
@@ -284,8 +286,7 @@ const ThemeImpl = React.forwardRef<ThemeImplElement, ThemeImplProps>((props, for
|
|
|
284
286
|
data-radius={radius}
|
|
285
287
|
data-scaling={scaling}
|
|
286
288
|
data-font-family={fontFamily}
|
|
287
|
-
|
|
288
|
-
ref={forwardedRef}
|
|
289
|
+
ref={composedRef}
|
|
289
290
|
{...themeProps}
|
|
290
291
|
className={classNames(
|
|
291
292
|
'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 };
|