@flamingo-stack/openframe-frontend-core 0.0.518-1660.4292.1 → 0.0.518-1663.4312.1
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-7EFJJMNH.cjs → chunk-25JSVBPR.cjs} +7 -7
- package/dist/{chunk-7EFJJMNH.cjs.map → chunk-25JSVBPR.cjs.map} +1 -1
- package/dist/{chunk-NJADHL2G.cjs → chunk-3M2MFP2Y.cjs} +30 -2
- package/dist/chunk-3M2MFP2Y.cjs.map +1 -0
- package/dist/{chunk-QXUMLLYV.cjs → chunk-BQXHC336.cjs} +3 -3
- package/dist/{chunk-QXUMLLYV.cjs.map → chunk-BQXHC336.cjs.map} +1 -1
- package/dist/{chunk-66GH54DV.cjs → chunk-CHMQCXYO.cjs} +40 -40
- package/dist/{chunk-66GH54DV.cjs.map → chunk-CHMQCXYO.cjs.map} +1 -1
- package/dist/{chunk-RWYNJC2F.cjs → chunk-DN3GKQ47.cjs} +98 -98
- package/dist/{chunk-RWYNJC2F.cjs.map → chunk-DN3GKQ47.cjs.map} +1 -1
- package/dist/{chunk-O7L2VJDW.cjs → chunk-GH5YZSQQ.cjs} +12 -12
- package/dist/{chunk-O7L2VJDW.cjs.map → chunk-GH5YZSQQ.cjs.map} +1 -1
- 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-XURCARSX.cjs → chunk-I6IWT62M.cjs} +5 -5
- package/dist/{chunk-XURCARSX.cjs.map → chunk-I6IWT62M.cjs.map} +1 -1
- package/dist/{chunk-43ZZYJ3M.js → chunk-KRBH3PI4.js} +5 -5
- package/dist/{chunk-3LMOLDFT.cjs → chunk-KW7GDLSG.cjs} +14 -14
- package/dist/{chunk-3LMOLDFT.cjs.map → chunk-KW7GDLSG.cjs.map} +1 -1
- package/dist/{chunk-JLO2O5R4.js → chunk-LL4C2NXG.js} +5388 -5249
- package/dist/chunk-LL4C2NXG.js.map +1 -0
- package/dist/{chunk-DPFQWIZJ.cjs → chunk-LQ2R7IA2.cjs} +32 -32
- package/dist/{chunk-DPFQWIZJ.cjs.map → chunk-LQ2R7IA2.cjs.map} +1 -1
- package/dist/{chunk-P63LOLTB.js → chunk-MI7WNVWX.js} +6 -6
- package/dist/{chunk-BXRB4MQI.cjs → chunk-MKN6S7SU.cjs} +381 -242
- package/dist/chunk-MKN6S7SU.cjs.map +1 -0
- package/dist/{chunk-ZKVARGSO.js → chunk-MOZUJ7IN.js} +3 -3
- package/dist/{chunk-MIFJLUZK.js → chunk-MVY3WDFZ.js} +2 -2
- package/dist/{chunk-FXT2OZ5Q.js → chunk-NJJWY7SO.js} +3 -3
- package/dist/{chunk-H6K73RK2.cjs → chunk-O4XLTA5G.cjs} +40 -40
- package/dist/{chunk-H6K73RK2.cjs.map → chunk-O4XLTA5G.cjs.map} +1 -1
- package/dist/{chunk-MEXZZOBO.js → chunk-P6M5MN3L.js} +9 -9
- package/dist/{chunk-5KBQECAY.js → chunk-PUBL2NCH.js} +2 -2
- package/dist/{chunk-NBJ7L65H.js → chunk-PV3LXEHJ.js} +2 -2
- package/dist/{chunk-XZ6WTSVQ.js → chunk-QJHBYNHI.js} +6 -6
- package/dist/{chunk-Z3ADCYC5.js → chunk-RCBRCZUF.js} +2 -2
- package/dist/{chunk-KP4JRPUE.js → chunk-RJU7YCN3.js} +2 -2
- package/dist/{chunk-GA7BHFXD.cjs → chunk-RLVJISO4.cjs} +77 -77
- package/dist/{chunk-GA7BHFXD.cjs.map → chunk-RLVJISO4.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-WI4XHZ2B.js → chunk-TFIPJAA5.js} +3 -3
- package/dist/{chunk-HPPCPGBR.cjs → chunk-URU6YKOA.cjs} +29 -29
- package/dist/{chunk-HPPCPGBR.cjs.map → chunk-URU6YKOA.cjs.map} +1 -1
- package/dist/{chunk-WSRPNLTY.cjs → chunk-WQDDSJWN.cjs} +18 -18
- package/dist/{chunk-WSRPNLTY.cjs.map → chunk-WQDDSJWN.cjs.map} +1 -1
- package/dist/{chunk-56OUH3UF.js → chunk-XARCNHWZ.js} +2 -2
- package/dist/{chunk-J7ZJ4KM2.cjs → chunk-YH627NWE.cjs} +4 -4
- package/dist/{chunk-J7ZJ4KM2.cjs.map → chunk-YH627NWE.cjs.map} +1 -1
- package/dist/{chunk-AI7WIW4E.js → chunk-YUQNJXSC.js} +4 -4
- 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/case-studies/index.cjs +14 -14
- package/dist/components/case-studies/index.js +4 -4
- package/dist/components/chart.d.ts +72 -0
- package/dist/components/chart.d.ts.map +1 -0
- package/dist/components/chat/hooks/use-jetstream-dialog-subscription.d.ts +7 -1
- package/dist/components/chat/hooks/use-jetstream-dialog-subscription.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +6 -4
- package/dist/components/chat/index.cjs.map +1 -1
- package/dist/components/chat/index.js +5 -3
- package/dist/components/chat/types/api.types.d.ts +22 -4
- package/dist/components/chat/types/api.types.d.ts.map +1 -1
- 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 +5 -5
- package/dist/components/contact/index.js +4 -4
- 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 +7 -7
- package/dist/components/docs/index.js +6 -6
- 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 +5 -5
- package/dist/components/embeds/index.js +4 -4
- 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 +6 -6
- package/dist/components/faq/index.js +5 -5
- package/dist/components/features/index.cjs +4 -4
- package/dist/components/features/index.js +3 -3
- 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 +25 -25
- package/dist/components/help-center-pages/index.js +16 -16
- 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 +222 -266
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +374 -418
- 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 +41 -41
- package/dist/components/meeting-scheduler/index.js +5 -5
- 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 +4 -4
- package/dist/components/navigation/index.js +3 -3
- package/dist/components/onboarding-guides/index.cjs +8 -8
- package/dist/components/onboarding-guides/index.js +7 -7
- 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 +6 -6
- package/dist/components/related-content/index.js +5 -5
- 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 +8 -8
- package/dist/components/tickets/index.js +7 -7
- package/dist/components/ui/index.cjs +6 -4
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.js +5 -3
- 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 +8 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -3
- 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/chat/hooks/.use-jetstream-dialog-subscription.md +11 -4
- package/src/components/chat/hooks/use-jetstream-dialog-subscription.ts +71 -6
- package/src/components/chat/types/api.types.ts +22 -4
- package/src/components/chat/utils/__tests__/history-merge.test.ts +99 -0
- 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/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-XURRAFIB.js.map +0 -1
- /package/dist/{chunk-FS3YSNSU.js.map → chunk-GS4HJA2G.js.map} +0 -0
- /package/dist/{chunk-43ZZYJ3M.js.map → chunk-KRBH3PI4.js.map} +0 -0
- /package/dist/{chunk-P63LOLTB.js.map → chunk-MI7WNVWX.js.map} +0 -0
- /package/dist/{chunk-ZKVARGSO.js.map → chunk-MOZUJ7IN.js.map} +0 -0
- /package/dist/{chunk-MIFJLUZK.js.map → chunk-MVY3WDFZ.js.map} +0 -0
- /package/dist/{chunk-FXT2OZ5Q.js.map → chunk-NJJWY7SO.js.map} +0 -0
- /package/dist/{chunk-MEXZZOBO.js.map → chunk-P6M5MN3L.js.map} +0 -0
- /package/dist/{chunk-5KBQECAY.js.map → chunk-PUBL2NCH.js.map} +0 -0
- /package/dist/{chunk-NBJ7L65H.js.map → chunk-PV3LXEHJ.js.map} +0 -0
- /package/dist/{chunk-XZ6WTSVQ.js.map → chunk-QJHBYNHI.js.map} +0 -0
- /package/dist/{chunk-Z3ADCYC5.js.map → chunk-RCBRCZUF.js.map} +0 -0
- /package/dist/{chunk-KP4JRPUE.js.map → chunk-RJU7YCN3.js.map} +0 -0
- /package/dist/{chunk-WI4XHZ2B.js.map → chunk-TFIPJAA5.js.map} +0 -0
- /package/dist/{chunk-56OUH3UF.js.map → chunk-XARCNHWZ.js.map} +0 -0
- /package/dist/{chunk-AI7WIW4E.js.map → chunk-YUQNJXSC.js.map} +0 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
interface HamburgerIconProps {
|
|
4
|
+
width?: number;
|
|
5
|
+
height?: number;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function HamburgerIcon({ width = 16, height = 16, className = '' }: HamburgerIconProps) {
|
|
10
|
+
return (
|
|
11
|
+
<svg
|
|
12
|
+
width={width}
|
|
13
|
+
height={height}
|
|
14
|
+
viewBox="0 0 16 16"
|
|
15
|
+
fill="none"
|
|
16
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
17
|
+
className={className}
|
|
18
|
+
>
|
|
19
|
+
<path
|
|
20
|
+
d="M14 11.25C14.4142 11.25 14.75 11.5858 14.75 12C14.75 12.4142 14.4142 12.75 14 12.75H2C1.58579 12.75 1.25 12.4142 1.25 12C1.25 11.5858 1.58579 11.25 2 11.25H14Z"
|
|
21
|
+
fill="#FAFAFA"
|
|
22
|
+
/>
|
|
23
|
+
<path
|
|
24
|
+
d="M14 7.25C14.4142 7.25 14.75 7.58579 14.75 8C14.75 8.41421 14.4142 8.75 14 8.75H2C1.58579 8.75 1.25 8.41421 1.25 8C1.25 7.58579 1.58579 7.25 2 7.25H14ZM14 3.25C14.4142 3.25 14.75 3.58579 14.75 4C14.75 4.41421 14.4142 4.75 14 4.75H2C1.58579 4.75 1.25 4.41421 1.25 4C1.25 3.58579 1.58579 3.25 2 3.25H14Z"
|
|
25
|
+
fill="#FAFAFA"
|
|
26
|
+
/>
|
|
27
|
+
</svg>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { cn } from "../utils/cn";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* HubSpot brand logo (solid orange)
|
|
6
|
+
* Usage: <HubspotIcon className="h-4 w-4" />
|
|
7
|
+
*/
|
|
8
|
+
export function HubspotIcon({ className, fill = '#FF7A59', ...props }: React.SVGProps<SVGSVGElement>) {
|
|
9
|
+
return (
|
|
10
|
+
<svg
|
|
11
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
12
|
+
viewBox="0 0 512 512"
|
|
13
|
+
fill={fill}
|
|
14
|
+
className={cn('inline-block', className)}
|
|
15
|
+
{...props}
|
|
16
|
+
>
|
|
17
|
+
<path d="M266.197 216.109c-22.551 21.293-36.655 51.48-36.655 84.991 0 26.326 8.714 50.582 23.359 70.08l-44.473 44.74c-3.953-1.438-8.176-2.245-12.579-2.245-9.702 0-18.776 3.774-25.605 10.602-6.828 6.827-10.602 15.989-10.602 25.696 0 9.701 3.773 18.775 10.602 25.605 6.829 6.826 15.993 10.42 25.605 10.42 9.703 0 18.777-3.505 25.695-10.42 6.829-6.83 10.602-15.994 10.602-25.605 0-3.774-.538-7.369-1.707-10.873l44.923-45.102c19.765 15.183 44.381 24.169 71.244 24.169 64.599 0 116.797-52.38 116.797-116.977 0-58.578-42.854-107.093-99.007-115.628v-55.343c15.723-6.65 25.335-21.384 25.335-38.545 0-23.449-18.777-43.034-42.227-43.034-23.448 0-41.956 19.585-41.956 43.034 0 17.161 9.613 31.895 25.335 38.545v54.983c-13.655 1.887-26.593 6.019-38.362 12.219-24.796-18.778-105.565-76.997-151.746-112.126 1.078-3.953 1.798-8.085 1.798-12.397 0-25.875-21.113-46.898-47.078-46.898-25.875 0-46.898 21.023-46.898 46.898 0 25.965 21.023 46.988 46.898 46.988 8.805 0 16.98-2.606 24.078-6.828L266.197 216.109zM346.606 363.095c-34.229 0-61.991-27.763-61.991-61.994 0-34.229 27.762-61.99 61.991-61.99 34.23 0 61.992 27.761 61.992 61.99 0 34.231-27.762 61.994-61.992 61.994z" />
|
|
18
|
+
</svg>
|
|
19
|
+
);
|
|
20
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
Megaphone,
|
|
4
|
+
Bell,
|
|
5
|
+
Info,
|
|
6
|
+
Star,
|
|
7
|
+
Rocket,
|
|
8
|
+
Package,
|
|
9
|
+
} from 'lucide-react';
|
|
10
|
+
import { OpenFrameLogo } from './openframe-logo';
|
|
11
|
+
import { OpenmspLogo } from './openmsp-logo';
|
|
12
|
+
import { FlamingoLogo } from './flamingo-logo';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Returns a JSX element for a known icon name, spreading any extra props.
|
|
16
|
+
* Falls back to Megaphone if the name is not recognised.
|
|
17
|
+
*/
|
|
18
|
+
export function renderSvgIcon(
|
|
19
|
+
name: string,
|
|
20
|
+
props: React.SVGProps<SVGSVGElement | SVGElement> = {}
|
|
21
|
+
): React.ReactElement {
|
|
22
|
+
const map: Record<string, (p: any) => React.ReactElement> = {
|
|
23
|
+
megaphone: (p) => <Megaphone {...p} />,
|
|
24
|
+
bell: (p) => <Bell {...p} />,
|
|
25
|
+
info: (p) => <Info {...p} />,
|
|
26
|
+
star: (p) => <Star {...p} />,
|
|
27
|
+
rocket: (p) => <Rocket {...p} />,
|
|
28
|
+
package: (p) => <Package {...p} />,
|
|
29
|
+
'openframe-logo': (p) => <OpenFrameLogo {...p} />,
|
|
30
|
+
'openmsp-logo': (p) => <OpenmspLogo {...p} />,
|
|
31
|
+
'flamingo': (p)=> <FlamingoLogo {...p} />,
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const renderer = map[name] || map['megaphone'];
|
|
35
|
+
return renderer(props);
|
|
36
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
|
|
3
|
+
interface AppleIconProps {
|
|
4
|
+
width?: number | string
|
|
5
|
+
height?: number | string
|
|
6
|
+
className?: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/** @deprecated Use icons from icons-v2-generated instead. */
|
|
10
|
+
export function AppleIcon({
|
|
11
|
+
width = 24,
|
|
12
|
+
height = 24,
|
|
13
|
+
className = "text-current"
|
|
14
|
+
}: AppleIconProps) {
|
|
15
|
+
return (
|
|
16
|
+
<svg
|
|
17
|
+
width={width}
|
|
18
|
+
height={height}
|
|
19
|
+
viewBox="0 0 24 24"
|
|
20
|
+
fill="none"
|
|
21
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
22
|
+
className={className}
|
|
23
|
+
>
|
|
24
|
+
<path
|
|
25
|
+
d="M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.56-1.702"
|
|
26
|
+
fill="currentColor"
|
|
27
|
+
/>
|
|
28
|
+
</svg>
|
|
29
|
+
)
|
|
30
|
+
}
|
|
@@ -81,6 +81,7 @@ export { GitHubIcon } from './github-icon';
|
|
|
81
81
|
export { SlackIcon } from './slack-icon';
|
|
82
82
|
export { ClickUpIcon } from './clickup-icon';
|
|
83
83
|
export { MicrosoftIcon } from './ms-icon';
|
|
84
|
+
export { AppleIcon } from './apple-icon';
|
|
84
85
|
export { GoogleLogo } from './google-logo';
|
|
85
86
|
export { RedditIcon } from './reddit-icon';
|
|
86
87
|
export { XLogo } from './x-logo';
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import React, { forwardRef } from 'react';
|
|
4
|
+
import { useInteractiveState } from '../hooks/use-interactive-state';
|
|
5
|
+
import { cn } from "../utils/cn";
|
|
6
|
+
|
|
7
|
+
interface InteractiveOptions {
|
|
8
|
+
enableHover?: boolean;
|
|
9
|
+
enableFocus?: boolean;
|
|
10
|
+
enablePress?: boolean;
|
|
11
|
+
enableRipple?: boolean;
|
|
12
|
+
enableAnimations?: boolean;
|
|
13
|
+
enableColorShifts?: boolean;
|
|
14
|
+
enableAccessibilityEnhancements?: boolean;
|
|
15
|
+
animations?: boolean;
|
|
16
|
+
enableHapticFeedback?: boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
interface InteractiveWrapperProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
20
|
+
/**
|
|
21
|
+
* Interactive state options
|
|
22
|
+
*/
|
|
23
|
+
interactive?: InteractiveOptions;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Element type to render
|
|
27
|
+
*/
|
|
28
|
+
as?: keyof React.JSX.IntrinsicElements;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Whether to render ripple effect
|
|
32
|
+
*/
|
|
33
|
+
showRipple?: boolean;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Custom ripple color
|
|
37
|
+
*/
|
|
38
|
+
rippleColor?: string;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Accessibility role
|
|
42
|
+
*/
|
|
43
|
+
role?: string;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Whether element should be focusable
|
|
47
|
+
*/
|
|
48
|
+
focusable?: boolean;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Loading state
|
|
52
|
+
*/
|
|
53
|
+
loading?: boolean;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Disabled state
|
|
57
|
+
*/
|
|
58
|
+
disabled?: boolean;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Active state
|
|
62
|
+
*/
|
|
63
|
+
active?: boolean;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Callback for state changes
|
|
67
|
+
*/
|
|
68
|
+
onStateChange?: (state: any) => void;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export const InteractiveWrapper = forwardRef<HTMLElement, InteractiveWrapperProps>(({
|
|
72
|
+
interactive = {},
|
|
73
|
+
as = 'div',
|
|
74
|
+
showRipple = true,
|
|
75
|
+
rippleColor,
|
|
76
|
+
role,
|
|
77
|
+
focusable = false,
|
|
78
|
+
loading = false,
|
|
79
|
+
disabled = false,
|
|
80
|
+
active = false,
|
|
81
|
+
onStateChange,
|
|
82
|
+
className,
|
|
83
|
+
children,
|
|
84
|
+
onClick,
|
|
85
|
+
...props
|
|
86
|
+
}, ref) => {
|
|
87
|
+
const {
|
|
88
|
+
state,
|
|
89
|
+
handlers,
|
|
90
|
+
getStateStyles,
|
|
91
|
+
getStateClasses,
|
|
92
|
+
ripplePosition,
|
|
93
|
+
setLoading,
|
|
94
|
+
setDisabled,
|
|
95
|
+
ref: interactiveRef
|
|
96
|
+
} = useInteractiveState();
|
|
97
|
+
|
|
98
|
+
// Update loading and disabled states
|
|
99
|
+
React.useEffect(() => {
|
|
100
|
+
setLoading(loading);
|
|
101
|
+
}, [loading, setLoading]);
|
|
102
|
+
|
|
103
|
+
React.useEffect(() => {
|
|
104
|
+
setDisabled(disabled);
|
|
105
|
+
}, [disabled, setDisabled]);
|
|
106
|
+
|
|
107
|
+
// Notify parent of state changes
|
|
108
|
+
React.useEffect(() => {
|
|
109
|
+
if (onStateChange) {
|
|
110
|
+
onStateChange(state);
|
|
111
|
+
}
|
|
112
|
+
}, [state, onStateChange]);
|
|
113
|
+
|
|
114
|
+
// Merge refs
|
|
115
|
+
React.useEffect(() => {
|
|
116
|
+
if (ref) {
|
|
117
|
+
if (typeof ref === 'function') {
|
|
118
|
+
ref(interactiveRef.current);
|
|
119
|
+
} else {
|
|
120
|
+
ref.current = interactiveRef.current;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}, [ref, interactiveRef]);
|
|
124
|
+
|
|
125
|
+
const Component = as as any;
|
|
126
|
+
|
|
127
|
+
const mergedHandlers = {
|
|
128
|
+
...handlers,
|
|
129
|
+
onClick: (event: React.MouseEvent<HTMLDivElement>) => {
|
|
130
|
+
handlers.onClick();
|
|
131
|
+
if (onClick && !event.defaultPrevented) {
|
|
132
|
+
onClick(event);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
const computedClassName = cn(
|
|
138
|
+
'interactive-wrapper',
|
|
139
|
+
'relative overflow-hidden transition-all duration-200',
|
|
140
|
+
getStateClasses(),
|
|
141
|
+
focusable && 'focus:outline-none',
|
|
142
|
+
className
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
return (
|
|
146
|
+
<Component
|
|
147
|
+
ref={interactiveRef}
|
|
148
|
+
className={computedClassName}
|
|
149
|
+
style={{ ...getStateStyles(), ...props.style }}
|
|
150
|
+
role={role}
|
|
151
|
+
tabIndex={focusable ? 0 : undefined}
|
|
152
|
+
aria-disabled={disabled}
|
|
153
|
+
aria-busy={loading}
|
|
154
|
+
aria-pressed={active}
|
|
155
|
+
{...mergedHandlers}
|
|
156
|
+
{...props}
|
|
157
|
+
>
|
|
158
|
+
{children}
|
|
159
|
+
|
|
160
|
+
{/* Ripple Effect */}
|
|
161
|
+
{showRipple && ripplePosition && (
|
|
162
|
+
<RippleEffect
|
|
163
|
+
x={ripplePosition.x}
|
|
164
|
+
y={ripplePosition.y}
|
|
165
|
+
color={rippleColor}
|
|
166
|
+
/>
|
|
167
|
+
)}
|
|
168
|
+
|
|
169
|
+
{/* Loading Overlay */}
|
|
170
|
+
{loading && (
|
|
171
|
+
<div className="absolute inset-0 bg-current opacity-10 animate-pulse pointer-events-none" />
|
|
172
|
+
)}
|
|
173
|
+
</Component>
|
|
174
|
+
);
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
InteractiveWrapper.displayName = 'InteractiveWrapper';
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Ripple effect component
|
|
181
|
+
*/
|
|
182
|
+
function RippleEffect({
|
|
183
|
+
x,
|
|
184
|
+
y,
|
|
185
|
+
color = 'currentColor'
|
|
186
|
+
}: {
|
|
187
|
+
x: number;
|
|
188
|
+
y: number;
|
|
189
|
+
color?: string;
|
|
190
|
+
}) {
|
|
191
|
+
return (
|
|
192
|
+
<div
|
|
193
|
+
className="absolute pointer-events-none"
|
|
194
|
+
style={{
|
|
195
|
+
left: x,
|
|
196
|
+
top: y,
|
|
197
|
+
transform: 'translate(-50%, -50%)',
|
|
198
|
+
}}
|
|
199
|
+
>
|
|
200
|
+
<div
|
|
201
|
+
className="w-2 h-2 rounded-full animate-ping"
|
|
202
|
+
style={{
|
|
203
|
+
backgroundColor: color,
|
|
204
|
+
opacity: 0.3,
|
|
205
|
+
animationDuration: '0.6s',
|
|
206
|
+
animationTimingFunction: 'cubic-bezier(0, 0, 0.2, 1)',
|
|
207
|
+
transform: 'scale(0)',
|
|
208
|
+
animation: 'ripple-expand 0.6s cubic-bezier(0, 0, 0.2, 1)'
|
|
209
|
+
}}
|
|
210
|
+
/>
|
|
211
|
+
</div>
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Pre-configured interactive components
|
|
217
|
+
*/
|
|
218
|
+
export const InteractivePresets = {
|
|
219
|
+
/**
|
|
220
|
+
* Card with hover and click interactions
|
|
221
|
+
*/
|
|
222
|
+
Card: forwardRef<HTMLDivElement, Omit<InteractiveWrapperProps, 'interactive'>>((props, ref) => (
|
|
223
|
+
<InteractiveWrapper
|
|
224
|
+
ref={ref}
|
|
225
|
+
interactive={{
|
|
226
|
+
enableAnimations: true,
|
|
227
|
+
enableColorShifts: true,
|
|
228
|
+
animations: true
|
|
229
|
+
}}
|
|
230
|
+
className={cn('bg-ods-card border border-ods-border rounded-lg p-4', props.className)}
|
|
231
|
+
focusable={true}
|
|
232
|
+
role="button"
|
|
233
|
+
{...props}
|
|
234
|
+
/>
|
|
235
|
+
)),
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Button-like interactive element
|
|
239
|
+
*/
|
|
240
|
+
Button: forwardRef<HTMLButtonElement, Omit<InteractiveWrapperProps, 'interactive' | 'as'>>((props, ref) => (
|
|
241
|
+
<InteractiveWrapper
|
|
242
|
+
ref={ref}
|
|
243
|
+
as="button"
|
|
244
|
+
interactive={{
|
|
245
|
+
enableAnimations: true,
|
|
246
|
+
enableColorShifts: true,
|
|
247
|
+
enableAccessibilityEnhancements: true,
|
|
248
|
+
enableHapticFeedback: true,
|
|
249
|
+
animations: true
|
|
250
|
+
}}
|
|
251
|
+
className={cn('bg-ods-accent text-ods-text-on-accent px-4 py-2 rounded-md font-medium', props.className)}
|
|
252
|
+
role="button"
|
|
253
|
+
{...props}
|
|
254
|
+
/>
|
|
255
|
+
)),
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Navigation item with subtle interactions
|
|
259
|
+
*/
|
|
260
|
+
NavItem: forwardRef<HTMLAnchorElement, Omit<InteractiveWrapperProps, 'interactive' | 'as'>>((props, ref) => (
|
|
261
|
+
<InteractiveWrapper
|
|
262
|
+
ref={ref}
|
|
263
|
+
as="a"
|
|
264
|
+
interactive={{
|
|
265
|
+
enableAnimations: true,
|
|
266
|
+
enableColorShifts: true,
|
|
267
|
+
animations: true
|
|
268
|
+
}}
|
|
269
|
+
className={cn('block px-3 py-2 rounded-md text-ods-text-secondary hover:text-ods-text-primary', props.className)}
|
|
270
|
+
focusable={true}
|
|
271
|
+
{...props}
|
|
272
|
+
/>
|
|
273
|
+
)),
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Input field with enhanced focus states
|
|
277
|
+
*/
|
|
278
|
+
Input: forwardRef<HTMLInputElement, Omit<InteractiveWrapperProps, 'interactive' | 'as'>>((props, ref) => (
|
|
279
|
+
<InteractiveWrapper
|
|
280
|
+
ref={ref}
|
|
281
|
+
as="input"
|
|
282
|
+
interactive={{
|
|
283
|
+
enableAnimations: false,
|
|
284
|
+
enableColorShifts: true,
|
|
285
|
+
enableAccessibilityEnhancements: true,
|
|
286
|
+
animations: true
|
|
287
|
+
}}
|
|
288
|
+
className={cn('w-full px-3 py-2 bg-ods-bg border border-ods-border rounded-md text-ods-text-primary', props.className)}
|
|
289
|
+
focusable={true}
|
|
290
|
+
{...props}
|
|
291
|
+
/>
|
|
292
|
+
)),
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Toggle switch with visual feedback
|
|
296
|
+
*/
|
|
297
|
+
Toggle: forwardRef<HTMLDivElement, Omit<InteractiveWrapperProps, 'interactive'> & { checked?: boolean }>((props, ref) => {
|
|
298
|
+
const { checked, ...restProps } = props;
|
|
299
|
+
|
|
300
|
+
return (
|
|
301
|
+
<InteractiveWrapper
|
|
302
|
+
ref={ref}
|
|
303
|
+
interactive={{
|
|
304
|
+
enableAnimations: true,
|
|
305
|
+
enableColorShifts: true,
|
|
306
|
+
enableHapticFeedback: true,
|
|
307
|
+
animations: true
|
|
308
|
+
}}
|
|
309
|
+
className={cn(
|
|
310
|
+
'relative inline-flex w-12 h-6 rounded-full cursor-pointer transition-colors',
|
|
311
|
+
checked ? 'bg-ods-accent' : 'bg-ods-border',
|
|
312
|
+
props.className
|
|
313
|
+
)}
|
|
314
|
+
role="switch"
|
|
315
|
+
aria-checked={checked}
|
|
316
|
+
focusable={true}
|
|
317
|
+
{...restProps}
|
|
318
|
+
>
|
|
319
|
+
<div
|
|
320
|
+
className={cn(
|
|
321
|
+
'inline-block w-5 h-5 rounded-full bg-white transform transition-transform',
|
|
322
|
+
checked ? 'translate-x-6' : 'translate-x-0.5',
|
|
323
|
+
'mt-0.5'
|
|
324
|
+
)}
|
|
325
|
+
/>
|
|
326
|
+
</InteractiveWrapper>
|
|
327
|
+
);
|
|
328
|
+
})
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
// Export individual preset components with display names
|
|
332
|
+
InteractivePresets.Card.displayName = 'InteractiveCard';
|
|
333
|
+
InteractivePresets.Button.displayName = 'InteractiveButton';
|
|
334
|
+
InteractivePresets.NavItem.displayName = 'InteractiveNavItem';
|
|
335
|
+
InteractivePresets.Input.displayName = 'InteractiveInput';
|
|
336
|
+
InteractivePresets.Toggle.displayName = 'InteractiveToggle';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Button } from './ui/button';
|
|
3
|
+
|
|
4
|
+
export interface JoinWaitlistButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
5
|
+
lowerPathColor?: string;
|
|
6
|
+
upperPathColor?: string;
|
|
7
|
+
buttonBackgroundColor?: string;
|
|
8
|
+
buttonTextColor?: string;
|
|
9
|
+
loading?: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const JoinWaitlistButton = React.forwardRef<HTMLButtonElement, JoinWaitlistButtonProps>(
|
|
13
|
+
({ className, lowerPathColor, upperPathColor, buttonBackgroundColor, buttonTextColor, children, ...props }, ref) => {
|
|
14
|
+
return (
|
|
15
|
+
<Button
|
|
16
|
+
ref={ref}
|
|
17
|
+
className={className}
|
|
18
|
+
style={{
|
|
19
|
+
backgroundColor: buttonBackgroundColor,
|
|
20
|
+
color: buttonTextColor
|
|
21
|
+
}}
|
|
22
|
+
{...props}
|
|
23
|
+
>
|
|
24
|
+
{children || 'Join Waitlist'}
|
|
25
|
+
</Button>
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
JoinWaitlistButton.displayName = "JoinWaitlistButton";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import React from 'react';
|
|
4
|
-
import { OpenmspLogo } from '../
|
|
4
|
+
import { OpenmspLogo } from '../openmsp-logo';
|
|
5
5
|
|
|
6
6
|
export function OpenmspHeartbeatLoader({ className = '', progress = 0, label, barWidth = 'w-128' }: { className?: string; progress?: number; label?: string; barWidth?: string }) {
|
|
7
7
|
return (
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
3
|
import React, { useState, useEffect } from 'react';
|
|
4
|
-
import { FlamingoLogo } from './
|
|
4
|
+
import { FlamingoLogo } from './flamingo-logo';
|
|
5
5
|
import { getBaseUrl } from '../utils';
|
|
6
6
|
|
|
7
7
|
interface MadeWithLoveProps {
|
|
@@ -117,9 +117,8 @@ export function MadeWithLove({
|
|
|
117
117
|
>
|
|
118
118
|
<div style={logoStyle}>
|
|
119
119
|
<FlamingoLogo
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
fill="#f357bb" // Direct hex instead of CSS variable for cross-framework compatibility
|
|
120
|
+
size={config.logoSize}
|
|
121
|
+
color="#f357bb" // Direct hex instead of CSS variable for cross-framework compatibility
|
|
123
122
|
/>
|
|
124
123
|
</div>
|
|
125
124
|
<span style={textStyle}>Flamingo</span>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Menu } from 'lucide-react';
|
|
3
|
+
|
|
4
|
+
interface MenuIconProps {
|
|
5
|
+
className?: string;
|
|
6
|
+
width?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const MenuIcon: React.FC<MenuIconProps> = ({
|
|
11
|
+
className = "",
|
|
12
|
+
width = 24,
|
|
13
|
+
height = 24
|
|
14
|
+
}) => {
|
|
15
|
+
return (
|
|
16
|
+
<Menu
|
|
17
|
+
width={width}
|
|
18
|
+
height={height}
|
|
19
|
+
className={className}
|
|
20
|
+
/>
|
|
21
|
+
);
|
|
22
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
|
|
3
|
+
interface MinusCircleIconProps extends React.SVGProps<SVGSVGElement> {
|
|
4
|
+
className?: string
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function MinusCircleIcon({ className, ...props }: MinusCircleIconProps) {
|
|
8
|
+
return (
|
|
9
|
+
<svg
|
|
10
|
+
width="24"
|
|
11
|
+
height="24"
|
|
12
|
+
viewBox="0 0 24 24"
|
|
13
|
+
fill="none"
|
|
14
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
15
|
+
className={className}
|
|
16
|
+
{...props}
|
|
17
|
+
>
|
|
18
|
+
<path
|
|
19
|
+
d="M20.8745 12.0005C20.8745 7.09912 16.9018 3.12526 12.0005 3.125C7.09896 3.125 3.125 7.09896 3.125 12.0005C3.12526 16.9018 7.09912 20.8745 12.0005 20.8745C16.9016 20.8742 20.8742 16.9016 20.8745 12.0005ZM23.1245 12.0005C23.1242 18.1443 18.1443 23.1242 12.0005 23.1245C5.85648 23.1245 0.875264 18.1444 0.875 12.0005C0.875 5.85632 5.85632 0.875 12.0005 0.875C18.1444 0.875264 23.1245 5.85648 23.1245 12.0005Z"
|
|
20
|
+
fill="#888888"
|
|
21
|
+
/>
|
|
22
|
+
<path
|
|
23
|
+
d="M15.9995 10.875L16.1152 10.8809C16.6824 10.9386 17.1245 11.4176 17.1245 12C17.1245 12.5824 16.6824 13.0614 16.1152 13.1191L15.9995 13.125H8C7.37868 13.125 6.875 12.6213 6.875 12C6.875 11.3787 7.37868 10.875 8 10.875H15.9995Z"
|
|
24
|
+
fill="#888888"
|
|
25
|
+
/>
|
|
26
|
+
</svg>
|
|
27
|
+
)
|
|
28
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
interface MoonIconProps {
|
|
4
|
+
className?: string;
|
|
5
|
+
width?: number;
|
|
6
|
+
height?: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const MoonIcon: React.FC<MoonIconProps> = ({
|
|
10
|
+
className = "",
|
|
11
|
+
width = 23,
|
|
12
|
+
height = 24
|
|
13
|
+
}) => {
|
|
14
|
+
return (
|
|
15
|
+
<svg
|
|
16
|
+
width={width}
|
|
17
|
+
height={height}
|
|
18
|
+
viewBox="0 0 23 24"
|
|
19
|
+
fill="none"
|
|
20
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
21
|
+
className={className}
|
|
22
|
+
>
|
|
23
|
+
<path d="M9.37549 6.69626C9.3755 5.53929 9.55702 4.42358 9.89404 3.37692C6.00935 4.32228 3.125 7.82461 3.125 12.0005C3.12514 16.9019 7.09905 20.8745 12.0005 20.8745C14.846 20.8743 17.3791 19.5349 19.0039 17.4497C13.5887 16.856 9.37549 12.2696 9.37549 6.69626ZM11.6255 6.69626C11.6255 11.43 15.4626 15.2671 20.1963 15.2671C20.4368 15.2671 20.6747 15.2571 20.9097 15.2378C21.3123 15.2046 21.7024 15.3908 21.9307 15.7241C22.1587 16.0573 22.1904 16.4872 22.0142 16.8506C20.2135 20.5621 16.4075 23.1243 12.0005 23.1245C5.85641 23.1245 0.875136 18.1445 0.875 12.0005C0.875 5.96445 5.68179 1.05079 11.6768 0.879363C12.0807 0.867855 12.4598 1.07472 12.6699 1.41989C12.8797 1.76491 12.8889 2.19599 12.6934 2.54928C12.0132 3.77703 11.6255 5.18981 11.6255 6.69626Z" fill="currentColor"/>
|
|
24
|
+
</svg>
|
|
25
|
+
);
|
|
26
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
|
|
3
|
+
interface MsIconProps {
|
|
4
|
+
width?: number | string
|
|
5
|
+
height?: number | string
|
|
6
|
+
className?: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function MicrosoftIcon({
|
|
10
|
+
width = 24,
|
|
11
|
+
height = 24,
|
|
12
|
+
className = "text-current"
|
|
13
|
+
}: MsIconProps) {
|
|
14
|
+
return (
|
|
15
|
+
<svg
|
|
16
|
+
width={24}
|
|
17
|
+
height={24}
|
|
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 d="M11.5047 11.5032H2V2H11.5047V11.5032Z" fill="#F1511B"/>
|
|
25
|
+
<path d="M22.0002 11.5032H12.4946V2H21.9993V11.5032H22.0002Z" fill="#80CC28"/>
|
|
26
|
+
<path d="M11.5047 21.9993H2V12.4961H11.5047V21.9993Z" fill="#00ADEF"/>
|
|
27
|
+
<path d="M22.0002 21.9993H12.4946V12.4961H21.9993V21.9993H22.0002Z" fill="#FBBC09"/>
|
|
28
|
+
</g>
|
|
29
|
+
</svg>
|
|
30
|
+
)
|
|
31
|
+
}
|
|
@@ -33,7 +33,7 @@ const FeatureCard: React.FC<FeatureCardProps> = ({ icon, title, description }) =
|
|
|
33
33
|
);
|
|
34
34
|
};
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
const OpenSourceFeatures: React.FC = () => {
|
|
37
37
|
const features = [
|
|
38
38
|
{
|
|
39
39
|
icon: <Terminal className="w-6 h-6" />,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
interface OpenSourceIconProps {
|
|
4
|
+
className?: string;
|
|
5
|
+
width?: number;
|
|
6
|
+
height?: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const OpenSourceIcon: React.FC<OpenSourceIconProps> = ({
|
|
10
|
+
className = "",
|
|
11
|
+
width = 19,
|
|
12
|
+
height = 18
|
|
13
|
+
}) => {
|
|
14
|
+
return (
|
|
15
|
+
<svg
|
|
16
|
+
width={width}
|
|
17
|
+
height={height}
|
|
18
|
+
viewBox="0 0 19 18"
|
|
19
|
+
fill="none"
|
|
20
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
21
|
+
className={className}
|
|
22
|
+
>
|
|
23
|
+
<path d="M10.1103 1.20504C10.2596 0.753862 10.729 0.479825 11.2029 0.584919C11.7083 0.697238 12.0269 1.19887 11.9145 1.7043L8.58202 16.7043C8.46953 17.2095 7.96794 17.5283 7.46264 17.416C6.95742 17.3035 6.63868 16.8019 6.75097 16.2966L10.0847 1.29659L10.1103 1.20504Z" fill="currentColor"/>
|
|
24
|
+
<path d="M4.50325 4.17094C4.86929 3.80489 5.4628 3.80502 5.82893 4.17094C6.19505 4.53705 6.19505 5.1305 5.82893 5.49662L2.32429 9.00004L5.82893 12.5047L5.89363 12.5755C6.19397 12.9437 6.17217 13.4871 5.82893 13.8304C5.48568 14.1732 4.94335 14.194 4.57527 13.8938L4.50325 13.8304L0.336986 9.66288C-0.0289274 9.29675 -0.029063 8.70325 0.336986 8.3372L4.50325 4.17094ZM12.837 4.17094C13.1802 3.82768 13.7236 3.80585 14.0919 4.10624L14.1627 4.17094L18.3289 8.3372C18.695 8.70331 18.695 9.29676 18.3289 9.66288L14.1627 13.8304C13.7966 14.1962 13.2031 14.1962 12.837 13.8304C12.4709 13.4643 12.4711 12.8708 12.837 12.5047L16.3404 9.00004L12.837 5.49662L12.7723 5.42582C12.4719 5.05759 12.4937 4.51419 12.837 4.17094Z" fill="currentColor"/>
|
|
25
|
+
</svg>
|
|
26
|
+
);
|
|
27
|
+
};
|