@flamingo-stack/openframe-frontend-core 0.0.518-1660.4292.1 → 0.0.518
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/dist/{chunk-3LMOLDFT.cjs → chunk-262OTU4W.cjs} +14 -14
- package/dist/{chunk-3LMOLDFT.cjs.map → chunk-262OTU4W.cjs.map} +1 -1
- package/dist/{chunk-XURCARSX.cjs → chunk-2AHSX63M.cjs} +5 -5
- package/dist/{chunk-XURCARSX.cjs.map → chunk-2AHSX63M.cjs.map} +1 -1
- package/dist/{chunk-DPFQWIZJ.cjs → chunk-2EU3TWCW.cjs} +32 -32
- package/dist/{chunk-DPFQWIZJ.cjs.map → chunk-2EU3TWCW.cjs.map} +1 -1
- package/dist/{chunk-MIFJLUZK.js → chunk-2ZHVOTSA.js} +2 -2
- package/dist/{chunk-NJADHL2G.cjs → chunk-3M2MFP2Y.cjs} +30 -2
- package/dist/chunk-3M2MFP2Y.cjs.map +1 -0
- package/dist/{chunk-UBTOOE55.js → chunk-5OGHZNY5.js} +10 -1
- package/dist/chunk-5OGHZNY5.js.map +1 -0
- package/dist/{chunk-5KBQECAY.js → chunk-6EAACE7G.js} +2 -2
- package/dist/{chunk-IIPBTWQR.cjs → chunk-7INXXQVK.cjs} +10 -1
- package/dist/{chunk-IIPBTWQR.cjs.map → chunk-7INXXQVK.cjs.map} +1 -1
- package/dist/{chunk-IVTENGMF.js → chunk-7J4DGFHZ.js} +2 -2
- package/dist/{chunk-JLO2O5R4.js → chunk-7SPVAAWE.js} +5257 -5143
- package/dist/chunk-7SPVAAWE.js.map +1 -0
- package/dist/{chunk-FXT2OZ5Q.js → chunk-BBI7GD2Q.js} +3 -3
- package/dist/{chunk-MEXZZOBO.js → chunk-CV624KM6.js} +9 -9
- package/dist/{chunk-WSRPNLTY.cjs → chunk-FAOL7EI2.cjs} +18 -18
- package/dist/{chunk-WSRPNLTY.cjs.map → chunk-FAOL7EI2.cjs.map} +1 -1
- package/dist/{chunk-P63LOLTB.js → chunk-FISSR67K.js} +7 -7
- package/dist/{chunk-XURRAFIB.js → chunk-GJAHN7LH.js} +404 -376
- package/dist/chunk-GJAHN7LH.js.map +1 -0
- package/dist/{chunk-FS3YSNSU.js → chunk-GS4HJA2G.js} +2 -2
- package/dist/{chunk-HIV2GIFP.cjs → chunk-GYONSC3U.cjs} +3 -3
- package/dist/{chunk-HIV2GIFP.cjs.map → chunk-GYONSC3U.cjs.map} +1 -1
- package/dist/{chunk-QXUMLLYV.cjs → chunk-IPHH3GKC.cjs} +3 -3
- package/dist/{chunk-QXUMLLYV.cjs.map → chunk-IPHH3GKC.cjs.map} +1 -1
- package/dist/{chunk-NBJ7L65H.js → chunk-J2JLAW2J.js} +3 -3
- package/dist/{chunk-GA7BHFXD.cjs → chunk-J3DRYWFP.cjs} +77 -77
- package/dist/{chunk-GA7BHFXD.cjs.map → chunk-J3DRYWFP.cjs.map} +1 -1
- package/dist/{chunk-O7L2VJDW.cjs → chunk-LY7IT5QX.cjs} +12 -12
- package/dist/{chunk-O7L2VJDW.cjs.map → chunk-LY7IT5QX.cjs.map} +1 -1
- package/dist/{chunk-K26W23C2.cjs → chunk-MKPJYEOR.cjs} +6 -6
- package/dist/{chunk-K26W23C2.cjs.map → chunk-MKPJYEOR.cjs.map} +1 -1
- package/dist/{chunk-ZKVARGSO.js → chunk-MY7663CW.js} +3 -3
- package/dist/{chunk-J7ZJ4KM2.cjs → chunk-PJ4WHNJH.cjs} +9 -9
- package/dist/{chunk-J7ZJ4KM2.cjs.map → chunk-PJ4WHNJH.cjs.map} +1 -1
- package/dist/{chunk-66GH54DV.cjs → chunk-QNJCZGHH.cjs} +40 -40
- package/dist/{chunk-66GH54DV.cjs.map → chunk-QNJCZGHH.cjs.map} +1 -1
- package/dist/{chunk-WI4XHZ2B.js → chunk-QOUKB6OJ.js} +4 -4
- package/dist/{chunk-AI7WIW4E.js → chunk-QPCPYCU2.js} +4 -4
- package/dist/{chunk-Z3ADCYC5.js → chunk-RCBRCZUF.js} +2 -2
- package/dist/{chunk-RWYNJC2F.cjs → chunk-S3C4RT4O.cjs} +109 -109
- package/dist/{chunk-RWYNJC2F.cjs.map → chunk-S3C4RT4O.cjs.map} +1 -1
- package/dist/{chunk-OGVIGAMZ.cjs → chunk-SXLEPNY2.cjs} +31 -31
- package/dist/{chunk-OGVIGAMZ.cjs.map → chunk-SXLEPNY2.cjs.map} +1 -1
- package/dist/{chunk-BXRB4MQI.cjs → chunk-SYQ4KUXW.cjs} +599 -485
- package/dist/chunk-SYQ4KUXW.cjs.map +1 -0
- package/dist/{chunk-HPPCPGBR.cjs → chunk-U6NODSTY.cjs} +31 -31
- package/dist/{chunk-HPPCPGBR.cjs.map → chunk-U6NODSTY.cjs.map} +1 -1
- package/dist/{chunk-KP4JRPUE.js → chunk-V3K5H4I2.js} +2 -2
- package/dist/{chunk-43ZZYJ3M.js → chunk-V76TAQ3O.js} +5 -5
- package/dist/{chunk-XZ6WTSVQ.js → chunk-VCA3HNJ2.js} +6 -6
- package/dist/{chunk-7EFJJMNH.cjs → chunk-WBEF37M5.cjs} +12 -12
- package/dist/{chunk-7EFJJMNH.cjs.map → chunk-WBEF37M5.cjs.map} +1 -1
- package/dist/{chunk-H6K73RK2.cjs → chunk-XDADNUC5.cjs} +40 -40
- package/dist/{chunk-H6K73RK2.cjs.map → chunk-XDADNUC5.cjs.map} +1 -1
- package/dist/{chunk-56OUH3UF.js → chunk-YHAYMOXR.js} +3 -3
- package/dist/components/about-icon.d.ts +9 -0
- package/dist/components/about-icon.d.ts.map +1 -0
- package/dist/components/aspect-ratio.d.ts +4 -0
- package/dist/components/aspect-ratio.d.ts.map +1 -0
- package/dist/components/avatar.d.ts +7 -0
- package/dist/components/avatar.d.ts.map +1 -0
- package/dist/components/calendar.cjs +3 -3
- package/dist/components/calendar.js +2 -2
- package/dist/components/case-studies/index.cjs +15 -15
- package/dist/components/case-studies/index.js +5 -5
- package/dist/components/chart.d.ts +72 -0
- package/dist/components/chart.d.ts.map +1 -0
- package/dist/components/chat/index.cjs +5 -5
- package/dist/components/chat/index.js +4 -4
- package/dist/components/check-circle-icon.d.ts +7 -0
- package/dist/components/check-circle-icon.d.ts.map +1 -0
- package/dist/components/checkbox.d.ts +5 -0
- package/dist/components/checkbox.d.ts.map +1 -0
- package/dist/components/claude-icon.d.ts +6 -0
- package/dist/components/claude-icon.d.ts.map +1 -0
- package/dist/components/coins-icon.d.ts +9 -0
- package/dist/components/coins-icon.d.ts.map +1 -0
- package/dist/components/command.d.ts +81 -0
- package/dist/components/command.d.ts.map +1 -0
- package/dist/components/community-hub-icon.d.ts +9 -0
- package/dist/components/community-hub-icon.d.ts.map +1 -0
- package/dist/components/community-icon.d.ts +9 -0
- package/dist/components/community-icon.d.ts.map +1 -0
- package/dist/components/compare-icon.d.ts +9 -0
- package/dist/components/compare-icon.d.ts.map +1 -0
- package/dist/components/contact/index.cjs +6 -6
- package/dist/components/contact/index.js +5 -5
- package/dist/components/context-menu.d.ts +28 -0
- package/dist/components/context-menu.d.ts.map +1 -0
- package/dist/components/custom-external-link-icon.d.ts +9 -0
- package/dist/components/custom-external-link-icon.d.ts.map +1 -0
- package/dist/components/custom-fork-icon.d.ts +9 -0
- package/dist/components/custom-fork-icon.d.ts.map +1 -0
- package/dist/components/custom-icons.d.ts +8 -0
- package/dist/components/custom-icons.d.ts.map +1 -0
- package/dist/components/custom-license-icon.d.ts +9 -0
- package/dist/components/custom-license-icon.d.ts.map +1 -0
- package/dist/components/custom-star-icon.d.ts +9 -0
- package/dist/components/custom-star-icon.d.ts.map +1 -0
- package/dist/components/custom-time-icon.d.ts +9 -0
- package/dist/components/custom-time-icon.d.ts.map +1 -0
- package/dist/components/docs/index.cjs +8 -8
- package/dist/components/docs/index.js +7 -7
- package/dist/components/donut-icon.d.ts +4 -0
- package/dist/components/donut-icon.d.ts.map +1 -0
- package/dist/components/edit-profile-icon.d.ts +7 -0
- package/dist/components/edit-profile-icon.d.ts.map +1 -0
- package/dist/components/elestio-logo.d.ts +9 -0
- package/dist/components/elestio-logo.d.ts.map +1 -0
- package/dist/components/embeds/index.cjs +6 -6
- package/dist/components/embeds/index.js +5 -5
- package/dist/components/empty-vendor-icon.d.ts +7 -0
- package/dist/components/empty-vendor-icon.d.ts.map +1 -0
- package/dist/components/faq/index.cjs +7 -7
- package/dist/components/faq/index.js +6 -6
- package/dist/components/features/index.cjs +5 -5
- package/dist/components/features/index.js +4 -4
- package/dist/components/features/provider-button.d.ts +1 -1
- package/dist/components/features/provider-button.d.ts.map +1 -1
- package/dist/components/flamingo-logo.d.ts +9 -0
- package/dist/components/flamingo-logo.d.ts.map +1 -0
- package/dist/components/form.d.ts +26 -0
- package/dist/components/form.d.ts.map +1 -0
- package/dist/components/github-icon.d.ts +9 -0
- package/dist/components/github-icon.d.ts.map +1 -0
- package/dist/components/google-logo.d.ts +5 -0
- package/dist/components/google-logo.d.ts.map +1 -0
- package/dist/components/hamburger-icon.d.ts +9 -0
- package/dist/components/hamburger-icon.d.ts.map +1 -0
- package/dist/components/help-center-pages/index.cjs +26 -26
- package/dist/components/help-center-pages/index.js +17 -17
- package/dist/components/hubspot-icon.d.ts +7 -0
- package/dist/components/hubspot-icon.d.ts.map +1 -0
- package/dist/components/icon-utils.d.ts +7 -0
- package/dist/components/icon-utils.d.ts.map +1 -0
- package/dist/components/icons/apple-icon.d.ts +10 -0
- package/dist/components/icons/apple-icon.d.ts.map +1 -0
- package/dist/components/icons/index.cjs +4 -2
- package/dist/components/icons/index.cjs.map +1 -1
- package/dist/components/icons/index.d.ts +1 -0
- package/dist/components/icons/index.d.ts.map +1 -1
- package/dist/components/icons/index.js +3 -1
- package/dist/components/index.cjs +239 -285
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +373 -419
- package/dist/components/index.js.map +1 -1
- package/dist/components/interactive-wrapper.d.ts +84 -0
- package/dist/components/interactive-wrapper.d.ts.map +1 -0
- package/dist/components/join-waitlist-button-stub.d.ts +10 -0
- package/dist/components/join-waitlist-button-stub.d.ts.map +1 -0
- package/dist/components/made-with-love.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/index.cjs +48 -48
- package/dist/components/meeting-scheduler/index.js +7 -7
- package/dist/components/menu-icon.d.ts +9 -0
- package/dist/components/menu-icon.d.ts.map +1 -0
- package/dist/components/minus-circle-icon.d.ts +7 -0
- package/dist/components/minus-circle-icon.d.ts.map +1 -0
- package/dist/components/moon-icon.d.ts +9 -0
- package/dist/components/moon-icon.d.ts.map +1 -0
- package/dist/components/ms-icon.d.ts +9 -0
- package/dist/components/ms-icon.d.ts.map +1 -0
- package/dist/components/navigation/index.cjs +5 -5
- package/dist/components/navigation/index.js +4 -4
- package/dist/components/onboarding-guides/index.cjs +9 -9
- package/dist/components/onboarding-guides/index.js +8 -8
- package/dist/components/open-source-features.d.ts +1 -1
- package/dist/components/open-source-features.d.ts.map +1 -1
- package/dist/components/open-source-icon.d.ts +9 -0
- package/dist/components/open-source-icon.d.ts.map +1 -0
- package/dist/components/openframe-logo.d.ts +7 -0
- package/dist/components/openframe-logo.d.ts.map +1 -0
- package/dist/components/openmsp-logo.d.ts +11 -0
- package/dist/components/openmsp-logo.d.ts.map +1 -0
- package/dist/components/plus-circle-icon.d.ts +9 -0
- package/dist/components/plus-circle-icon.d.ts.map +1 -0
- package/dist/components/progress.d.ts +7 -0
- package/dist/components/progress.d.ts.map +1 -0
- package/dist/components/provider-button.d.ts +10 -0
- package/dist/components/provider-button.d.ts.map +1 -0
- package/dist/components/reddit-icon.d.ts +10 -0
- package/dist/components/reddit-icon.d.ts.map +1 -0
- package/dist/components/related-content/index.cjs +7 -7
- package/dist/components/related-content/index.js +6 -6
- package/dist/components/resizable.d.ts +24 -0
- package/dist/components/resizable.d.ts.map +1 -0
- package/dist/components/scroll-area.d.ts +13 -0
- package/dist/components/scroll-area.d.ts.map +1 -0
- package/dist/components/send-icon.d.ts +7 -0
- package/dist/components/send-icon.d.ts.map +1 -0
- package/dist/components/separator.d.ts +5 -0
- package/dist/components/separator.d.ts.map +1 -0
- package/dist/components/skeleton.d.ts +4 -0
- package/dist/components/skeleton.d.ts.map +1 -0
- package/dist/components/slack-icon.d.ts +9 -0
- package/dist/components/slack-icon.d.ts.map +1 -0
- package/dist/components/slider.d.ts +5 -0
- package/dist/components/slider.d.ts.map +1 -0
- package/dist/components/smooth-accordion.d.ts +12 -0
- package/dist/components/smooth-accordion.d.ts.map +1 -0
- package/dist/components/steps.d.ts +17 -0
- package/dist/components/steps.d.ts.map +1 -0
- package/dist/components/sun-icon.d.ts +9 -0
- package/dist/components/sun-icon.d.ts.map +1 -0
- package/dist/components/switch.d.ts +5 -0
- package/dist/components/switch.d.ts.map +1 -0
- package/dist/components/textarea.d.ts +6 -0
- package/dist/components/textarea.d.ts.map +1 -0
- package/dist/components/tickets/index.cjs +9 -9
- package/dist/components/tickets/index.js +8 -8
- package/dist/components/ui/button/button.d.ts +1 -1
- package/dist/components/ui/button/button.d.ts.map +1 -1
- package/dist/components/ui/file-manager/index.cjs +15 -15
- package/dist/components/ui/file-manager/index.js +1 -1
- package/dist/components/ui/index.cjs +5 -5
- package/dist/components/ui/index.js +4 -4
- package/dist/components/ui/pagination-stub.d.ts +6 -0
- package/dist/components/ui/pagination-stub.d.ts.map +1 -0
- package/dist/components/ui/responsive-icons-block-stub.d.ts +7 -0
- package/dist/components/ui/responsive-icons-block-stub.d.ts.map +1 -0
- package/dist/components/user-icon.d.ts +9 -0
- package/dist/components/user-icon.d.ts.map +1 -0
- package/dist/components/vendor-directory-icon.d.ts +9 -0
- package/dist/components/vendor-directory-icon.d.ts.map +1 -0
- package/dist/components/vendors-icon.d.ts +9 -0
- package/dist/components/vendors-icon.d.ts.map +1 -0
- package/dist/components/why-it-matters.d.ts +1 -1
- package/dist/components/why-it-matters.d.ts.map +1 -1
- package/dist/components/x-icon.d.ts +9 -0
- package/dist/components/x-icon.d.ts.map +1 -0
- package/dist/components/x-logo.d.ts +7 -0
- package/dist/components/x-logo.d.ts.map +1 -0
- package/dist/hooks/index.cjs +3 -3
- package/dist/hooks/index.js +2 -2
- package/dist/index.cjs +7 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -4
- package/package.json +1 -1
- package/src/components/about-icon.tsx +29 -0
- package/src/components/aspect-ratio.tsx +7 -0
- package/src/components/avatar.tsx +40 -0
- package/src/components/chart.tsx +364 -0
- package/src/components/chat/chat-container.tsx +1 -1
- package/src/components/check-circle-icon.tsx +29 -0
- package/src/components/checkbox.tsx +30 -0
- package/src/components/claude-icon.tsx +24 -0
- package/src/components/coins-icon.tsx +29 -0
- package/src/components/command.tsx +153 -0
- package/src/components/community-hub-icon.tsx +27 -0
- package/src/components/community-icon.tsx +27 -0
- package/src/components/compare-icon.tsx +27 -0
- package/src/components/context-menu.tsx +200 -0
- package/src/components/custom-external-link-icon.tsx +33 -0
- package/src/components/custom-fork-icon.tsx +33 -0
- package/src/components/custom-icons.tsx +47 -0
- package/src/components/custom-license-icon.tsx +33 -0
- package/src/components/custom-star-icon.tsx +29 -0
- package/src/components/custom-time-icon.tsx +33 -0
- package/src/components/donut-icon.tsx +21 -0
- package/src/components/edit-profile-icon.tsx +23 -0
- package/src/components/elestio-logo.tsx +67 -0
- package/src/components/empty-vendor-icon.tsx +44 -0
- package/src/components/features/auth-providers-list.tsx +1 -1
- package/src/components/features/platform-badge.tsx +2 -2
- package/src/components/features/provider-button.tsx +6 -2
- package/src/components/flamingo-logo.tsx +27 -0
- package/src/components/form.tsx +138 -0
- package/src/components/github-icon.tsx +26 -0
- package/src/components/google-logo.tsx +32 -0
- package/src/components/hamburger-icon.tsx +29 -0
- package/src/components/hubspot-icon.tsx +20 -0
- package/src/components/icon-utils.tsx +36 -0
- package/src/components/icons/apple-icon.tsx +30 -0
- package/src/components/icons/index.ts +1 -0
- package/src/components/interactive-wrapper.tsx +336 -0
- package/src/components/join-waitlist-button-stub.tsx +30 -0
- package/src/components/loading/openmsp-heartbeat.tsx +1 -1
- package/src/components/made-with-love.tsx +3 -4
- package/src/components/menu-icon.tsx +22 -0
- package/src/components/minus-circle-icon.tsx +28 -0
- package/src/components/moon-icon.tsx +26 -0
- package/src/components/ms-icon.tsx +31 -0
- package/src/components/open-source-features.tsx +1 -1
- package/src/components/open-source-icon.tsx +27 -0
- package/src/components/openframe-logo.tsx +46 -0
- package/src/components/openmsp-logo.tsx +36 -0
- package/src/components/plus-circle-icon.tsx +30 -0
- package/src/components/progress.tsx +27 -0
- package/src/components/provider-button.tsx +40 -0
- package/src/components/reddit-icon.tsx +50 -0
- package/src/components/resizable.tsx +45 -0
- package/src/components/scroll-area.tsx +49 -0
- package/src/components/send-icon.tsx +26 -0
- package/src/components/separator.tsx +22 -0
- package/src/components/skeleton.tsx +8 -0
- package/src/components/slack-icon.tsx +43 -0
- package/src/components/slider.tsx +28 -0
- package/src/components/smooth-accordion.tsx +124 -0
- package/src/components/steps.tsx +98 -0
- package/src/components/sun-icon.tsx +27 -0
- package/src/components/switch.tsx +29 -0
- package/src/components/textarea.tsx +22 -0
- package/src/components/ui/button/button.tsx +9 -0
- package/src/components/ui/pagination-stub.tsx +38 -0
- package/src/components/ui/responsive-icons-block-stub.tsx +14 -0
- package/src/components/user-icon.tsx +33 -0
- package/src/components/vendor-directory-icon.tsx +27 -0
- package/src/components/vendor-tag.tsx +1 -1
- package/src/components/vendors-icon.tsx +27 -0
- package/src/components/why-it-matters.tsx +1 -1
- package/src/components/x-icon.tsx +29 -0
- package/src/components/x-logo.tsx +22 -0
- package/dist/chunk-BXRB4MQI.cjs.map +0 -1
- package/dist/chunk-JLO2O5R4.js.map +0 -1
- package/dist/chunk-NJADHL2G.cjs.map +0 -1
- package/dist/chunk-UBTOOE55.js.map +0 -1
- package/dist/chunk-XURRAFIB.js.map +0 -1
- /package/dist/{chunk-MIFJLUZK.js.map → chunk-2ZHVOTSA.js.map} +0 -0
- /package/dist/{chunk-5KBQECAY.js.map → chunk-6EAACE7G.js.map} +0 -0
- /package/dist/{chunk-IVTENGMF.js.map → chunk-7J4DGFHZ.js.map} +0 -0
- /package/dist/{chunk-FXT2OZ5Q.js.map → chunk-BBI7GD2Q.js.map} +0 -0
- /package/dist/{chunk-MEXZZOBO.js.map → chunk-CV624KM6.js.map} +0 -0
- /package/dist/{chunk-P63LOLTB.js.map → chunk-FISSR67K.js.map} +0 -0
- /package/dist/{chunk-FS3YSNSU.js.map → chunk-GS4HJA2G.js.map} +0 -0
- /package/dist/{chunk-NBJ7L65H.js.map → chunk-J2JLAW2J.js.map} +0 -0
- /package/dist/{chunk-ZKVARGSO.js.map → chunk-MY7663CW.js.map} +0 -0
- /package/dist/{chunk-WI4XHZ2B.js.map → chunk-QOUKB6OJ.js.map} +0 -0
- /package/dist/{chunk-AI7WIW4E.js.map → chunk-QPCPYCU2.js.map} +0 -0
- /package/dist/{chunk-Z3ADCYC5.js.map → chunk-RCBRCZUF.js.map} +0 -0
- /package/dist/{chunk-KP4JRPUE.js.map → chunk-V3K5H4I2.js.map} +0 -0
- /package/dist/{chunk-43ZZYJ3M.js.map → chunk-V76TAQ3O.js.map} +0 -0
- /package/dist/{chunk-XZ6WTSVQ.js.map → chunk-VCA3HNJ2.js.map} +0 -0
- /package/dist/{chunk-56OUH3UF.js.map → chunk-YHAYMOXR.js.map} +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import * as ProgressPrimitive from "@radix-ui/react-progress"
|
|
5
|
+
|
|
6
|
+
import { cn } from "../utils/cn"
|
|
7
|
+
|
|
8
|
+
const Progress = React.forwardRef<
|
|
9
|
+
React.ElementRef<typeof ProgressPrimitive.Root>,
|
|
10
|
+
React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root> & {
|
|
11
|
+
indicatorClassName?: string
|
|
12
|
+
}
|
|
13
|
+
>(({ className, value, indicatorClassName, ...props }, ref) => (
|
|
14
|
+
<ProgressPrimitive.Root
|
|
15
|
+
ref={ref}
|
|
16
|
+
className={cn("relative h-2 w-full overflow-hidden rounded-full bg-secondary", className)}
|
|
17
|
+
{...props}
|
|
18
|
+
>
|
|
19
|
+
<ProgressPrimitive.Indicator
|
|
20
|
+
className={cn("h-full w-full flex-1 bg-primary transition-all", indicatorClassName)}
|
|
21
|
+
style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
|
|
22
|
+
/>
|
|
23
|
+
</ProgressPrimitive.Root>
|
|
24
|
+
))
|
|
25
|
+
Progress.displayName = ProgressPrimitive.Root.displayName
|
|
26
|
+
|
|
27
|
+
export { Progress }
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { Button } from "./ui/button"
|
|
3
|
+
import { cn } from "../utils/cn"
|
|
4
|
+
|
|
5
|
+
interface ProviderButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
6
|
+
provider: 'google' | 'microsoft' | 'slack' | 'github' | 'apple';
|
|
7
|
+
variant?: 'accent' | 'outline';
|
|
8
|
+
size?: 'default' | 'small-legacy';
|
|
9
|
+
loading?: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const ProviderButton = React.forwardRef<HTMLButtonElement, ProviderButtonProps>(
|
|
13
|
+
({ className, provider, variant = 'outline', size = 'default', children, ...props }, ref) => {
|
|
14
|
+
const providerNames = {
|
|
15
|
+
google: 'Google',
|
|
16
|
+
microsoft: 'Microsoft',
|
|
17
|
+
slack: 'Slack',
|
|
18
|
+
github: 'GitHub',
|
|
19
|
+
apple: 'Apple'
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<Button
|
|
24
|
+
className={cn(
|
|
25
|
+
"w-full",
|
|
26
|
+
className
|
|
27
|
+
)}
|
|
28
|
+
variant={variant}
|
|
29
|
+
size={size}
|
|
30
|
+
ref={ref}
|
|
31
|
+
{...props}
|
|
32
|
+
>
|
|
33
|
+
{children || `Sign in with ${providerNames[provider]}`}
|
|
34
|
+
</Button>
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
)
|
|
38
|
+
ProviderButton.displayName = "ProviderButton"
|
|
39
|
+
|
|
40
|
+
export { ProviderButton }
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
|
|
3
|
+
interface RedditIconProps {
|
|
4
|
+
width?: number | string
|
|
5
|
+
height?: number | string
|
|
6
|
+
className?: string
|
|
7
|
+
variant?: 'original' | 'grayscale' | 'white'
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function RedditIcon({
|
|
11
|
+
width = 24,
|
|
12
|
+
height = 24,
|
|
13
|
+
className = "text-current",
|
|
14
|
+
variant = 'grayscale'
|
|
15
|
+
}: RedditIconProps) {
|
|
16
|
+
// Color scheme based on variant
|
|
17
|
+
let colors;
|
|
18
|
+
switch (variant) {
|
|
19
|
+
case 'original':
|
|
20
|
+
colors = {
|
|
21
|
+
background: '#FF4500' // White features
|
|
22
|
+
};
|
|
23
|
+
break;
|
|
24
|
+
case 'white':
|
|
25
|
+
colors = {
|
|
26
|
+
background: '#FFFFFF' // Black features
|
|
27
|
+
};
|
|
28
|
+
break;
|
|
29
|
+
default: // grayscale
|
|
30
|
+
colors = {
|
|
31
|
+
background: '#888888' // Light gray features
|
|
32
|
+
};
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<svg
|
|
38
|
+
width={width}
|
|
39
|
+
height={height}
|
|
40
|
+
viewBox="0 0 256 256"
|
|
41
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
42
|
+
className={className}
|
|
43
|
+
>
|
|
44
|
+
<path
|
|
45
|
+
fill={colors.background}
|
|
46
|
+
d="M248,104a31.99228,31.99228,0,0,0-52.9375-24.19043c-16.75439-8.90112-36.76172-14.279-57.666-15.52539l5.19581-31.17578,21.83105,3.3584a24.00409,24.00409,0,1,0,2.43506-15.814l-29.64209-4.56006a7.996,7.996,0,0,0-9.10742,6.5918l-6.91309,41.478c-21.83887.94165-42.813,6.37891-60.2583,15.647a31.99266,31.99266,0,0,0-42.59229,47.74024A59.04669,59.04669,0,0,0,16,144c0,21.93457,12.042,42.35156,33.90723,57.48926C70.875,216.00588,98.60938,224,128,224s57.125-7.99414,78.09277-22.51074C227.958,186.35158,240,165.93459,240,144a59.01726,59.01726,0,0,0-2.3457-16.44922A32.17163,32.17163,0,0,0,248,104ZM72,132a16,16,0,1,1,16,16A16.01833,16.01833,0,0,1,72,132Zm92.69629,51.10938a80.122,80.122,0,0,1-73.39209,0,8,8,0,0,1,7.34033-14.2168,64.09433,64.09433,0,0,0,58.71094,0,8.00008,8.00008,0,0,1,7.34082,14.2168ZM168,148a16,16,0,1,1,16-16A16.01833,16.01833,0,0,1,168,148Z"
|
|
47
|
+
/>
|
|
48
|
+
</svg>
|
|
49
|
+
)
|
|
50
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import { GripVertical } from "lucide-react"
|
|
4
|
+
import * as ResizablePrimitive from "react-resizable-panels"
|
|
5
|
+
|
|
6
|
+
import { cn } from "../utils/cn"
|
|
7
|
+
|
|
8
|
+
const ResizablePanelGroup = ({
|
|
9
|
+
className,
|
|
10
|
+
...props
|
|
11
|
+
}: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) => (
|
|
12
|
+
<ResizablePrimitive.PanelGroup
|
|
13
|
+
className={cn(
|
|
14
|
+
"flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
|
|
15
|
+
className
|
|
16
|
+
)}
|
|
17
|
+
{...props}
|
|
18
|
+
/>
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
const ResizablePanel = ResizablePrimitive.Panel
|
|
22
|
+
|
|
23
|
+
const ResizableHandle = ({
|
|
24
|
+
withHandle,
|
|
25
|
+
className,
|
|
26
|
+
...props
|
|
27
|
+
}: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {
|
|
28
|
+
withHandle?: boolean
|
|
29
|
+
}) => (
|
|
30
|
+
<ResizablePrimitive.PanelResizeHandle
|
|
31
|
+
className={cn(
|
|
32
|
+
"relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90",
|
|
33
|
+
className
|
|
34
|
+
)}
|
|
35
|
+
{...props}
|
|
36
|
+
>
|
|
37
|
+
{withHandle && (
|
|
38
|
+
<div className="z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border">
|
|
39
|
+
<GripVertical className="h-2.5 w-2.5" />
|
|
40
|
+
</div>
|
|
41
|
+
)}
|
|
42
|
+
</ResizablePrimitive.PanelResizeHandle>
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
export { ResizablePanelGroup, ResizablePanel, ResizableHandle }
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"
|
|
5
|
+
|
|
6
|
+
import { cn } from "../utils/cn"
|
|
7
|
+
|
|
8
|
+
interface ScrollAreaProps extends React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root> {
|
|
9
|
+
/**
|
|
10
|
+
* When set to true, the custom Radix scrollbars will be rendered. Defaults to `false` so that
|
|
11
|
+
* scrollbars remain hidden in accordance with the global requirement to remove scrollbars.
|
|
12
|
+
*/
|
|
13
|
+
showScrollbar?: boolean
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const ScrollArea = React.forwardRef<
|
|
17
|
+
React.ElementRef<typeof ScrollAreaPrimitive.Root>,
|
|
18
|
+
ScrollAreaProps
|
|
19
|
+
>(({ className, children, showScrollbar = false, ...props }, ref) => (
|
|
20
|
+
<ScrollAreaPrimitive.Root ref={ref} className={cn("relative overflow-hidden", className)} {...props}>
|
|
21
|
+
<ScrollAreaPrimitive.Viewport className="h-full w-full rounded-[inherit]">{children}</ScrollAreaPrimitive.Viewport>
|
|
22
|
+
{showScrollbar && <ScrollBar />}
|
|
23
|
+
{/* The corner element is only useful when scrollbars are visible */}
|
|
24
|
+
{showScrollbar && <ScrollAreaPrimitive.Corner />}
|
|
25
|
+
</ScrollAreaPrimitive.Root>
|
|
26
|
+
))
|
|
27
|
+
ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName
|
|
28
|
+
|
|
29
|
+
const ScrollBar = React.forwardRef<
|
|
30
|
+
React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,
|
|
31
|
+
React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>
|
|
32
|
+
>(({ className, orientation = "vertical", ...props }, ref) => (
|
|
33
|
+
<ScrollAreaPrimitive.ScrollAreaScrollbar
|
|
34
|
+
ref={ref}
|
|
35
|
+
orientation={orientation}
|
|
36
|
+
className={cn(
|
|
37
|
+
"flex touch-none select-none transition-colors",
|
|
38
|
+
orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-[1px]",
|
|
39
|
+
orientation === "horizontal" && "h-2.5 border-t border-t-transparent p-[1px]",
|
|
40
|
+
className,
|
|
41
|
+
)}
|
|
42
|
+
{...props}
|
|
43
|
+
>
|
|
44
|
+
<ScrollAreaPrimitive.ScrollAreaThumb className="relative flex-1 rounded-full bg-border" />
|
|
45
|
+
</ScrollAreaPrimitive.ScrollAreaScrollbar>
|
|
46
|
+
))
|
|
47
|
+
ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName
|
|
48
|
+
|
|
49
|
+
export { ScrollArea, ScrollBar }
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
interface SendIconProps {
|
|
2
|
+
className?: string;
|
|
3
|
+
fill?: string;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export function SendIcon({ className = "w-6 h-6", fill = "#1A1A1A" }: SendIconProps) {
|
|
7
|
+
return (
|
|
8
|
+
<svg
|
|
9
|
+
width="24"
|
|
10
|
+
height="24"
|
|
11
|
+
viewBox="0 0 24 24"
|
|
12
|
+
fill="none"
|
|
13
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
14
|
+
className={className}
|
|
15
|
+
>
|
|
16
|
+
<path
|
|
17
|
+
d="M11.1554 14.4487C10.7164 14.888 10.0042 14.8891 9.56462 14.4501C9.12509 14.0111 9.12563 13.2989 9.56462 12.8593L11.1554 14.4487ZM15.1164 7.29875C15.5555 6.85958 16.2677 6.85988 16.7072 7.29875C17.1463 7.73779 17.1474 8.45008 16.7087 8.88957L11.1554 14.4487L9.56462 12.8593L15.1164 7.29875Z"
|
|
18
|
+
fill={fill}
|
|
19
|
+
/>
|
|
20
|
+
<path
|
|
21
|
+
d="M19.0798 1.00652C21.4022 0.313771 23.5637 2.39031 23.0495 4.69646L22.9909 4.92058L18.2463 20.8742C17.4793 23.4519 14.0415 23.9417 12.5876 21.6769L10.7946 18.8849L7.54411 19.2116C6.28619 19.3373 5.19768 18.3477 5.19743 17.0861V13.3039L2.30583 11.4216C0.0601315 9.95982 0.552303 6.53369 3.12175 5.76726L19.0798 1.00652ZM7.44743 16.9587L10.9499 16.6086L11.1769 16.6012C11.6288 16.6191 12.0528 16.8255 12.3473 17.1681L12.4836 17.3498L14.4816 20.4611C14.8944 21.1041 15.8696 20.9675 16.0885 20.2326L20.8346 4.27898L20.8639 4.15154C20.9597 3.51747 20.3581 2.97326 19.7228 3.16277L3.76482 7.92351C3.03514 8.14117 2.8919 9.11753 3.53191 9.53484L6.70622 11.6017L6.87175 11.7233C7.23484 12.031 7.44743 12.4862 7.44743 12.9684V16.9587Z"
|
|
22
|
+
fill={fill}
|
|
23
|
+
/>
|
|
24
|
+
</svg>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import * as SeparatorPrimitive from "@radix-ui/react-separator"
|
|
5
|
+
|
|
6
|
+
import { cn } from "../utils/cn"
|
|
7
|
+
|
|
8
|
+
const Separator = React.forwardRef<
|
|
9
|
+
React.ElementRef<typeof SeparatorPrimitive.Root>,
|
|
10
|
+
React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>
|
|
11
|
+
>(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => (
|
|
12
|
+
<SeparatorPrimitive.Root
|
|
13
|
+
ref={ref}
|
|
14
|
+
decorative={decorative}
|
|
15
|
+
orientation={orientation}
|
|
16
|
+
className={cn("shrink-0 bg-border", orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]", className)}
|
|
17
|
+
{...props}
|
|
18
|
+
/>
|
|
19
|
+
))
|
|
20
|
+
Separator.displayName = SeparatorPrimitive.Root.displayName
|
|
21
|
+
|
|
22
|
+
export { Separator }
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type React from "react"
|
|
2
|
+
import { cn } from "../utils/cn"
|
|
3
|
+
|
|
4
|
+
function Skeleton({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
|
|
5
|
+
return <div className={cn("animate-pulse rounded-md bg-muted/60", className)} {...props} />
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export { Skeleton }
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
|
|
3
|
+
interface SlackIconProps {
|
|
4
|
+
width?: number | string
|
|
5
|
+
height?: number | string
|
|
6
|
+
className?: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function SlackIcon({
|
|
10
|
+
width = 24,
|
|
11
|
+
height = 24,
|
|
12
|
+
className = "text-current"
|
|
13
|
+
}: SlackIconProps) {
|
|
14
|
+
return (
|
|
15
|
+
<svg
|
|
16
|
+
width={width}
|
|
17
|
+
height={height}
|
|
18
|
+
viewBox="0 0 24 24"
|
|
19
|
+
fill="none"
|
|
20
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
21
|
+
className={className}
|
|
22
|
+
>
|
|
23
|
+
<g>
|
|
24
|
+
<path
|
|
25
|
+
d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313z"
|
|
26
|
+
fill="#E01E5A"
|
|
27
|
+
/>
|
|
28
|
+
<path
|
|
29
|
+
d="M8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312z"
|
|
30
|
+
fill="#36C5F0"
|
|
31
|
+
/>
|
|
32
|
+
<path
|
|
33
|
+
d="M18.956 8.834a2.528 2.528 0 0 1 2.521-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.523 2.521h-2.521V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312z"
|
|
34
|
+
fill="#2EB67D"
|
|
35
|
+
/>
|
|
36
|
+
<path
|
|
37
|
+
d="M15.165 18.956a2.528 2.528 0 0 1 2.523 2.521A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.523v-2.521h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.528 2.528 0 0 1 2.52-2.521h6.313A2.528 2.528 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"
|
|
38
|
+
fill="#ECB22E"
|
|
39
|
+
/>
|
|
40
|
+
</g>
|
|
41
|
+
</svg>
|
|
42
|
+
)
|
|
43
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import * as SliderPrimitive from "@radix-ui/react-slider"
|
|
5
|
+
|
|
6
|
+
import { cn } from "../utils/cn"
|
|
7
|
+
|
|
8
|
+
const Slider = React.forwardRef<
|
|
9
|
+
React.ElementRef<typeof SliderPrimitive.Root>,
|
|
10
|
+
React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>
|
|
11
|
+
>(({ className, ...props }, ref) => (
|
|
12
|
+
<SliderPrimitive.Root
|
|
13
|
+
ref={ref}
|
|
14
|
+
className={cn(
|
|
15
|
+
"relative flex w-full touch-none select-none items-center",
|
|
16
|
+
className
|
|
17
|
+
)}
|
|
18
|
+
{...props}
|
|
19
|
+
>
|
|
20
|
+
<SliderPrimitive.Track className="relative h-2 w-full grow overflow-hidden rounded-full bg-secondary">
|
|
21
|
+
<SliderPrimitive.Range className="absolute h-full bg-primary" />
|
|
22
|
+
</SliderPrimitive.Track>
|
|
23
|
+
<SliderPrimitive.Thumb className="block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50" />
|
|
24
|
+
</SliderPrimitive.Root>
|
|
25
|
+
))
|
|
26
|
+
Slider.displayName = SliderPrimitive.Root.displayName
|
|
27
|
+
|
|
28
|
+
export { Slider }
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as AccordionPrimitive from '@radix-ui/react-accordion';
|
|
3
|
+
import { ChevronButton } from './ui/chevron-button';
|
|
4
|
+
import { cn } from "../utils/cn";
|
|
5
|
+
|
|
6
|
+
// --- SmoothAccordion -----------------------------------------------------------------
|
|
7
|
+
// Wrapper that re-exports AccordionPrimitive.Root for convenience
|
|
8
|
+
export const SmoothAccordion = AccordionPrimitive.Root;
|
|
9
|
+
|
|
10
|
+
// --- SmoothAccordionItem --------------------------------------------------------------
|
|
11
|
+
export const SmoothAccordionItem = React.forwardRef<
|
|
12
|
+
React.ElementRef<typeof AccordionPrimitive.Item>,
|
|
13
|
+
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>
|
|
14
|
+
>(({ className, ...props }, ref) => (
|
|
15
|
+
<AccordionPrimitive.Item
|
|
16
|
+
ref={ref}
|
|
17
|
+
className={cn('border-0', className)}
|
|
18
|
+
{...props}
|
|
19
|
+
/>
|
|
20
|
+
));
|
|
21
|
+
SmoothAccordionItem.displayName = 'SmoothAccordionItem';
|
|
22
|
+
|
|
23
|
+
// --- SmoothAccordionTrigger -----------------------------------------------------------
|
|
24
|
+
interface SmoothAccordionTriggerProps
|
|
25
|
+
extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> {
|
|
26
|
+
label: React.ReactNode;
|
|
27
|
+
className?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const SmoothAccordionTrigger = React.forwardRef<
|
|
31
|
+
HTMLButtonElement,
|
|
32
|
+
SmoothAccordionTriggerProps
|
|
33
|
+
>(({ label, className, ...props }, ref) => (
|
|
34
|
+
<AccordionPrimitive.Header className="flex">
|
|
35
|
+
<AccordionPrimitive.Trigger
|
|
36
|
+
ref={ref}
|
|
37
|
+
className={cn(
|
|
38
|
+
'group flex w-full items-center justify-between px-6 md:px-8 py-6 text-left hover:no-underline focus:outline-none transition-colors duration-200 ease-in-out',
|
|
39
|
+
className,
|
|
40
|
+
)}
|
|
41
|
+
{...props}
|
|
42
|
+
>
|
|
43
|
+
<span className="text-h3 text-ods-text-primary">
|
|
44
|
+
{label}
|
|
45
|
+
</span>
|
|
46
|
+
<ChevronButton
|
|
47
|
+
size="md"
|
|
48
|
+
isExpanded={false}
|
|
49
|
+
backgroundColor="transparent"
|
|
50
|
+
borderColor="var(--color-border-default)"
|
|
51
|
+
className="transition-transform duration-300 ease-in-out group-data-[state=open]:rotate-180"
|
|
52
|
+
/>
|
|
53
|
+
</AccordionPrimitive.Trigger>
|
|
54
|
+
</AccordionPrimitive.Header>
|
|
55
|
+
));
|
|
56
|
+
SmoothAccordionTrigger.displayName = 'SmoothAccordionTrigger';
|
|
57
|
+
|
|
58
|
+
// --- SmoothAccordionContent -----------------------------------------------------------
|
|
59
|
+
// Uses dynamic height measurement with ResizeObserver for ultra-smooth animation.
|
|
60
|
+
export const SmoothAccordionContent = React.forwardRef<
|
|
61
|
+
HTMLDivElement,
|
|
62
|
+
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>
|
|
63
|
+
>(({ className, children, ...props }, ref) => {
|
|
64
|
+
const [maxHeight, setMaxHeight] = React.useState<number>(0);
|
|
65
|
+
const contentInnerRef = React.useRef<HTMLDivElement | null>(null);
|
|
66
|
+
|
|
67
|
+
const composedRef = (node: HTMLDivElement) => {
|
|
68
|
+
// Allow Radix to receive ref as well
|
|
69
|
+
if (typeof ref === 'function') ref(node);
|
|
70
|
+
else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;
|
|
71
|
+
contentInnerRef.current = node;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const updateHeight = React.useCallback(() => {
|
|
75
|
+
if (contentInnerRef.current) {
|
|
76
|
+
setMaxHeight(contentInnerRef.current.scrollHeight);
|
|
77
|
+
}
|
|
78
|
+
}, []);
|
|
79
|
+
|
|
80
|
+
React.useEffect(() => {
|
|
81
|
+
updateHeight();
|
|
82
|
+
}, [updateHeight, children]);
|
|
83
|
+
|
|
84
|
+
// ResizeObserver for dynamic content
|
|
85
|
+
React.useEffect(() => {
|
|
86
|
+
if (!contentInnerRef.current) return;
|
|
87
|
+
const ro = new ResizeObserver(updateHeight);
|
|
88
|
+
ro.observe(contentInnerRef.current);
|
|
89
|
+
return () => ro.disconnect();
|
|
90
|
+
}, [updateHeight]);
|
|
91
|
+
|
|
92
|
+
const isOpen = (props as any)["data-state"] === "open";
|
|
93
|
+
|
|
94
|
+
return (
|
|
95
|
+
<AccordionPrimitive.Content
|
|
96
|
+
ref={composedRef}
|
|
97
|
+
// Radix provides data-state attribute for open/closed
|
|
98
|
+
className={cn('overflow-hidden', className)}
|
|
99
|
+
style={{
|
|
100
|
+
transition: 'max-height 0.35s ease-in-out, opacity 0.35s ease-in-out',
|
|
101
|
+
maxHeight: isOpen ? `${maxHeight}px` : '0px',
|
|
102
|
+
opacity: isOpen ? 1 : 0,
|
|
103
|
+
}}
|
|
104
|
+
{...props}
|
|
105
|
+
onTransitionEnd={() => {
|
|
106
|
+
// After closing, reset maxHeight to avoid lingering space
|
|
107
|
+
if (!isOpen) {
|
|
108
|
+
setMaxHeight(0);
|
|
109
|
+
}
|
|
110
|
+
}}
|
|
111
|
+
>
|
|
112
|
+
<div
|
|
113
|
+
// inner wrapper used for measurement
|
|
114
|
+
style={{
|
|
115
|
+
opacity: 1,
|
|
116
|
+
paddingBottom: '0.75rem', // keep default styling to match existing
|
|
117
|
+
}}
|
|
118
|
+
>
|
|
119
|
+
{children}
|
|
120
|
+
</div>
|
|
121
|
+
</AccordionPrimitive.Content>
|
|
122
|
+
);
|
|
123
|
+
});
|
|
124
|
+
SmoothAccordionContent.displayName = 'SmoothAccordionContent';
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import { cn } from "../utils/cn"
|
|
5
|
+
|
|
6
|
+
interface StepsProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
7
|
+
currentStep: number
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const StepsComponent = React.forwardRef<HTMLDivElement, StepsProps>(
|
|
11
|
+
({ currentStep, className, children, ...props }, ref) => {
|
|
12
|
+
// Count the number of step children
|
|
13
|
+
const steps = React.Children.toArray(children).filter((child) => React.isValidElement(child))
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<div ref={ref} className={cn("space-y-4", className)} {...props}>
|
|
17
|
+
{React.Children.map(children, (child, index) => {
|
|
18
|
+
if (!React.isValidElement(child) || child.type !== Step) {
|
|
19
|
+
return child
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Clone the child with additional props
|
|
23
|
+
return React.cloneElement(child as React.ReactElement<any>, {
|
|
24
|
+
stepNumber: index + 1,
|
|
25
|
+
isActive: currentStep === index + 1,
|
|
26
|
+
isCompleted: currentStep > index + 1,
|
|
27
|
+
isLast: index === steps.length - 1,
|
|
28
|
+
})
|
|
29
|
+
})}
|
|
30
|
+
</div>
|
|
31
|
+
)
|
|
32
|
+
},
|
|
33
|
+
)
|
|
34
|
+
StepsComponent.displayName = "Steps"
|
|
35
|
+
|
|
36
|
+
interface StepProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
37
|
+
title: string
|
|
38
|
+
description?: string
|
|
39
|
+
stepNumber?: number
|
|
40
|
+
isActive?: boolean
|
|
41
|
+
isCompleted?: boolean
|
|
42
|
+
isLast?: boolean
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const Step = React.forwardRef<HTMLDivElement, StepProps>(
|
|
46
|
+
({ title, description, stepNumber, isActive, isCompleted, isLast, className, ...props }, ref) => {
|
|
47
|
+
return (
|
|
48
|
+
<div ref={ref} className={cn("relative flex gap-4", !isLast && "pb-8", className)} {...props}>
|
|
49
|
+
{/* Line connecting steps */}
|
|
50
|
+
{!isLast && <div className="absolute left-[15px] top-[30px] bottom-0 w-[1px] bg-border" />}
|
|
51
|
+
|
|
52
|
+
{/* Step indicator */}
|
|
53
|
+
<div className="relative z-10 flex h-[30px] w-[30px] shrink-0 items-center justify-center rounded-full border bg-background">
|
|
54
|
+
{isCompleted ? (
|
|
55
|
+
<svg
|
|
56
|
+
className="h-4 w-4 text-primary"
|
|
57
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
58
|
+
viewBox="0 0 24 24"
|
|
59
|
+
fill="none"
|
|
60
|
+
stroke="currentColor"
|
|
61
|
+
strokeWidth="2"
|
|
62
|
+
strokeLinecap="round"
|
|
63
|
+
strokeLinejoin="round"
|
|
64
|
+
>
|
|
65
|
+
<polyline points="20 6 9 17 4 12" />
|
|
66
|
+
</svg>
|
|
67
|
+
) : (
|
|
68
|
+
<span className={cn("text-h6", isActive ? "text-primary" : "text-muted-foreground")}>
|
|
69
|
+
{stepNumber}
|
|
70
|
+
</span>
|
|
71
|
+
)}
|
|
72
|
+
</div>
|
|
73
|
+
|
|
74
|
+
{/* Step content */}
|
|
75
|
+
<div className="flex flex-col gap-0.5">
|
|
76
|
+
<h3
|
|
77
|
+
className={cn(
|
|
78
|
+
"text-h6",
|
|
79
|
+
isActive ? "text-foreground" : "text-muted-foreground",
|
|
80
|
+
isCompleted && "text-primary",
|
|
81
|
+
)}
|
|
82
|
+
>
|
|
83
|
+
{title}
|
|
84
|
+
</h3>
|
|
85
|
+
{description && (
|
|
86
|
+
<p className={cn("text-h6", isActive ? "text-muted-foreground" : "text-muted-foreground/60")}>
|
|
87
|
+
{description}
|
|
88
|
+
</p>
|
|
89
|
+
)}
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
)
|
|
93
|
+
},
|
|
94
|
+
)
|
|
95
|
+
Step.displayName = "Step"
|
|
96
|
+
|
|
97
|
+
export { Step }
|
|
98
|
+
export { StepsComponent as Steps }
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
interface SunIconProps {
|
|
4
|
+
className?: string;
|
|
5
|
+
width?: number;
|
|
6
|
+
height?: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const SunIcon: React.FC<SunIconProps> = ({
|
|
10
|
+
className = "",
|
|
11
|
+
width = 24,
|
|
12
|
+
height = 24
|
|
13
|
+
}) => {
|
|
14
|
+
return (
|
|
15
|
+
<svg
|
|
16
|
+
width={width}
|
|
17
|
+
height={height}
|
|
18
|
+
viewBox="0 0 24 24"
|
|
19
|
+
fill="none"
|
|
20
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
21
|
+
className={className}
|
|
22
|
+
>
|
|
23
|
+
<path d="M15.8755 11.9995C15.8752 9.85963 14.1395 8.125 11.9995 8.125C9.8598 8.12526 8.12526 9.8598 8.125 11.9995C8.125 14.1395 9.85963 15.8752 11.9995 15.8755C14.1396 15.8755 15.8755 14.1396 15.8755 11.9995ZM18.1255 11.9995C18.1255 15.3823 15.3823 18.1255 11.9995 18.1255C8.61699 18.1252 5.875 15.3821 5.875 11.9995C5.87526 8.61715 8.61715 5.87526 11.9995 5.875C15.3821 5.875 18.1252 8.61699 18.1255 11.9995Z" fill="currentColor"/>
|
|
24
|
+
<path d="M10.8755 21.9995V20.4995C10.8758 19.8784 11.3793 19.3745 12.0005 19.3745C12.6214 19.3748 13.1252 19.8786 13.1255 20.4995V21.9995C13.1255 22.6207 12.6216 23.1242 12.0005 23.1245C11.3792 23.1245 10.8755 22.6208 10.8755 21.9995ZM5.19482 17.2153C5.63418 16.7761 6.34636 16.776 6.78564 17.2153C7.22444 17.6547 7.22467 18.367 6.78564 18.8062L5.7251 19.8667L5.63867 19.9443C5.19681 20.3043 4.54455 20.2784 4.13281 19.8667C3.69387 19.4275 3.69402 18.7152 4.13281 18.2759L5.19482 17.2153ZM17.2153 17.2153C17.6271 16.8036 18.2779 16.7777 18.7197 17.1377L18.8062 17.2153L19.8667 18.2759L19.9443 18.3608C20.3046 18.8027 20.2785 19.4549 19.8667 19.8667C19.4549 20.2785 18.8027 20.3046 18.3608 19.9443L18.2759 19.8667L17.2153 18.8062L17.1377 18.7197C16.7777 18.2779 16.8036 17.6271 17.2153 17.2153ZM3.5 10.8755L3.61572 10.8813C4.18265 10.9393 4.625 11.4183 4.625 12.0005C4.62475 12.5825 4.18254 13.0617 3.61572 13.1196L3.5 13.1255H2C1.37884 13.1255 0.875264 12.6216 0.875 12.0005C0.875 11.3792 1.37868 10.8755 2 10.8755H3.5ZM21.9995 10.8755C22.6208 10.8755 23.1245 11.3792 23.1245 12.0005C23.1242 12.6216 22.6207 13.1255 21.9995 13.1255H20.4995C19.8786 13.1252 19.3748 12.6214 19.3745 12.0005C19.3745 11.3793 19.8784 10.8758 20.4995 10.8755H21.9995ZM4.13281 4.13281C4.5447 3.72092 5.1968 3.69622 5.63867 4.05664L5.7251 4.13281L6.78564 5.19482L6.86182 5.27979C7.22229 5.72166 7.19756 6.37373 6.78564 6.78564C6.37373 7.19756 5.72166 7.22229 5.27979 6.86182L5.19482 6.78564L4.13281 5.7251L4.05664 5.63867C3.69622 5.1968 3.72092 4.5447 4.13281 4.13281ZM18.3608 4.05664C18.8026 3.69605 19.4547 3.72107 19.8667 4.13281C20.306 4.57215 20.306 5.28576 19.8667 5.7251L18.8062 6.78564C18.367 7.22467 17.6547 7.22444 17.2153 6.78564C16.776 6.34636 16.7761 5.63418 17.2153 5.19482L18.2759 4.13281L18.3608 4.05664ZM10.8755 3.5V2C10.8755 1.37868 11.3792 0.875 12.0005 0.875C12.6216 0.875264 13.1255 1.37884 13.1255 2V3.5C13.1255 4.12116 12.6216 4.62474 12.0005 4.625C11.3792 4.625 10.8755 4.12132 10.8755 3.5Z" fill="currentColor"/>
|
|
25
|
+
</svg>
|
|
26
|
+
);
|
|
27
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import * as SwitchPrimitives from "@radix-ui/react-switch"
|
|
5
|
+
|
|
6
|
+
import { cn } from "../utils/cn"
|
|
7
|
+
|
|
8
|
+
const Switch = React.forwardRef<
|
|
9
|
+
React.ElementRef<typeof SwitchPrimitives.Root>,
|
|
10
|
+
React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>
|
|
11
|
+
>(({ className, ...props }, ref) => (
|
|
12
|
+
<SwitchPrimitives.Root
|
|
13
|
+
className={cn(
|
|
14
|
+
"peer inline-flex h-6 w-11 shrink-0 items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
|
|
15
|
+
className,
|
|
16
|
+
)}
|
|
17
|
+
{...props}
|
|
18
|
+
ref={ref}
|
|
19
|
+
>
|
|
20
|
+
<SwitchPrimitives.Thumb
|
|
21
|
+
className={cn(
|
|
22
|
+
"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0",
|
|
23
|
+
)}
|
|
24
|
+
/>
|
|
25
|
+
</SwitchPrimitives.Root>
|
|
26
|
+
))
|
|
27
|
+
Switch.displayName = SwitchPrimitives.Root.displayName
|
|
28
|
+
|
|
29
|
+
export { Switch }
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
|
|
3
|
+
import { cn } from "../utils/cn"
|
|
4
|
+
|
|
5
|
+
export interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}
|
|
6
|
+
|
|
7
|
+
const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(({ className, ...props }, ref) => {
|
|
8
|
+
return (
|
|
9
|
+
<textarea
|
|
10
|
+
className={cn(
|
|
11
|
+
"flex min-h-[80px] w-full rounded-md border border-ods-border bg-ods-card px-3 py-2 text-h4 placeholder:text-ods-text-secondary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:bg-ods-bg",
|
|
12
|
+
"touch-manipulation", // Prevent double-tap zoom
|
|
13
|
+
className,
|
|
14
|
+
)}
|
|
15
|
+
ref={ref}
|
|
16
|
+
{...props}
|
|
17
|
+
/>
|
|
18
|
+
)
|
|
19
|
+
})
|
|
20
|
+
Textarea.displayName = "Textarea"
|
|
21
|
+
|
|
22
|
+
export { Textarea }
|
|
@@ -55,6 +55,15 @@ const buttonVariants = cva(
|
|
|
55
55
|
// metadata rather than CTAs — author-page social rows, share rows.
|
|
56
56
|
// Pair with variant="transparent" for the ghost treatment.
|
|
57
57
|
'icon-sm': 'p-[var(--spacing-system-xxs)] h-8 w-8 [&_svg]:h-4 [&_svg]:w-4',
|
|
58
|
+
// 20px inline glyph for affordances that sit INSIDE a line of text —
|
|
59
|
+
// an info hint beside a badge, a copy glyph after an id. `icon-sm`'s
|
|
60
|
+
// 32px target is correct for a metadata row but visually swamps a
|
|
61
|
+
// 10px badge or a 14px label, so hosts were reaching for className
|
|
62
|
+
// overrides to shrink it. Below the WCAG 2.5.8 target floor on purpose:
|
|
63
|
+
// this is only for glyphs whose information is ALSO available another
|
|
64
|
+
// way (tooltip content mirrored into an aria-describedby node), never
|
|
65
|
+
// for a sole means of performing an action.
|
|
66
|
+
'icon-inline': 'p-0 h-5 w-5 min-h-0 min-w-0 shrink-0 [&_svg]:h-3.5 [&_svg]:w-3.5',
|
|
58
67
|
// Bare 56px media glyph (play / unmute over video). A size variant so
|
|
59
68
|
// hosts stop re-implementing a <button> to escape the 20px svg cap.
|
|
60
69
|
'icon-glyph': 'p-0 h-14 w-14 [&_svg]:h-14 [&_svg]:w-14',
|