@hanzo/ui 8.27.26 → 8.27.31
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/auth/SignIn.cjs +16 -10
- package/dist/auth/SignIn.d.ts +2 -1
- package/dist/auth/SignIn.d.ts.map +1 -1
- package/dist/auth/SignIn.js +16 -10
- package/dist/auth/SignIn.js.map +1 -1
- package/dist/auth/index.cjs +1 -1
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/index.js +1 -1
- package/dist/auth/session.cjs +5 -1
- package/dist/auth/session.d.ts +2 -0
- package/dist/auth/session.d.ts.map +1 -1
- package/dist/auth/session.js +3 -0
- package/dist/auth/session.js.map +1 -1
- package/dist/auth/signout.cjs +24 -2
- package/dist/auth/signout.d.ts +2 -2
- package/dist/auth/signout.d.ts.map +1 -1
- package/dist/auth/signout.js +25 -3
- package/dist/auth/signout.js.map +1 -1
- package/dist/backends/gui/choice.cjs +47 -0
- package/dist/backends/gui/choice.d.ts +28 -0
- package/dist/backends/gui/choice.d.ts.map +1 -0
- package/dist/backends/gui/choice.js +44 -0
- package/dist/backends/gui/choice.js.map +1 -0
- package/dist/backends/gui/index.cjs +12 -7
- package/dist/backends/gui/index.d.ts +2 -0
- package/dist/backends/gui/index.d.ts.map +1 -1
- package/dist/backends/gui/index.js +2 -0
- package/dist/backends/gui/index.js.map +1 -1
- package/dist/backends/gui/label.cjs +4 -1
- package/dist/backends/gui/label.d.ts.map +1 -1
- package/dist/backends/gui/label.js +4 -1
- package/dist/backends/gui/label.js.map +1 -1
- package/dist/backends/gui/select.cjs +4 -1
- package/dist/backends/gui/select.d.ts.map +1 -1
- package/dist/backends/gui/select.js +4 -1
- package/dist/backends/gui/select.js.map +1 -1
- package/dist/backends/gui/stepper.cjs +20 -0
- package/dist/backends/gui/stepper.d.ts +10 -0
- package/dist/backends/gui/stepper.d.ts.map +1 -0
- package/dist/backends/gui/stepper.js +18 -0
- package/dist/backends/gui/stepper.js.map +1 -0
- package/dist/gallery.cjs +6 -1
- package/dist/gallery.d.ts.map +1 -1
- package/dist/gallery.html +29 -4
- package/dist/gallery.js +6 -1
- package/dist/gallery.js.map +1 -1
- package/dist/index.cjs +7 -4
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.node.cjs +7 -4
- package/dist/index.node.js +1 -1
- package/dist/marketing/ClosingCta.cjs +19 -0
- package/dist/marketing/ClosingCta.d.ts +15 -0
- package/dist/marketing/ClosingCta.d.ts.map +1 -0
- package/dist/marketing/ClosingCta.js +17 -0
- package/dist/marketing/ClosingCta.js.map +1 -0
- package/dist/marketing/Cta.cjs +26 -0
- package/dist/marketing/Cta.d.ts +29 -0
- package/dist/marketing/Cta.d.ts.map +1 -0
- package/dist/marketing/Cta.js +24 -0
- package/dist/marketing/Cta.js.map +1 -0
- package/dist/marketing/Faq.cjs +20 -0
- package/dist/marketing/Faq.d.ts +13 -0
- package/dist/marketing/Faq.d.ts.map +1 -0
- package/dist/marketing/Faq.js +18 -0
- package/dist/marketing/Faq.js.map +1 -0
- package/dist/marketing/Hero.cjs +40 -0
- package/dist/marketing/Hero.d.ts +24 -0
- package/dist/marketing/Hero.d.ts.map +1 -0
- package/dist/marketing/Hero.js +38 -0
- package/dist/marketing/Hero.js.map +1 -0
- package/dist/marketing/Media.cjs +31 -0
- package/dist/marketing/Media.d.ts +16 -0
- package/dist/marketing/Media.d.ts.map +1 -0
- package/dist/marketing/Media.js +29 -0
- package/dist/marketing/Media.js.map +1 -0
- package/dist/marketing/Plans.cjs +74 -0
- package/dist/marketing/Plans.d.ts +30 -0
- package/dist/marketing/Plans.d.ts.map +1 -0
- package/dist/marketing/Plans.js +72 -0
- package/dist/marketing/Plans.js.map +1 -0
- package/dist/marketing/blocks.cjs +42 -0
- package/dist/marketing/blocks.d.ts +53 -0
- package/dist/marketing/blocks.d.ts.map +1 -0
- package/dist/marketing/blocks.js +34 -0
- package/dist/marketing/blocks.js.map +1 -0
- package/dist/marketing/index.cjs +32 -1
- package/dist/marketing/index.d.ts +9 -0
- package/dist/marketing/index.d.ts.map +1 -1
- package/dist/marketing/index.js +9 -0
- package/dist/marketing/index.js.map +1 -1
- package/dist/marketing/rows.cjs +47 -0
- package/dist/marketing/rows.d.ts +41 -0
- package/dist/marketing/rows.d.ts.map +1 -0
- package/dist/marketing/rows.js +38 -0
- package/dist/marketing/rows.js.map +1 -0
- package/dist/marketing/seen.cjs +26 -0
- package/dist/marketing/seen.d.ts +8 -0
- package/dist/marketing/seen.d.ts.map +1 -0
- package/dist/marketing/seen.js +24 -0
- package/dist/marketing/seen.js.map +1 -0
- package/dist/marketing/type.cjs +38 -0
- package/dist/marketing/type.d.ts +66 -0
- package/dist/marketing/type.d.ts.map +1 -0
- package/dist/marketing/type.js +36 -0
- package/dist/marketing/type.js.map +1 -0
- package/dist/onboarding/ChatOnboarding.cjs +107 -0
- package/dist/onboarding/ChatOnboarding.d.ts +25 -0
- package/dist/onboarding/ChatOnboarding.d.ts.map +1 -0
- package/dist/onboarding/ChatOnboarding.js +105 -0
- package/dist/onboarding/ChatOnboarding.js.map +1 -0
- package/dist/onboarding/Checkout.cjs +150 -0
- package/dist/onboarding/Checkout.d.ts +30 -0
- package/dist/onboarding/Checkout.d.ts.map +1 -0
- package/dist/onboarding/Checkout.js +148 -0
- package/dist/onboarding/Checkout.js.map +1 -0
- package/dist/onboarding/Onboarding.cjs +109 -0
- package/dist/onboarding/Onboarding.d.ts +43 -0
- package/dist/onboarding/Onboarding.d.ts.map +1 -0
- package/dist/onboarding/Onboarding.js +107 -0
- package/dist/onboarding/Onboarding.js.map +1 -0
- package/dist/onboarding/api.cjs +46 -0
- package/dist/onboarding/api.d.ts +19 -0
- package/dist/onboarding/api.d.ts.map +1 -0
- package/dist/onboarding/api.js +38 -0
- package/dist/onboarding/api.js.map +1 -0
- package/dist/onboarding/frame.cjs +38 -0
- package/dist/onboarding/frame.d.ts +39 -0
- package/dist/onboarding/frame.d.ts.map +1 -0
- package/dist/onboarding/frame.js +33 -0
- package/dist/onboarding/frame.js.map +1 -0
- package/dist/onboarding/hooks.cjs +70 -0
- package/dist/onboarding/hooks.d.ts +30 -0
- package/dist/onboarding/hooks.d.ts.map +1 -0
- package/dist/onboarding/hooks.js +67 -0
- package/dist/onboarding/hooks.js.map +1 -0
- package/dist/onboarding/index.cjs +43 -0
- package/dist/onboarding/index.d.ts +18 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +18 -0
- package/dist/onboarding/index.js.map +1 -0
- package/dist/onboarding/plans.cjs +87 -0
- package/dist/onboarding/plans.d.ts +60 -0
- package/dist/onboarding/plans.d.ts.map +1 -0
- package/dist/onboarding/plans.js +79 -0
- package/dist/onboarding/plans.js.map +1 -0
- package/dist/onboarding/roles.cjs +409 -0
- package/dist/onboarding/roles.d.ts +17 -0
- package/dist/onboarding/roles.d.ts.map +1 -0
- package/dist/onboarding/roles.js +407 -0
- package/dist/onboarding/roles.js.map +1 -0
- package/dist/onboarding/screens.cjs +121 -0
- package/dist/onboarding/screens.d.ts +46 -0
- package/dist/onboarding/screens.d.ts.map +1 -0
- package/dist/onboarding/screens.js +111 -0
- package/dist/onboarding/screens.js.map +1 -0
- package/dist/onboarding/state.cjs +25 -0
- package/dist/onboarding/state.d.ts +33 -0
- package/dist/onboarding/state.d.ts.map +1 -0
- package/dist/onboarding/state.js +22 -0
- package/dist/onboarding/state.js.map +1 -0
- package/dist/primitives/AdvancedChart.cjs +8 -0
- package/dist/primitives/AdvancedChart.d.ts +2 -0
- package/dist/primitives/AdvancedChart.d.ts.map +1 -0
- package/dist/primitives/AdvancedChart.js +5 -0
- package/dist/primitives/AdvancedChart.js.map +1 -0
- package/dist/primitives/Alert.cjs +8 -0
- package/dist/primitives/Alert.d.ts +2 -0
- package/dist/primitives/Alert.d.ts.map +1 -0
- package/dist/primitives/Alert.js +5 -0
- package/dist/primitives/Alert.js.map +1 -0
- package/dist/primitives/AlertDescription.cjs +8 -0
- package/dist/primitives/AlertDescription.d.ts +2 -0
- package/dist/primitives/AlertDescription.d.ts.map +1 -0
- package/dist/primitives/AlertDescription.js +5 -0
- package/dist/primitives/AlertDescription.js.map +1 -0
- package/dist/primitives/AlertTitle.cjs +8 -0
- package/dist/primitives/AlertTitle.d.ts +2 -0
- package/dist/primitives/AlertTitle.d.ts.map +1 -0
- package/dist/primitives/AlertTitle.js +5 -0
- package/dist/primitives/AlertTitle.js.map +1 -0
- package/dist/primitives/Android.cjs +8 -0
- package/dist/primitives/Android.d.ts +2 -0
- package/dist/primitives/Android.d.ts.map +1 -0
- package/dist/primitives/Android.js +5 -0
- package/dist/primitives/Android.js.map +1 -0
- package/dist/primitives/AnimatedBeam.cjs +8 -0
- package/dist/primitives/AnimatedBeam.d.ts +2 -0
- package/dist/primitives/AnimatedBeam.d.ts.map +1 -0
- package/dist/primitives/AnimatedBeam.js +5 -0
- package/dist/primitives/AnimatedBeam.js.map +1 -0
- package/dist/primitives/AnimatedCursor.cjs +8 -0
- package/dist/primitives/AnimatedCursor.d.ts +2 -0
- package/dist/primitives/AnimatedCursor.d.ts.map +1 -0
- package/dist/primitives/AnimatedCursor.js +5 -0
- package/dist/primitives/AnimatedCursor.js.map +1 -0
- package/dist/primitives/AnimatedTestimonials.cjs +8 -0
- package/dist/primitives/AnimatedTestimonials.d.ts +2 -0
- package/dist/primitives/AnimatedTestimonials.d.ts.map +1 -0
- package/dist/primitives/AnimatedTestimonials.js +5 -0
- package/dist/primitives/AnimatedTestimonials.js.map +1 -0
- package/dist/primitives/AnimatedTooltip.cjs +8 -0
- package/dist/primitives/AnimatedTooltip.d.ts +2 -0
- package/dist/primitives/AnimatedTooltip.d.ts.map +1 -0
- package/dist/primitives/AnimatedTooltip.js +5 -0
- package/dist/primitives/AnimatedTooltip.js.map +1 -0
- package/dist/primitives/Announcement.cjs +8 -0
- package/dist/primitives/Announcement.d.ts +2 -0
- package/dist/primitives/Announcement.d.ts.map +1 -0
- package/dist/primitives/Announcement.js +5 -0
- package/dist/primitives/Announcement.js.map +1 -0
- package/dist/primitives/AppleCardsCarousel.cjs +8 -0
- package/dist/primitives/AppleCardsCarousel.d.ts +2 -0
- package/dist/primitives/AppleCardsCarousel.d.ts.map +1 -0
- package/dist/primitives/AppleCardsCarousel.js +5 -0
- package/dist/primitives/AppleCardsCarousel.js.map +1 -0
- package/dist/primitives/AppleHelloEffect.cjs +8 -0
- package/dist/primitives/AppleHelloEffect.d.ts +2 -0
- package/dist/primitives/AppleHelloEffect.d.ts.map +1 -0
- package/dist/primitives/AppleHelloEffect.js +5 -0
- package/dist/primitives/AppleHelloEffect.js.map +1 -0
- package/dist/primitives/Banner.cjs +8 -0
- package/dist/primitives/Banner.d.ts +2 -0
- package/dist/primitives/Banner.d.ts.map +1 -0
- package/dist/primitives/Banner.js +5 -0
- package/dist/primitives/Banner.js.map +1 -0
- package/dist/primitives/Calendar.cjs +8 -0
- package/dist/primitives/Calendar.d.ts +2 -0
- package/dist/primitives/Calendar.d.ts.map +1 -0
- package/dist/primitives/Calendar.js +5 -0
- package/dist/primitives/Calendar.js.map +1 -0
- package/dist/primitives/Card3D.cjs +8 -0
- package/dist/primitives/Card3D.d.ts +2 -0
- package/dist/primitives/Card3D.d.ts.map +1 -0
- package/dist/primitives/Card3D.js +5 -0
- package/dist/primitives/Card3D.js.map +1 -0
- package/dist/primitives/Card3DContent.cjs +8 -0
- package/dist/primitives/Card3DContent.d.ts +2 -0
- package/dist/primitives/Card3DContent.d.ts.map +1 -0
- package/dist/primitives/Card3DContent.js +5 -0
- package/dist/primitives/Card3DContent.js.map +1 -0
- package/dist/primitives/Card3DDescription.cjs +8 -0
- package/dist/primitives/Card3DDescription.d.ts +2 -0
- package/dist/primitives/Card3DDescription.d.ts.map +1 -0
- package/dist/primitives/Card3DDescription.js +5 -0
- package/dist/primitives/Card3DDescription.js.map +1 -0
- package/dist/primitives/Card3DFooter.cjs +8 -0
- package/dist/primitives/Card3DFooter.d.ts +2 -0
- package/dist/primitives/Card3DFooter.d.ts.map +1 -0
- package/dist/primitives/Card3DFooter.js +5 -0
- package/dist/primitives/Card3DFooter.js.map +1 -0
- package/dist/primitives/Card3DHeader.cjs +8 -0
- package/dist/primitives/Card3DHeader.d.ts +2 -0
- package/dist/primitives/Card3DHeader.d.ts.map +1 -0
- package/dist/primitives/Card3DHeader.js +5 -0
- package/dist/primitives/Card3DHeader.js.map +1 -0
- package/dist/primitives/Card3DTitle.cjs +8 -0
- package/dist/primitives/Card3DTitle.d.ts +2 -0
- package/dist/primitives/Card3DTitle.d.ts.map +1 -0
- package/dist/primitives/Card3DTitle.js +5 -0
- package/dist/primitives/Card3DTitle.js.map +1 -0
- package/dist/primitives/ChoiceCard.cjs +8 -0
- package/dist/primitives/ChoiceCard.d.ts +2 -0
- package/dist/primitives/ChoiceCard.d.ts.map +1 -0
- package/dist/primitives/ChoiceCard.js +5 -0
- package/dist/primitives/ChoiceCard.js.map +1 -0
- package/dist/primitives/ChoiceGroup.cjs +8 -0
- package/dist/primitives/ChoiceGroup.d.ts +2 -0
- package/dist/primitives/ChoiceGroup.d.ts.map +1 -0
- package/dist/primitives/ChoiceGroup.js +5 -0
- package/dist/primitives/ChoiceGroup.js.map +1 -0
- package/dist/primitives/Choicebox.cjs +8 -0
- package/dist/primitives/Choicebox.d.ts +2 -0
- package/dist/primitives/Choicebox.d.ts.map +1 -0
- package/dist/primitives/Choicebox.js +5 -0
- package/dist/primitives/Choicebox.js.map +1 -0
- package/dist/primitives/CodeBlock.cjs +8 -0
- package/dist/primitives/CodeBlock.d.ts +2 -0
- package/dist/primitives/CodeBlock.d.ts.map +1 -0
- package/dist/primitives/CodeBlock.js +5 -0
- package/dist/primitives/CodeBlock.js.map +1 -0
- package/dist/primitives/CodeEditor.cjs +8 -0
- package/dist/primitives/CodeEditor.d.ts +2 -0
- package/dist/primitives/CodeEditor.d.ts.map +1 -0
- package/dist/primitives/CodeEditor.js +5 -0
- package/dist/primitives/CodeEditor.js.map +1 -0
- package/dist/primitives/CodeTabs.cjs +8 -0
- package/dist/primitives/CodeTabs.d.ts +2 -0
- package/dist/primitives/CodeTabs.d.ts.map +1 -0
- package/dist/primitives/CodeTabs.js +5 -0
- package/dist/primitives/CodeTabs.js.map +1 -0
- package/dist/primitives/ColorPicker.cjs +8 -0
- package/dist/primitives/ColorPicker.d.ts +2 -0
- package/dist/primitives/ColorPicker.d.ts.map +1 -0
- package/dist/primitives/ColorPicker.js +5 -0
- package/dist/primitives/ColorPicker.js.map +1 -0
- package/dist/primitives/Combobox.cjs +8 -0
- package/dist/primitives/Combobox.d.ts +2 -0
- package/dist/primitives/Combobox.d.ts.map +1 -0
- package/dist/primitives/Combobox.js +5 -0
- package/dist/primitives/Combobox.js.map +1 -0
- package/dist/primitives/ComboboxWithIcons.cjs +8 -0
- package/dist/primitives/ComboboxWithIcons.d.ts +2 -0
- package/dist/primitives/ComboboxWithIcons.d.ts.map +1 -0
- package/dist/primitives/ComboboxWithIcons.js +5 -0
- package/dist/primitives/ComboboxWithIcons.js.map +1 -0
- package/dist/primitives/CompanyProfile.cjs +8 -0
- package/dist/primitives/CompanyProfile.d.ts +2 -0
- package/dist/primitives/CompanyProfile.d.ts.map +1 -0
- package/dist/primitives/CompanyProfile.js +5 -0
- package/dist/primitives/CompanyProfile.js.map +1 -0
- package/dist/primitives/Comparison.cjs +8 -0
- package/dist/primitives/Comparison.d.ts +2 -0
- package/dist/primitives/Comparison.d.ts.map +1 -0
- package/dist/primitives/Comparison.js +5 -0
- package/dist/primitives/Comparison.js.map +1 -0
- package/dist/primitives/CreditCard.cjs +8 -0
- package/dist/primitives/CreditCard.d.ts +2 -0
- package/dist/primitives/CreditCard.d.ts.map +1 -0
- package/dist/primitives/CreditCard.js +5 -0
- package/dist/primitives/CreditCard.js.map +1 -0
- package/dist/primitives/CryptoScreener.cjs +8 -0
- package/dist/primitives/CryptoScreener.d.ts +2 -0
- package/dist/primitives/CryptoScreener.d.ts.map +1 -0
- package/dist/primitives/CryptoScreener.js +5 -0
- package/dist/primitives/CryptoScreener.js.map +1 -0
- package/dist/primitives/Cursor.cjs +8 -0
- package/dist/primitives/Cursor.d.ts +2 -0
- package/dist/primitives/Cursor.d.ts.map +1 -0
- package/dist/primitives/Cursor.js +5 -0
- package/dist/primitives/Cursor.js.map +1 -0
- package/dist/primitives/DataTable.cjs +8 -0
- package/dist/primitives/DataTable.d.ts +2 -0
- package/dist/primitives/DataTable.d.ts.map +1 -0
- package/dist/primitives/DataTable.js +5 -0
- package/dist/primitives/DataTable.js.map +1 -0
- package/dist/primitives/DataTableColumnHeader.cjs +8 -0
- package/dist/primitives/DataTableColumnHeader.d.ts +2 -0
- package/dist/primitives/DataTableColumnHeader.d.ts.map +1 -0
- package/dist/primitives/DataTableColumnHeader.js +5 -0
- package/dist/primitives/DataTableColumnHeader.js.map +1 -0
- package/dist/primitives/DatePicker.cjs +8 -0
- package/dist/primitives/DatePicker.d.ts +2 -0
- package/dist/primitives/DatePicker.d.ts.map +1 -0
- package/dist/primitives/DatePicker.js +5 -0
- package/dist/primitives/DatePicker.js.map +1 -0
- package/dist/primitives/Desktop.cjs +8 -0
- package/dist/primitives/Desktop.d.ts +2 -0
- package/dist/primitives/Desktop.d.ts.map +1 -0
- package/dist/primitives/Desktop.js +5 -0
- package/dist/primitives/Desktop.js.map +1 -0
- package/dist/primitives/DesktopWindow.cjs +8 -0
- package/dist/primitives/DesktopWindow.d.ts +2 -0
- package/dist/primitives/DesktopWindow.d.ts.map +1 -0
- package/dist/primitives/DesktopWindow.js +5 -0
- package/dist/primitives/DesktopWindow.js.map +1 -0
- package/dist/primitives/DesktopWindowControls.cjs +8 -0
- package/dist/primitives/DesktopWindowControls.d.ts +2 -0
- package/dist/primitives/DesktopWindowControls.d.ts.map +1 -0
- package/dist/primitives/DesktopWindowControls.js +5 -0
- package/dist/primitives/DesktopWindowControls.js.map +1 -0
- package/dist/primitives/DialogStack.cjs +8 -0
- package/dist/primitives/DialogStack.d.ts +2 -0
- package/dist/primitives/DialogStack.d.ts.map +1 -0
- package/dist/primitives/DialogStack.js +5 -0
- package/dist/primitives/DialogStack.js.map +1 -0
- package/dist/primitives/Disclosure.cjs +8 -0
- package/dist/primitives/Disclosure.d.ts +2 -0
- package/dist/primitives/Disclosure.d.ts.map +1 -0
- package/dist/primitives/Disclosure.js +5 -0
- package/dist/primitives/Disclosure.js.map +1 -0
- package/dist/primitives/Dock.cjs +8 -0
- package/dist/primitives/Dock.d.ts +2 -0
- package/dist/primitives/Dock.d.ts.map +1 -0
- package/dist/primitives/Dock.js +5 -0
- package/dist/primitives/Dock.js.map +1 -0
- package/dist/primitives/DockItem.cjs +8 -0
- package/dist/primitives/DockItem.d.ts +2 -0
- package/dist/primitives/DockItem.d.ts.map +1 -0
- package/dist/primitives/DockItem.js +5 -0
- package/dist/primitives/DockItem.js.map +1 -0
- package/dist/primitives/DockSeparator.cjs +8 -0
- package/dist/primitives/DockSeparator.d.ts +2 -0
- package/dist/primitives/DockSeparator.d.ts.map +1 -0
- package/dist/primitives/DockSeparator.js +5 -0
- package/dist/primitives/DockSeparator.js.map +1 -0
- package/dist/primitives/Dropzone.cjs +8 -0
- package/dist/primitives/Dropzone.d.ts +2 -0
- package/dist/primitives/Dropzone.d.ts.map +1 -0
- package/dist/primitives/Dropzone.js +5 -0
- package/dist/primitives/Dropzone.js.map +1 -0
- package/dist/primitives/Editor.cjs +8 -0
- package/dist/primitives/Editor.d.ts +2 -0
- package/dist/primitives/Editor.d.ts.map +1 -0
- package/dist/primitives/Editor.js +5 -0
- package/dist/primitives/Editor.js.map +1 -0
- package/dist/primitives/Empty.cjs +8 -0
- package/dist/primitives/Empty.d.ts +2 -0
- package/dist/primitives/Empty.d.ts.map +1 -0
- package/dist/primitives/Empty.js +5 -0
- package/dist/primitives/Empty.js.map +1 -0
- package/dist/primitives/EmptyContent.cjs +8 -0
- package/dist/primitives/EmptyContent.d.ts +2 -0
- package/dist/primitives/EmptyContent.d.ts.map +1 -0
- package/dist/primitives/EmptyContent.js +5 -0
- package/dist/primitives/EmptyContent.js.map +1 -0
- package/dist/primitives/EmptyDescription.cjs +8 -0
- package/dist/primitives/EmptyDescription.d.ts +2 -0
- package/dist/primitives/EmptyDescription.d.ts.map +1 -0
- package/dist/primitives/EmptyDescription.js +5 -0
- package/dist/primitives/EmptyDescription.js.map +1 -0
- package/dist/primitives/EmptyHeader.cjs +8 -0
- package/dist/primitives/EmptyHeader.d.ts +2 -0
- package/dist/primitives/EmptyHeader.d.ts.map +1 -0
- package/dist/primitives/EmptyHeader.js +5 -0
- package/dist/primitives/EmptyHeader.js.map +1 -0
- package/dist/primitives/EmptyMedia.cjs +8 -0
- package/dist/primitives/EmptyMedia.d.ts +2 -0
- package/dist/primitives/EmptyMedia.d.ts.map +1 -0
- package/dist/primitives/EmptyMedia.js +5 -0
- package/dist/primitives/EmptyMedia.js.map +1 -0
- package/dist/primitives/EmptyTitle.cjs +8 -0
- package/dist/primitives/EmptyTitle.d.ts +2 -0
- package/dist/primitives/EmptyTitle.d.ts.map +1 -0
- package/dist/primitives/EmptyTitle.js +5 -0
- package/dist/primitives/EmptyTitle.js.map +1 -0
- package/dist/primitives/Field.cjs +8 -0
- package/dist/primitives/Field.d.ts +2 -0
- package/dist/primitives/Field.d.ts.map +1 -0
- package/dist/primitives/Field.js +5 -0
- package/dist/primitives/Field.js.map +1 -0
- package/dist/primitives/FieldContent.cjs +8 -0
- package/dist/primitives/FieldContent.d.ts +2 -0
- package/dist/primitives/FieldContent.d.ts.map +1 -0
- package/dist/primitives/FieldContent.js +5 -0
- package/dist/primitives/FieldContent.js.map +1 -0
- package/dist/primitives/FieldDescription.cjs +8 -0
- package/dist/primitives/FieldDescription.d.ts +2 -0
- package/dist/primitives/FieldDescription.d.ts.map +1 -0
- package/dist/primitives/FieldDescription.js +5 -0
- package/dist/primitives/FieldDescription.js.map +1 -0
- package/dist/primitives/FieldError.cjs +8 -0
- package/dist/primitives/FieldError.d.ts +2 -0
- package/dist/primitives/FieldError.d.ts.map +1 -0
- package/dist/primitives/FieldError.js +5 -0
- package/dist/primitives/FieldError.js.map +1 -0
- package/dist/primitives/FieldGroup.cjs +8 -0
- package/dist/primitives/FieldGroup.d.ts +2 -0
- package/dist/primitives/FieldGroup.d.ts.map +1 -0
- package/dist/primitives/FieldGroup.js +5 -0
- package/dist/primitives/FieldGroup.js.map +1 -0
- package/dist/primitives/FieldLabel.cjs +8 -0
- package/dist/primitives/FieldLabel.d.ts +2 -0
- package/dist/primitives/FieldLabel.d.ts.map +1 -0
- package/dist/primitives/FieldLabel.js +5 -0
- package/dist/primitives/FieldLabel.js.map +1 -0
- package/dist/primitives/FieldLegend.cjs +8 -0
- package/dist/primitives/FieldLegend.d.ts +2 -0
- package/dist/primitives/FieldLegend.d.ts.map +1 -0
- package/dist/primitives/FieldLegend.js +5 -0
- package/dist/primitives/FieldLegend.js.map +1 -0
- package/dist/primitives/FieldSeparator.cjs +8 -0
- package/dist/primitives/FieldSeparator.d.ts +2 -0
- package/dist/primitives/FieldSeparator.d.ts.map +1 -0
- package/dist/primitives/FieldSeparator.js +5 -0
- package/dist/primitives/FieldSeparator.js.map +1 -0
- package/dist/primitives/FieldSet.cjs +8 -0
- package/dist/primitives/FieldSet.d.ts +2 -0
- package/dist/primitives/FieldSet.d.ts.map +1 -0
- package/dist/primitives/FieldSet.js +5 -0
- package/dist/primitives/FieldSet.js.map +1 -0
- package/dist/primitives/FieldTitle.cjs +8 -0
- package/dist/primitives/FieldTitle.d.ts +2 -0
- package/dist/primitives/FieldTitle.d.ts.map +1 -0
- package/dist/primitives/FieldTitle.js +5 -0
- package/dist/primitives/FieldTitle.js.map +1 -0
- package/dist/primitives/Financials.cjs +8 -0
- package/dist/primitives/Financials.d.ts +2 -0
- package/dist/primitives/Financials.d.ts.map +1 -0
- package/dist/primitives/Financials.js +5 -0
- package/dist/primitives/Financials.js.map +1 -0
- package/dist/primitives/ForexMarket.cjs +8 -0
- package/dist/primitives/ForexMarket.d.ts +2 -0
- package/dist/primitives/ForexMarket.d.ts.map +1 -0
- package/dist/primitives/ForexMarket.js +5 -0
- package/dist/primitives/ForexMarket.js.map +1 -0
- package/dist/primitives/ForexScreener.cjs +8 -0
- package/dist/primitives/ForexScreener.d.ts +2 -0
- package/dist/primitives/ForexScreener.d.ts.map +1 -0
- package/dist/primitives/ForexScreener.js +5 -0
- package/dist/primitives/ForexScreener.js.map +1 -0
- package/dist/primitives/Gantt.cjs +8 -0
- package/dist/primitives/Gantt.d.ts +2 -0
- package/dist/primitives/Gantt.d.ts.map +1 -0
- package/dist/primitives/Gantt.js +5 -0
- package/dist/primitives/Gantt.js.map +1 -0
- package/dist/primitives/Glimpse.cjs +8 -0
- package/dist/primitives/Glimpse.d.ts +2 -0
- package/dist/primitives/Glimpse.d.ts.map +1 -0
- package/dist/primitives/Glimpse.js +5 -0
- package/dist/primitives/Glimpse.js.map +1 -0
- package/dist/primitives/GlimpseContent.cjs +8 -0
- package/dist/primitives/GlimpseContent.d.ts +2 -0
- package/dist/primitives/GlimpseContent.d.ts.map +1 -0
- package/dist/primitives/GlimpseContent.js +5 -0
- package/dist/primitives/GlimpseContent.js.map +1 -0
- package/dist/primitives/GlimpseDescription.cjs +8 -0
- package/dist/primitives/GlimpseDescription.d.ts +2 -0
- package/dist/primitives/GlimpseDescription.d.ts.map +1 -0
- package/dist/primitives/GlimpseDescription.js +5 -0
- package/dist/primitives/GlimpseDescription.js.map +1 -0
- package/dist/primitives/GlimpseImage.cjs +8 -0
- package/dist/primitives/GlimpseImage.d.ts +2 -0
- package/dist/primitives/GlimpseImage.d.ts.map +1 -0
- package/dist/primitives/GlimpseImage.js +5 -0
- package/dist/primitives/GlimpseImage.js.map +1 -0
- package/dist/primitives/GlimpseTitle.cjs +8 -0
- package/dist/primitives/GlimpseTitle.d.ts +2 -0
- package/dist/primitives/GlimpseTitle.d.ts.map +1 -0
- package/dist/primitives/GlimpseTitle.js +5 -0
- package/dist/primitives/GlimpseTitle.js.map +1 -0
- package/dist/primitives/GlimpseTrigger.cjs +8 -0
- package/dist/primitives/GlimpseTrigger.d.ts +2 -0
- package/dist/primitives/GlimpseTrigger.d.ts.map +1 -0
- package/dist/primitives/GlimpseTrigger.js +5 -0
- package/dist/primitives/GlimpseTrigger.js.map +1 -0
- package/dist/primitives/GridPattern.cjs +8 -0
- package/dist/primitives/GridPattern.d.ts +2 -0
- package/dist/primitives/GridPattern.d.ts.map +1 -0
- package/dist/primitives/GridPattern.js +5 -0
- package/dist/primitives/GridPattern.js.map +1 -0
- package/dist/primitives/GridPatternPresets.cjs +8 -0
- package/dist/primitives/GridPatternPresets.d.ts +2 -0
- package/dist/primitives/GridPatternPresets.d.ts.map +1 -0
- package/dist/primitives/GridPatternPresets.js +5 -0
- package/dist/primitives/GridPatternPresets.js.map +1 -0
- package/dist/primitives/IPhone15Pro.cjs +8 -0
- package/dist/primitives/IPhone15Pro.d.ts +2 -0
- package/dist/primitives/IPhone15Pro.d.ts.map +1 -0
- package/dist/primitives/IPhone15Pro.js +5 -0
- package/dist/primitives/IPhone15Pro.js.map +1 -0
- package/dist/primitives/ImageCrop.cjs +8 -0
- package/dist/primitives/ImageCrop.d.ts +2 -0
- package/dist/primitives/ImageCrop.d.ts.map +1 -0
- package/dist/primitives/ImageCrop.js +5 -0
- package/dist/primitives/ImageCrop.js.map +1 -0
- package/dist/primitives/ImageZoom.cjs +8 -0
- package/dist/primitives/ImageZoom.d.ts +2 -0
- package/dist/primitives/ImageZoom.d.ts.map +1 -0
- package/dist/primitives/ImageZoom.js +5 -0
- package/dist/primitives/ImageZoom.js.map +1 -0
- package/dist/primitives/InlineCode.cjs +8 -0
- package/dist/primitives/InlineCode.d.ts +2 -0
- package/dist/primitives/InlineCode.d.ts.map +1 -0
- package/dist/primitives/InlineCode.js +5 -0
- package/dist/primitives/InlineCode.js.map +1 -0
- package/dist/primitives/InteractiveGridPattern.cjs +8 -0
- package/dist/primitives/InteractiveGridPattern.d.ts +2 -0
- package/dist/primitives/InteractiveGridPattern.d.ts.map +1 -0
- package/dist/primitives/InteractiveGridPattern.js +5 -0
- package/dist/primitives/InteractiveGridPattern.js.map +1 -0
- package/dist/primitives/Item.cjs +8 -0
- package/dist/primitives/Item.d.ts +2 -0
- package/dist/primitives/Item.d.ts.map +1 -0
- package/dist/primitives/Item.js +5 -0
- package/dist/primitives/Item.js.map +1 -0
- package/dist/primitives/ItemActions.cjs +8 -0
- package/dist/primitives/ItemActions.d.ts +2 -0
- package/dist/primitives/ItemActions.d.ts.map +1 -0
- package/dist/primitives/ItemActions.js +5 -0
- package/dist/primitives/ItemActions.js.map +1 -0
- package/dist/primitives/ItemContent.cjs +8 -0
- package/dist/primitives/ItemContent.d.ts +2 -0
- package/dist/primitives/ItemContent.d.ts.map +1 -0
- package/dist/primitives/ItemContent.js +5 -0
- package/dist/primitives/ItemContent.js.map +1 -0
- package/dist/primitives/ItemDescription.cjs +8 -0
- package/dist/primitives/ItemDescription.d.ts +2 -0
- package/dist/primitives/ItemDescription.d.ts.map +1 -0
- package/dist/primitives/ItemDescription.js +5 -0
- package/dist/primitives/ItemDescription.js.map +1 -0
- package/dist/primitives/ItemFooter.cjs +8 -0
- package/dist/primitives/ItemFooter.d.ts +2 -0
- package/dist/primitives/ItemFooter.d.ts.map +1 -0
- package/dist/primitives/ItemFooter.js +5 -0
- package/dist/primitives/ItemFooter.js.map +1 -0
- package/dist/primitives/ItemGroup.cjs +8 -0
- package/dist/primitives/ItemGroup.d.ts +2 -0
- package/dist/primitives/ItemGroup.d.ts.map +1 -0
- package/dist/primitives/ItemGroup.js +5 -0
- package/dist/primitives/ItemGroup.js.map +1 -0
- package/dist/primitives/ItemHeader.cjs +8 -0
- package/dist/primitives/ItemHeader.d.ts +2 -0
- package/dist/primitives/ItemHeader.d.ts.map +1 -0
- package/dist/primitives/ItemHeader.js +5 -0
- package/dist/primitives/ItemHeader.js.map +1 -0
- package/dist/primitives/ItemMedia.cjs +8 -0
- package/dist/primitives/ItemMedia.d.ts +2 -0
- package/dist/primitives/ItemMedia.d.ts.map +1 -0
- package/dist/primitives/ItemMedia.js +5 -0
- package/dist/primitives/ItemMedia.js.map +1 -0
- package/dist/primitives/ItemSeparator.cjs +8 -0
- package/dist/primitives/ItemSeparator.d.ts +2 -0
- package/dist/primitives/ItemSeparator.d.ts.map +1 -0
- package/dist/primitives/ItemSeparator.js +5 -0
- package/dist/primitives/ItemSeparator.js.map +1 -0
- package/dist/primitives/ItemTitle.cjs +8 -0
- package/dist/primitives/ItemTitle.d.ts +2 -0
- package/dist/primitives/ItemTitle.d.ts.map +1 -0
- package/dist/primitives/ItemTitle.js +5 -0
- package/dist/primitives/ItemTitle.js.map +1 -0
- package/dist/primitives/KanbanBoard.cjs +8 -0
- package/dist/primitives/KanbanBoard.d.ts +2 -0
- package/dist/primitives/KanbanBoard.d.ts.map +1 -0
- package/dist/primitives/KanbanBoard.js +5 -0
- package/dist/primitives/KanbanBoard.js.map +1 -0
- package/dist/primitives/Kbd.cjs +8 -0
- package/dist/primitives/Kbd.d.ts +2 -0
- package/dist/primitives/Kbd.d.ts.map +1 -0
- package/dist/primitives/Kbd.js +5 -0
- package/dist/primitives/Kbd.js.map +1 -0
- package/dist/primitives/KbdGroup.cjs +8 -0
- package/dist/primitives/KbdGroup.d.ts +2 -0
- package/dist/primitives/KbdGroup.d.ts.map +1 -0
- package/dist/primitives/KbdGroup.js +5 -0
- package/dist/primitives/KbdGroup.js.map +1 -0
- package/dist/primitives/LimelightNav.cjs +8 -0
- package/dist/primitives/LimelightNav.d.ts +2 -0
- package/dist/primitives/LimelightNav.d.ts.map +1 -0
- package/dist/primitives/LimelightNav.js +5 -0
- package/dist/primitives/LimelightNav.js.map +1 -0
- package/dist/primitives/List.cjs +8 -0
- package/dist/primitives/List.d.ts +2 -0
- package/dist/primitives/List.d.ts.map +1 -0
- package/dist/primitives/List.js +5 -0
- package/dist/primitives/List.js.map +1 -0
- package/dist/primitives/ListItem.cjs +8 -0
- package/dist/primitives/ListItem.d.ts +2 -0
- package/dist/primitives/ListItem.d.ts.map +1 -0
- package/dist/primitives/ListItem.js +5 -0
- package/dist/primitives/ListItem.js.map +1 -0
- package/dist/primitives/MacosDock.cjs +8 -0
- package/dist/primitives/MacosDock.d.ts +2 -0
- package/dist/primitives/MacosDock.d.ts.map +1 -0
- package/dist/primitives/MacosDock.js +5 -0
- package/dist/primitives/MacosDock.js.map +1 -0
- package/dist/primitives/MacosDockItem.cjs +8 -0
- package/dist/primitives/MacosDockItem.d.ts +2 -0
- package/dist/primitives/MacosDockItem.d.ts.map +1 -0
- package/dist/primitives/MacosDockItem.js +5 -0
- package/dist/primitives/MacosDockItem.js.map +1 -0
- package/dist/primitives/Magnetic.cjs +8 -0
- package/dist/primitives/Magnetic.d.ts +2 -0
- package/dist/primitives/Magnetic.d.ts.map +1 -0
- package/dist/primitives/Magnetic.js +5 -0
- package/dist/primitives/Magnetic.js.map +1 -0
- package/dist/primitives/MarketOverview.cjs +8 -0
- package/dist/primitives/MarketOverview.d.ts +2 -0
- package/dist/primitives/MarketOverview.d.ts.map +1 -0
- package/dist/primitives/MarketOverview.js +5 -0
- package/dist/primitives/MarketOverview.js.map +1 -0
- package/dist/primitives/Marquee.cjs +8 -0
- package/dist/primitives/Marquee.d.ts +2 -0
- package/dist/primitives/Marquee.d.ts.map +1 -0
- package/dist/primitives/Marquee.js +5 -0
- package/dist/primitives/Marquee.js.map +1 -0
- package/dist/primitives/Marquee3D.cjs +8 -0
- package/dist/primitives/Marquee3D.d.ts +2 -0
- package/dist/primitives/Marquee3D.d.ts.map +1 -0
- package/dist/primitives/Marquee3D.js +5 -0
- package/dist/primitives/Marquee3D.js.map +1 -0
- package/dist/primitives/Marquee3DFloating.cjs +8 -0
- package/dist/primitives/Marquee3DFloating.d.ts +2 -0
- package/dist/primitives/Marquee3DFloating.d.ts.map +1 -0
- package/dist/primitives/Marquee3DFloating.js +5 -0
- package/dist/primitives/Marquee3DFloating.js.map +1 -0
- package/dist/primitives/Marquee3DPreset.cjs +8 -0
- package/dist/primitives/Marquee3DPreset.d.ts +2 -0
- package/dist/primitives/Marquee3DPreset.d.ts.map +1 -0
- package/dist/primitives/Marquee3DPreset.js +5 -0
- package/dist/primitives/Marquee3DPreset.js.map +1 -0
- package/dist/primitives/MediaPlayer.cjs +8 -0
- package/dist/primitives/MediaPlayer.d.ts +2 -0
- package/dist/primitives/MediaPlayer.d.ts.map +1 -0
- package/dist/primitives/MediaPlayer.js +5 -0
- package/dist/primitives/MediaPlayer.js.map +1 -0
- package/dist/primitives/MenuDock.cjs +8 -0
- package/dist/primitives/MenuDock.d.ts +2 -0
- package/dist/primitives/MenuDock.d.ts.map +1 -0
- package/dist/primitives/MenuDock.js +5 -0
- package/dist/primitives/MenuDock.js.map +1 -0
- package/dist/primitives/Menubar.cjs +8 -0
- package/dist/primitives/Menubar.d.ts +2 -0
- package/dist/primitives/Menubar.d.ts.map +1 -0
- package/dist/primitives/Menubar.js +5 -0
- package/dist/primitives/Menubar.js.map +1 -0
- package/dist/primitives/MenubarCheckboxItem.cjs +8 -0
- package/dist/primitives/MenubarCheckboxItem.d.ts +2 -0
- package/dist/primitives/MenubarCheckboxItem.d.ts.map +1 -0
- package/dist/primitives/MenubarCheckboxItem.js +5 -0
- package/dist/primitives/MenubarCheckboxItem.js.map +1 -0
- package/dist/primitives/MenubarContent.cjs +8 -0
- package/dist/primitives/MenubarContent.d.ts +2 -0
- package/dist/primitives/MenubarContent.d.ts.map +1 -0
- package/dist/primitives/MenubarContent.js +5 -0
- package/dist/primitives/MenubarContent.js.map +1 -0
- package/dist/primitives/MenubarGroup.cjs +8 -0
- package/dist/primitives/MenubarGroup.d.ts +2 -0
- package/dist/primitives/MenubarGroup.d.ts.map +1 -0
- package/dist/primitives/MenubarGroup.js +5 -0
- package/dist/primitives/MenubarGroup.js.map +1 -0
- package/dist/primitives/MenubarItem.cjs +8 -0
- package/dist/primitives/MenubarItem.d.ts +2 -0
- package/dist/primitives/MenubarItem.d.ts.map +1 -0
- package/dist/primitives/MenubarItem.js +5 -0
- package/dist/primitives/MenubarItem.js.map +1 -0
- package/dist/primitives/MenubarLabel.cjs +8 -0
- package/dist/primitives/MenubarLabel.d.ts +2 -0
- package/dist/primitives/MenubarLabel.d.ts.map +1 -0
- package/dist/primitives/MenubarLabel.js +5 -0
- package/dist/primitives/MenubarLabel.js.map +1 -0
- package/dist/primitives/MenubarMenu.cjs +8 -0
- package/dist/primitives/MenubarMenu.d.ts +2 -0
- package/dist/primitives/MenubarMenu.d.ts.map +1 -0
- package/dist/primitives/MenubarMenu.js +5 -0
- package/dist/primitives/MenubarMenu.js.map +1 -0
- package/dist/primitives/MenubarPortal.cjs +8 -0
- package/dist/primitives/MenubarPortal.d.ts +2 -0
- package/dist/primitives/MenubarPortal.d.ts.map +1 -0
- package/dist/primitives/MenubarPortal.js +5 -0
- package/dist/primitives/MenubarPortal.js.map +1 -0
- package/dist/primitives/MenubarRadioGroup.cjs +8 -0
- package/dist/primitives/MenubarRadioGroup.d.ts +2 -0
- package/dist/primitives/MenubarRadioGroup.d.ts.map +1 -0
- package/dist/primitives/MenubarRadioGroup.js +5 -0
- package/dist/primitives/MenubarRadioGroup.js.map +1 -0
- package/dist/primitives/MenubarRadioItem.cjs +8 -0
- package/dist/primitives/MenubarRadioItem.d.ts +2 -0
- package/dist/primitives/MenubarRadioItem.d.ts.map +1 -0
- package/dist/primitives/MenubarRadioItem.js +5 -0
- package/dist/primitives/MenubarRadioItem.js.map +1 -0
- package/dist/primitives/MenubarSeparator.cjs +8 -0
- package/dist/primitives/MenubarSeparator.d.ts +2 -0
- package/dist/primitives/MenubarSeparator.d.ts.map +1 -0
- package/dist/primitives/MenubarSeparator.js +5 -0
- package/dist/primitives/MenubarSeparator.js.map +1 -0
- package/dist/primitives/MenubarShortcut.cjs +8 -0
- package/dist/primitives/MenubarShortcut.d.ts +2 -0
- package/dist/primitives/MenubarShortcut.d.ts.map +1 -0
- package/dist/primitives/MenubarShortcut.js +5 -0
- package/dist/primitives/MenubarShortcut.js.map +1 -0
- package/dist/primitives/MenubarSub.cjs +8 -0
- package/dist/primitives/MenubarSub.d.ts +2 -0
- package/dist/primitives/MenubarSub.d.ts.map +1 -0
- package/dist/primitives/MenubarSub.js +5 -0
- package/dist/primitives/MenubarSub.js.map +1 -0
- package/dist/primitives/MenubarSubContent.cjs +8 -0
- package/dist/primitives/MenubarSubContent.d.ts +2 -0
- package/dist/primitives/MenubarSubContent.d.ts.map +1 -0
- package/dist/primitives/MenubarSubContent.js +5 -0
- package/dist/primitives/MenubarSubContent.js.map +1 -0
- package/dist/primitives/MenubarSubTrigger.cjs +8 -0
- package/dist/primitives/MenubarSubTrigger.d.ts +2 -0
- package/dist/primitives/MenubarSubTrigger.d.ts.map +1 -0
- package/dist/primitives/MenubarSubTrigger.js +5 -0
- package/dist/primitives/MenubarSubTrigger.js.map +1 -0
- package/dist/primitives/MenubarTrigger.cjs +8 -0
- package/dist/primitives/MenubarTrigger.d.ts +2 -0
- package/dist/primitives/MenubarTrigger.d.ts.map +1 -0
- package/dist/primitives/MenubarTrigger.js +5 -0
- package/dist/primitives/MenubarTrigger.js.map +1 -0
- package/dist/primitives/MessageDock.cjs +8 -0
- package/dist/primitives/MessageDock.d.ts +2 -0
- package/dist/primitives/MessageDock.d.ts.map +1 -0
- package/dist/primitives/MessageDock.js +5 -0
- package/dist/primitives/MessageDock.js.map +1 -0
- package/dist/primitives/MiniCalendar.cjs +8 -0
- package/dist/primitives/MiniCalendar.d.ts +2 -0
- package/dist/primitives/MiniCalendar.d.ts.map +1 -0
- package/dist/primitives/MiniCalendar.js +5 -0
- package/dist/primitives/MiniCalendar.js.map +1 -0
- package/dist/primitives/MinimalTiptap.cjs +8 -0
- package/dist/primitives/MinimalTiptap.d.ts +2 -0
- package/dist/primitives/MinimalTiptap.d.ts.map +1 -0
- package/dist/primitives/MinimalTiptap.js +5 -0
- package/dist/primitives/MinimalTiptap.js.map +1 -0
- package/dist/primitives/MotionHighlight.cjs +8 -0
- package/dist/primitives/MotionHighlight.d.ts +2 -0
- package/dist/primitives/MotionHighlight.d.ts.map +1 -0
- package/dist/primitives/MotionHighlight.js +5 -0
- package/dist/primitives/MotionHighlight.js.map +1 -0
- package/dist/primitives/NavigationBar.cjs +8 -0
- package/dist/primitives/NavigationBar.d.ts +2 -0
- package/dist/primitives/NavigationBar.d.ts.map +1 -0
- package/dist/primitives/NavigationBar.js +5 -0
- package/dist/primitives/NavigationBar.js.map +1 -0
- package/dist/primitives/NewsTimeline.cjs +8 -0
- package/dist/primitives/NewsTimeline.d.ts +2 -0
- package/dist/primitives/NewsTimeline.d.ts.map +1 -0
- package/dist/primitives/NewsTimeline.js +5 -0
- package/dist/primitives/NewsTimeline.js.map +1 -0
- package/dist/primitives/OrderEntry.cjs +8 -0
- package/dist/primitives/OrderEntry.d.ts +2 -0
- package/dist/primitives/OrderEntry.d.ts.map +1 -0
- package/dist/primitives/OrderEntry.js +5 -0
- package/dist/primitives/OrderEntry.js.map +1 -0
- package/dist/primitives/OrdersHistory.cjs +8 -0
- package/dist/primitives/OrdersHistory.d.ts +2 -0
- package/dist/primitives/OrdersHistory.d.ts.map +1 -0
- package/dist/primitives/OrdersHistory.js +5 -0
- package/dist/primitives/OrdersHistory.js.map +1 -0
- package/dist/primitives/Pagination.cjs +8 -0
- package/dist/primitives/Pagination.d.ts +2 -0
- package/dist/primitives/Pagination.d.ts.map +1 -0
- package/dist/primitives/Pagination.js +5 -0
- package/dist/primitives/Pagination.js.map +1 -0
- package/dist/primitives/PaginationContent.cjs +8 -0
- package/dist/primitives/PaginationContent.d.ts +2 -0
- package/dist/primitives/PaginationContent.d.ts.map +1 -0
- package/dist/primitives/PaginationContent.js +5 -0
- package/dist/primitives/PaginationContent.js.map +1 -0
- package/dist/primitives/PaginationEllipsis.cjs +8 -0
- package/dist/primitives/PaginationEllipsis.d.ts +2 -0
- package/dist/primitives/PaginationEllipsis.d.ts.map +1 -0
- package/dist/primitives/PaginationEllipsis.js +5 -0
- package/dist/primitives/PaginationEllipsis.js.map +1 -0
- package/dist/primitives/PaginationItem.cjs +8 -0
- package/dist/primitives/PaginationItem.d.ts +2 -0
- package/dist/primitives/PaginationItem.d.ts.map +1 -0
- package/dist/primitives/PaginationItem.js +5 -0
- package/dist/primitives/PaginationItem.js.map +1 -0
- package/dist/primitives/PaginationLink.cjs +8 -0
- package/dist/primitives/PaginationLink.d.ts +2 -0
- package/dist/primitives/PaginationLink.d.ts.map +1 -0
- package/dist/primitives/PaginationLink.js +5 -0
- package/dist/primitives/PaginationLink.js.map +1 -0
- package/dist/primitives/PaginationNext.cjs +8 -0
- package/dist/primitives/PaginationNext.d.ts +2 -0
- package/dist/primitives/PaginationNext.d.ts.map +1 -0
- package/dist/primitives/PaginationNext.js +5 -0
- package/dist/primitives/PaginationNext.js.map +1 -0
- package/dist/primitives/PaginationPrevious.cjs +8 -0
- package/dist/primitives/PaginationPrevious.d.ts +2 -0
- package/dist/primitives/PaginationPrevious.d.ts.map +1 -0
- package/dist/primitives/PaginationPrevious.js +5 -0
- package/dist/primitives/PaginationPrevious.js.map +1 -0
- package/dist/primitives/Particles.cjs +8 -0
- package/dist/primitives/Particles.d.ts +2 -0
- package/dist/primitives/Particles.d.ts.map +1 -0
- package/dist/primitives/Particles.js +5 -0
- package/dist/primitives/Particles.js.map +1 -0
- package/dist/primitives/ParticlesBackground.cjs +8 -0
- package/dist/primitives/ParticlesBackground.d.ts +2 -0
- package/dist/primitives/ParticlesBackground.d.ts.map +1 -0
- package/dist/primitives/ParticlesBackground.js +5 -0
- package/dist/primitives/ParticlesBackground.js.map +1 -0
- package/dist/primitives/Pill.cjs +8 -0
- package/dist/primitives/Pill.d.ts +2 -0
- package/dist/primitives/Pill.d.ts.map +1 -0
- package/dist/primitives/Pill.js +5 -0
- package/dist/primitives/Pill.js.map +1 -0
- package/dist/primitives/Pin3D.cjs +8 -0
- package/dist/primitives/Pin3D.d.ts +2 -0
- package/dist/primitives/Pin3D.d.ts.map +1 -0
- package/dist/primitives/Pin3D.js +5 -0
- package/dist/primitives/Pin3D.js.map +1 -0
- package/dist/primitives/PinList.cjs +8 -0
- package/dist/primitives/PinList.d.ts +2 -0
- package/dist/primitives/PinList.d.ts.map +1 -0
- package/dist/primitives/PinList.js +5 -0
- package/dist/primitives/PinList.js.map +1 -0
- package/dist/primitives/PixelImage.cjs +8 -0
- package/dist/primitives/PixelImage.d.ts +2 -0
- package/dist/primitives/PixelImage.d.ts.map +1 -0
- package/dist/primitives/PixelImage.js +5 -0
- package/dist/primitives/PixelImage.js.map +1 -0
- package/dist/primitives/PositionsList.cjs +8 -0
- package/dist/primitives/PositionsList.d.ts +2 -0
- package/dist/primitives/PositionsList.d.ts.map +1 -0
- package/dist/primitives/PositionsList.js +5 -0
- package/dist/primitives/PositionsList.js.map +1 -0
- package/dist/primitives/QRCode.cjs +8 -0
- package/dist/primitives/QRCode.d.ts +2 -0
- package/dist/primitives/QRCode.d.ts.map +1 -0
- package/dist/primitives/QRCode.js +5 -0
- package/dist/primitives/QRCode.js.map +1 -0
- package/dist/primitives/RelativeTime.cjs +8 -0
- package/dist/primitives/RelativeTime.d.ts +2 -0
- package/dist/primitives/RelativeTime.d.ts.map +1 -0
- package/dist/primitives/RelativeTime.js +5 -0
- package/dist/primitives/RelativeTime.js.map +1 -0
- package/dist/primitives/Safari.cjs +8 -0
- package/dist/primitives/Safari.d.ts +2 -0
- package/dist/primitives/Safari.d.ts.map +1 -0
- package/dist/primitives/Safari.js +5 -0
- package/dist/primitives/Safari.js.map +1 -0
- package/dist/primitives/Snippet.cjs +8 -0
- package/dist/primitives/Snippet.d.ts +2 -0
- package/dist/primitives/Snippet.d.ts.map +1 -0
- package/dist/primitives/Snippet.js +5 -0
- package/dist/primitives/Snippet.js.map +1 -0
- package/dist/primitives/Spotlight.cjs +8 -0
- package/dist/primitives/Spotlight.d.ts +2 -0
- package/dist/primitives/Spotlight.d.ts.map +1 -0
- package/dist/primitives/Spotlight.js +5 -0
- package/dist/primitives/Spotlight.js.map +1 -0
- package/dist/primitives/StarsScrollingWheel.cjs +8 -0
- package/dist/primitives/StarsScrollingWheel.d.ts +2 -0
- package/dist/primitives/StarsScrollingWheel.d.ts.map +1 -0
- package/dist/primitives/StarsScrollingWheel.js +5 -0
- package/dist/primitives/StarsScrollingWheel.js.map +1 -0
- package/dist/primitives/Status.cjs +8 -0
- package/dist/primitives/Status.d.ts +2 -0
- package/dist/primitives/Status.d.ts.map +1 -0
- package/dist/primitives/Status.js +5 -0
- package/dist/primitives/Status.js.map +1 -0
- package/dist/primitives/Stepper.cjs +8 -0
- package/dist/primitives/Stepper.d.ts +2 -0
- package/dist/primitives/Stepper.d.ts.map +1 -0
- package/dist/primitives/Stepper.js +5 -0
- package/dist/primitives/Stepper.js.map +1 -0
- package/dist/primitives/StockMarket.cjs +8 -0
- package/dist/primitives/StockMarket.d.ts +2 -0
- package/dist/primitives/StockMarket.d.ts.map +1 -0
- package/dist/primitives/StockMarket.js +5 -0
- package/dist/primitives/StockMarket.js.map +1 -0
- package/dist/primitives/StockScreener.cjs +8 -0
- package/dist/primitives/StockScreener.d.ts +2 -0
- package/dist/primitives/StockScreener.d.ts.map +1 -0
- package/dist/primitives/StockScreener.js +5 -0
- package/dist/primitives/StockScreener.js.map +1 -0
- package/dist/primitives/SymbolInfo.cjs +8 -0
- package/dist/primitives/SymbolInfo.d.ts +2 -0
- package/dist/primitives/SymbolInfo.d.ts.map +1 -0
- package/dist/primitives/SymbolInfo.js +5 -0
- package/dist/primitives/SymbolInfo.js.map +1 -0
- package/dist/primitives/Table.cjs +8 -0
- package/dist/primitives/Table.d.ts +2 -0
- package/dist/primitives/Table.d.ts.map +1 -0
- package/dist/primitives/Table.js +5 -0
- package/dist/primitives/Table.js.map +1 -0
- package/dist/primitives/TableBody.cjs +8 -0
- package/dist/primitives/TableBody.d.ts +2 -0
- package/dist/primitives/TableBody.d.ts.map +1 -0
- package/dist/primitives/TableBody.js +5 -0
- package/dist/primitives/TableBody.js.map +1 -0
- package/dist/primitives/TableCaption.cjs +8 -0
- package/dist/primitives/TableCaption.d.ts +2 -0
- package/dist/primitives/TableCaption.d.ts.map +1 -0
- package/dist/primitives/TableCaption.js +5 -0
- package/dist/primitives/TableCaption.js.map +1 -0
- package/dist/primitives/TableCell.cjs +8 -0
- package/dist/primitives/TableCell.d.ts +2 -0
- package/dist/primitives/TableCell.d.ts.map +1 -0
- package/dist/primitives/TableCell.js +5 -0
- package/dist/primitives/TableCell.js.map +1 -0
- package/dist/primitives/TableFooter.cjs +8 -0
- package/dist/primitives/TableFooter.d.ts +2 -0
- package/dist/primitives/TableFooter.d.ts.map +1 -0
- package/dist/primitives/TableFooter.js +5 -0
- package/dist/primitives/TableFooter.js.map +1 -0
- package/dist/primitives/TableHead.cjs +8 -0
- package/dist/primitives/TableHead.d.ts +2 -0
- package/dist/primitives/TableHead.d.ts.map +1 -0
- package/dist/primitives/TableHead.js +5 -0
- package/dist/primitives/TableHead.js.map +1 -0
- package/dist/primitives/TableHeader.cjs +8 -0
- package/dist/primitives/TableHeader.d.ts +2 -0
- package/dist/primitives/TableHeader.d.ts.map +1 -0
- package/dist/primitives/TableHeader.js +5 -0
- package/dist/primitives/TableHeader.js.map +1 -0
- package/dist/primitives/TableRow.cjs +8 -0
- package/dist/primitives/TableRow.d.ts +2 -0
- package/dist/primitives/TableRow.d.ts.map +1 -0
- package/dist/primitives/TableRow.js +5 -0
- package/dist/primitives/TableRow.js.map +1 -0
- package/dist/primitives/Tags.cjs +8 -0
- package/dist/primitives/Tags.d.ts +2 -0
- package/dist/primitives/Tags.d.ts.map +1 -0
- package/dist/primitives/Tags.js +5 -0
- package/dist/primitives/Tags.js.map +1 -0
- package/dist/primitives/TechnicalAnalysis.cjs +8 -0
- package/dist/primitives/TechnicalAnalysis.d.ts +2 -0
- package/dist/primitives/TechnicalAnalysis.d.ts.map +1 -0
- package/dist/primitives/TechnicalAnalysis.js +5 -0
- package/dist/primitives/TechnicalAnalysis.js.map +1 -0
- package/dist/primitives/Terminal.cjs +8 -0
- package/dist/primitives/Terminal.d.ts +2 -0
- package/dist/primitives/Terminal.d.ts.map +1 -0
- package/dist/primitives/Terminal.js +5 -0
- package/dist/primitives/Terminal.js.map +1 -0
- package/dist/primitives/Ticker.cjs +8 -0
- package/dist/primitives/Ticker.d.ts +2 -0
- package/dist/primitives/Ticker.d.ts.map +1 -0
- package/dist/primitives/Ticker.js +5 -0
- package/dist/primitives/Ticker.js.map +1 -0
- package/dist/primitives/Timeline.cjs +8 -0
- package/dist/primitives/Timeline.d.ts +2 -0
- package/dist/primitives/Timeline.d.ts.map +1 -0
- package/dist/primitives/Timeline.js +5 -0
- package/dist/primitives/Timeline.js.map +1 -0
- package/dist/primitives/Toggle.cjs +8 -0
- package/dist/primitives/Toggle.d.ts +2 -0
- package/dist/primitives/Toggle.d.ts.map +1 -0
- package/dist/primitives/Toggle.js +5 -0
- package/dist/primitives/Toggle.js.map +1 -0
- package/dist/primitives/encodeQr.cjs +8 -0
- package/dist/primitives/encodeQr.d.ts +2 -0
- package/dist/primitives/encodeQr.d.ts.map +1 -0
- package/dist/primitives/encodeQr.js +5 -0
- package/dist/primitives/encodeQr.js.map +1 -0
- package/dist/primitives/gradientPresets.cjs +8 -0
- package/dist/primitives/gradientPresets.d.ts +2 -0
- package/dist/primitives/gradientPresets.d.ts.map +1 -0
- package/dist/primitives/gradientPresets.js +5 -0
- package/dist/primitives/gradientPresets.js.map +1 -0
- package/dist/primitives/pillVariants.cjs +8 -0
- package/dist/primitives/pillVariants.d.ts +2 -0
- package/dist/primitives/pillVariants.d.ts.map +1 -0
- package/dist/primitives/pillVariants.js +5 -0
- package/dist/primitives/pillVariants.js.map +1 -0
- package/dist/primitives/useDesktopSettings.cjs +8 -0
- package/dist/primitives/useDesktopSettings.d.ts +2 -0
- package/dist/primitives/useDesktopSettings.d.ts.map +1 -0
- package/dist/primitives/useDesktopSettings.js +5 -0
- package/dist/primitives/useDesktopSettings.js.map +1 -0
- package/dist/primitives/useKeyboardShortcuts.cjs +8 -0
- package/dist/primitives/useKeyboardShortcuts.d.ts +2 -0
- package/dist/primitives/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/primitives/useKeyboardShortcuts.js +5 -0
- package/dist/primitives/useKeyboardShortcuts.js.map +1 -0
- package/dist/primitives/useOverlayManager.cjs +8 -0
- package/dist/primitives/useOverlayManager.d.ts +2 -0
- package/dist/primitives/useOverlayManager.d.ts.map +1 -0
- package/dist/primitives/useOverlayManager.js +5 -0
- package/dist/primitives/useOverlayManager.js.map +1 -0
- package/dist/primitives/useWindowManager.cjs +8 -0
- package/dist/primitives/useWindowManager.d.ts +2 -0
- package/dist/primitives/useWindowManager.d.ts.map +1 -0
- package/dist/primitives/useWindowManager.js +5 -0
- package/dist/primitives/useWindowManager.js.map +1 -0
- package/dist/styles.css +23 -1
- package/package.json +18 -3
- package/dist/auth.css +0 -40
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ChatOnboarding = ChatOnboarding;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
|
|
8
|
+
const button_1 = require("../backends/gui/button.cjs");
|
|
9
|
+
const field_1 = require("../backends/gui/field.cjs");
|
|
10
|
+
const input_1 = require("../backends/gui/input.cjs");
|
|
11
|
+
const layout_1 = require("../backends/gui/layout.cjs");
|
|
12
|
+
const select_1 = require("../backends/gui/select.cjs");
|
|
13
|
+
const switch_1 = require("../backends/gui/switch.cjs");
|
|
14
|
+
const api_1 = require("./api.cjs");
|
|
15
|
+
const frame_1 = require("./frame.cjs");
|
|
16
|
+
const screens_1 = require("./screens.cjs");
|
|
17
|
+
const hooks_1 = require("./hooks.cjs");
|
|
18
|
+
const roles_1 = require("./roles.cjs");
|
|
19
|
+
const state_1 = require("./state.cjs");
|
|
20
|
+
const ICONS = {
|
|
21
|
+
binoculars: lucide_icons_2_1.Binoculars,
|
|
22
|
+
books: lucide_icons_2_1.Library,
|
|
23
|
+
bulb: lucide_icons_2_1.Lightbulb,
|
|
24
|
+
calendar: lucide_icons_2_1.Calendar,
|
|
25
|
+
cap: lucide_icons_2_1.GraduationCap,
|
|
26
|
+
chart: lucide_icons_2_1.ChartLine,
|
|
27
|
+
chat: lucide_icons_2_1.MessageSquare,
|
|
28
|
+
clock: lucide_icons_2_1.Clock,
|
|
29
|
+
code: lucide_icons_2_1.Code,
|
|
30
|
+
dna: lucide_icons_2_1.Dna,
|
|
31
|
+
doc: lucide_icons_2_1.FileText,
|
|
32
|
+
gavel: lucide_icons_2_1.Gavel,
|
|
33
|
+
grid: lucide_icons_2_1.LayoutGrid,
|
|
34
|
+
palette: lucide_icons_2_1.Palette,
|
|
35
|
+
pencil: lucide_icons_2_1.Pencil,
|
|
36
|
+
person: lucide_icons_2_1.User,
|
|
37
|
+
slides: lucide_icons_2_1.Presentation,
|
|
38
|
+
};
|
|
39
|
+
function ChatOnboarding({ site = 'Hanzo', api = api_1.API, track, onDone, privacyPath = '/settings/privacy', safeguards = false }) {
|
|
40
|
+
const session = (0, hooks_1.useSession)(api);
|
|
41
|
+
const [role, setRole] = (0, react_1.useState)('');
|
|
42
|
+
const [name, setName] = (0, react_1.useState)('');
|
|
43
|
+
const [train, setTrain] = (0, react_1.useState)(true);
|
|
44
|
+
const [busy, setBusy] = (0, react_1.useState)(false);
|
|
45
|
+
const announced = (0, react_1.useRef)(false);
|
|
46
|
+
const at = session.loading ? null : (0, state_1.chatStep)(session.progress, Boolean(session.name));
|
|
47
|
+
(0, react_1.useEffect)(() => {
|
|
48
|
+
if (at !== 'done' || announced.current)
|
|
49
|
+
return;
|
|
50
|
+
announced.current = true;
|
|
51
|
+
// A person who finished every step opens the chat as they left it.
|
|
52
|
+
onDone({ role: session.progress.role });
|
|
53
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
54
|
+
}, [at]);
|
|
55
|
+
if (!at || at === 'done')
|
|
56
|
+
return (0, jsx_runtime_1.jsx)(frame_1.Page, { site: site, title: "", busy: true });
|
|
57
|
+
if (at === 'notice') {
|
|
58
|
+
return ((0, jsx_runtime_1.jsxs)(frame_1.Page, { site: site, title: "Before your first chat", lede: "A few things to know, plus one setting to review", center: true, width: 512, children: [(0, jsx_runtime_1.jsxs)(frame_1.Panel, { label: "Before your first chat", children: [(0, jsx_runtime_1.jsxs)(Row, { icon: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Binoculars, { size: 20 }), children: [(0, jsx_runtime_1.jsx)("b", { children: "Ad-free chats:" }), " We won\u2019t show you ads or let advertisers influence what ", site, " says."] }), safeguards ? ((0, jsx_runtime_1.jsxs)(Row, { icon: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.User, { size: 20 }), children: [(0, jsx_runtime_1.jsx)("b", { children: "Built to help, not harm:" }), " Automated safeguards protect your chats from violent, abusive, or deceptive content."] })) : null, (0, jsx_runtime_1.jsxs)(Row, { icon: (0, jsx_runtime_1.jsx)(switch_1.Switch, { checked: train, onCheckedChange: setTrain, "aria-label": "Help improve our AI models" }), children: [(0, jsx_runtime_1.jsx)("b", { children: "Help improve our AI models:" }), " Allow the use of your chats and coding sessions to train and improve Zen models. Change anytime in privacy settings.", ' ', (0, jsx_runtime_1.jsx)(layout_1.Anchor, { href: privacyPath, color: "$ink", textDecorationLine: "underline", children: "Learn more" })] })] }), (0, jsx_runtime_1.jsx)(screens_1.Primary, { disabled: busy, onClick: async () => {
|
|
59
|
+
setBusy(true);
|
|
60
|
+
await session.setTrain(train).catch(() => undefined);
|
|
61
|
+
track?.('first_chat_notice_accepted', { train_opt_in: train });
|
|
62
|
+
await session.save({ notice: true });
|
|
63
|
+
setBusy(false);
|
|
64
|
+
}, children: "Continue" })] }));
|
|
65
|
+
}
|
|
66
|
+
if (at === 'name') {
|
|
67
|
+
const submit = async (e) => {
|
|
68
|
+
e?.preventDefault();
|
|
69
|
+
if (!name.trim() || busy)
|
|
70
|
+
return;
|
|
71
|
+
setBusy(true);
|
|
72
|
+
try {
|
|
73
|
+
await session.setName(name.trim());
|
|
74
|
+
track?.('name_set', {});
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
setBusy(false);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
return ((0, jsx_runtime_1.jsx)(frame_1.Page, { site: site, title: "What\u2019s your name?", lede: `So ${site} knows what to call you.`, center: true, children: (0, jsx_runtime_1.jsxs)(layout_1.YStack, { render: (0, jsx_runtime_1.jsx)("form", { onSubmit: submit, noValidate: true }), gap: "$4", items: "stretch", children: [(0, jsx_runtime_1.jsx)(field_1.Field, { gap: "$2", children: (0, jsx_runtime_1.jsx)(input_1.Input, { name: "name", autoComplete: "name", "aria-label": "Your name", value: name, onChangeText: setName, placeholder: "Your name", height: 48, autoFocus: true }) }), (0, jsx_runtime_1.jsx)(screens_1.Primary, { type: "submit", disabled: !name.trim() || busy, children: "Continue" })] }) }));
|
|
81
|
+
}
|
|
82
|
+
const chosen = roles_1.ROLES.find((r) => r.role === role);
|
|
83
|
+
const pick = async (prompt) => {
|
|
84
|
+
if (busy || !chosen)
|
|
85
|
+
return;
|
|
86
|
+
setBusy(true);
|
|
87
|
+
await session.save({ role: chosen.role });
|
|
88
|
+
onDone({ prompt, role: chosen.role });
|
|
89
|
+
};
|
|
90
|
+
return ((0, jsx_runtime_1.jsxs)(frame_1.Page, { site: site, title: roles_1.ROLES_TITLE, lede: roles_1.ROLES_SUBTITLE, center: true, width: 450, children: [(0, jsx_runtime_1.jsxs)(select_1.Select, { value: role, onValueChange: (v) => {
|
|
91
|
+
setRole(v);
|
|
92
|
+
track?.('role_selected', { role: v });
|
|
93
|
+
}, children: [(0, jsx_runtime_1.jsx)(select_1.SelectTrigger, { "aria-label": "Your role", height: 48, children: (0, jsx_runtime_1.jsx)(select_1.SelectValue, { placeholder: roles_1.ROLES_PLACEHOLDER }) }), (0, jsx_runtime_1.jsx)(select_1.SelectContent, { children: roles_1.ROLES.map((r) => ((0, jsx_runtime_1.jsx)(select_1.SelectItem, { value: r.role, children: r.role }, r.role))) })] }), chosen ? ((0, jsx_runtime_1.jsxs)(layout_1.YStack, { gap: "$3", children: [chosen.prompts.map((p) => {
|
|
94
|
+
const Icon = ICONS[p.icon];
|
|
95
|
+
return ((0, jsx_runtime_1.jsxs)(button_1.Button, { type: "button", variant: "secondary", disabled: busy, minH: 68, px: "$5", rounded: "$3", justify: "flex-start", gap: "$4", onClick: () => {
|
|
96
|
+
track?.('starter_prompt_used', { role: chosen.role, prompt: p.label });
|
|
97
|
+
void pick(p.prompt);
|
|
98
|
+
}, children: [(0, jsx_runtime_1.jsx)(Icon, { size: 20 }), p.label] }, p.label));
|
|
99
|
+
}), (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", variant: "link", size: "lg", disabled: busy, self: "center", onClick: () => {
|
|
100
|
+
track?.('own_topic_chosen', { role: chosen.role });
|
|
101
|
+
void pick(undefined);
|
|
102
|
+
}, children: roles_1.OWN_TOPIC })] })) : null] }));
|
|
103
|
+
}
|
|
104
|
+
/** One line of the notice: a mark or a switch, then the words. */
|
|
105
|
+
function Row({ icon, children }) {
|
|
106
|
+
return ((0, jsx_runtime_1.jsxs)(layout_1.XStack, { gap: "$4", items: "flex-start", children: [(0, jsx_runtime_1.jsx)(layout_1.XStack, { width: 40, justify: "center", pt: "$0.5", children: icon }), (0, jsx_runtime_1.jsx)(layout_1.Paragraph, { size: "$2", color: "$ink", flex: 1, m: 0, children: children })] }));
|
|
107
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type Track } from './hooks.js';
|
|
2
|
+
/**
|
|
3
|
+
* Before a person's first chat: what to know, then a name, then a role with
|
|
4
|
+
* three starter prompts. ONE component for every chat surface (hanzo.chat,
|
|
5
|
+
* hanzo.ai/chat, hanzo.app, the desktop app); each finished step is saved on the
|
|
6
|
+
* IAM user, so nobody sees a step twice.
|
|
7
|
+
*
|
|
8
|
+
* `onDone` receives what the person chose to open the chat with: a starter's full
|
|
9
|
+
* prompt, or nothing for an empty chat.
|
|
10
|
+
*/
|
|
11
|
+
export interface ChatOnboardingProps {
|
|
12
|
+
site?: string;
|
|
13
|
+
api?: string;
|
|
14
|
+
track?: Track;
|
|
15
|
+
onDone: (start: {
|
|
16
|
+
prompt?: string;
|
|
17
|
+
role?: string;
|
|
18
|
+
}) => void;
|
|
19
|
+
/** Where "Learn more" about training goes. */
|
|
20
|
+
privacyPath?: string;
|
|
21
|
+
/** Show the safeguards row. Only a host whose router really runs a guard on chats may say so. */
|
|
22
|
+
safeguards?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function ChatOnboarding({ site, api, track, onDone, privacyPath, safeguards }: ChatOnboardingProps): import("react").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=ChatOnboarding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatOnboarding.d.ts","sourceRoot":"","sources":["../../src/onboarding/ChatOnboarding.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,SAAS,CAAA;AAIhD;;;;;;;;GAQG;AAEH,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,MAAM,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC3D,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iGAAiG;IACjG,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAsBD,wBAAgB,cAAc,CAAC,EAAE,IAAc,EAAE,GAAS,EAAE,KAAK,EAAE,MAAM,EAAE,WAAiC,EAAE,UAAkB,EAAE,EAAE,mBAAmB,+BAsJtJ"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useRef, useState } from 'react';
|
|
4
|
+
import { Binoculars, Calendar, ChartLine, Clock, Code, Dna, FileText, Gavel, GraduationCap, LayoutGrid, Library, Lightbulb, MessageSquare, Palette, Pencil, Presentation, User } from '@hanzogui/lucide-icons-2';
|
|
5
|
+
import { Button } from '../backends/gui/button.js';
|
|
6
|
+
import { Field } from '../backends/gui/field.js';
|
|
7
|
+
import { Input } from '../backends/gui/input.js';
|
|
8
|
+
import { Anchor, Paragraph, XStack, YStack } from '../backends/gui/layout.js';
|
|
9
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../backends/gui/select.js';
|
|
10
|
+
import { Switch } from '../backends/gui/switch.js';
|
|
11
|
+
import { API } from './api.js';
|
|
12
|
+
import { Page, Panel } from './frame.js';
|
|
13
|
+
import { Primary } from './screens.js';
|
|
14
|
+
import { useSession } from './hooks.js';
|
|
15
|
+
import { OWN_TOPIC, ROLES, ROLES_PLACEHOLDER, ROLES_SUBTITLE, ROLES_TITLE } from './roles.js';
|
|
16
|
+
import { chatStep } from './state.js';
|
|
17
|
+
const ICONS = {
|
|
18
|
+
binoculars: Binoculars,
|
|
19
|
+
books: Library,
|
|
20
|
+
bulb: Lightbulb,
|
|
21
|
+
calendar: Calendar,
|
|
22
|
+
cap: GraduationCap,
|
|
23
|
+
chart: ChartLine,
|
|
24
|
+
chat: MessageSquare,
|
|
25
|
+
clock: Clock,
|
|
26
|
+
code: Code,
|
|
27
|
+
dna: Dna,
|
|
28
|
+
doc: FileText,
|
|
29
|
+
gavel: Gavel,
|
|
30
|
+
grid: LayoutGrid,
|
|
31
|
+
palette: Palette,
|
|
32
|
+
pencil: Pencil,
|
|
33
|
+
person: User,
|
|
34
|
+
slides: Presentation,
|
|
35
|
+
};
|
|
36
|
+
export function ChatOnboarding({ site = 'Hanzo', api = API, track, onDone, privacyPath = '/settings/privacy', safeguards = false }) {
|
|
37
|
+
const session = useSession(api);
|
|
38
|
+
const [role, setRole] = useState('');
|
|
39
|
+
const [name, setName] = useState('');
|
|
40
|
+
const [train, setTrain] = useState(true);
|
|
41
|
+
const [busy, setBusy] = useState(false);
|
|
42
|
+
const announced = useRef(false);
|
|
43
|
+
const at = session.loading ? null : chatStep(session.progress, Boolean(session.name));
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (at !== 'done' || announced.current)
|
|
46
|
+
return;
|
|
47
|
+
announced.current = true;
|
|
48
|
+
// A person who finished every step opens the chat as they left it.
|
|
49
|
+
onDone({ role: session.progress.role });
|
|
50
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
51
|
+
}, [at]);
|
|
52
|
+
if (!at || at === 'done')
|
|
53
|
+
return _jsx(Page, { site: site, title: "", busy: true });
|
|
54
|
+
if (at === 'notice') {
|
|
55
|
+
return (_jsxs(Page, { site: site, title: "Before your first chat", lede: "A few things to know, plus one setting to review", center: true, width: 512, children: [_jsxs(Panel, { label: "Before your first chat", children: [_jsxs(Row, { icon: _jsx(Binoculars, { size: 20 }), children: [_jsx("b", { children: "Ad-free chats:" }), " We won\u2019t show you ads or let advertisers influence what ", site, " says."] }), safeguards ? (_jsxs(Row, { icon: _jsx(User, { size: 20 }), children: [_jsx("b", { children: "Built to help, not harm:" }), " Automated safeguards protect your chats from violent, abusive, or deceptive content."] })) : null, _jsxs(Row, { icon: _jsx(Switch, { checked: train, onCheckedChange: setTrain, "aria-label": "Help improve our AI models" }), children: [_jsx("b", { children: "Help improve our AI models:" }), " Allow the use of your chats and coding sessions to train and improve Zen models. Change anytime in privacy settings.", ' ', _jsx(Anchor, { href: privacyPath, color: "$ink", textDecorationLine: "underline", children: "Learn more" })] })] }), _jsx(Primary, { disabled: busy, onClick: async () => {
|
|
56
|
+
setBusy(true);
|
|
57
|
+
await session.setTrain(train).catch(() => undefined);
|
|
58
|
+
track?.('first_chat_notice_accepted', { train_opt_in: train });
|
|
59
|
+
await session.save({ notice: true });
|
|
60
|
+
setBusy(false);
|
|
61
|
+
}, children: "Continue" })] }));
|
|
62
|
+
}
|
|
63
|
+
if (at === 'name') {
|
|
64
|
+
const submit = async (e) => {
|
|
65
|
+
e?.preventDefault();
|
|
66
|
+
if (!name.trim() || busy)
|
|
67
|
+
return;
|
|
68
|
+
setBusy(true);
|
|
69
|
+
try {
|
|
70
|
+
await session.setName(name.trim());
|
|
71
|
+
track?.('name_set', {});
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
setBusy(false);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
return (_jsx(Page, { site: site, title: "What\u2019s your name?", lede: `So ${site} knows what to call you.`, center: true, children: _jsxs(YStack, { render: _jsx("form", { onSubmit: submit, noValidate: true }), gap: "$4", items: "stretch", children: [_jsx(Field, { gap: "$2", children: _jsx(Input, { name: "name", autoComplete: "name", "aria-label": "Your name", value: name, onChangeText: setName, placeholder: "Your name", height: 48, autoFocus: true }) }), _jsx(Primary, { type: "submit", disabled: !name.trim() || busy, children: "Continue" })] }) }));
|
|
78
|
+
}
|
|
79
|
+
const chosen = ROLES.find((r) => r.role === role);
|
|
80
|
+
const pick = async (prompt) => {
|
|
81
|
+
if (busy || !chosen)
|
|
82
|
+
return;
|
|
83
|
+
setBusy(true);
|
|
84
|
+
await session.save({ role: chosen.role });
|
|
85
|
+
onDone({ prompt, role: chosen.role });
|
|
86
|
+
};
|
|
87
|
+
return (_jsxs(Page, { site: site, title: ROLES_TITLE, lede: ROLES_SUBTITLE, center: true, width: 450, children: [_jsxs(Select, { value: role, onValueChange: (v) => {
|
|
88
|
+
setRole(v);
|
|
89
|
+
track?.('role_selected', { role: v });
|
|
90
|
+
}, children: [_jsx(SelectTrigger, { "aria-label": "Your role", height: 48, children: _jsx(SelectValue, { placeholder: ROLES_PLACEHOLDER }) }), _jsx(SelectContent, { children: ROLES.map((r) => (_jsx(SelectItem, { value: r.role, children: r.role }, r.role))) })] }), chosen ? (_jsxs(YStack, { gap: "$3", children: [chosen.prompts.map((p) => {
|
|
91
|
+
const Icon = ICONS[p.icon];
|
|
92
|
+
return (_jsxs(Button, { type: "button", variant: "secondary", disabled: busy, minH: 68, px: "$5", rounded: "$3", justify: "flex-start", gap: "$4", onClick: () => {
|
|
93
|
+
track?.('starter_prompt_used', { role: chosen.role, prompt: p.label });
|
|
94
|
+
void pick(p.prompt);
|
|
95
|
+
}, children: [_jsx(Icon, { size: 20 }), p.label] }, p.label));
|
|
96
|
+
}), _jsx(Button, { type: "button", variant: "link", size: "lg", disabled: busy, self: "center", onClick: () => {
|
|
97
|
+
track?.('own_topic_chosen', { role: chosen.role });
|
|
98
|
+
void pick(undefined);
|
|
99
|
+
}, children: OWN_TOPIC })] })) : null] }));
|
|
100
|
+
}
|
|
101
|
+
/** One line of the notice: a mark or a switch, then the words. */
|
|
102
|
+
function Row({ icon, children }) {
|
|
103
|
+
return (_jsxs(XStack, { gap: "$4", items: "flex-start", children: [_jsx(XStack, { width: 40, justify: "center", pt: "$0.5", children: icon }), _jsx(Paragraph, { size: "$2", color: "$ink", flex: 1, m: 0, children: children })] }));
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=ChatOnboarding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatOnboarding.js","sourceRoot":"","sources":["../../src/onboarding/ChatOnboarding.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Checkout = Checkout;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const pay_1 = require("@hanzo/pay");
|
|
8
|
+
const web_1 = require("@hanzo/pay/web");
|
|
9
|
+
const checkbox_1 = require("../backends/gui/checkbox.cjs");
|
|
10
|
+
const field_1 = require("../backends/gui/field.cjs");
|
|
11
|
+
const input_1 = require("../backends/gui/input.cjs");
|
|
12
|
+
const layout_1 = require("../backends/gui/layout.cjs");
|
|
13
|
+
const select_1 = require("../backends/gui/select.cjs");
|
|
14
|
+
const api_1 = require("./api.cjs");
|
|
15
|
+
const frame_1 = require("./frame.cjs");
|
|
16
|
+
const screens_1 = require("./screens.cjs");
|
|
17
|
+
const plans_1 = require("./plans.cjs");
|
|
18
|
+
const COUNTRIES = [
|
|
19
|
+
['US', 'United States'], ['CA', 'Canada'], ['GB', 'United Kingdom'], ['AU', 'Australia'], ['DE', 'Germany'], ['FR', 'France'], ['ES', 'Spain'], ['IT', 'Italy'], ['NL', 'Netherlands'], ['SE', 'Sweden'], ['IE', 'Ireland'], ['CH', 'Switzerland'], ['JP', 'Japan'], ['SG', 'Singapore'], ['IN', 'India'], ['BR', 'Brazil'], ['MX', 'Mexico'], ['NZ', 'New Zealand'], ['ZA', 'South Africa'], ['AE', 'United Arab Emirates'],
|
|
20
|
+
];
|
|
21
|
+
const key = () => (typeof crypto !== 'undefined' && 'randomUUID' in crypto ? crypto.randomUUID() : `${Date.now()}-${Math.random()}`);
|
|
22
|
+
const renews = (interval) => {
|
|
23
|
+
const d = new Date();
|
|
24
|
+
if (interval === 'annual')
|
|
25
|
+
d.setFullYear(d.getFullYear() + 1);
|
|
26
|
+
else
|
|
27
|
+
d.setMonth(d.getMonth() + 1);
|
|
28
|
+
return d.toLocaleDateString('en-US', { year: 'numeric', month: 'numeric', day: 'numeric' });
|
|
29
|
+
};
|
|
30
|
+
function Checkout({ site = 'Hanzo', api = api_1.API, org, plan, seats = 1, interval, setInterval, track, termsPath = '/terms', back, onPaid }) {
|
|
31
|
+
const offer = plans_1.OFFERS[plan];
|
|
32
|
+
const l = (0, react_1.useMemo)(() => (0, plans_1.lines)(plan, interval, seats), [plan, interval, seats]);
|
|
33
|
+
const scope = (0, react_1.useMemo)(() => (org ? { 'X-Org-Id': org } : undefined), [org]);
|
|
34
|
+
const [settings, setSettings] = (0, react_1.useState)(null);
|
|
35
|
+
const [ready, setReady] = (0, react_1.useState)(false);
|
|
36
|
+
const [busy, setBusy] = (0, react_1.useState)(false);
|
|
37
|
+
const [wrong, setWrong] = (0, react_1.useState)(null);
|
|
38
|
+
const [agree, setAgree] = (0, react_1.useState)(false);
|
|
39
|
+
const [form, setForm] = (0, react_1.useState)({ name: '', country: 'US', address: '', invoice: '' });
|
|
40
|
+
const card = (0, react_1.useRef)(null);
|
|
41
|
+
const attempt = (0, react_1.useRef)(key());
|
|
42
|
+
const started = (0, react_1.useRef)(false);
|
|
43
|
+
// The billing form is shown with a total: checkout has started.
|
|
44
|
+
(0, react_1.useEffect)(() => {
|
|
45
|
+
if (started.current)
|
|
46
|
+
return;
|
|
47
|
+
started.current = true;
|
|
48
|
+
track?.('plan_selected', { plan, interval, seats: l.seats, value: l.subtotal, currency: 'USD', items: [(0, plans_1.item)(plan, interval, seats)] });
|
|
49
|
+
track?.('checkout_started', { plan, interval, seats: l.seats, value: l.subtotal, currency: 'USD', items: [(0, plans_1.item)(plan, interval, seats)] });
|
|
50
|
+
// Once per mount.
|
|
51
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
52
|
+
}, []);
|
|
53
|
+
(0, react_1.useEffect)(() => {
|
|
54
|
+
let live = true;
|
|
55
|
+
(0, api_1.call)(api, '/v1/billing/settings', { headers: scope })
|
|
56
|
+
.then((s) => live && setSettings(s))
|
|
57
|
+
.catch((e) => live && setWrong(e instanceof Error ? e.message : 'Payments are not available right now.'));
|
|
58
|
+
return () => {
|
|
59
|
+
live = false;
|
|
60
|
+
};
|
|
61
|
+
}, [api, scope]);
|
|
62
|
+
// The Square card field, drawn once the settings say which application it is.
|
|
63
|
+
(0, react_1.useEffect)(() => {
|
|
64
|
+
if (!settings)
|
|
65
|
+
return;
|
|
66
|
+
let cancelled = false;
|
|
67
|
+
const theme = document.documentElement.classList.contains('light') ? 'light' : 'dark';
|
|
68
|
+
(0, web_1.pin)(pay_1.PALETTE[theme]);
|
|
69
|
+
void (async () => {
|
|
70
|
+
try {
|
|
71
|
+
await (0, web_1.load)((settings.environment ?? 'production').toLowerCase() === 'production' ? web_1.PRODUCTION : web_1.SANDBOX);
|
|
72
|
+
const square = window.Square;
|
|
73
|
+
if (cancelled || !square)
|
|
74
|
+
return;
|
|
75
|
+
const payments = await square.payments(settings.applicationId, settings.locationId);
|
|
76
|
+
const c = await payments.card({ style: (0, web_1.style)(pay_1.PALETTE[theme]) });
|
|
77
|
+
if (cancelled) {
|
|
78
|
+
await c.destroy();
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
await c.attach('#hanzo-square');
|
|
82
|
+
card.current = c;
|
|
83
|
+
setReady(true);
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
if (!cancelled)
|
|
87
|
+
setWrong(e instanceof Error ? e.message : 'The card form did not load.');
|
|
88
|
+
}
|
|
89
|
+
})();
|
|
90
|
+
return () => {
|
|
91
|
+
cancelled = true;
|
|
92
|
+
const c = card.current;
|
|
93
|
+
card.current = null;
|
|
94
|
+
setReady(false);
|
|
95
|
+
if (c)
|
|
96
|
+
void c.destroy().catch(() => undefined);
|
|
97
|
+
};
|
|
98
|
+
}, [settings]);
|
|
99
|
+
const fail = (0, react_1.useCallback)((reason, say) => {
|
|
100
|
+
track?.('checkout_failed', { reason, plan, interval, seats: l.seats, value: l.subtotal, currency: 'USD' });
|
|
101
|
+
setWrong(say);
|
|
102
|
+
setBusy(false);
|
|
103
|
+
}, [track, plan, interval, l.seats, l.subtotal]);
|
|
104
|
+
async function submit(e) {
|
|
105
|
+
e.preventDefault();
|
|
106
|
+
if (busy || !agree || !ready || !card.current)
|
|
107
|
+
return;
|
|
108
|
+
if (!form.name.trim() || !form.address.trim()) {
|
|
109
|
+
setWrong('Enter your full name and address.');
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
setBusy(true);
|
|
113
|
+
setWrong(null);
|
|
114
|
+
try {
|
|
115
|
+
// The catalog is the price. If it disagrees with the screen, nobody is charged.
|
|
116
|
+
const plans = await (0, api_1.call)(api, '/v1/billing/plans', { headers: scope });
|
|
117
|
+
const row = (Array.isArray(plans) ? plans : plans.plans).find((p) => p.slug === plans_1.SLUG[plan]);
|
|
118
|
+
const cents = Math.round((0, plans_1.period)(plan, interval) * 100);
|
|
119
|
+
const listed = interval === 'annual' ? row?.annualTotal : row?.price;
|
|
120
|
+
if (!row || listed !== cents) {
|
|
121
|
+
fail('catalog', 'This plan’s price is being updated, so we have not charged you. Please try again shortly.');
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const result = await card.current.tokenize();
|
|
125
|
+
if (result.status !== 'OK' || !result.token) {
|
|
126
|
+
fail('card', result.errors?.[0]?.message ?? 'The card could not be read. Check the details and try again.');
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
track?.('payment_info_added', { plan, interval, seats: l.seats, value: l.subtotal, currency: 'USD', items: [(0, plans_1.item)(plan, interval, seats)] });
|
|
130
|
+
const paid = await (0, api_1.call)(api, '/v1/billing/subscribe/card', {
|
|
131
|
+
method: 'POST',
|
|
132
|
+
headers: { ...scope, 'X-Idempotency-Key': attempt.current },
|
|
133
|
+
body: JSON.stringify({ sourceId: result.token, planId: plans_1.SLUG[plan], quantity: l.seats, ...(interval === 'annual' ? { interval: 'year' } : {}) }),
|
|
134
|
+
});
|
|
135
|
+
track?.('order_completed', { order_id: paid.invoiceId, plan, interval, seats: l.seats, value: l.subtotal, currency: 'USD', items: [(0, plans_1.item)(plan, interval, seats)] });
|
|
136
|
+
onPaid({ orderId: paid.invoiceId });
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
attempt.current = key();
|
|
140
|
+
fail('declined', err instanceof api_1.ApiError ? err.message : 'The payment did not go through. You have not been charged.');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const per = interval === 'annual' ? 'year' : 'month';
|
|
144
|
+
const label = offer.category === 'team' ? `${l.seats} ${offer.name.toLowerCase()}s` : offer.name;
|
|
145
|
+
const every = interval === 'annual' ? 'yearly' : 'monthly';
|
|
146
|
+
return ((0, jsx_runtime_1.jsx)(frame_1.Page, { site: site, title: "Configure your plan", back: back, width: 1000, start: true, children: (0, jsx_runtime_1.jsxs)(layout_1.XStack, { render: (0, jsx_runtime_1.jsx)("form", { onSubmit: submit, noValidate: true }), flexWrap: "wrap", gap: "$7", items: "flex-start", width: "100%", children: [(0, jsx_runtime_1.jsxs)(layout_1.YStack, { flex: 1, flexBasis: 360, minW: 0, gap: "$4", children: [(0, jsx_runtime_1.jsx)(screens_1.IntervalChoice, { interval: interval, setInterval: (i) => {
|
|
147
|
+
track?.('plan_changed', { from: interval, to: i, field: 'interval', plan });
|
|
148
|
+
setInterval(i);
|
|
149
|
+
}, price: (i) => `${offer.name} ${i === 'annual' ? 'annual' : 'monthly'} · USD ${(0, plans_1.usd)((0, plans_1.lines)(plan, i, seats).subtotal)} · billed ${i === 'annual' ? 'yearly' : 'monthly'}` }), (0, jsx_runtime_1.jsx)(layout_1.Heading, { render: "h2", size: "$4", fontWeight: "600", color: "$ink", mt: "$4", m: 0, children: "Billing information" }), (0, jsx_runtime_1.jsxs)(field_1.Field, { gap: "$2", children: [(0, jsx_runtime_1.jsx)(field_1.FieldLabel, { htmlFor: "hanzo-bill-name", children: "Full name" }), (0, jsx_runtime_1.jsx)(input_1.Input, { id: "hanzo-bill-name", name: "name", autoComplete: "name", value: form.name, onChangeText: (v) => setForm((f) => ({ ...f, name: v })) })] }), (0, jsx_runtime_1.jsxs)(field_1.Field, { gap: "$2", children: [(0, jsx_runtime_1.jsx)(field_1.FieldLabel, { htmlFor: "hanzo-bill-country", children: "Country or region" }), (0, jsx_runtime_1.jsxs)(select_1.Select, { value: form.country, onValueChange: (v) => setForm((f) => ({ ...f, country: v })), children: [(0, jsx_runtime_1.jsx)(select_1.SelectTrigger, { id: "hanzo-bill-country", "aria-label": "Country or region", children: (0, jsx_runtime_1.jsx)(select_1.SelectValue, {}) }), (0, jsx_runtime_1.jsx)(select_1.SelectContent, { children: COUNTRIES.map(([c, n]) => ((0, jsx_runtime_1.jsx)(select_1.SelectItem, { value: c, children: n }, c))) })] })] }), (0, jsx_runtime_1.jsxs)(field_1.Field, { gap: "$2", children: [(0, jsx_runtime_1.jsx)(field_1.FieldLabel, { htmlFor: "hanzo-bill-address", children: "Address" }), (0, jsx_runtime_1.jsx)(input_1.Input, { id: "hanzo-bill-address", name: "address", autoComplete: "street-address", value: form.address, onChangeText: (v) => setForm((f) => ({ ...f, address: v })) })] }), (0, jsx_runtime_1.jsxs)(field_1.Field, { gap: "$2", children: [(0, jsx_runtime_1.jsx)(field_1.FieldLabel, { htmlFor: "hanzo-bill-invoice", children: "Use a different name on invoices (optional)" }), (0, jsx_runtime_1.jsx)(input_1.Input, { id: "hanzo-bill-invoice", name: "invoice", value: form.invoice, onChangeText: (v) => setForm((f) => ({ ...f, invoice: v })) })] }), (0, jsx_runtime_1.jsx)(layout_1.Heading, { render: "h2", size: "$4", fontWeight: "600", color: "$ink", mt: "$4", m: 0, children: "Payment method" }), (0, jsx_runtime_1.jsx)(layout_1.YStack, { id: "hanzo-square", "aria-label": "Card details", minH: 90 }), !ready && !wrong ? ((0, jsx_runtime_1.jsx)(layout_1.Paragraph, { size: "$1", color: "$quiet", m: 0, children: "Loading the card form\u2026" })) : null] }), (0, jsx_runtime_1.jsx)(layout_1.YStack, { flex: 1, flexBasis: 360, minW: 0, children: (0, jsx_runtime_1.jsxs)(frame_1.Panel, { label: "Order summary", children: [(0, jsx_runtime_1.jsx)(layout_1.Heading, { render: "h2", size: "$5", fontWeight: "600", color: "$ink", m: 0, children: offer.category === 'team' ? 'Team plan' : `${offer.name} plan` }), (0, jsx_runtime_1.jsx)(frame_1.Line, { muted: true, label: `${label} ${interval === 'annual' ? 'annual' : 'monthly'}`, value: (0, plans_1.usd)(l.subtotal) }), (0, jsx_runtime_1.jsx)(frame_1.Line, { muted: true, label: "Subtotal", value: (0, plans_1.usd)(l.subtotal) }), (0, jsx_runtime_1.jsx)(frame_1.Line, { muted: true, label: "Tax", value: "Calculated at payment" }), (0, jsx_runtime_1.jsx)(frame_1.Line, { strong: true, label: "Total due today", value: (0, plans_1.usd)(l.subtotal) }), (0, jsx_runtime_1.jsxs)(layout_1.Paragraph, { size: "$2", color: "$ink", m: 0, p: "$3", borderWidth: 1, borderColor: "$borderColor", rounded: "$3", children: ["Your subscription will auto-renew on ", renews(interval), ". You will be charged ", (0, plans_1.usd)(l.subtotal), "/", per, offer.category === 'team' ? ` (${l.seats} seats × ${(0, plans_1.usd)((0, plans_1.unit)(plan, interval))}/seat/month${interval === 'annual' ? ', billed yearly' : ''})` : '', ". Cancel any time in Settings \u2192 Billing."] }), (0, jsx_runtime_1.jsxs)(layout_1.XStack, { items: "flex-start", gap: "$3", children: [(0, jsx_runtime_1.jsx)(checkbox_1.Checkbox, { id: "hanzo-consent", checked: agree, onCheckedChange: (v) => setAgree(v === true), mt: "$1", "aria-label": "Agree to recurring charges" }), (0, jsx_runtime_1.jsxs)(layout_1.Paragraph, { render: "label", htmlFor: "hanzo-consent", size: "$2", color: "$ink", flex: 1, m: 0, children: ["You agree that ", site, " will charge your card in the amount above now and on a recurring ", every, " basis until you cancel in accordance with our", ' ', (0, jsx_runtime_1.jsx)(layout_1.Anchor, { href: termsPath, color: "$ink", textDecorationLine: "underline", children: "terms" }), ". You can cancel at any time in your account settings."] })] }), wrong ? (0, jsx_runtime_1.jsx)(field_1.FieldError, { children: wrong }) : null, (0, jsx_runtime_1.jsx)(screens_1.Primary, { type: "submit", disabled: !agree || !ready || busy, children: busy ? 'One moment…' : 'Subscribe' })] }) })] }) }));
|
|
150
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Track } from './hooks.js';
|
|
2
|
+
import { type Interval, type PlanId } from './plans.js';
|
|
3
|
+
/**
|
|
4
|
+
* THE checkout: one component for the personal path, the team path and every
|
|
5
|
+
* in-app Upgrade entry. Commerce prices the plan (POST /v1/billing/subscribe/card
|
|
6
|
+
* names a catalog plan, never an amount); the card is a Square Web Payments
|
|
7
|
+
* field mounted here, so no card data touches this page or this code.
|
|
8
|
+
*
|
|
9
|
+
* Before it charges, it reads the catalog and refuses if the catalog's price is
|
|
10
|
+
* not the one on screen, so a person is never billed a different amount than the
|
|
11
|
+
* one they agreed to.
|
|
12
|
+
*/
|
|
13
|
+
export interface CheckoutProps {
|
|
14
|
+
site?: string;
|
|
15
|
+
api?: string;
|
|
16
|
+
/** The IAM org the plan is bought for; omitted, the caller's own. */
|
|
17
|
+
org?: string;
|
|
18
|
+
plan: PlanId;
|
|
19
|
+
seats?: number;
|
|
20
|
+
interval: Interval;
|
|
21
|
+
setInterval: (i: Interval) => void;
|
|
22
|
+
track?: Track;
|
|
23
|
+
termsPath?: string;
|
|
24
|
+
back?: () => void;
|
|
25
|
+
onPaid: (r: {
|
|
26
|
+
orderId: string;
|
|
27
|
+
}) => void;
|
|
28
|
+
}
|
|
29
|
+
export declare function Checkout({ site, api, org, plan, seats, interval, setInterval, track, termsPath, back, onPaid }: CheckoutProps): import("react").JSX.Element;
|
|
30
|
+
//# sourceMappingURL=Checkout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checkout.d.ts","sourceRoot":"","sources":["../../src/onboarding/Checkout.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAgD,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAA;AAElG;;;;;;;;;GASG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAA;IAClC,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,IAAI,CAAA;IACjB,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CACzC;AA0BD,wBAAgB,QAAQ,CAAC,EAAE,IAAc,EAAE,GAAS,EAAE,GAAG,EAAE,IAAI,EAAE,KAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,SAAoB,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,+BA6M5J"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { PALETTE } from '@hanzo/pay';
|
|
5
|
+
import { load, pin, PRODUCTION, SANDBOX, style } from '@hanzo/pay/web';
|
|
6
|
+
import { Checkbox } from '../backends/gui/checkbox.js';
|
|
7
|
+
import { Field, FieldError, FieldLabel } from '../backends/gui/field.js';
|
|
8
|
+
import { Input } from '../backends/gui/input.js';
|
|
9
|
+
import { Anchor, Heading, Paragraph, XStack, YStack } from '../backends/gui/layout.js';
|
|
10
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../backends/gui/select.js';
|
|
11
|
+
import { ApiError, API, call } from './api.js';
|
|
12
|
+
import { Line, Page, Panel } from './frame.js';
|
|
13
|
+
import { IntervalChoice, Primary } from './screens.js';
|
|
14
|
+
import { item, lines, OFFERS, period, SLUG, unit, usd } from './plans.js';
|
|
15
|
+
const COUNTRIES = [
|
|
16
|
+
['US', 'United States'], ['CA', 'Canada'], ['GB', 'United Kingdom'], ['AU', 'Australia'], ['DE', 'Germany'], ['FR', 'France'], ['ES', 'Spain'], ['IT', 'Italy'], ['NL', 'Netherlands'], ['SE', 'Sweden'], ['IE', 'Ireland'], ['CH', 'Switzerland'], ['JP', 'Japan'], ['SG', 'Singapore'], ['IN', 'India'], ['BR', 'Brazil'], ['MX', 'Mexico'], ['NZ', 'New Zealand'], ['ZA', 'South Africa'], ['AE', 'United Arab Emirates'],
|
|
17
|
+
];
|
|
18
|
+
const key = () => (typeof crypto !== 'undefined' && 'randomUUID' in crypto ? crypto.randomUUID() : `${Date.now()}-${Math.random()}`);
|
|
19
|
+
const renews = (interval) => {
|
|
20
|
+
const d = new Date();
|
|
21
|
+
if (interval === 'annual')
|
|
22
|
+
d.setFullYear(d.getFullYear() + 1);
|
|
23
|
+
else
|
|
24
|
+
d.setMonth(d.getMonth() + 1);
|
|
25
|
+
return d.toLocaleDateString('en-US', { year: 'numeric', month: 'numeric', day: 'numeric' });
|
|
26
|
+
};
|
|
27
|
+
export function Checkout({ site = 'Hanzo', api = API, org, plan, seats = 1, interval, setInterval, track, termsPath = '/terms', back, onPaid }) {
|
|
28
|
+
const offer = OFFERS[plan];
|
|
29
|
+
const l = useMemo(() => lines(plan, interval, seats), [plan, interval, seats]);
|
|
30
|
+
const scope = useMemo(() => (org ? { 'X-Org-Id': org } : undefined), [org]);
|
|
31
|
+
const [settings, setSettings] = useState(null);
|
|
32
|
+
const [ready, setReady] = useState(false);
|
|
33
|
+
const [busy, setBusy] = useState(false);
|
|
34
|
+
const [wrong, setWrong] = useState(null);
|
|
35
|
+
const [agree, setAgree] = useState(false);
|
|
36
|
+
const [form, setForm] = useState({ name: '', country: 'US', address: '', invoice: '' });
|
|
37
|
+
const card = useRef(null);
|
|
38
|
+
const attempt = useRef(key());
|
|
39
|
+
const started = useRef(false);
|
|
40
|
+
// The billing form is shown with a total: checkout has started.
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (started.current)
|
|
43
|
+
return;
|
|
44
|
+
started.current = true;
|
|
45
|
+
track?.('plan_selected', { plan, interval, seats: l.seats, value: l.subtotal, currency: 'USD', items: [item(plan, interval, seats)] });
|
|
46
|
+
track?.('checkout_started', { plan, interval, seats: l.seats, value: l.subtotal, currency: 'USD', items: [item(plan, interval, seats)] });
|
|
47
|
+
// Once per mount.
|
|
48
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
49
|
+
}, []);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
let live = true;
|
|
52
|
+
call(api, '/v1/billing/settings', { headers: scope })
|
|
53
|
+
.then((s) => live && setSettings(s))
|
|
54
|
+
.catch((e) => live && setWrong(e instanceof Error ? e.message : 'Payments are not available right now.'));
|
|
55
|
+
return () => {
|
|
56
|
+
live = false;
|
|
57
|
+
};
|
|
58
|
+
}, [api, scope]);
|
|
59
|
+
// The Square card field, drawn once the settings say which application it is.
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
if (!settings)
|
|
62
|
+
return;
|
|
63
|
+
let cancelled = false;
|
|
64
|
+
const theme = document.documentElement.classList.contains('light') ? 'light' : 'dark';
|
|
65
|
+
pin(PALETTE[theme]);
|
|
66
|
+
void (async () => {
|
|
67
|
+
try {
|
|
68
|
+
await load((settings.environment ?? 'production').toLowerCase() === 'production' ? PRODUCTION : SANDBOX);
|
|
69
|
+
const square = window.Square;
|
|
70
|
+
if (cancelled || !square)
|
|
71
|
+
return;
|
|
72
|
+
const payments = await square.payments(settings.applicationId, settings.locationId);
|
|
73
|
+
const c = await payments.card({ style: style(PALETTE[theme]) });
|
|
74
|
+
if (cancelled) {
|
|
75
|
+
await c.destroy();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
await c.attach('#hanzo-square');
|
|
79
|
+
card.current = c;
|
|
80
|
+
setReady(true);
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
if (!cancelled)
|
|
84
|
+
setWrong(e instanceof Error ? e.message : 'The card form did not load.');
|
|
85
|
+
}
|
|
86
|
+
})();
|
|
87
|
+
return () => {
|
|
88
|
+
cancelled = true;
|
|
89
|
+
const c = card.current;
|
|
90
|
+
card.current = null;
|
|
91
|
+
setReady(false);
|
|
92
|
+
if (c)
|
|
93
|
+
void c.destroy().catch(() => undefined);
|
|
94
|
+
};
|
|
95
|
+
}, [settings]);
|
|
96
|
+
const fail = useCallback((reason, say) => {
|
|
97
|
+
track?.('checkout_failed', { reason, plan, interval, seats: l.seats, value: l.subtotal, currency: 'USD' });
|
|
98
|
+
setWrong(say);
|
|
99
|
+
setBusy(false);
|
|
100
|
+
}, [track, plan, interval, l.seats, l.subtotal]);
|
|
101
|
+
async function submit(e) {
|
|
102
|
+
e.preventDefault();
|
|
103
|
+
if (busy || !agree || !ready || !card.current)
|
|
104
|
+
return;
|
|
105
|
+
if (!form.name.trim() || !form.address.trim()) {
|
|
106
|
+
setWrong('Enter your full name and address.');
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
setBusy(true);
|
|
110
|
+
setWrong(null);
|
|
111
|
+
try {
|
|
112
|
+
// The catalog is the price. If it disagrees with the screen, nobody is charged.
|
|
113
|
+
const plans = await call(api, '/v1/billing/plans', { headers: scope });
|
|
114
|
+
const row = (Array.isArray(plans) ? plans : plans.plans).find((p) => p.slug === SLUG[plan]);
|
|
115
|
+
const cents = Math.round(period(plan, interval) * 100);
|
|
116
|
+
const listed = interval === 'annual' ? row?.annualTotal : row?.price;
|
|
117
|
+
if (!row || listed !== cents) {
|
|
118
|
+
fail('catalog', 'This plan’s price is being updated, so we have not charged you. Please try again shortly.');
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const result = await card.current.tokenize();
|
|
122
|
+
if (result.status !== 'OK' || !result.token) {
|
|
123
|
+
fail('card', result.errors?.[0]?.message ?? 'The card could not be read. Check the details and try again.');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
track?.('payment_info_added', { plan, interval, seats: l.seats, value: l.subtotal, currency: 'USD', items: [item(plan, interval, seats)] });
|
|
127
|
+
const paid = await call(api, '/v1/billing/subscribe/card', {
|
|
128
|
+
method: 'POST',
|
|
129
|
+
headers: { ...scope, 'X-Idempotency-Key': attempt.current },
|
|
130
|
+
body: JSON.stringify({ sourceId: result.token, planId: SLUG[plan], quantity: l.seats, ...(interval === 'annual' ? { interval: 'year' } : {}) }),
|
|
131
|
+
});
|
|
132
|
+
track?.('order_completed', { order_id: paid.invoiceId, plan, interval, seats: l.seats, value: l.subtotal, currency: 'USD', items: [item(plan, interval, seats)] });
|
|
133
|
+
onPaid({ orderId: paid.invoiceId });
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
attempt.current = key();
|
|
137
|
+
fail('declined', err instanceof ApiError ? err.message : 'The payment did not go through. You have not been charged.');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
const per = interval === 'annual' ? 'year' : 'month';
|
|
141
|
+
const label = offer.category === 'team' ? `${l.seats} ${offer.name.toLowerCase()}s` : offer.name;
|
|
142
|
+
const every = interval === 'annual' ? 'yearly' : 'monthly';
|
|
143
|
+
return (_jsx(Page, { site: site, title: "Configure your plan", back: back, width: 1000, start: true, children: _jsxs(XStack, { render: _jsx("form", { onSubmit: submit, noValidate: true }), flexWrap: "wrap", gap: "$7", items: "flex-start", width: "100%", children: [_jsxs(YStack, { flex: 1, flexBasis: 360, minW: 0, gap: "$4", children: [_jsx(IntervalChoice, { interval: interval, setInterval: (i) => {
|
|
144
|
+
track?.('plan_changed', { from: interval, to: i, field: 'interval', plan });
|
|
145
|
+
setInterval(i);
|
|
146
|
+
}, price: (i) => `${offer.name} ${i === 'annual' ? 'annual' : 'monthly'} · USD ${usd(lines(plan, i, seats).subtotal)} · billed ${i === 'annual' ? 'yearly' : 'monthly'}` }), _jsx(Heading, { render: "h2", size: "$4", fontWeight: "600", color: "$ink", mt: "$4", m: 0, children: "Billing information" }), _jsxs(Field, { gap: "$2", children: [_jsx(FieldLabel, { htmlFor: "hanzo-bill-name", children: "Full name" }), _jsx(Input, { id: "hanzo-bill-name", name: "name", autoComplete: "name", value: form.name, onChangeText: (v) => setForm((f) => ({ ...f, name: v })) })] }), _jsxs(Field, { gap: "$2", children: [_jsx(FieldLabel, { htmlFor: "hanzo-bill-country", children: "Country or region" }), _jsxs(Select, { value: form.country, onValueChange: (v) => setForm((f) => ({ ...f, country: v })), children: [_jsx(SelectTrigger, { id: "hanzo-bill-country", "aria-label": "Country or region", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: COUNTRIES.map(([c, n]) => (_jsx(SelectItem, { value: c, children: n }, c))) })] })] }), _jsxs(Field, { gap: "$2", children: [_jsx(FieldLabel, { htmlFor: "hanzo-bill-address", children: "Address" }), _jsx(Input, { id: "hanzo-bill-address", name: "address", autoComplete: "street-address", value: form.address, onChangeText: (v) => setForm((f) => ({ ...f, address: v })) })] }), _jsxs(Field, { gap: "$2", children: [_jsx(FieldLabel, { htmlFor: "hanzo-bill-invoice", children: "Use a different name on invoices (optional)" }), _jsx(Input, { id: "hanzo-bill-invoice", name: "invoice", value: form.invoice, onChangeText: (v) => setForm((f) => ({ ...f, invoice: v })) })] }), _jsx(Heading, { render: "h2", size: "$4", fontWeight: "600", color: "$ink", mt: "$4", m: 0, children: "Payment method" }), _jsx(YStack, { id: "hanzo-square", "aria-label": "Card details", minH: 90 }), !ready && !wrong ? (_jsx(Paragraph, { size: "$1", color: "$quiet", m: 0, children: "Loading the card form\u2026" })) : null] }), _jsx(YStack, { flex: 1, flexBasis: 360, minW: 0, children: _jsxs(Panel, { label: "Order summary", children: [_jsx(Heading, { render: "h2", size: "$5", fontWeight: "600", color: "$ink", m: 0, children: offer.category === 'team' ? 'Team plan' : `${offer.name} plan` }), _jsx(Line, { muted: true, label: `${label} ${interval === 'annual' ? 'annual' : 'monthly'}`, value: usd(l.subtotal) }), _jsx(Line, { muted: true, label: "Subtotal", value: usd(l.subtotal) }), _jsx(Line, { muted: true, label: "Tax", value: "Calculated at payment" }), _jsx(Line, { strong: true, label: "Total due today", value: usd(l.subtotal) }), _jsxs(Paragraph, { size: "$2", color: "$ink", m: 0, p: "$3", borderWidth: 1, borderColor: "$borderColor", rounded: "$3", children: ["Your subscription will auto-renew on ", renews(interval), ". You will be charged ", usd(l.subtotal), "/", per, offer.category === 'team' ? ` (${l.seats} seats × ${usd(unit(plan, interval))}/seat/month${interval === 'annual' ? ', billed yearly' : ''})` : '', ". Cancel any time in Settings \u2192 Billing."] }), _jsxs(XStack, { items: "flex-start", gap: "$3", children: [_jsx(Checkbox, { id: "hanzo-consent", checked: agree, onCheckedChange: (v) => setAgree(v === true), mt: "$1", "aria-label": "Agree to recurring charges" }), _jsxs(Paragraph, { render: "label", htmlFor: "hanzo-consent", size: "$2", color: "$ink", flex: 1, m: 0, children: ["You agree that ", site, " will charge your card in the amount above now and on a recurring ", every, " basis until you cancel in accordance with our", ' ', _jsx(Anchor, { href: termsPath, color: "$ink", textDecorationLine: "underline", children: "terms" }), ". You can cancel at any time in your account settings."] })] }), wrong ? _jsx(FieldError, { children: wrong }) : null, _jsx(Primary, { type: "submit", disabled: !agree || !ready || busy, children: busy ? 'One moment…' : 'Subscribe' })] }) })] }) }));
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=Checkout.js.map
|