@womp/kookie-ui 0.8.0 → 0.9.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 +4 -0
- package/README.md +1 -1
- package/components.css +169 -1
- package/dist/cjs/components/chatbar.d.ts +52 -1
- package/dist/cjs/components/chatbar.d.ts.map +1 -1
- package/dist/cjs/components/chatbar.js +2 -2
- package/dist/cjs/components/chatbar.js.map +4 -4
- package/dist/cjs/components/index.d.ts +2 -0
- package/dist/cjs/components/index.d.ts.map +1 -1
- package/dist/cjs/components/index.js +5 -5
- package/dist/cjs/components/index.js.map +4 -4
- package/dist/cjs/components/message-scroller.d.ts +86 -0
- package/dist/cjs/components/message-scroller.d.ts.map +1 -0
- package/dist/cjs/components/message-scroller.js +5 -0
- package/dist/cjs/components/message-scroller.js.map +7 -0
- package/dist/cjs/components/notice.d.ts +67 -0
- package/dist/cjs/components/notice.d.ts.map +1 -0
- package/dist/cjs/components/notice.js +5 -0
- package/dist/cjs/components/notice.js.map +7 -0
- package/dist/cjs/components/sidebar.d.ts.map +1 -1
- package/dist/cjs/components/sidebar.js +1 -1
- package/dist/cjs/components/sidebar.js.map +3 -3
- package/dist/cjs/index.js +5 -5
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/{chunk-WGWUEU4K.js → chunk-2I7QRVJ5.js} +2 -2
- package/dist/esm/{chunk-EHBAK3LQ.js → chunk-43A5GUSI.js} +2 -2
- package/dist/esm/{chunk-FEAOFF77.js → chunk-47LMOIW3.js} +2 -2
- package/dist/esm/chunk-4JQZUQY7.js +2 -0
- package/dist/esm/{chunk-O4CSXNST.js → chunk-4ME6O27S.js} +2 -2
- package/dist/esm/{chunk-OEEF6KJG.js → chunk-4XGGX2V2.js} +2 -2
- package/dist/esm/{chunk-26I257HE.js → chunk-4XKK32M4.js} +2 -2
- package/dist/esm/{chunk-MM5IHQFM.js → chunk-4YFJWXL2.js} +2 -2
- package/dist/esm/{chunk-5TAHT6VC.js → chunk-5WRCK4R7.js} +2 -2
- package/dist/esm/{chunk-POG3YABW.js → chunk-65GAANJD.js} +2 -2
- package/dist/esm/{chunk-UBSLEGQZ.js → chunk-6FLLFCBU.js} +2 -2
- package/dist/esm/{chunk-KV4SZP3F.js → chunk-73QGEY2I.js} +2 -2
- package/dist/esm/{chunk-WQCB7KSH.js → chunk-7FC7HF76.js} +2 -2
- package/dist/esm/{chunk-UNWPH3SO.js → chunk-7RQNB63F.js} +2 -2
- package/dist/esm/{chunk-CRBOJ7N7.js → chunk-7UHKEJ7Q.js} +2 -2
- package/dist/esm/{chunk-OJSOX3AX.js → chunk-ABSKRHVM.js} +2 -2
- package/dist/esm/{chunk-7FKKGUHK.js → chunk-AGSSWWFI.js} +2 -2
- package/dist/esm/{chunk-W2LD2YE6.js → chunk-ALWNS44Q.js} +2 -2
- package/dist/esm/{chunk-Z7AZNMNX.js → chunk-BW5CO4PZ.js} +2 -2
- package/dist/esm/{chunk-KEEPKI2X.js → chunk-CDG5WH4U.js} +2 -2
- package/dist/esm/{chunk-IK3MQHA5.js → chunk-CIYF56YS.js} +2 -2
- package/dist/esm/{chunk-JDEBKA56.js → chunk-CKMMUHKE.js} +2 -2
- package/dist/esm/{chunk-TLGXIWAS.js → chunk-CRTH5LNU.js} +2 -2
- package/dist/esm/{chunk-NTNMJX5M.js → chunk-CSKZZOI2.js} +2 -2
- package/dist/esm/{chunk-4WU2WKUJ.js → chunk-CTA5ODAO.js} +2 -2
- package/dist/esm/{chunk-PDUHBDFC.js → chunk-DSJY5RI3.js} +2 -2
- package/dist/esm/{chunk-JDWCQ2XP.js → chunk-E67CIG6A.js} +2 -2
- package/dist/esm/{chunk-WIDJYVZF.js → chunk-EPTYNVCU.js} +2 -2
- package/dist/esm/{chunk-HMSSFU6I.js → chunk-ERY5TH2M.js} +2 -2
- package/dist/esm/{chunk-LJCUPAOI.js → chunk-FG7XM7KJ.js} +2 -2
- package/dist/esm/{chunk-ZJ33QP5N.js → chunk-FHOCUZDR.js} +2 -2
- package/dist/esm/{chunk-2Q7BJ7YG.js → chunk-GLERJXVS.js} +2 -2
- package/dist/esm/{chunk-PYXMGEO7.js → chunk-GO7OHBHW.js} +2 -2
- package/dist/esm/{chunk-OQU2SKLN.js → chunk-HF5WY5YE.js} +2 -2
- package/dist/esm/{chunk-25X75TI7.js → chunk-HJU4I34X.js} +2 -2
- package/dist/esm/{chunk-CBNTPHYK.js → chunk-IHK3H2OM.js} +2 -2
- package/dist/esm/{chunk-C5RVO3C3.js → chunk-JDGJSNWT.js} +2 -2
- package/dist/esm/chunk-JKS2YXMS.js +1 -0
- package/dist/esm/{chunk-PBFSBHBS.js → chunk-JUY7CBSL.js} +2 -2
- package/dist/esm/{chunk-F3AXE27Q.js → chunk-K3UAS7RW.js} +2 -2
- package/dist/esm/{chunk-FB3PD4Z3.js → chunk-KFR3CK24.js} +2 -2
- package/dist/esm/{chunk-AIHQ3MVK.js → chunk-KJUDZCYK.js} +2 -2
- package/dist/esm/{chunk-JRFZ535T.js → chunk-KMPE7TJ6.js} +2 -2
- package/dist/esm/{chunk-5M7STAH3.js → chunk-KZWNGWIM.js} +2 -2
- package/dist/esm/{chunk-H4GR4262.js → chunk-LXWPEDPZ.js} +2 -2
- package/dist/esm/chunk-MCQCG6AS.js +2 -0
- package/dist/esm/{chunk-JQW4XYBS.js → chunk-MEO7MJMQ.js} +2 -2
- package/dist/esm/{chunk-QJVAS7AK.js → chunk-MS5J4MF6.js} +2 -2
- package/dist/esm/{chunk-44JZYS7A.js → chunk-MWIIGYAJ.js} +2 -2
- package/dist/esm/{chunk-MBCQA7UZ.js → chunk-N4GTDLRD.js} +2 -2
- package/dist/esm/{chunk-NV3P2CKH.js → chunk-NIM7DIVH.js} +2 -2
- package/dist/esm/{chunk-ZW26J2SA.js → chunk-OGXZHAQL.js} +2 -2
- package/dist/esm/{chunk-WJBOOAIO.js → chunk-OLAWVEAI.js} +2 -2
- package/dist/esm/{chunk-JQSZF3E2.js → chunk-OMGZG52I.js} +2 -2
- package/dist/esm/{chunk-HBIF43PT.js → chunk-PHC3QBV3.js} +2 -2
- package/dist/esm/{chunk-OTKQN2KY.js → chunk-PZ7OYATT.js} +2 -2
- package/dist/esm/{chunk-P27KV2LS.js → chunk-QWVU2TW4.js} +2 -2
- package/dist/esm/chunk-RJP5QUXO.js +2 -0
- package/dist/esm/chunk-RJP5QUXO.js.map +7 -0
- package/dist/esm/{chunk-6J6YX2VX.js → chunk-RNTCHVFI.js} +2 -2
- package/dist/esm/{chunk-IDUVJJYG.js → chunk-S5C5YRBS.js} +2 -2
- package/dist/esm/{chunk-RY67WG3O.js → chunk-T4OR62DQ.js} +2 -2
- package/dist/esm/{chunk-AO32NT75.js → chunk-UBOOUDS4.js} +2 -2
- package/dist/esm/{chunk-DCIQHXAR.js → chunk-VHECAEUP.js} +2 -2
- package/dist/esm/{chunk-QEGEUD4D.js → chunk-VNH7BJOA.js} +2 -2
- package/dist/esm/{chunk-GGSJXOKR.js → chunk-VR7ZAFYN.js} +2 -2
- package/dist/esm/{chunk-ODCVOXEV.js → chunk-VX6ARMWP.js} +2 -2
- package/dist/esm/{chunk-G4YKBAZT.js → chunk-VZSQATP6.js} +2 -2
- package/dist/esm/chunk-W4WWN3RC.js +2 -0
- package/dist/esm/chunk-W4WWN3RC.js.map +7 -0
- package/dist/esm/{chunk-YVSM2LGS.js → chunk-WGYUWEQV.js} +2 -2
- package/dist/esm/{chunk-7NYODT3Z.js → chunk-WHFJ4JUN.js} +2 -2
- package/dist/esm/{chunk-YG66IRW4.js → chunk-X3JM2565.js} +2 -2
- package/dist/esm/chunk-XI5YXUCK.js +2 -0
- package/dist/esm/{chunk-NQXRWBQM.js → chunk-Y5RCH23Z.js} +2 -2
- package/dist/esm/{chunk-WZFVTC7P.js → chunk-YBSRX63K.js} +2 -2
- package/dist/esm/chunk-YQRSAP46.js +2 -0
- package/dist/esm/chunk-YQRSAP46.js.map +7 -0
- package/dist/esm/chunk-YTD3AJAU.js +2 -0
- package/dist/esm/chunk-YTD3AJAU.js.map +7 -0
- package/dist/esm/{chunk-GDAKJS64.js → chunk-YWENWZOU.js} +2 -2
- package/dist/esm/{chunk-7PMMYHZV.js → chunk-ZOY43B55.js} +2 -2
- package/dist/esm/{chunk-VTIL55SR.js → chunk-ZZLZGHZQ.js} +2 -2
- package/dist/esm/components/_internal/base-button.js +1 -1
- package/dist/esm/components/_internal/base-menu.utils.js +1 -1
- package/dist/esm/components/_internal/menu-context.js +1 -1
- package/dist/esm/components/accordion.js +1 -1
- package/dist/esm/components/alert-dialog.js +1 -1
- package/dist/esm/components/avatar.js +1 -1
- package/dist/esm/components/badge.js +1 -1
- package/dist/esm/components/blockquote.js +1 -1
- package/dist/esm/components/blockquote.props.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.d.ts +52 -1
- package/dist/esm/components/chatbar.d.ts.map +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/code.props.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.js +1 -1
- package/dist/esm/components/data-list.js +1 -1
- package/dist/esm/components/dialog.js +1 -1
- package/dist/esm/components/dropdown-menu.js +1 -1
- package/dist/esm/components/em.js +1 -1
- package/dist/esm/components/em.props.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/heading.props.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.d.ts +2 -0
- package/dist/esm/components/index.d.ts.map +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/link.props.js +1 -1
- package/dist/esm/components/message-scroller.d.ts +86 -0
- package/dist/esm/components/message-scroller.d.ts.map +1 -0
- package/dist/esm/components/message-scroller.js +2 -0
- package/dist/esm/components/message-scroller.js.map +7 -0
- package/dist/esm/components/navbar.js +1 -1
- package/dist/esm/components/notice.d.ts +67 -0
- package/dist/esm/components/notice.d.ts.map +1 -0
- package/dist/esm/components/notice.js +2 -0
- package/dist/esm/components/notice.js.map +7 -0
- 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/quote.props.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/index.js +1 -1
- 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.js +1 -1
- package/dist/esm/components/sidebar.d.ts.map +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/strong.props.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/text.props.js +1 -1
- package/dist/esm/components/theme-panel.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/components/virtual-menu.js +1 -1
- package/dist/esm/helpers/extract-props.js +1 -1
- package/dist/esm/helpers/get-margin-styles.js +1 -1
- package/dist/esm/helpers/get-responsive-styles.js +1 -1
- package/dist/esm/helpers/index.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/props/index.js +1 -1
- package/package.json +2 -1
- package/src/components/_internal/base-sidebar-menu.css +2 -1
- package/src/components/chatbar.css +24 -0
- package/src/components/chatbar.tsx +102 -15
- package/src/components/index.css +2 -0
- package/src/components/index.tsx +7 -0
- package/src/components/message-scroller.css +54 -0
- package/src/components/message-scroller.tsx +165 -0
- package/src/components/notice.css +91 -0
- package/src/components/notice.tsx +151 -0
- package/src/components/sidebar.tsx +17 -28
- package/styles.css +169 -1
- package/dist/esm/chunk-3AOFY2B4.js +0 -2
- package/dist/esm/chunk-3AOFY2B4.js.map +0 -7
- package/dist/esm/chunk-3PTSRBVY.js +0 -2
- package/dist/esm/chunk-3PTSRBVY.js.map +0 -7
- package/dist/esm/chunk-GM7KMQDI.js +0 -2
- package/dist/esm/chunk-QDW5ZG5E.js +0 -1
- package/dist/esm/chunk-QEL55MLF.js +0 -2
- package/dist/esm/chunk-XDDKT4NF.js +0 -2
- /package/dist/esm/{chunk-WGWUEU4K.js.map → chunk-2I7QRVJ5.js.map} +0 -0
- /package/dist/esm/{chunk-EHBAK3LQ.js.map → chunk-43A5GUSI.js.map} +0 -0
- /package/dist/esm/{chunk-FEAOFF77.js.map → chunk-47LMOIW3.js.map} +0 -0
- /package/dist/esm/{chunk-GM7KMQDI.js.map → chunk-4JQZUQY7.js.map} +0 -0
- /package/dist/esm/{chunk-O4CSXNST.js.map → chunk-4ME6O27S.js.map} +0 -0
- /package/dist/esm/{chunk-OEEF6KJG.js.map → chunk-4XGGX2V2.js.map} +0 -0
- /package/dist/esm/{chunk-26I257HE.js.map → chunk-4XKK32M4.js.map} +0 -0
- /package/dist/esm/{chunk-MM5IHQFM.js.map → chunk-4YFJWXL2.js.map} +0 -0
- /package/dist/esm/{chunk-5TAHT6VC.js.map → chunk-5WRCK4R7.js.map} +0 -0
- /package/dist/esm/{chunk-POG3YABW.js.map → chunk-65GAANJD.js.map} +0 -0
- /package/dist/esm/{chunk-UBSLEGQZ.js.map → chunk-6FLLFCBU.js.map} +0 -0
- /package/dist/esm/{chunk-KV4SZP3F.js.map → chunk-73QGEY2I.js.map} +0 -0
- /package/dist/esm/{chunk-WQCB7KSH.js.map → chunk-7FC7HF76.js.map} +0 -0
- /package/dist/esm/{chunk-UNWPH3SO.js.map → chunk-7RQNB63F.js.map} +0 -0
- /package/dist/esm/{chunk-CRBOJ7N7.js.map → chunk-7UHKEJ7Q.js.map} +0 -0
- /package/dist/esm/{chunk-OJSOX3AX.js.map → chunk-ABSKRHVM.js.map} +0 -0
- /package/dist/esm/{chunk-7FKKGUHK.js.map → chunk-AGSSWWFI.js.map} +0 -0
- /package/dist/esm/{chunk-W2LD2YE6.js.map → chunk-ALWNS44Q.js.map} +0 -0
- /package/dist/esm/{chunk-Z7AZNMNX.js.map → chunk-BW5CO4PZ.js.map} +0 -0
- /package/dist/esm/{chunk-KEEPKI2X.js.map → chunk-CDG5WH4U.js.map} +0 -0
- /package/dist/esm/{chunk-IK3MQHA5.js.map → chunk-CIYF56YS.js.map} +0 -0
- /package/dist/esm/{chunk-JDEBKA56.js.map → chunk-CKMMUHKE.js.map} +0 -0
- /package/dist/esm/{chunk-TLGXIWAS.js.map → chunk-CRTH5LNU.js.map} +0 -0
- /package/dist/esm/{chunk-NTNMJX5M.js.map → chunk-CSKZZOI2.js.map} +0 -0
- /package/dist/esm/{chunk-4WU2WKUJ.js.map → chunk-CTA5ODAO.js.map} +0 -0
- /package/dist/esm/{chunk-PDUHBDFC.js.map → chunk-DSJY5RI3.js.map} +0 -0
- /package/dist/esm/{chunk-JDWCQ2XP.js.map → chunk-E67CIG6A.js.map} +0 -0
- /package/dist/esm/{chunk-WIDJYVZF.js.map → chunk-EPTYNVCU.js.map} +0 -0
- /package/dist/esm/{chunk-HMSSFU6I.js.map → chunk-ERY5TH2M.js.map} +0 -0
- /package/dist/esm/{chunk-LJCUPAOI.js.map → chunk-FG7XM7KJ.js.map} +0 -0
- /package/dist/esm/{chunk-ZJ33QP5N.js.map → chunk-FHOCUZDR.js.map} +0 -0
- /package/dist/esm/{chunk-2Q7BJ7YG.js.map → chunk-GLERJXVS.js.map} +0 -0
- /package/dist/esm/{chunk-PYXMGEO7.js.map → chunk-GO7OHBHW.js.map} +0 -0
- /package/dist/esm/{chunk-OQU2SKLN.js.map → chunk-HF5WY5YE.js.map} +0 -0
- /package/dist/esm/{chunk-25X75TI7.js.map → chunk-HJU4I34X.js.map} +0 -0
- /package/dist/esm/{chunk-CBNTPHYK.js.map → chunk-IHK3H2OM.js.map} +0 -0
- /package/dist/esm/{chunk-C5RVO3C3.js.map → chunk-JDGJSNWT.js.map} +0 -0
- /package/dist/esm/{chunk-QDW5ZG5E.js.map → chunk-JKS2YXMS.js.map} +0 -0
- /package/dist/esm/{chunk-PBFSBHBS.js.map → chunk-JUY7CBSL.js.map} +0 -0
- /package/dist/esm/{chunk-F3AXE27Q.js.map → chunk-K3UAS7RW.js.map} +0 -0
- /package/dist/esm/{chunk-FB3PD4Z3.js.map → chunk-KFR3CK24.js.map} +0 -0
- /package/dist/esm/{chunk-AIHQ3MVK.js.map → chunk-KJUDZCYK.js.map} +0 -0
- /package/dist/esm/{chunk-JRFZ535T.js.map → chunk-KMPE7TJ6.js.map} +0 -0
- /package/dist/esm/{chunk-5M7STAH3.js.map → chunk-KZWNGWIM.js.map} +0 -0
- /package/dist/esm/{chunk-H4GR4262.js.map → chunk-LXWPEDPZ.js.map} +0 -0
- /package/dist/esm/{chunk-QEL55MLF.js.map → chunk-MCQCG6AS.js.map} +0 -0
- /package/dist/esm/{chunk-JQW4XYBS.js.map → chunk-MEO7MJMQ.js.map} +0 -0
- /package/dist/esm/{chunk-QJVAS7AK.js.map → chunk-MS5J4MF6.js.map} +0 -0
- /package/dist/esm/{chunk-44JZYS7A.js.map → chunk-MWIIGYAJ.js.map} +0 -0
- /package/dist/esm/{chunk-MBCQA7UZ.js.map → chunk-N4GTDLRD.js.map} +0 -0
- /package/dist/esm/{chunk-NV3P2CKH.js.map → chunk-NIM7DIVH.js.map} +0 -0
- /package/dist/esm/{chunk-ZW26J2SA.js.map → chunk-OGXZHAQL.js.map} +0 -0
- /package/dist/esm/{chunk-WJBOOAIO.js.map → chunk-OLAWVEAI.js.map} +0 -0
- /package/dist/esm/{chunk-JQSZF3E2.js.map → chunk-OMGZG52I.js.map} +0 -0
- /package/dist/esm/{chunk-HBIF43PT.js.map → chunk-PHC3QBV3.js.map} +0 -0
- /package/dist/esm/{chunk-OTKQN2KY.js.map → chunk-PZ7OYATT.js.map} +0 -0
- /package/dist/esm/{chunk-P27KV2LS.js.map → chunk-QWVU2TW4.js.map} +0 -0
- /package/dist/esm/{chunk-6J6YX2VX.js.map → chunk-RNTCHVFI.js.map} +0 -0
- /package/dist/esm/{chunk-IDUVJJYG.js.map → chunk-S5C5YRBS.js.map} +0 -0
- /package/dist/esm/{chunk-RY67WG3O.js.map → chunk-T4OR62DQ.js.map} +0 -0
- /package/dist/esm/{chunk-AO32NT75.js.map → chunk-UBOOUDS4.js.map} +0 -0
- /package/dist/esm/{chunk-DCIQHXAR.js.map → chunk-VHECAEUP.js.map} +0 -0
- /package/dist/esm/{chunk-QEGEUD4D.js.map → chunk-VNH7BJOA.js.map} +0 -0
- /package/dist/esm/{chunk-GGSJXOKR.js.map → chunk-VR7ZAFYN.js.map} +0 -0
- /package/dist/esm/{chunk-ODCVOXEV.js.map → chunk-VX6ARMWP.js.map} +0 -0
- /package/dist/esm/{chunk-G4YKBAZT.js.map → chunk-VZSQATP6.js.map} +0 -0
- /package/dist/esm/{chunk-YVSM2LGS.js.map → chunk-WGYUWEQV.js.map} +0 -0
- /package/dist/esm/{chunk-7NYODT3Z.js.map → chunk-WHFJ4JUN.js.map} +0 -0
- /package/dist/esm/{chunk-YG66IRW4.js.map → chunk-X3JM2565.js.map} +0 -0
- /package/dist/esm/{chunk-XDDKT4NF.js.map → chunk-XI5YXUCK.js.map} +0 -0
- /package/dist/esm/{chunk-NQXRWBQM.js.map → chunk-Y5RCH23Z.js.map} +0 -0
- /package/dist/esm/{chunk-WZFVTC7P.js.map → chunk-YBSRX63K.js.map} +0 -0
- /package/dist/esm/{chunk-GDAKJS64.js.map → chunk-YWENWZOU.js.map} +0 -0
- /package/dist/esm/{chunk-7PMMYHZV.js.map → chunk-ZOY43B55.js.map} +0 -0
- /package/dist/esm/{chunk-VTIL55SR.js.map → chunk-ZZLZGHZQ.js.map} +0 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Notice and Confirmation — what the app tells the person while it is true.
|
|
5
|
+
*
|
|
6
|
+
* Two questions place every message: what is it about, and what made it appear.
|
|
7
|
+
*
|
|
8
|
+
* - **Notice** — a condition that is true now, which nobody just caused: a usage limit, a
|
|
9
|
+
* connection lost, a goal that finished. It takes space in the layout and never floats, so it
|
|
10
|
+
* cannot cover what it is about. At most one action, and that action FIXES the condition. A
|
|
11
|
+
* dismiss button only ACKNOWLEDGES it, and the app owns that state (`onDismiss`), because a
|
|
12
|
+
* component cannot remember a dismissal across a reload.
|
|
13
|
+
* - **Confirmation** — a question that waits for an answer: a quiet no before a loud yes, and no
|
|
14
|
+
* dismiss button, because closing a question does not answer it. It never takes focus, so a
|
|
15
|
+
* person can answer in the composer instead.
|
|
16
|
+
*
|
|
17
|
+
* Placement is the caller's. In a chat, both go in `Chatbar.Root`'s `notices`.
|
|
18
|
+
* A notice with no action and no dismiss button is just a sentence: use `Text`.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import * as React from 'react';
|
|
22
|
+
import classNames from 'classnames';
|
|
23
|
+
|
|
24
|
+
import { Button } from './button.js';
|
|
25
|
+
import { IconButton } from './icon-button.js';
|
|
26
|
+
import { Text } from './text.js';
|
|
27
|
+
import { accentColorPropDef } from '../props/color.prop.js';
|
|
28
|
+
|
|
29
|
+
type NoticeSize = '1' | '2' | '3';
|
|
30
|
+
|
|
31
|
+
/** The size a notice takes when it doesn't set one. `Chatbar.Root` provides its own size here. */
|
|
32
|
+
const NoticeSizeContext = React.createContext<NoticeSize | undefined>(undefined);
|
|
33
|
+
type NoticeColor = (typeof accentColorPropDef)['color']['values'][number];
|
|
34
|
+
|
|
35
|
+
interface StripProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'color' | 'children'> {
|
|
36
|
+
/** Padding, text and button size. Default `2`. */
|
|
37
|
+
size?: NoticeSize;
|
|
38
|
+
/**
|
|
39
|
+
* The category of the message, not its volume. Default `gray`. Use a colour only when it adds a
|
|
40
|
+
* fact the words don't already give, such as `red` for something that stops the next step.
|
|
41
|
+
*/
|
|
42
|
+
color?: NoticeColor;
|
|
43
|
+
/** `translucent` when content scrolls behind the strip. */
|
|
44
|
+
material?: 'solid' | 'translucent';
|
|
45
|
+
/** The message. */
|
|
46
|
+
children: React.ReactNode;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
interface NoticeProps extends StripProps {
|
|
50
|
+
/** An icon before the message. It is hidden from assistive technology. */
|
|
51
|
+
icon?: React.ReactNode;
|
|
52
|
+
/** One action that fixes the condition, such as `<Button>Add credits</Button>`. */
|
|
53
|
+
action?: React.ReactNode;
|
|
54
|
+
/**
|
|
55
|
+
* Called when the person presses the dismiss button, which shows only when this is set.
|
|
56
|
+
* Dismissing hides the message; it does not fix the condition. Remove the notice and remember
|
|
57
|
+
* the choice in your app.
|
|
58
|
+
*/
|
|
59
|
+
onDismiss?: () => void;
|
|
60
|
+
/** Accessible name of the dismiss button. Default "Dismiss". */
|
|
61
|
+
dismissLabel?: string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
interface ConfirmationProps extends StripProps {
|
|
65
|
+
/** The yes. Name the action, such as "Run" or "Allow up to $18". */
|
|
66
|
+
confirmLabel: string;
|
|
67
|
+
/** The no. Default "Not now". */
|
|
68
|
+
cancelLabel?: string;
|
|
69
|
+
onConfirm: () => void;
|
|
70
|
+
onCancel: () => void;
|
|
71
|
+
/** The yes is running: it shows a spinner and the no is disabled. */
|
|
72
|
+
busy?: boolean;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const Strip = React.forwardRef<HTMLDivElement, StripProps & { kind: 'notice' | 'confirmation'; trailing: React.ReactNode; leading?: React.ReactNode }>(
|
|
76
|
+
({ kind, size = '2', color = 'gray', material, className, children, trailing, leading, ...props }, forwardedRef) => (
|
|
77
|
+
<div
|
|
78
|
+
role="status"
|
|
79
|
+
aria-live="polite"
|
|
80
|
+
{...props}
|
|
81
|
+
ref={forwardedRef}
|
|
82
|
+
className={classNames('rt-NoticeRoot', `rt-r-size-${size}`, className)}
|
|
83
|
+
data-kind={kind}
|
|
84
|
+
data-accent-color={color}
|
|
85
|
+
data-material={material}
|
|
86
|
+
>
|
|
87
|
+
{leading ? (
|
|
88
|
+
<span className="rt-NoticeIcon" aria-hidden>
|
|
89
|
+
{leading}
|
|
90
|
+
</span>
|
|
91
|
+
) : null}
|
|
92
|
+
<Text as="div" size={size} className="rt-NoticeText">
|
|
93
|
+
{children}
|
|
94
|
+
</Text>
|
|
95
|
+
{trailing}
|
|
96
|
+
</div>
|
|
97
|
+
),
|
|
98
|
+
);
|
|
99
|
+
Strip.displayName = 'Strip';
|
|
100
|
+
|
|
101
|
+
/** A condition that is true now, with at most one action that fixes it. */
|
|
102
|
+
const Notice = React.forwardRef<HTMLDivElement, NoticeProps>(({ icon, action, onDismiss, dismissLabel = 'Dismiss', size: sizeProp, ...props }, forwardedRef) => {
|
|
103
|
+
const contextSize = React.useContext(NoticeSizeContext);
|
|
104
|
+
const size = sizeProp ?? contextSize ?? '2';
|
|
105
|
+
const trailing =
|
|
106
|
+
action || onDismiss ? (
|
|
107
|
+
<span className="rt-NoticeActions">
|
|
108
|
+
{action}
|
|
109
|
+
{onDismiss ? (
|
|
110
|
+
<IconButton size={size} variant="ghost" color="gray" aria-label={dismissLabel} className="rt-NoticeDismiss" onClick={onDismiss}>
|
|
111
|
+
<svg width="15" height="15" viewBox="0 0 15 15" fill="none" aria-hidden>
|
|
112
|
+
<path d="M4 4l7 7M11 4l-7 7" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" />
|
|
113
|
+
</svg>
|
|
114
|
+
</IconButton>
|
|
115
|
+
) : null}
|
|
116
|
+
</span>
|
|
117
|
+
) : null;
|
|
118
|
+
return <Strip {...props} size={size} ref={forwardedRef} kind="notice" leading={icon} trailing={trailing} />;
|
|
119
|
+
});
|
|
120
|
+
Notice.displayName = 'Notice';
|
|
121
|
+
|
|
122
|
+
/** A question that waits for an answer: a quiet no, a loud yes, and no dismiss button. */
|
|
123
|
+
const Confirmation = React.forwardRef<HTMLDivElement, ConfirmationProps>(
|
|
124
|
+
({ confirmLabel, cancelLabel = 'Not now', onConfirm, onCancel, busy = false, size: sizeProp, color = 'gray', ...props }, forwardedRef) => {
|
|
125
|
+
const contextSize = React.useContext(NoticeSizeContext);
|
|
126
|
+
const size = sizeProp ?? contextSize ?? '2';
|
|
127
|
+
return (
|
|
128
|
+
<Strip
|
|
129
|
+
{...props}
|
|
130
|
+
size={size}
|
|
131
|
+
color={color}
|
|
132
|
+
ref={forwardedRef}
|
|
133
|
+
kind="confirmation"
|
|
134
|
+
trailing={
|
|
135
|
+
<span className="rt-NoticeActions">
|
|
136
|
+
<Button size={size} variant="ghost" color="gray" disabled={busy} onClick={onCancel}>
|
|
137
|
+
{cancelLabel}
|
|
138
|
+
</Button>
|
|
139
|
+
<Button size={size} variant="solid" color={color} loading={busy} onClick={onConfirm}>
|
|
140
|
+
{confirmLabel}
|
|
141
|
+
</Button>
|
|
142
|
+
</span>
|
|
143
|
+
}
|
|
144
|
+
/>
|
|
145
|
+
);
|
|
146
|
+
},
|
|
147
|
+
);
|
|
148
|
+
Confirmation.displayName = 'Confirmation';
|
|
149
|
+
|
|
150
|
+
export { Notice, Confirmation, NoticeSizeContext };
|
|
151
|
+
export type { NoticeProps, ConfirmationProps };
|
|
@@ -211,11 +211,12 @@ const SidebarSeparator = React.forwardRef<React.ComponentRef<typeof Separator>,
|
|
|
211
211
|
));
|
|
212
212
|
SidebarSeparator.displayName = 'Sidebar.Separator';
|
|
213
213
|
|
|
214
|
-
// Menu components -
|
|
214
|
+
// Menu components - styled like dropdown menus, but semantically a navigation list.
|
|
215
|
+
// No menu/menuitem roles: those promise an application menu, which a list of links is not.
|
|
215
216
|
interface SidebarMenuProps extends React.ComponentPropsWithoutRef<'ul'> {}
|
|
216
217
|
|
|
217
218
|
const SidebarMenu = React.forwardRef<HTMLUListElement, SidebarMenuProps>(({ className, ...props }, forwardedRef) => (
|
|
218
|
-
<ul {...props} ref={forwardedRef}
|
|
219
|
+
<ul {...props} ref={forwardedRef} className={classNames('rt-SidebarMenu', className)} />
|
|
219
220
|
));
|
|
220
221
|
SidebarMenu.displayName = 'Sidebar.Menu';
|
|
221
222
|
|
|
@@ -282,33 +283,25 @@ const SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonP
|
|
|
282
283
|
|
|
283
284
|
const Comp = asChild ? Slot : 'button';
|
|
284
285
|
|
|
285
|
-
|
|
286
|
+
// Enter and Space are left to the native button or link. Arrow keys move between
|
|
287
|
+
// the visible buttons of the same sidebar, as a convenience on top of Tab.
|
|
286
288
|
const handleKeyDown = React.useCallback(
|
|
287
289
|
(event: React.KeyboardEvent<HTMLButtonElement>) => {
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
290
|
+
if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
|
|
291
|
+
const scope = event.currentTarget.closest('.rt-SidebarContent, .rt-SidebarSearchPopover');
|
|
292
|
+
const buttons = scope
|
|
293
|
+
? Array.from(scope.querySelectorAll<HTMLElement>('.rt-SidebarMenuButton')).filter((el) => el.offsetParent !== null)
|
|
294
|
+
: [];
|
|
295
|
+
const index = buttons.indexOf(event.currentTarget);
|
|
296
|
+
const next = buttons[index + (event.key === 'ArrowDown' ? 1 : -1)];
|
|
297
|
+
if (index !== -1 && next) {
|
|
291
298
|
event.preventDefault();
|
|
292
|
-
|
|
293
|
-
break;
|
|
294
|
-
case 'ArrowDown': {
|
|
295
|
-
event.preventDefault();
|
|
296
|
-
// Focus next menu item
|
|
297
|
-
const nextItem = (event.currentTarget as HTMLElement).nextElementSibling?.querySelector('[role="menuitem"]') as HTMLElement;
|
|
298
|
-
if (nextItem) nextItem.focus();
|
|
299
|
-
break;
|
|
300
|
-
}
|
|
301
|
-
case 'ArrowUp': {
|
|
302
|
-
event.preventDefault();
|
|
303
|
-
// Focus previous menu item
|
|
304
|
-
const prevItem = (event.currentTarget as HTMLElement).previousElementSibling?.querySelector('[role="menuitem"]') as HTMLElement;
|
|
305
|
-
if (prevItem) prevItem.focus();
|
|
306
|
-
break;
|
|
299
|
+
next.focus();
|
|
307
300
|
}
|
|
308
301
|
}
|
|
309
302
|
onKeyDown?.(event);
|
|
310
303
|
},
|
|
311
|
-
[
|
|
304
|
+
[onKeyDown],
|
|
312
305
|
);
|
|
313
306
|
|
|
314
307
|
// Memoize child processing to avoid re-traversal on every render
|
|
@@ -361,7 +354,6 @@ const SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonP
|
|
|
361
354
|
<Comp
|
|
362
355
|
{...props}
|
|
363
356
|
ref={forwardedRef}
|
|
364
|
-
role="menuitem"
|
|
365
357
|
aria-current={isActive ? 'page' : undefined}
|
|
366
358
|
className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-SidebarMenuButton', className)}
|
|
367
359
|
data-active={isActive || undefined}
|
|
@@ -458,7 +450,6 @@ const SidebarMenuSubTrigger = React.forwardRef<React.ElementRef<typeof Accordion
|
|
|
458
450
|
{...(props as any)}
|
|
459
451
|
ref={forwardedRef as any}
|
|
460
452
|
type="button"
|
|
461
|
-
role="menuitem"
|
|
462
453
|
aria-haspopup="menu"
|
|
463
454
|
className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-SidebarMenuButton', 'rt-SidebarMenuSubTrigger', className)}
|
|
464
455
|
>
|
|
@@ -475,8 +466,6 @@ const SidebarMenuSubTrigger = React.forwardRef<React.ElementRef<typeof Accordion
|
|
|
475
466
|
{...props}
|
|
476
467
|
ref={forwardedRef}
|
|
477
468
|
asChild={asChild}
|
|
478
|
-
role="menuitem"
|
|
479
|
-
aria-haspopup="true"
|
|
480
469
|
className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-SidebarMenuButton', 'rt-SidebarMenuSubTrigger', className)}
|
|
481
470
|
>
|
|
482
471
|
{asChild ? (
|
|
@@ -554,7 +543,7 @@ const SidebarMenuSubContent = React.forwardRef<React.ElementRef<typeof Accordion
|
|
|
554
543
|
});
|
|
555
544
|
SidebarMenuSubContent.displayName = 'Sidebar.MenuSubContent';
|
|
556
545
|
|
|
557
|
-
// Group components
|
|
546
|
+
// Group components. The label is plain text: no role, so it isn't announced as an empty group.
|
|
558
547
|
interface SidebarGroupProps extends React.ComponentPropsWithoutRef<'div'> {}
|
|
559
548
|
|
|
560
549
|
const SidebarGroup = React.forwardRef<HTMLDivElement, SidebarGroupProps>(({ className, ...props }, forwardedRef) => (
|
|
@@ -569,7 +558,7 @@ interface SidebarGroupLabelProps extends React.ComponentPropsWithoutRef<'div'> {
|
|
|
569
558
|
const SidebarGroupLabel = React.forwardRef<HTMLDivElement, SidebarGroupLabelProps>(({ asChild = false, className, ...props }, forwardedRef) => {
|
|
570
559
|
const Comp = asChild ? Slot : 'div';
|
|
571
560
|
|
|
572
|
-
return <Comp {...props} ref={forwardedRef}
|
|
561
|
+
return <Comp {...props} ref={forwardedRef} className={classNames('rt-BaseMenuLabel', 'rt-SidebarGroupLabel', className)} />;
|
|
573
562
|
});
|
|
574
563
|
SidebarGroupLabel.displayName = 'Sidebar.GroupLabel';
|
|
575
564
|
|
package/styles.css
CHANGED
|
@@ -21889,7 +21889,7 @@
|
|
|
21889
21889
|
padding-inline-end: var(--base-menu-item-padding-right);
|
|
21890
21890
|
-webkit-box-sizing: border-box;
|
|
21891
21891
|
box-sizing: border-box;
|
|
21892
|
-
color: var(--gray-
|
|
21892
|
+
color: var(--gray-a11);
|
|
21893
21893
|
-webkit-user-select: none;
|
|
21894
21894
|
-moz-user-select: none;
|
|
21895
21895
|
-ms-user-select: none;
|
|
@@ -26917,6 +26917,13 @@
|
|
|
26917
26917
|
}
|
|
26918
26918
|
.rt-ChatbarRoot {
|
|
26919
26919
|
--chatbar-attachment-thumb: var(--space-8);
|
|
26920
|
+
display: -webkit-box;
|
|
26921
|
+
display: -ms-flexbox;
|
|
26922
|
+
display: flex;
|
|
26923
|
+
-webkit-box-orient: vertical;
|
|
26924
|
+
-webkit-box-direction: normal;
|
|
26925
|
+
-ms-flex-direction: column;
|
|
26926
|
+
flex-direction: column;
|
|
26920
26927
|
}
|
|
26921
26928
|
.rt-ChatbarRoot:where([data-material='solid'],[data-panel-background='solid']) {
|
|
26922
26929
|
--material-blend: 100%;
|
|
@@ -27802,6 +27809,167 @@
|
|
|
27802
27809
|
--chatbar-attachments-radius: var(--radius-3);
|
|
27803
27810
|
}
|
|
27804
27811
|
}
|
|
27812
|
+
.rt-ChatbarNotices {
|
|
27813
|
+
display: -webkit-box;
|
|
27814
|
+
display: -ms-flexbox;
|
|
27815
|
+
display: flex;
|
|
27816
|
+
-webkit-box-orient: vertical;
|
|
27817
|
+
-webkit-box-direction: normal;
|
|
27818
|
+
-ms-flex-direction: column;
|
|
27819
|
+
flex-direction: column;
|
|
27820
|
+
gap: var(--space-2);
|
|
27821
|
+
margin-bottom: var(--space-2);
|
|
27822
|
+
}
|
|
27823
|
+
.rt-ChatbarContext {
|
|
27824
|
+
padding: var(--space-2) var(--space-3) 0;
|
|
27825
|
+
min-width: 0;
|
|
27826
|
+
overflow-wrap: anywhere;
|
|
27827
|
+
}
|
|
27828
|
+
.rt-MessageScrollerRoot {
|
|
27829
|
+
position: relative;
|
|
27830
|
+
display: -webkit-box;
|
|
27831
|
+
display: -ms-flexbox;
|
|
27832
|
+
display: flex;
|
|
27833
|
+
-webkit-box-orient: vertical;
|
|
27834
|
+
-webkit-box-direction: normal;
|
|
27835
|
+
-ms-flex-direction: column;
|
|
27836
|
+
flex-direction: column;
|
|
27837
|
+
min-height: 0;
|
|
27838
|
+
}
|
|
27839
|
+
.rt-MessageScrollerViewport {
|
|
27840
|
+
-webkit-box-flex: 1;
|
|
27841
|
+
-ms-flex: 1 1 auto;
|
|
27842
|
+
flex: 1 1 auto;
|
|
27843
|
+
min-height: 0;
|
|
27844
|
+
overflow-y: auto;
|
|
27845
|
+
overflow-x: hidden;
|
|
27846
|
+
-ms-scroll-chaining: none;
|
|
27847
|
+
overscroll-behavior: contain;
|
|
27848
|
+
scrollbar-width: thin;
|
|
27849
|
+
scrollbar-color: var(--gray-a6) transparent;
|
|
27850
|
+
outline: none;
|
|
27851
|
+
}
|
|
27852
|
+
.rt-MessageScrollerViewport:where(:focus-visible) {
|
|
27853
|
+
outline: 2px solid var(--focus-8);
|
|
27854
|
+
outline-offset: -2px;
|
|
27855
|
+
}
|
|
27856
|
+
.rt-MessageScrollerContent {
|
|
27857
|
+
display: -webkit-box;
|
|
27858
|
+
display: -ms-flexbox;
|
|
27859
|
+
display: flex;
|
|
27860
|
+
-webkit-box-orient: vertical;
|
|
27861
|
+
-webkit-box-direction: normal;
|
|
27862
|
+
-ms-flex-direction: column;
|
|
27863
|
+
flex-direction: column;
|
|
27864
|
+
min-height: 100%;
|
|
27865
|
+
}
|
|
27866
|
+
.rt-MessageScrollerItem {
|
|
27867
|
+
min-width: 0;
|
|
27868
|
+
}
|
|
27869
|
+
.rt-MessageScrollerButton {
|
|
27870
|
+
position: absolute;
|
|
27871
|
+
bottom: var(--space-3);
|
|
27872
|
+
left: 0;
|
|
27873
|
+
right: 0;
|
|
27874
|
+
margin-inline: auto;
|
|
27875
|
+
z-index: 1;
|
|
27876
|
+
}
|
|
27877
|
+
.rt-MessageScrollerButton:where([data-active='false']) {
|
|
27878
|
+
opacity: 0;
|
|
27879
|
+
pointer-events: none;
|
|
27880
|
+
}
|
|
27881
|
+
.rt-NoticeRoot {
|
|
27882
|
+
-webkit-box-sizing: border-box;
|
|
27883
|
+
box-sizing: border-box;
|
|
27884
|
+
display: -webkit-box;
|
|
27885
|
+
display: -ms-flexbox;
|
|
27886
|
+
display: flex;
|
|
27887
|
+
-webkit-box-align: center;
|
|
27888
|
+
-ms-flex-align: center;
|
|
27889
|
+
align-items: center;
|
|
27890
|
+
min-width: 0;
|
|
27891
|
+
color: var(--accent-ink);
|
|
27892
|
+
border-radius: var(--notice-radius);
|
|
27893
|
+
--material-blend: 100%;
|
|
27894
|
+
--material-alpha: 0;
|
|
27895
|
+
background-color: color-mix(in srgb, var(--accent-a3) calc(var(--material-alpha) * 100%), var(--accent-3) var(--material-blend));
|
|
27896
|
+
}
|
|
27897
|
+
.rt-NoticeRoot:where([data-material='translucent']) {
|
|
27898
|
+
--material-blend: 60%;
|
|
27899
|
+
--material-alpha: 1;
|
|
27900
|
+
backdrop-filter: var(--backdrop-filter-components-enabled);
|
|
27901
|
+
}
|
|
27902
|
+
@media (forced-colors: active) {
|
|
27903
|
+
.rt-NoticeRoot {
|
|
27904
|
+
border: 1px solid CanvasText;
|
|
27905
|
+
}
|
|
27906
|
+
}
|
|
27907
|
+
.rt-NoticeRoot:where([data-accent-color='gray']) {
|
|
27908
|
+
background-color: color-mix(in srgb, var(--gray-a3) calc(var(--material-alpha) * 100%), var(--gray-3) var(--material-blend));
|
|
27909
|
+
color: var(--gray-12);
|
|
27910
|
+
}
|
|
27911
|
+
.rt-NoticeIcon {
|
|
27912
|
+
display: -webkit-box;
|
|
27913
|
+
display: -ms-flexbox;
|
|
27914
|
+
display: flex;
|
|
27915
|
+
-webkit-box-flex: 0;
|
|
27916
|
+
-ms-flex: none;
|
|
27917
|
+
flex: none;
|
|
27918
|
+
-webkit-box-align: center;
|
|
27919
|
+
-ms-flex-align: center;
|
|
27920
|
+
align-items: center;
|
|
27921
|
+
}
|
|
27922
|
+
.rt-NoticeIcon :where(svg) {
|
|
27923
|
+
width: var(--notice-icon-size);
|
|
27924
|
+
height: var(--notice-icon-size);
|
|
27925
|
+
}
|
|
27926
|
+
.rt-NoticeText {
|
|
27927
|
+
-webkit-box-flex: 1;
|
|
27928
|
+
-ms-flex: 1 1 auto;
|
|
27929
|
+
flex: 1 1 auto;
|
|
27930
|
+
min-width: 0;
|
|
27931
|
+
overflow-wrap: anywhere;
|
|
27932
|
+
}
|
|
27933
|
+
.rt-NoticeActions {
|
|
27934
|
+
display: -webkit-box;
|
|
27935
|
+
display: -ms-flexbox;
|
|
27936
|
+
display: flex;
|
|
27937
|
+
-webkit-box-flex: 0;
|
|
27938
|
+
-ms-flex: none;
|
|
27939
|
+
flex: none;
|
|
27940
|
+
-webkit-box-align: center;
|
|
27941
|
+
-ms-flex-align: center;
|
|
27942
|
+
align-items: center;
|
|
27943
|
+
gap: var(--space-1);
|
|
27944
|
+
}
|
|
27945
|
+
.rt-NoticeRoot:where([data-kind='confirmation']) {
|
|
27946
|
+
-ms-flex-wrap: wrap;
|
|
27947
|
+
flex-wrap: wrap;
|
|
27948
|
+
}
|
|
27949
|
+
.rt-NoticeRoot:where([data-kind='confirmation']) :where(.rt-NoticeActions) {
|
|
27950
|
+
margin-left: auto;
|
|
27951
|
+
}
|
|
27952
|
+
.rt-NoticeRoot:where(.rt-r-size-1) {
|
|
27953
|
+
gap: var(--space-2);
|
|
27954
|
+
padding: var(--space-1) var(--space-1) var(--space-1) var(--space-3);
|
|
27955
|
+
min-height: calc(var(--space-6) + var(--space-2));
|
|
27956
|
+
--notice-radius: var(--radius-surface-1);
|
|
27957
|
+
--notice-icon-size: var(--content-icon-size-1);
|
|
27958
|
+
}
|
|
27959
|
+
.rt-NoticeRoot:where(.rt-r-size-2) {
|
|
27960
|
+
gap: var(--space-2);
|
|
27961
|
+
padding: var(--space-1) var(--space-1) var(--space-1) var(--space-3);
|
|
27962
|
+
min-height: calc(var(--space-7) + var(--space-2));
|
|
27963
|
+
--notice-radius: var(--radius-surface-2);
|
|
27964
|
+
--notice-icon-size: var(--content-icon-size-2);
|
|
27965
|
+
}
|
|
27966
|
+
.rt-NoticeRoot:where(.rt-r-size-3) {
|
|
27967
|
+
gap: var(--space-3);
|
|
27968
|
+
padding: var(--space-2) var(--space-2) var(--space-2) var(--space-4);
|
|
27969
|
+
min-height: calc(var(--space-8) + var(--space-2));
|
|
27970
|
+
--notice-radius: var(--radius-surface-3);
|
|
27971
|
+
--notice-icon-size: var(--content-icon-size-3);
|
|
27972
|
+
}
|
|
27805
27973
|
.radix-themes:where([data-is-root-theme='true']) {
|
|
27806
27974
|
position: relative;
|
|
27807
27975
|
z-index: 0;
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as w}from"./chunk-2CMM7MEL.js";import{a as U}from"./chunk-GGSJXOKR.js";import{a as j,b as _,c as O,e as B,f as q}from"./chunk-HBIF43PT.js";import{a as F,b as K,c as $}from"./chunk-7NYODT3Z.js";import{a as V}from"./chunk-4WU2WKUJ.js";import{d as W}from"./chunk-IX5HIHVI.js";import{a as T}from"./chunk-JRFZ535T.js";import{b as G}from"./chunk-SEY4NA45.js";import{b as E}from"./chunk-FWB47YCH.js";import{a as I}from"./chunk-JDWCQ2XP.js";import{a as A}from"./chunk-UBSLEGQZ.js";import{a as le}from"./chunk-OS3FCYZY.js";var fe={};le(fe,{Content:()=>Y,Footer:()=>ee,Group:()=>ce,GroupContent:()=>ue,GroupLabel:()=>de,Header:()=>Z,Menu:()=>re,MenuButton:()=>ne,MenuItem:()=>ae,MenuSub:()=>oe,MenuSubContent:()=>ie,MenuSubTrigger:()=>se,Root:()=>Q,Search:()=>pe,Separator:()=>te});import*as e from"react";import u from"classnames";import*as v from"@radix-ui/react-accordion";var J=e.createContext(null);function P(){return e.useContext(J)}var Q=e.forwardRef((t,a)=>{let n=G(),{size:r=w.size.default,variant:o=w.variant.default,menuVariant:d=w.menuVariant.default,layout:p=w.layout.default,presentation:m,panelBackground:y,color:s}=t,{className:l,children:b,...M}=A(t,w),{asChild:h,panelBackground:x,presentation:R,...g}=M,C=s||n.accentColor,c=m==="thin"?"rail":m==="expanded"?"panel":p||"panel",i=typeof r=="object"?r.initial||"2":r,f=e.useMemo(()=>({size:i,menuVariant:d,presentation:m,color:C}),[i,d,m,C]);return e.createElement("div",{...g,ref:a,"data-accent-color":C,className:u("rt-SidebarRoot",l)},e.createElement(J.Provider,{value:f},e.createElement("div",{className:u("rt-SidebarContainer",`rt-variant-${o}`,`rt-r-size-${i}`,`rt-menu-variant-${d}`,c&&`rt-layout-${c}`),"data-accent-color":C,"data-panel-background":y,"data-presentation":m,"data-layout":c},b)))});Q.displayName="Sidebar.Root";var Y=e.forwardRef(({className:t,children:a,role:n="navigation","aria-label":r="Main navigation",id:o,...d},p)=>{let m=P(),y=m?.size??"2",s=m?.menuVariant??"soft";return e.createElement(V,{type:"hover"},e.createElement("div",{...d,ref:p,id:o,role:n,"aria-label":r,className:u("rt-BaseMenuContent","rt-SidebarContent",`rt-r-size-${y}`,`rt-menu-variant-${s}`,t)},e.createElement("div",{className:"rt-BaseMenuViewport"},a)))});Y.displayName="Sidebar.Content";var Z=e.forwardRef(({className:t,asContainer:a=!0,...n},r)=>{let o=P(),d=o?.size??"2",p=o?.menuVariant??"soft";return e.createElement("div",{...n,ref:r,className:u("rt-SidebarHeader",`rt-r-size-${d}`,`rt-menu-variant-${p}`,{"rt-SidebarHeader--container":a},t)})});Z.displayName="Sidebar.Header";var ee=e.forwardRef(({className:t,asContainer:a=!0,...n},r)=>{let o=P(),d=o?.size??"2",p=o?.menuVariant??"soft";return e.createElement("div",{...n,ref:r,className:u("rt-SidebarFooter",`rt-r-size-${d}`,`rt-menu-variant-${p}`,{"rt-SidebarFooter--container":a},t)})});ee.displayName="Sidebar.Footer";var te=e.forwardRef(({className:t,...a},n)=>e.createElement(U,{...a,ref:n,className:u("rt-SidebarSeparator",t)}));te.displayName="Sidebar.Separator";var re=e.forwardRef(({className:t,...a},n)=>e.createElement("ul",{...a,ref:n,role:"menu",className:u("rt-SidebarMenu",t)}));re.displayName="Sidebar.Menu";var ae=e.forwardRef(({className:t,...a},n)=>e.createElement("li",{...a,ref:n,className:u("rt-SidebarMenuItem",t)}));ae.displayName="Sidebar.MenuItem";function me(t){let a=[],n=[];return e.Children.forEach(t,r=>{if(typeof r=="string"||typeof r=="number")n.push(e.createElement("span",{key:n.length,className:"rt-SidebarMenuLabel"},r));else if(e.isValidElement(r)){let o=r;o.type==="svg"||o.props&&o.props.icon||typeof o.type=="function"&&(o.type.displayName?.includes("Icon")||o.type.name?.includes("Icon"))?a.push(r):n.push(r)}else r&&n.push(r)}),{icons:a,labels:n}}function H(t){if(typeof t=="string"||typeof t=="number")return e.createElement("span",{className:"rt-SidebarMenuLabel"},t);if(Array.isArray(t))return t.map((a,n)=>e.createElement(e.Fragment,{key:n},H(a)));if(e.isValidElement(t)){let a=t,n=a.props&&a.props.className||"";if(typeof a.type=="string"&&n.split(" ").includes("rt-SidebarMenuLabel"))return a;let o=H(a.props?.children);return e.cloneElement(a,{...a.props},o)}return t}var ne=e.forwardRef(({asChild:t=!1,isActive:a=!1,shortcut:n,badge:r,className:o,children:d,onKeyDown:p,...m},y)=>{let s=P(),l=s?.size??"2",b=s?.presentation==="thin",M=t?E:"button",{onClick:h}=m,x=e.useCallback(i=>{switch(i.key){case"Enter":case" ":i.preventDefault(),h&&h(i);break;case"ArrowDown":{i.preventDefault();let f=i.currentTarget.nextElementSibling?.querySelector('[role="menuitem"]');f&&f.focus();break}case"ArrowUp":{i.preventDefault();let f=i.currentTarget.previousElementSibling?.querySelector('[role="menuitem"]');f&&f.focus();break}}p?.(i)},[h,p]),R=e.useMemo(()=>H(d),[d]),{icons:g,labels:C}=e.useMemo(()=>b?me(d):{icons:[],labels:[]},[b,d]),c=e.useMemo(()=>{if(!t)return null;try{let i=e.Children.only(R),f=i.props?.children,S=e.createElement(e.Fragment,null,f,r&&e.createElement("div",{className:"rt-SidebarMenuBadge"},typeof r=="string"?e.createElement(T,{size:l,variant:"soft"},r):e.createElement(T,{size:r.size||l,variant:r.variant||"soft",color:r.color,radius:r.radius},r.content)),n&&e.createElement("div",{className:"rt-BaseMenuShortcut rt-SidebarMenuShortcut"},e.createElement(I,{size:l},n)));return e.cloneElement(i,{...i.props},S)}catch{return R}},[t,R,r,n,l]);return e.createElement(M,{...m,ref:y,role:"menuitem","aria-current":a?"page":void 0,className:u("rt-reset","rt-BaseMenuItem","rt-SidebarMenuButton",o),"data-active":a||void 0,onKeyDown:x},t?c:b&&g.length>0?e.createElement(e.Fragment,null,e.createElement("span",{className:"rt-SidebarMenuIconWrapper"},g),C.map((i,f)=>e.createElement(e.Fragment,{key:f},typeof i=="string"||typeof i=="number"?e.createElement("span",{className:"rt-SidebarMenuLabel"},i):i))):e.createElement(e.Fragment,null,R,r&&e.createElement("div",{className:"rt-SidebarMenuBadge"},typeof r=="string"?e.createElement(T,{size:l,variant:"soft"},r):e.createElement(T,{size:r.size||l,variant:r.variant||"soft",color:r.color,radius:r.radius},r.content)),n&&e.createElement("div",{className:"rt-BaseMenuShortcut rt-SidebarMenuShortcut"},e.createElement(I,{size:l},n))))});ne.displayName="Sidebar.MenuButton";var D=e.createContext("accordion"),oe=e.forwardRef(({defaultOpen:t=!1,children:a,...n},r)=>(P()?.presentation==="thin"?"dropdown":"accordion")==="dropdown"?e.createElement("div",{...n,ref:r},e.createElement(j,null,e.createElement(D.Provider,{value:"dropdown"},a))):e.createElement("div",{...n,ref:r},e.createElement(D.Provider,{value:"accordion"},e.createElement(v.Root,{type:"single",collapsible:!0,defaultValue:t?"item":void 0},e.createElement(v.Item,{value:"item"},a)))));oe.displayName="Sidebar.MenuSub";var se=e.forwardRef(({asChild:t=!1,className:a,children:n,...r},o)=>e.useContext(D)==="dropdown"?e.createElement(_,null,e.createElement("button",{...r,ref:o,type:"button",role:"menuitem","aria-haspopup":"menu",className:u("rt-reset","rt-BaseMenuItem","rt-SidebarMenuButton","rt-SidebarMenuSubTrigger",a)},n)):e.createElement(v.Header,{asChild:!0},e.createElement("div",null,e.createElement(v.Trigger,{...r,ref:o,asChild:t,role:"menuitem","aria-haspopup":"true",className:u("rt-reset","rt-BaseMenuItem","rt-SidebarMenuButton","rt-SidebarMenuSubTrigger",a)},t?n:e.createElement(e.Fragment,null,n,e.createElement(W,{className:u("rt-BaseMenuSubTriggerIcon","rt-SidebarMenuSubTriggerIcon")}))))));se.displayName="Sidebar.MenuSubTrigger";var ie=e.forwardRef(({className:t,children:a,...n},r)=>{let o=P();if(e.useContext(D)==="dropdown"){let p=s=>{if(Array.isArray(s))return s.map((l,b)=>e.createElement(e.Fragment,{key:b},p(l)));if(e.isValidElement(s)){if(s.type?.displayName==="Sidebar.MenuButton")return s.props?.children;let b=s.props?.children;if(b!==void 0)return e.cloneElement(s,{...s.props,children:p(b)})}return s},m=e.Children.map(a,(s,l)=>{if(e.isValidElement(s)&&s.type?.displayName==="Sidebar.MenuItem"){let b=s.props?.children,M=p(b);return e.createElement(B,{key:l,asChild:!0},M)}return e.createElement(B,{key:l,asChild:!0},p(s))}),y=o?.size==="3"?"2":o?.size;return e.createElement(O,{size:y,variant:o?.menuVariant,className:u(t)},e.createElement(q,null,m))}return e.createElement(v.Content,{...n,ref:r,className:u("rt-SidebarMenuSubContent",t)},e.createElement("div",{className:"rt-SidebarMenuSubList"},a))});ie.displayName="Sidebar.MenuSubContent";var ce=e.forwardRef(({className:t,...a},n)=>e.createElement("div",{...a,ref:n,className:u("rt-BaseMenuGroup","rt-SidebarGroup",t)}));ce.displayName="Sidebar.Group";var de=e.forwardRef(({asChild:t=!1,className:a,...n},r)=>e.createElement(t?E:"div",{...n,ref:r,role:"group",className:u("rt-BaseMenuLabel","rt-SidebarGroupLabel",a)}));de.displayName="Sidebar.GroupLabel";var ue=e.forwardRef(({className:t,...a},n)=>e.createElement("div",{...a,ref:n,className:u("rt-SidebarGroupContent",t)}));ue.displayName="Sidebar.GroupContent";var k=({className:t})=>e.createElement("svg",{className:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true"},e.createElement("circle",{cx:"11",cy:"11",r:"8"}),e.createElement("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})),X=({className:t})=>e.createElement("svg",{className:t,width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true"},e.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),pe=e.forwardRef(({value:t,onValueChange:a,placeholder:n="Search...",children:r,className:o,...d},p)=>{let y=P()?.presentation==="thin",s=e.useRef(null),l=e.useRef(null),M=`${e.useId()}-results`,h=e.useRef(t);h.current=t;let x=e.useRef(a);x.current=a;let R=n.replace(/\.+$/,""),g=e.useCallback(c=>{c.key==="Escape"&&h.current&&(c.preventDefault(),c.stopPropagation(),x.current(""),s.current?.focus())},[]),C=e.useCallback(c=>{let i=l.current;if(!i)return;let f=i.querySelector('[role="group"]');if(!f)return;let S=Array.from(f.querySelectorAll("a, button"));if(S.length===0)return;let z=document.activeElement,L=z===s.current,N=S.indexOf(z);if(c.key.length===1&&!c.ctrlKey&&!c.metaKey&&!c.altKey&&!L&&N!==-1){s.current?.focus();return}switch(c.key){case"ArrowDown":{c.preventDefault(),L||N===-1?S[0]?.focus():N<S.length-1&&S[N+1]?.focus();break}case"ArrowUp":{c.preventDefault(),N<=0?s.current?.focus():S[N-1]?.focus();break}case"Home":{L||(c.preventDefault(),S[0]?.focus());break}case"End":{L||(c.preventDefault(),S[S.length-1]?.focus());break}}},[]);return y?e.createElement("div",{...d,ref:p,className:u("rt-SidebarSearch","rt-SidebarSearch--thin",o)},e.createElement(F,null,e.createElement(K,null,e.createElement("button",{type:"button",className:u("rt-reset","rt-BaseMenuItem","rt-SidebarMenuButton","rt-SidebarSearchTrigger"),"aria-label":R},e.createElement("span",{className:"rt-SidebarMenuIconWrapper"},e.createElement(k,null)),e.createElement("span",{className:"rt-SidebarMenuLabel"},"Search"))),e.createElement($,{side:"right",align:"start",size:"2",width:"280px","aria-label":R},e.createElement("div",{ref:l,className:"rt-SidebarSearchPopover",role:"search",onKeyDown:C},e.createElement("div",{className:"rt-SidebarSearchInputWrapper"},e.createElement(k,{className:"rt-SidebarSearchIcon"}),e.createElement("input",{ref:s,type:"search",className:"rt-SidebarSearchInput",value:t,onChange:c=>a(c.target.value),onKeyDown:g,placeholder:n,"aria-label":R,"aria-controls":r?M:void 0,autoFocus:!0}),t&&e.createElement("button",{type:"button",className:"rt-reset rt-SidebarSearchClear",onClick:()=>{a(""),s.current?.focus()},"aria-label":"Clear search"},e.createElement(X,null))),r&&e.createElement("div",{id:M,role:"group","aria-label":"Search results"},r))))):e.createElement("div",{...d,ref:p,className:u("rt-SidebarSearch","rt-SidebarSearch--expanded",o),role:"search"},e.createElement("div",{className:"rt-SidebarSearchInputWrapper"},e.createElement(k,{className:"rt-SidebarSearchIcon"}),e.createElement("input",{ref:s,type:"search",className:"rt-SidebarSearchInput",value:t,onChange:c=>a(c.target.value),onKeyDown:g,placeholder:n,"aria-label":R}),t&&e.createElement("button",{type:"button",className:"rt-reset rt-SidebarSearchClear",onClick:()=>{a(""),s.current?.focus()},"aria-label":"Clear search"},e.createElement(X,null))))});pe.displayName="Sidebar.Search";export{Q as a,Y as b,Z as c,ee as d,te as e,re as f,ae as g,ne as h,oe as i,se as j,ie as k,ce as l,de as m,ue as n,pe as o,fe as p};
|
|
2
|
-
//# sourceMappingURL=chunk-3AOFY2B4.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/sidebar.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { Slot } from './slot.js';\nimport * as Accordion from '@radix-ui/react-accordion';\nimport * as DropdownMenu from './dropdown-menu.js';\nimport * as Popover from './popover.js';\n\nimport { sidebarPropDefs } from './sidebar.props.js';\nimport { useThemeContext } from './theme.js';\n// import { IconButton } from './icon-button.js';\nimport { ScrollArea } from './scroll-area.js';\nimport { Separator } from './separator.js';\nimport { ThickChevronRightIcon } from './icons.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { Kbd } from './kbd.js';\nimport { Badge } from './badge.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\nimport type { BadgeProps } from './badge.js';\n\n// Badge configuration type for sidebar menu buttons\ntype BadgeConfig = {\n content: React.ReactNode;\n variant?: BadgeProps['variant'];\n size?: BadgeProps['size'];\n color?: BadgeProps['color'];\n radius?: BadgeProps['radius'];\n};\n\n// Internal presentational context (not exported) for size/menu variant\ntype SidebarVisualContextValue = {\n size: '1' | '2' | '3';\n menuVariant: 'solid' | 'soft';\n presentation?: 'thin' | 'expanded';\n color?: string;\n};\nconst SidebarVisualContext = React.createContext<SidebarVisualContextValue | null>(null);\nfunction useSidebarVisual() {\n return React.useContext(SidebarVisualContext);\n}\n\n// Sidebar is now independent of Shell - no integration needed\n\n// Main Sidebar component\ntype SidebarOwnProps = GetPropDefTypes<typeof sidebarPropDefs>;\ninterface SidebarProps extends ComponentPropsWithout<'div', RemovedProps>, SidebarOwnProps {\n /**\n * Presentational mode independent of Shell.\n * 'thin' renders a rail-style sidebar, 'expanded' renders a panel-style sidebar.\n * If both `presentation` and `layout` are provided, `presentation` takes precedence.\n */\n presentation?: 'thin' | 'expanded';\n}\n\nconst Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>((props, forwardedRef) => {\n const themeContext = useThemeContext();\n\n const {\n size = sidebarPropDefs.size.default,\n variant = sidebarPropDefs.variant.default,\n menuVariant = sidebarPropDefs.menuVariant.default,\n layout = sidebarPropDefs.layout.default,\n presentation,\n // type = sidebarPropDefs.type.default,\n // side = sidebarPropDefs.side.default,\n // collapsible = sidebarPropDefs.collapsible.default,\n panelBackground,\n color,\n } = props;\n\n const { className, children, ...rootProps } = extractProps(props, sidebarPropDefs);\n // Remove internal-only props from DOM\n const { asChild: _, panelBackground: __, presentation: ___, ...safeRootProps } = rootProps;\n const resolvedColor = color || themeContext.accentColor;\n\n // Resolve layout (default to 'panel'). `presentation` takes precedence over `layout`.\n const resolvedLayout = presentation === 'thin' ? 'rail' : presentation === 'expanded' ? 'panel' : layout || 'panel';\n\n // Update context with current props - we'll pass the resolved values\n const resolvedSize = typeof size === 'object' ? size.initial || '2' : size;\n const visualContextValue = React.useMemo(\n () => ({ size: resolvedSize, menuVariant, presentation, color: resolvedColor }),\n [resolvedSize, menuVariant, presentation, resolvedColor],\n );\n return (\n <div {...safeRootProps} ref={forwardedRef} data-accent-color={resolvedColor} className={classNames('rt-SidebarRoot', className)}>\n <SidebarVisualContext.Provider value={visualContextValue}>\n <div\n className={classNames('rt-SidebarContainer', `rt-variant-${variant}`, `rt-r-size-${resolvedSize}`, `rt-menu-variant-${menuVariant}`, resolvedLayout && `rt-layout-${resolvedLayout}`)}\n data-accent-color={resolvedColor}\n data-panel-background={panelBackground}\n data-presentation={presentation}\n data-layout={resolvedLayout}\n >\n {children}\n </div>\n </SidebarVisualContext.Provider>\n </div>\n );\n});\nSidebar.displayName = 'Sidebar.Root';\n\n// Sidebar content area\ninterface SidebarContentProps extends React.ComponentPropsWithoutRef<'div'> {\n id?: string;\n role?: 'navigation' | 'none';\n 'aria-label'?: string;\n}\n\nconst SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(\n ({ className, children, role = 'navigation', 'aria-label': ariaLabel = 'Main navigation', id, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const size = visual?.size ?? '2';\n const menuVariant = visual?.menuVariant ?? 'soft';\n\n return (\n <ScrollArea type=\"hover\">\n <div\n {...props}\n ref={forwardedRef}\n id={id}\n role={role}\n aria-label={ariaLabel}\n className={classNames('rt-BaseMenuContent', 'rt-SidebarContent', `rt-r-size-${size}`, `rt-menu-variant-${menuVariant}`, className)}\n >\n <div className=\"rt-BaseMenuViewport\">{children}</div>\n </div>\n </ScrollArea>\n );\n },\n);\nSidebarContent.displayName = 'Sidebar.Content';\n\n// Sidebar header\ninterface SidebarHeaderProps extends React.ComponentPropsWithoutRef<'div'> {\n /**\n * Whether to use the default flex container layout.\n * @default true\n */\n asContainer?: boolean;\n}\n\nconst SidebarHeader = React.forwardRef<HTMLDivElement, SidebarHeaderProps>(({ className, asContainer = true, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const size = visual?.size ?? '2';\n const menuVariant = visual?.menuVariant ?? 'soft';\n\n return (\n <div\n {...props}\n ref={forwardedRef}\n className={classNames(\n 'rt-SidebarHeader',\n `rt-r-size-${size}`,\n `rt-menu-variant-${menuVariant}`,\n {\n 'rt-SidebarHeader--container': asContainer,\n },\n className,\n )}\n />\n );\n});\nSidebarHeader.displayName = 'Sidebar.Header';\n\n// Sidebar footer\ninterface SidebarFooterProps extends React.ComponentPropsWithoutRef<'div'> {\n /**\n * Whether to use the default flex container layout.\n * @default true\n */\n asContainer?: boolean;\n}\n\nconst SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(({ className, asContainer = true, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const size = visual?.size ?? '2';\n const menuVariant = visual?.menuVariant ?? 'soft';\n\n return (\n <div\n {...props}\n ref={forwardedRef}\n className={classNames(\n 'rt-SidebarFooter',\n `rt-r-size-${size}`,\n `rt-menu-variant-${menuVariant}`,\n {\n 'rt-SidebarFooter--container': asContainer,\n },\n className,\n )}\n />\n );\n});\nSidebarFooter.displayName = 'Sidebar.Footer';\n\n// Sidebar trigger button\n// removed Trigger in presentational-only Sidebar\n\n// Removed SidebarInset - not needed\n\n// Sidebar separator\ninterface SidebarSeparatorProps extends ComponentPropsWithout<typeof Separator, RemovedProps> {}\n\nconst SidebarSeparator = React.forwardRef<React.ComponentRef<typeof Separator>, SidebarSeparatorProps>(({ className, ...props }, forwardedRef) => (\n <Separator {...props} ref={forwardedRef} className={classNames('rt-SidebarSeparator', className)} />\n));\nSidebarSeparator.displayName = 'Sidebar.Separator';\n\n// Menu components - reusing dropdown menu structure\ninterface SidebarMenuProps extends React.ComponentPropsWithoutRef<'ul'> {}\n\nconst SidebarMenu = React.forwardRef<HTMLUListElement, SidebarMenuProps>(({ className, ...props }, forwardedRef) => (\n <ul {...props} ref={forwardedRef} role=\"menu\" className={classNames('rt-SidebarMenu', className)} />\n));\nSidebarMenu.displayName = 'Sidebar.Menu';\n\ninterface SidebarMenuItemProps extends React.ComponentPropsWithoutRef<'li'> {}\n\nconst SidebarMenuItem = React.forwardRef<HTMLLIElement, SidebarMenuItemProps>(({ className, ...props }, forwardedRef) => (\n <li {...props} ref={forwardedRef} className={classNames('rt-SidebarMenuItem', className)} />\n));\nSidebarMenuItem.displayName = 'Sidebar.MenuItem';\n\ninterface SidebarMenuButtonProps extends React.ComponentPropsWithoutRef<'button'> {\n asChild?: boolean;\n isActive?: boolean;\n shortcut?: React.ReactNode;\n badge?: string | BadgeConfig;\n}\n\n// Extracted to module scope to avoid re-creation on every render\nfunction separateIconsAndLabels(node: React.ReactNode): { icons: React.ReactNode[]; labels: React.ReactNode[] } {\n const icons: React.ReactNode[] = [];\n const labels: React.ReactNode[] = [];\n\n React.Children.forEach(node, (child) => {\n if (typeof child === 'string' || typeof child === 'number') {\n labels.push(<span key={labels.length} className=\"rt-SidebarMenuLabel\">{child}</span>);\n } else if (React.isValidElement(child)) {\n const el = child as React.ReactElement<any>;\n if (el.type === 'svg' || (el.props && el.props.icon) || (typeof el.type === 'function' && ((el.type as any).displayName?.includes('Icon') || (el.type as any).name?.includes('Icon')))) {\n icons.push(child);\n } else {\n labels.push(child);\n }\n } else if (child) {\n labels.push(child);\n }\n });\n\n return { icons, labels };\n}\n\nfunction wrapTextNodes(node: React.ReactNode): React.ReactNode {\n if (typeof node === 'string' || typeof node === 'number') {\n return <span className=\"rt-SidebarMenuLabel\">{node}</span>;\n }\n if (Array.isArray(node)) {\n return node.map((child, index) => <React.Fragment key={index}>{wrapTextNodes(child)}</React.Fragment>);\n }\n if (React.isValidElement(node)) {\n const el = node as React.ReactElement<any>;\n const className: string = (el.props && (el.props as any).className) || '';\n const isAlreadyLabel = typeof el.type === 'string' && className.split(' ').includes('rt-SidebarMenuLabel');\n if (isAlreadyLabel) return el;\n const newChildren = wrapTextNodes((el.props as any)?.children);\n return React.cloneElement(el, { ...(el.props as any) }, newChildren);\n }\n return node;\n}\n\nconst SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonProps>(\n ({ asChild = false, isActive = false, shortcut, badge, className, children, onKeyDown, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const sidebarSize = visual?.size ?? '2';\n const isThinMode = visual?.presentation === 'thin';\n\n const Comp = asChild ? Slot : 'button';\n\n const { onClick } = props;\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (onClick) onClick(event as any);\n break;\n case 'ArrowDown': {\n event.preventDefault();\n // Focus next menu item\n const nextItem = (event.currentTarget as HTMLElement).nextElementSibling?.querySelector('[role=\"menuitem\"]') as HTMLElement;\n if (nextItem) nextItem.focus();\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n // Focus previous menu item\n const prevItem = (event.currentTarget as HTMLElement).previousElementSibling?.querySelector('[role=\"menuitem\"]') as HTMLElement;\n if (prevItem) prevItem.focus();\n break;\n }\n }\n onKeyDown?.(event);\n },\n [onClick, onKeyDown],\n );\n\n // Memoize child processing to avoid re-traversal on every render\n const processedChildren = React.useMemo(() => wrapTextNodes(children), [children]);\n\n // For thin mode, separate icons into a wrapper for targeted background styling\n const { icons, labels } = React.useMemo(\n () => isThinMode ? separateIconsAndLabels(children) : { icons: [] as React.ReactNode[], labels: [] as React.ReactNode[] },\n [isThinMode, children],\n );\n\n // When rendering asChild, Slot expects a single child element. We still want to\n // append optional badge/shortcut inside that element so they render with Link.\n const slottedChildren = React.useMemo(() => {\n if (!asChild) return null;\n try {\n const onlyChild = React.Children.only(processedChildren as React.ReactElement<any>) as React.ReactElement<any>;\n const originalInnerChildren = (onlyChild.props as any)?.children;\n const enhancedInnerChildren = (\n <>\n {originalInnerChildren}\n {badge && (\n <div className=\"rt-SidebarMenuBadge\">\n {typeof badge === 'string' ? (\n <Badge size={sidebarSize} variant=\"soft\">\n {badge}\n </Badge>\n ) : (\n <Badge size={badge.size || sidebarSize} variant={badge.variant || 'soft'} color={badge.color} radius={badge.radius}>\n {badge.content}\n </Badge>\n )}\n </div>\n )}\n {shortcut && (\n <div className=\"rt-BaseMenuShortcut rt-SidebarMenuShortcut\">\n <Kbd size={sidebarSize}>{shortcut}</Kbd>\n </div>\n )}\n </>\n );\n return React.cloneElement(onlyChild, { ...(onlyChild.props as any) }, enhancedInnerChildren);\n } catch {\n // Fallback: if multiple children were passed incorrectly, just return processedChildren\n return processedChildren as React.ReactNode;\n }\n }, [asChild, processedChildren, badge, shortcut, sidebarSize]);\n\n return (\n <Comp\n {...props}\n ref={forwardedRef}\n role=\"menuitem\"\n aria-current={isActive ? 'page' : undefined}\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-SidebarMenuButton', className)}\n data-active={isActive || undefined}\n onKeyDown={handleKeyDown}\n >\n {asChild ? (\n slottedChildren\n ) : isThinMode && icons.length > 0 ? (\n <>\n <span className=\"rt-SidebarMenuIconWrapper\">{icons}</span>\n {labels.map((label, index) => (\n <React.Fragment key={index}>\n {typeof label === 'string' || typeof label === 'number' ? (\n <span className=\"rt-SidebarMenuLabel\">{label}</span>\n ) : (\n label\n )}\n </React.Fragment>\n ))}\n </>\n ) : (\n <>\n {processedChildren}\n {badge && (\n <div className=\"rt-SidebarMenuBadge\">\n {typeof badge === 'string' ? (\n <Badge size={sidebarSize} variant=\"soft\">\n {badge}\n </Badge>\n ) : (\n <Badge size={badge.size || sidebarSize} variant={badge.variant || 'soft'} color={badge.color} radius={badge.radius}>\n {badge.content}\n </Badge>\n )}\n </div>\n )}\n {shortcut && (\n <div className=\"rt-BaseMenuShortcut rt-SidebarMenuShortcut\">\n <Kbd size={sidebarSize}>{shortcut}</Kbd>\n </div>\n )}\n </>\n )}\n </Comp>\n );\n },\n);\nSidebarMenuButton.displayName = 'Sidebar.MenuButton';\n\n// Sub-menu components: Accordion in expanded, Dropdown in thin\nconst SidebarSubMenuModeContext = React.createContext<'accordion' | 'dropdown'>('accordion');\ninterface SidebarMenuSubProps extends React.ComponentPropsWithoutRef<'div'> {\n defaultOpen?: boolean;\n}\n\nconst SidebarMenuSub = React.forwardRef<HTMLDivElement, SidebarMenuSubProps>(({ defaultOpen = false, children, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const mode: 'accordion' | 'dropdown' = visual?.presentation === 'thin' ? 'dropdown' : 'accordion';\n\n if (mode === 'dropdown') {\n return (\n <div {...props} ref={forwardedRef}>\n <DropdownMenu.Root>\n <SidebarSubMenuModeContext.Provider value=\"dropdown\">{children}</SidebarSubMenuModeContext.Provider>\n </DropdownMenu.Root>\n </div>\n );\n }\n\n return (\n <div {...props} ref={forwardedRef}>\n <SidebarSubMenuModeContext.Provider value=\"accordion\">\n <Accordion.Root type=\"single\" collapsible defaultValue={defaultOpen ? 'item' : undefined}>\n <Accordion.Item value=\"item\">{children}</Accordion.Item>\n </Accordion.Root>\n </SidebarSubMenuModeContext.Provider>\n </div>\n );\n});\nSidebarMenuSub.displayName = 'Sidebar.MenuSub';\n\ninterface SidebarMenuSubTriggerProps extends React.ComponentPropsWithoutRef<typeof Accordion.Trigger> {\n asChild?: boolean;\n}\n\nconst SidebarMenuSubTrigger = React.forwardRef<React.ElementRef<typeof Accordion.Trigger>, SidebarMenuSubTriggerProps>(\n ({ asChild = false, className, children, ...props }, forwardedRef) => {\n const mode = React.useContext(SidebarSubMenuModeContext);\n\n if (mode === 'dropdown') {\n return (\n <DropdownMenu.Trigger>\n <button\n {...(props as any)}\n ref={forwardedRef as any}\n type=\"button\"\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-SidebarMenuButton', 'rt-SidebarMenuSubTrigger', className)}\n >\n {children}\n </button>\n </DropdownMenu.Trigger>\n );\n }\n\n return (\n <Accordion.Header asChild>\n <div>\n <Accordion.Trigger\n {...props}\n ref={forwardedRef}\n asChild={asChild}\n role=\"menuitem\"\n aria-haspopup=\"true\"\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-SidebarMenuButton', 'rt-SidebarMenuSubTrigger', className)}\n >\n {asChild ? (\n children\n ) : (\n <>\n {children}\n <ThickChevronRightIcon className={classNames('rt-BaseMenuSubTriggerIcon', 'rt-SidebarMenuSubTriggerIcon')} />\n </>\n )}\n </Accordion.Trigger>\n </div>\n </Accordion.Header>\n );\n },\n);\nSidebarMenuSubTrigger.displayName = 'Sidebar.MenuSubTrigger';\n\ninterface SidebarMenuSubContentProps extends React.ComponentPropsWithoutRef<typeof Accordion.Content> {}\n\nconst SidebarMenuSubContent = React.forwardRef<React.ElementRef<typeof Accordion.Content>, SidebarMenuSubContentProps>(({ className, children, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const mode = React.useContext(SidebarSubMenuModeContext);\n\n if (mode === 'dropdown') {\n const unwrapMenuButton = (node: React.ReactNode): React.ReactNode => {\n if (Array.isArray(node)) {\n return node.map((n, i) => <React.Fragment key={i}>{unwrapMenuButton(n)}</React.Fragment>);\n }\n if (React.isValidElement(node)) {\n const typeDisplay = (node.type as any)?.displayName;\n if (typeDisplay === 'Sidebar.MenuButton') {\n return (node.props as any)?.children;\n }\n const child = (node.props as any)?.children;\n if (child !== undefined) {\n return React.cloneElement(node as any, { ...(node.props as any), children: unwrapMenuButton(child) });\n }\n }\n return node;\n };\n\n const normalized = React.Children.map(children as React.ReactNode, (child, index) => {\n if (React.isValidElement(child) && (child.type as any)?.displayName === 'Sidebar.MenuItem') {\n const itemChildren = (child.props as any)?.children;\n const content = unwrapMenuButton(itemChildren);\n return (\n <DropdownMenu.Item key={index} asChild>\n {content as any}\n </DropdownMenu.Item>\n );\n }\n // Fallback: wrap raw nodes too for consistent menu styling\n return (\n <DropdownMenu.Item key={index} asChild>\n {unwrapMenuButton(child) as any}\n </DropdownMenu.Item>\n );\n });\n\n // DropdownMenu only supports sizes 1 and 2, so map size 3 to 2\n const dropdownSize = visual?.size === '3' ? '2' : visual?.size;\n return (\n <DropdownMenu.Content size={dropdownSize} variant={visual?.menuVariant} className={classNames(className)}>\n <DropdownMenu.Group>{normalized}</DropdownMenu.Group>\n </DropdownMenu.Content>\n );\n }\n\n return (\n <Accordion.Content {...props} ref={forwardedRef} className={classNames('rt-SidebarMenuSubContent', className)}>\n <div className=\"rt-SidebarMenuSubList\">{children}</div>\n </Accordion.Content>\n );\n});\nSidebarMenuSubContent.displayName = 'Sidebar.MenuSubContent';\n\n// Group components\ninterface SidebarGroupProps extends React.ComponentPropsWithoutRef<'div'> {}\n\nconst SidebarGroup = React.forwardRef<HTMLDivElement, SidebarGroupProps>(({ className, ...props }, forwardedRef) => (\n <div {...props} ref={forwardedRef} className={classNames('rt-BaseMenuGroup', 'rt-SidebarGroup', className)} />\n));\nSidebarGroup.displayName = 'Sidebar.Group';\n\ninterface SidebarGroupLabelProps extends React.ComponentPropsWithoutRef<'div'> {\n asChild?: boolean;\n}\n\nconst SidebarGroupLabel = React.forwardRef<HTMLDivElement, SidebarGroupLabelProps>(({ asChild = false, className, ...props }, forwardedRef) => {\n const Comp = asChild ? Slot : 'div';\n\n return <Comp {...props} ref={forwardedRef} role=\"group\" className={classNames('rt-BaseMenuLabel', 'rt-SidebarGroupLabel', className)} />;\n});\nSidebarGroupLabel.displayName = 'Sidebar.GroupLabel';\n\ninterface SidebarGroupContentProps extends React.ComponentPropsWithoutRef<'div'> {}\n\nconst SidebarGroupContent = React.forwardRef<HTMLDivElement, SidebarGroupContentProps>(({ className, ...props }, forwardedRef) => (\n <div {...props} ref={forwardedRef} className={classNames('rt-SidebarGroupContent', className)} />\n));\nSidebarGroupContent.displayName = 'Sidebar.GroupContent';\n\n// Search component: inline input in expanded, popover trigger in thin\ninterface SidebarSearchProps extends React.ComponentPropsWithoutRef<'div'> {\n value: string;\n onValueChange: (value: string) => void;\n placeholder?: string;\n children?: React.ReactNode;\n}\n\nconst SearchIcon = ({ className }: { className?: string }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n);\n\nconst ClearIcon = ({ className }: { className?: string }) => (\n <svg className={className} width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n);\n\nconst SidebarSearch = React.forwardRef<HTMLDivElement, SidebarSearchProps>(\n ({ value, onValueChange, placeholder = 'Search...', children, className, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const isThin = visual?.presentation === 'thin';\n const inputRef = React.useRef<HTMLInputElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const searchId = React.useId();\n const resultsId = `${searchId}-results`;\n\n // Stable refs for values used in callbacks \u2014 avoids recreating handlers on every keystroke\n const valueRef = React.useRef(value);\n valueRef.current = value;\n const onValueChangeRef = React.useRef(onValueChange);\n onValueChangeRef.current = onValueChange;\n\n // Derive a clean aria-label from placeholder (strip trailing dots/ellipsis)\n const searchLabel = placeholder.replace(/\\.+$/, '');\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Escape' && valueRef.current) {\n e.preventDefault();\n e.stopPropagation();\n onValueChangeRef.current('');\n inputRef.current?.focus();\n }\n },\n [],\n );\n\n // Arrow key navigation within the popover (input \u2194 results)\n const handlePopoverKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n const container = popoverRef.current;\n if (!container) return;\n\n const resultsGroup = container.querySelector('[role=\"group\"]');\n if (!resultsGroup) return;\n\n const items = Array.from(\n resultsGroup.querySelectorAll<HTMLElement>('a, button'),\n );\n if (items.length === 0) return;\n\n const active = document.activeElement as HTMLElement;\n const isOnInput = active === inputRef.current;\n const currentIndex = items.indexOf(active);\n\n // Typing while a result is focused \u2192 redirect focus to input\n if (\n e.key.length === 1 &&\n !e.ctrlKey &&\n !e.metaKey &&\n !e.altKey &&\n !isOnInput &&\n currentIndex !== -1\n ) {\n inputRef.current?.focus();\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n if (isOnInput || currentIndex === -1) {\n items[0]?.focus();\n } else if (currentIndex < items.length - 1) {\n items[currentIndex + 1]?.focus();\n }\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n if (currentIndex <= 0) {\n inputRef.current?.focus();\n } else {\n items[currentIndex - 1]?.focus();\n }\n break;\n }\n case 'Home': {\n // Only intercept when focused on a result, not the input (where Home moves cursor)\n if (!isOnInput) {\n e.preventDefault();\n items[0]?.focus();\n }\n break;\n }\n case 'End': {\n if (!isOnInput) {\n e.preventDefault();\n items[items.length - 1]?.focus();\n }\n break;\n }\n }\n },\n [],\n );\n\n if (isThin) {\n return (\n <div {...props} ref={forwardedRef} className={classNames('rt-SidebarSearch', 'rt-SidebarSearch--thin', className)}>\n <Popover.Root>\n <Popover.Trigger>\n <button\n type=\"button\"\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-SidebarMenuButton', 'rt-SidebarSearchTrigger')}\n aria-label={searchLabel}\n >\n <span className=\"rt-SidebarMenuIconWrapper\">\n <SearchIcon />\n </span>\n <span className=\"rt-SidebarMenuLabel\">Search</span>\n </button>\n </Popover.Trigger>\n <Popover.Content side=\"right\" align=\"start\" size=\"2\" width=\"280px\" aria-label={searchLabel}>\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- keyDown manages arrow-key navigation between input and results, which is accessibility-enhancing */}\n <div\n ref={popoverRef}\n className=\"rt-SidebarSearchPopover\"\n role=\"search\"\n onKeyDown={handlePopoverKeyDown}\n >\n <div className=\"rt-SidebarSearchInputWrapper\">\n <SearchIcon className=\"rt-SidebarSearchIcon\" />\n <input\n ref={inputRef}\n type=\"search\"\n className=\"rt-SidebarSearchInput\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n aria-label={searchLabel}\n aria-controls={children ? resultsId : undefined}\n // eslint-disable-next-line jsx-a11y/no-autofocus -- intentional: popover opens on user action, focusing the input is expected UX\n autoFocus\n />\n {value && (\n <button\n type=\"button\"\n className=\"rt-reset rt-SidebarSearchClear\"\n onClick={() => {\n onValueChange('');\n inputRef.current?.focus();\n }}\n aria-label=\"Clear search\"\n >\n <ClearIcon />\n </button>\n )}\n </div>\n {children && (\n <div id={resultsId} role=\"group\" aria-label=\"Search results\">\n {children}\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover.Root>\n </div>\n );\n }\n\n // Expanded mode: inline input\n return (\n <div {...props} ref={forwardedRef} className={classNames('rt-SidebarSearch', 'rt-SidebarSearch--expanded', className)} role=\"search\">\n <div className=\"rt-SidebarSearchInputWrapper\">\n <SearchIcon className=\"rt-SidebarSearchIcon\" />\n <input\n ref={inputRef}\n type=\"search\"\n className=\"rt-SidebarSearchInput\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n aria-label={searchLabel}\n />\n {value && (\n <button\n type=\"button\"\n className=\"rt-reset rt-SidebarSearchClear\"\n onClick={() => {\n onValueChange('');\n inputRef.current?.focus();\n }}\n aria-label=\"Clear search\"\n >\n <ClearIcon />\n </button>\n )}\n </div>\n </div>\n );\n },\n);\nSidebarSearch.displayName = 'Sidebar.Search';\n\n// Export all components following shadcn's pattern\nexport {\n Sidebar as Root,\n SidebarContent as Content,\n SidebarHeader as Header,\n SidebarFooter as Footer,\n SidebarSeparator as Separator,\n SidebarMenu as Menu,\n SidebarMenuItem as MenuItem,\n SidebarMenuButton as MenuButton,\n SidebarMenuSub as MenuSub,\n SidebarMenuSubTrigger as MenuSubTrigger,\n SidebarMenuSubContent as MenuSubContent,\n SidebarGroup as Group,\n SidebarGroupLabel as GroupLabel,\n SidebarGroupContent as GroupContent,\n SidebarSearch as Search,\n};\n\n/**\n * Enhanced Sidebar Header and Footer Usage Examples:\n *\n * 1. Simple default container (backwards compatible):\n * <Sidebar.Header>\n * <Logo />\n * <span>App Name</span>\n * </Sidebar.Header>\n *\n * 2. Custom flex layout:\n * <Sidebar.Header className=\"rt-justify-between rt-gap-3\">\n * <Logo />\n * <Sidebar.MenuButton>\n * <SettingsIcon />\n * </Sidebar.MenuButton>\n * </Sidebar.Header>\n *\n * 3. Column layout for multiple rows:\n * <Sidebar.Header className=\"rt-flex-col rt-gap-2\" asContainer={false}>\n * <div className=\"rt-flex rt-items-center rt-gap-2\">\n * <Logo />\n * <span>App Name</span>\n * </div>\n * <Sidebar.MenuButton>\n * <UserAvatar />\n * <span>John Doe</span>\n * </Sidebar.MenuButton>\n * </Sidebar.Header>\n *\n * 4. Interactive footer with menu button:\n * <Sidebar.Footer>\n * <Sidebar.MenuButton>\n * <UserIcon />\n * <span>Settings</span>\n * <ChevronUpIcon />\n * </Sidebar.MenuButton>\n * </Sidebar.Footer>\n *\n * 5. Custom footer layout:\n * <Sidebar.Footer className=\"rt-justify-between\">\n * <span>v1.0.0</span>\n * <Sidebar.MenuButton>\n * <HelpIcon />\n * </Sidebar.MenuButton>\n * </Sidebar.Footer>\n *\n * Available utility classes:\n * - Layout: rt-flex-row, rt-flex-col\n * - Alignment: rt-items-center, rt-items-start, rt-items-end\n * - Justification: rt-justify-between, rt-justify-center, rt-justify-start, rt-justify-end\n * - Gap: rt-gap-1, rt-gap-2, rt-gap-3, rt-gap-4\n */\n\nexport type { SidebarProps as RootProps, SidebarContentProps as ContentProps, SidebarHeaderProps as HeaderProps, SidebarFooterProps as FooterProps, BadgeConfig };\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["sidebar_exports", "__export", "SidebarContent", "SidebarFooter", "SidebarGroup", "SidebarGroupContent", "SidebarGroupLabel", "SidebarHeader", "SidebarMenu", "SidebarMenuButton", "SidebarMenuItem", "SidebarMenuSub", "SidebarMenuSubContent", "SidebarMenuSubTrigger", "Sidebar", "SidebarSearch", "SidebarSeparator", "React", "classNames", "Accordion", "SidebarVisualContext", "useSidebarVisual", "Sidebar", "props", "forwardedRef", "themeContext", "useThemeContext", "size", "sidebarPropDefs", "variant", "menuVariant", "layout", "presentation", "panelBackground", "color", "className", "children", "rootProps", "extractProps", "_", "__", "___", "safeRootProps", "resolvedColor", "resolvedLayout", "resolvedSize", "visualContextValue", "classNames", "SidebarContent", "role", "ariaLabel", "id", "visual", "ScrollArea", "SidebarHeader", "asContainer", "SidebarFooter", "SidebarSeparator", "Separator", "SidebarMenu", "SidebarMenuItem", "separateIconsAndLabels", "node", "icons", "labels", "child", "el", "wrapTextNodes", "index", "newChildren", "SidebarMenuButton", "asChild", "isActive", "shortcut", "badge", "onKeyDown", "sidebarSize", "isThinMode", "Comp", "Slot", "onClick", "handleKeyDown", "event", "nextItem", "prevItem", "processedChildren", "slottedChildren", "onlyChild", "originalInnerChildren", "enhancedInnerChildren", "Badge", "Kbd", "label", "SidebarSubMenuModeContext", "SidebarMenuSub", "defaultOpen", "DropdownMenuRoot", "SidebarMenuSubTrigger", "DropdownMenuTrigger", "ThickChevronRightIcon", "SidebarMenuSubContent", "unwrapMenuButton", "n", "i", "normalized", "itemChildren", "content", "DropdownMenuItem", "dropdownSize", "DropdownMenuContent", "DropdownMenuGroup", "SidebarGroup", "SidebarGroupLabel", "SidebarGroupContent", "SearchIcon", "ClearIcon", "SidebarSearch", "value", "onValueChange", "placeholder", "isThin", "inputRef", "popoverRef", "resultsId", "valueRef", "onValueChangeRef", "searchLabel", "e", "handlePopoverKeyDown", "container", "resultsGroup", "items", "active", "isOnInput", "currentIndex", "PopoverRoot", "PopoverTrigger", "PopoverContent"]
|
|
7
|
-
}
|