@hanzo/ui 4.9.0 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +192 -185
- package/assets/ai-icons.tsx +207 -0
- package/assets/crypto.tsx +33 -0
- package/assets/file-type-icon.tsx +66 -0
- package/assets/file.tsx +45 -0
- package/assets/general.tsx +2318 -0
- package/assets/hanzo-logo.svg +9 -0
- package/assets/hanzo-logo.tsx +17 -0
- package/assets/index.ts +122 -0
- package/assets/index.tsx +4 -0
- package/assets/llm-provider.tsx +1094 -0
- package/bin/cli.js +100 -0
- package/bin/create-registry.js +108 -0
- package/bin/mcp.js +403 -0
- package/bin/npx-registry-mcp.js +15 -0
- package/bin/registry-mcp-wrapper.sh +19 -0
- package/bin/registry-mcp.js +100 -0
- package/bin/start-mcp-server.sh +22 -0
- package/bin/test-mcp.sh +52 -0
- package/bin/update-registry.js +196 -0
- package/blocks/auth/index.ts +6 -0
- package/blocks/auth/login-2fa.tsx +165 -0
- package/blocks/auth/login-basic.tsx +94 -0
- package/blocks/auth/login-social.tsx +148 -0
- package/blocks/auth/magic-link.tsx +129 -0
- package/blocks/auth/password-reset.tsx +97 -0
- package/blocks/auth/signup.tsx +157 -0
- package/blocks/components/accordian-block.tsx +48 -0
- package/blocks/components/block-component-props.ts +11 -0
- package/blocks/components/bullet-cards-block.tsx +46 -0
- package/blocks/components/card-block/index.tsx +171 -0
- package/blocks/components/card-block/link-out-button.tsx +20 -0
- package/blocks/components/card-block/util.ts +28 -0
- package/blocks/components/carte-blanche-block/index.tsx +127 -0
- package/blocks/components/carte-blanche-block/variant-content-left.tsx +49 -0
- package/blocks/components/content.tsx +70 -0
- package/blocks/components/cta-block.tsx +115 -0
- package/blocks/components/enh-heading-block.tsx +204 -0
- package/blocks/components/grid-block/grid-block-mutator.ts +12 -0
- package/blocks/components/grid-block/index.tsx +83 -0
- package/blocks/components/grid-block/mutator-registry.ts +10 -0
- package/blocks/components/grid-block/table-borders.mutator.ts +47 -0
- package/blocks/components/group-block.tsx +83 -0
- package/blocks/components/heading-block.tsx +88 -0
- package/blocks/components/image-block.tsx +111 -0
- package/blocks/components/index.ts +30 -0
- package/blocks/components/screenful-block/content.tsx +123 -0
- package/blocks/components/screenful-block/index.tsx +107 -0
- package/blocks/components/screenful-block/poster-background.tsx +34 -0
- package/blocks/components/screenful-block/video-background.tsx +45 -0
- package/blocks/components/space-block.tsx +66 -0
- package/blocks/components/video-block.tsx +138 -0
- package/blocks/data-display/activity-feed.tsx +242 -0
- package/blocks/data-display/data-table.tsx +235 -0
- package/blocks/data-display/stats-grid.tsx +194 -0
- package/blocks/def/accordian-block.ts +14 -0
- package/blocks/def/block.ts +7 -0
- package/blocks/def/bullet-cards-block.ts +22 -0
- package/blocks/def/card-block.ts +22 -0
- package/blocks/def/carte-blanche-block.ts +21 -0
- package/blocks/def/cta-block.ts +19 -0
- package/blocks/def/element-block.ts +11 -0
- package/blocks/def/enh-heading-block.ts +44 -0
- package/blocks/def/grid-block.ts +16 -0
- package/blocks/def/group-block.ts +11 -0
- package/blocks/def/heading-block.ts +15 -0
- package/blocks/def/image-block.ts +31 -0
- package/blocks/def/index.ts +35 -0
- package/blocks/def/screenful-block.ts +54 -0
- package/blocks/def/space-block.ts +64 -0
- package/blocks/def/video-block.ts +9 -0
- package/blocks/ecommerce/checkout.tsx +242 -0
- package/blocks/ecommerce/index.ts +7 -0
- package/blocks/ecommerce/product-detail.tsx +257 -0
- package/blocks/ecommerce/product-grid.tsx +148 -0
- package/blocks/ecommerce/shopping-cart.tsx +181 -0
- package/blocks/index.ts +2 -0
- package/blocks/marketing/cta-section.tsx +207 -0
- package/blocks/marketing/faq.tsx +159 -0
- package/blocks/marketing/features-grid.tsx +156 -0
- package/blocks/marketing/hero-section.tsx +192 -0
- package/blocks/marketing/index.ts +6 -0
- package/blocks/marketing/pricing-table.tsx +121 -0
- package/blocks/marketing/testimonials.tsx +196 -0
- package/components/index.ts +9 -0
- package/dist/index.js +9070 -1089
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8695 -45
- package/dist/index.mjs.map +1 -1
- package/dist/tailwind.js +2025 -0
- package/dist/tailwind.js.map +1 -0
- package/dist/tailwind.mjs +2013 -0
- package/dist/tailwind.mjs.map +1 -0
- package/dist/types.js +59 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +53 -0
- package/dist/types.mjs.map +1 -0
- package/dist/utils.js +30 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.mjs +26 -0
- package/dist/utils.mjs.map +1 -0
- package/frameworks/core/index.ts +6 -0
- package/frameworks/core/utils/index.ts +64 -0
- package/frameworks/react/components/button.tsx +26 -0
- package/frameworks/react/components/index.ts +5 -0
- package/frameworks/react/hooks/index.ts +5 -0
- package/frameworks/react/index.ts +9 -0
- package/frameworks/react/package.json +8 -0
- package/frameworks/react/utils/index.ts +2 -0
- package/frameworks/react-native/index.ts +9 -0
- package/frameworks/react-native/package.json +8 -0
- package/frameworks/registry.json +371 -0
- package/frameworks/setup.sh +69 -0
- package/frameworks/svelte/index.ts +9 -0
- package/frameworks/svelte/package.json +8 -0
- package/frameworks/tracker.json +1854 -0
- package/frameworks/vue/index.ts +9 -0
- package/frameworks/vue/package.json +8 -0
- package/helpers/file.ts +33 -0
- package/helpers/memoization.ts +40 -0
- package/package.json +272 -153
- package/primitives/accordion.tsx +74 -0
- package/primitives/action-button.tsx +42 -0
- package/primitives/alert-dialog.tsx +185 -0
- package/primitives/alert.tsx +74 -0
- package/primitives/apply-typography.tsx +55 -0
- package/primitives/aspect-ratio.tsx +5 -0
- package/primitives/avatar.tsx +57 -0
- package/primitives/background-beams.tsx +142 -0
- package/primitives/badge.tsx +45 -0
- package/primitives/breadcrumb.tsx +130 -0
- package/primitives/breakpoint-indicator.tsx +19 -0
- package/primitives/button.tsx +72 -0
- package/primitives/calendar.tsx +72 -0
- package/primitives/card.tsx +97 -0
- package/primitives/carousel.tsx +238 -0
- package/primitives/chat/chat-input-area.tsx +88 -0
- package/primitives/chat/chat-input.tsx +71 -0
- package/primitives/chat/files-preview.tsx +331 -0
- package/primitives/chat/index.ts +6 -0
- package/primitives/chat/json-form.tsx +8 -0
- package/primitives/chat/message-list.tsx +308 -0
- package/primitives/chat/message.tsx +569 -0
- package/primitives/chat/sqlite-preview.tsx +215 -0
- package/primitives/checkbox.tsx +32 -0
- package/primitives/collapsible.tsx +9 -0
- package/primitives/combobox.tsx +239 -0
- package/primitives/command.tsx +151 -0
- package/primitives/context-menu.tsx +206 -0
- package/primitives/copy-to-clipboard-icon.tsx +60 -0
- package/primitives/dialog-video-controller.tsx +38 -0
- package/primitives/dialog.tsx +128 -0
- package/primitives/dot-pattern.tsx +57 -0
- package/primitives/dots-loader.tsx +13 -0
- package/primitives/drawer.tsx +113 -0
- package/primitives/dropdown-menu.tsx +199 -0
- package/primitives/error-message.tsx +19 -0
- package/primitives/file-uploader.tsx +203 -0
- package/primitives/form.tsx +185 -0
- package/primitives/hover-card.tsx +28 -0
- package/primitives/icons/github.tsx +14 -0
- package/primitives/icons/index.ts +18 -0
- package/primitives/icons/youtube-logo.tsx +59 -0
- package/primitives/index-client.ts +4 -0
- package/primitives/index-common.ts +304 -0
- package/primitives/index-next.ts +4 -0
- package/primitives/input-otp.tsx +65 -0
- package/primitives/input.tsx +128 -0
- package/primitives/label.tsx +21 -0
- package/primitives/list-adaptor.ts +12 -0
- package/primitives/list-box.tsx +74 -0
- package/primitives/loading-spinner.tsx +33 -0
- package/primitives/markdown-preview.tsx +612 -0
- package/primitives/mermaid.tsx +191 -0
- package/primitives/navigation-menu.tsx +147 -0
- package/primitives/next/image.tsx +91 -0
- package/primitives/next/index.ts +7 -0
- package/primitives/next/inline-icon.tsx +36 -0
- package/primitives/next/link-element.tsx +109 -0
- package/primitives/next/mdx-link.tsx +22 -0
- package/primitives/next/media-stack.tsx +52 -0
- package/primitives/next/nav-items.tsx +45 -0
- package/primitives/next/youtube-embed.tsx +83 -0
- package/primitives/pagination.tsx +117 -0
- package/primitives/popover.tsx +34 -0
- package/primitives/pretty-json-print.tsx +28 -0
- package/primitives/progress.tsx +27 -0
- package/primitives/prompt-textarea.tsx +72 -0
- package/primitives/qr-code.tsx +112 -0
- package/primitives/radio-group.tsx +42 -0
- package/primitives/resizable.tsx +47 -0
- package/primitives/scroll-area.tsx +57 -0
- package/primitives/search-input.tsx +66 -0
- package/primitives/select.tsx +122 -0
- package/primitives/separator.tsx +26 -0
- package/primitives/sheet.tsx +139 -0
- package/primitives/skeleton.tsx +18 -0
- package/primitives/slider.tsx +63 -0
- package/primitives/sonner.tsx +35 -0
- package/primitives/step-indicator.tsx +69 -0
- package/primitives/stepper.tsx +272 -0
- package/primitives/switch.tsx +27 -0
- package/primitives/table.tsx +105 -0
- package/primitives/tabs.tsx +50 -0
- package/primitives/text-area.tsx +26 -0
- package/primitives/text-link.tsx +27 -0
- package/primitives/textarea.tsx +64 -0
- package/primitives/textfield.tsx +78 -0
- package/primitives/toast.tsx +30 -0
- package/primitives/toggle-group.tsx +63 -0
- package/primitives/toggle.tsx +44 -0
- package/primitives/tooltip.tsx +47 -0
- package/primitives/video-player.tsx +23 -0
- package/src/button.ts +1 -0
- package/src/hooks/index.ts +7 -0
- package/src/hooks/use-click-away.ts +31 -0
- package/src/hooks/use-combined-refs.ts +22 -0
- package/src/hooks/use-copy-clipboard.ts +30 -0
- package/src/hooks/use-debounce.ts +17 -0
- package/src/hooks/use-fill-ids.ts +25 -0
- package/src/hooks/use-map.ts +26 -0
- package/src/hooks/use-measure.ts +42 -0
- package/src/hooks/use-reverse-video-playback.ts +43 -0
- package/src/hooks/use-scroll-restoration.ts +50 -0
- package/src/index-lean.ts +87 -0
- package/src/index.ts +54 -0
- package/src/mcp/README.md +141 -0
- package/src/mcp/enhanced-server.ts +1208 -0
- package/src/mcp/index.ts +518 -0
- package/src/mcp/package.json +10 -0
- package/src/registry/api.ts +164 -0
- package/src/registry/index.ts +60 -0
- package/src/registry/package.json +10 -0
- package/src/utils.ts +19 -0
- package/style/drawer.css +163 -0
- package/style/globals.css +13 -0
- package/style/hanzo-common.css +31 -0
- package/style/hanzo-default-colors.css +82 -0
- package/style/theme-provider.tsx +20 -0
- package/tailwind/colors.tailwind.js +53 -0
- package/tailwind/fontFamily.tailwind.ts +7 -0
- package/tailwind/fontSize.tailwind.ts +13 -0
- package/tailwind/index.ts +7 -0
- package/tailwind/safelist.tailwind.js +26 -0
- package/tailwind/screens.tailwind.js +8 -0
- package/tailwind/spacing.tailwind.js +65 -0
- package/tailwind/tailwind.config.hanzo-preset.d.ts +5 -0
- package/tailwind/tailwind.config.hanzo-preset.js +915 -0
- package/tailwind/tw-font-desc.ts +15 -0
- package/tailwind/typo-plugin/get-plugin-styles.js +679 -0
- package/tailwind/typo-plugin/index.d.ts +9 -0
- package/tailwind/typo-plugin/index.js +141 -0
- package/tailwind/typo-plugin/utils.js +60 -0
- package/tailwind/typography-test.mdx +35 -0
- package/tailwind/z-index.tailwind.js +71 -0
- package/types/animation-def.ts +3 -0
- package/types/breakpoints.ts +11 -0
- package/types/bullet-item.ts +10 -0
- package/types/button-def.ts +39 -0
- package/types/dimensions.ts +8 -0
- package/types/grid-def.ts +56 -0
- package/types/image-def.ts +32 -0
- package/types/index.ts +30 -0
- package/types/link-def.ts +56 -0
- package/types/media-stack-def.ts +31 -0
- package/types/t-shirt-size.ts +5 -0
- package/types/tshirt-dimensions.ts +20 -0
- package/types/video-def.ts +25 -0
- package/util/blob.ts +33 -0
- package/util/copy-to-clipboard.ts +17 -0
- package/util/create-shadow-root.ts +22 -0
- package/util/date.ts +84 -0
- package/util/debounce.ts +11 -0
- package/util/file.ts +15 -0
- package/util/format-and-abbreviate-as-currency.ts +125 -0
- package/util/format-text.ts +34 -0
- package/util/format-to-max-char.ts +68 -0
- package/util/index-client.ts +3 -0
- package/util/index.ts +112 -0
- package/util/number-abbreviate.ts +49 -0
- package/util/specifier.ts +43 -0
- package/util/spread-to-transform.ts +25 -0
- package/util/step-animation.ts +90 -0
- package/util/timing.ts +3 -0
- package/util/toasts.tsx +17 -0
- package/util/two-way-map.ts +19 -0
- package/CHANGELOG.md +0 -184
- package/LICENSE +0 -21
- package/dist/ai/index.js +0 -53
- package/dist/ai/index.js.map +0 -1
- package/dist/ai/index.mjs +0 -4
- package/dist/ai/index.mjs.map +0 -1
- package/dist/blocks/index.js +0 -983
- package/dist/blocks/index.js.map +0 -1
- package/dist/blocks/index.mjs +0 -945
- package/dist/blocks/index.mjs.map +0 -1
- package/dist/calendar/index.js +0 -14
- package/dist/calendar/index.js.map +0 -1
- package/dist/calendar/index.mjs +0 -5
- package/dist/calendar/index.mjs.map +0 -1
- package/dist/carousel/index.js +0 -220
- package/dist/carousel/index.js.map +0 -1
- package/dist/carousel/index.mjs +0 -191
- package/dist/carousel/index.mjs.map +0 -1
- package/dist/charts/index.js +0 -945
- package/dist/charts/index.js.map +0 -1
- package/dist/charts/index.mjs +0 -901
- package/dist/charts/index.mjs.map +0 -1
- package/dist/chunk-26T4V5QU.mjs +0 -111
- package/dist/chunk-26T4V5QU.mjs.map +0 -1
- package/dist/chunk-2A5KXDLJ.js +0 -22
- package/dist/chunk-2A5KXDLJ.js.map +0 -1
- package/dist/chunk-2CJ4HMF4.js +0 -79
- package/dist/chunk-2CJ4HMF4.js.map +0 -1
- package/dist/chunk-2OIQKC5E.js +0 -236
- package/dist/chunk-2OIQKC5E.js.map +0 -1
- package/dist/chunk-2X3KSYBN.js +0 -44
- package/dist/chunk-2X3KSYBN.js.map +0 -1
- package/dist/chunk-3PBQGYR7.mjs +0 -100
- package/dist/chunk-3PBQGYR7.mjs.map +0 -1
- package/dist/chunk-3POQQ6L7.js +0 -62
- package/dist/chunk-3POQQ6L7.js.map +0 -1
- package/dist/chunk-4B47GITH.mjs +0 -28
- package/dist/chunk-4B47GITH.mjs.map +0 -1
- package/dist/chunk-4BC2OH6B.js +0 -129
- package/dist/chunk-4BC2OH6B.js.map +0 -1
- package/dist/chunk-5AQSGH4R.js +0 -130
- package/dist/chunk-5AQSGH4R.js.map +0 -1
- package/dist/chunk-5IHRJFOO.mjs +0 -102
- package/dist/chunk-5IHRJFOO.mjs.map +0 -1
- package/dist/chunk-5LDGR7YN.mjs +0 -28
- package/dist/chunk-5LDGR7YN.mjs.map +0 -1
- package/dist/chunk-5MCN3VYM.mjs +0 -23
- package/dist/chunk-5MCN3VYM.mjs.map +0 -1
- package/dist/chunk-6AVAMRMB.mjs +0 -47
- package/dist/chunk-6AVAMRMB.mjs.map +0 -1
- package/dist/chunk-6H62JRNM.mjs +0 -120
- package/dist/chunk-6H62JRNM.mjs.map +0 -1
- package/dist/chunk-6KCII3F6.mjs +0 -126
- package/dist/chunk-6KCII3F6.mjs.map +0 -1
- package/dist/chunk-7EHB43BJ.js +0 -155
- package/dist/chunk-7EHB43BJ.js.map +0 -1
- package/dist/chunk-7LRD23Q5.js +0 -191
- package/dist/chunk-7LRD23Q5.js.map +0 -1
- package/dist/chunk-7SAHKOJG.mjs +0 -45
- package/dist/chunk-7SAHKOJG.mjs.map +0 -1
- package/dist/chunk-A3D2YZK3.js +0 -50
- package/dist/chunk-A3D2YZK3.js.map +0 -1
- package/dist/chunk-AL4QFH7V.js +0 -63
- package/dist/chunk-AL4QFH7V.js.map +0 -1
- package/dist/chunk-B3WFEG6U.js +0 -69
- package/dist/chunk-B3WFEG6U.js.map +0 -1
- package/dist/chunk-BDZQJ6GK.js +0 -242
- package/dist/chunk-BDZQJ6GK.js.map +0 -1
- package/dist/chunk-BRWFYRGX.js +0 -61
- package/dist/chunk-BRWFYRGX.js.map +0 -1
- package/dist/chunk-C5DNTLBO.js +0 -53
- package/dist/chunk-C5DNTLBO.js.map +0 -1
- package/dist/chunk-CRALRACO.js +0 -54
- package/dist/chunk-CRALRACO.js.map +0 -1
- package/dist/chunk-CVACQJRM.js +0 -149
- package/dist/chunk-CVACQJRM.js.map +0 -1
- package/dist/chunk-DEIUKFPZ.mjs +0 -63
- package/dist/chunk-DEIUKFPZ.mjs.map +0 -1
- package/dist/chunk-DN2AEEA2.js +0 -13
- package/dist/chunk-DN2AEEA2.js.map +0 -1
- package/dist/chunk-DTNRWU4B.mjs +0 -35
- package/dist/chunk-DTNRWU4B.mjs.map +0 -1
- package/dist/chunk-DXIUEWRJ.mjs +0 -31
- package/dist/chunk-DXIUEWRJ.mjs.map +0 -1
- package/dist/chunk-DYFV66JX.mjs +0 -54
- package/dist/chunk-DYFV66JX.mjs.map +0 -1
- package/dist/chunk-F3WMAHXV.mjs +0 -86
- package/dist/chunk-F3WMAHXV.mjs.map +0 -1
- package/dist/chunk-F4RWPBBB.js +0 -79
- package/dist/chunk-F4RWPBBB.js.map +0 -1
- package/dist/chunk-FEGAPM6U.js +0 -194
- package/dist/chunk-FEGAPM6U.js.map +0 -1
- package/dist/chunk-G5TS56PW.mjs +0 -160
- package/dist/chunk-G5TS56PW.mjs.map +0 -1
- package/dist/chunk-GG6VGOEN.mjs +0 -590
- package/dist/chunk-GG6VGOEN.mjs.map +0 -1
- package/dist/chunk-GLAMGK32.mjs +0 -54
- package/dist/chunk-GLAMGK32.mjs.map +0 -1
- package/dist/chunk-GNMMUJXD.mjs +0 -200
- package/dist/chunk-GNMMUJXD.mjs.map +0 -1
- package/dist/chunk-GNPBULLS.mjs +0 -600
- package/dist/chunk-GNPBULLS.mjs.map +0 -1
- package/dist/chunk-GTE2DELE.js +0 -65
- package/dist/chunk-GTE2DELE.js.map +0 -1
- package/dist/chunk-GUQAFFTH.js +0 -94
- package/dist/chunk-GUQAFFTH.js.map +0 -1
- package/dist/chunk-H5VOYZHT.mjs +0 -34
- package/dist/chunk-H5VOYZHT.mjs.map +0 -1
- package/dist/chunk-HR6PBOGG.mjs +0 -59
- package/dist/chunk-HR6PBOGG.mjs.map +0 -1
- package/dist/chunk-HROONQS3.js +0 -55
- package/dist/chunk-HROONQS3.js.map +0 -1
- package/dist/chunk-IAO7SOQ3.mjs +0 -56
- package/dist/chunk-IAO7SOQ3.mjs.map +0 -1
- package/dist/chunk-K2QKU3K6.mjs +0 -40
- package/dist/chunk-K2QKU3K6.mjs.map +0 -1
- package/dist/chunk-KEUZZCCP.js +0 -53
- package/dist/chunk-KEUZZCCP.js.map +0 -1
- package/dist/chunk-KJXSLTG7.mjs +0 -73
- package/dist/chunk-KJXSLTG7.mjs.map +0 -1
- package/dist/chunk-L5AFUCVH.mjs +0 -26
- package/dist/chunk-L5AFUCVH.mjs.map +0 -1
- package/dist/chunk-LB3I52KZ.mjs +0 -42
- package/dist/chunk-LB3I52KZ.mjs.map +0 -1
- package/dist/chunk-LN75MJQ2.js +0 -71
- package/dist/chunk-LN75MJQ2.js.map +0 -1
- package/dist/chunk-LRBOFJUV.js +0 -60
- package/dist/chunk-LRBOFJUV.js.map +0 -1
- package/dist/chunk-MMNYRBOU.js +0 -157
- package/dist/chunk-MMNYRBOU.js.map +0 -1
- package/dist/chunk-MO65YF6P.js +0 -236
- package/dist/chunk-MO65YF6P.js.map +0 -1
- package/dist/chunk-N4KHP5FC.mjs +0 -33
- package/dist/chunk-N4KHP5FC.mjs.map +0 -1
- package/dist/chunk-NP2J7AB7.mjs +0 -121
- package/dist/chunk-NP2J7AB7.mjs.map +0 -1
- package/dist/chunk-OLR6SGYO.js +0 -57
- package/dist/chunk-OLR6SGYO.js.map +0 -1
- package/dist/chunk-ON7NQ4DY.js +0 -21
- package/dist/chunk-ON7NQ4DY.js.map +0 -1
- package/dist/chunk-PE3VFRLV.mjs +0 -198
- package/dist/chunk-PE3VFRLV.mjs.map +0 -1
- package/dist/chunk-Q7LOOIE5.mjs +0 -8
- package/dist/chunk-Q7LOOIE5.mjs.map +0 -1
- package/dist/chunk-QFA6U75G.mjs +0 -51
- package/dist/chunk-QFA6U75G.mjs.map +0 -1
- package/dist/chunk-QJQPT4WX.js +0 -638
- package/dist/chunk-QJQPT4WX.js.map +0 -1
- package/dist/chunk-QKHQPBSR.mjs +0 -20
- package/dist/chunk-QKHQPBSR.mjs.map +0 -1
- package/dist/chunk-SJD4XRFJ.mjs +0 -141
- package/dist/chunk-SJD4XRFJ.mjs.map +0 -1
- package/dist/chunk-SOOJLU4C.mjs +0 -19
- package/dist/chunk-SOOJLU4C.mjs.map +0 -1
- package/dist/chunk-T66B5IM5.js +0 -51
- package/dist/chunk-T66B5IM5.js.map +0 -1
- package/dist/chunk-T7RPZDO4.js +0 -645
- package/dist/chunk-T7RPZDO4.js.map +0 -1
- package/dist/chunk-TGRMDGTV.mjs +0 -38
- package/dist/chunk-TGRMDGTV.mjs.map +0 -1
- package/dist/chunk-TH2UKMCO.mjs +0 -11
- package/dist/chunk-TH2UKMCO.mjs.map +0 -1
- package/dist/chunk-TMV45OKE.mjs +0 -113
- package/dist/chunk-TMV45OKE.mjs.map +0 -1
- package/dist/chunk-TUJ7EVEK.js +0 -171
- package/dist/chunk-TUJ7EVEK.js.map +0 -1
- package/dist/chunk-ULNWDOI7.js +0 -122
- package/dist/chunk-ULNWDOI7.js.map +0 -1
- package/dist/chunk-UNUTTHCH.mjs +0 -210
- package/dist/chunk-UNUTTHCH.mjs.map +0 -1
- package/dist/chunk-VJMI6BG4.mjs +0 -10
- package/dist/chunk-VJMI6BG4.mjs.map +0 -1
- package/dist/chunk-VZVOB5MG.mjs +0 -26
- package/dist/chunk-VZVOB5MG.mjs.map +0 -1
- package/dist/chunk-WD67O22C.js +0 -50
- package/dist/chunk-WD67O22C.js.map +0 -1
- package/dist/chunk-WYPMLIJN.js +0 -53
- package/dist/chunk-WYPMLIJN.js.map +0 -1
- package/dist/chunk-X32I34NH.js +0 -109
- package/dist/chunk-X32I34NH.js.map +0 -1
- package/dist/chunk-X5MOZ3YL.js +0 -65
- package/dist/chunk-X5MOZ3YL.js.map +0 -1
- package/dist/chunk-Y4JVIPQZ.mjs +0 -31
- package/dist/chunk-Y4JVIPQZ.mjs.map +0 -1
- package/dist/chunk-Y6WOV2LZ.js +0 -95
- package/dist/chunk-Y6WOV2LZ.js.map +0 -1
- package/dist/chunk-YAEN5SCU.mjs +0 -41
- package/dist/chunk-YAEN5SCU.mjs.map +0 -1
- package/dist/chunk-YH6XDF3N.js +0 -121
- package/dist/chunk-YH6XDF3N.js.map +0 -1
- package/dist/chunk-YJKA4D75.mjs +0 -124
- package/dist/chunk-YJKA4D75.mjs.map +0 -1
- package/dist/chunk-ZANAF7WB.js +0 -88
- package/dist/chunk-ZANAF7WB.js.map +0 -1
- package/dist/chunk-ZDBWNPLO.js +0 -30
- package/dist/chunk-ZDBWNPLO.js.map +0 -1
- package/dist/chunk-ZDT2IOK2.js +0 -56
- package/dist/chunk-ZDT2IOK2.js.map +0 -1
- package/dist/chunk-ZKGVLTSI.js +0 -25
- package/dist/chunk-ZKGVLTSI.js.map +0 -1
- package/dist/chunk-ZLELESO7.js +0 -34
- package/dist/chunk-ZLELESO7.js.map +0 -1
- package/dist/chunk-ZUFUEQTX.mjs +0 -157
- package/dist/chunk-ZUFUEQTX.mjs.map +0 -1
- package/dist/chunk-ZZZWRQQE.mjs +0 -42
- package/dist/chunk-ZZZWRQQE.mjs.map +0 -1
- package/dist/command/index.js +0 -138
- package/dist/command/index.js.map +0 -1
- package/dist/command/index.mjs +0 -128
- package/dist/command/index.mjs.map +0 -1
- package/dist/components/accordion.js +0 -25
- package/dist/components/accordion.js.map +0 -1
- package/dist/components/accordion.mjs +0 -4
- package/dist/components/accordion.mjs.map +0 -1
- package/dist/components/alert.js +0 -21
- package/dist/components/alert.js.map +0 -1
- package/dist/components/alert.mjs +0 -4
- package/dist/components/alert.mjs.map +0 -1
- package/dist/components/aspect-ratio.js +0 -12
- package/dist/components/aspect-ratio.js.map +0 -1
- package/dist/components/aspect-ratio.mjs +0 -3
- package/dist/components/aspect-ratio.mjs.map +0 -1
- package/dist/components/avatar.js +0 -21
- package/dist/components/avatar.js.map +0 -1
- package/dist/components/avatar.mjs +0 -4
- package/dist/components/avatar.mjs.map +0 -1
- package/dist/components/badge.js +0 -17
- package/dist/components/badge.js.map +0 -1
- package/dist/components/badge.mjs +0 -4
- package/dist/components/badge.mjs.map +0 -1
- package/dist/components/breadcrumb.js +0 -37
- package/dist/components/breadcrumb.js.map +0 -1
- package/dist/components/breadcrumb.mjs +0 -4
- package/dist/components/breadcrumb.mjs.map +0 -1
- package/dist/components/button.js +0 -17
- package/dist/components/button.js.map +0 -1
- package/dist/components/button.mjs +0 -4
- package/dist/components/button.mjs.map +0 -1
- package/dist/components/card.js +0 -37
- package/dist/components/card.js.map +0 -1
- package/dist/components/card.mjs +0 -4
- package/dist/components/card.mjs.map +0 -1
- package/dist/components/checkbox.js +0 -13
- package/dist/components/checkbox.js.map +0 -1
- package/dist/components/checkbox.mjs +0 -4
- package/dist/components/checkbox.mjs.map +0 -1
- package/dist/components/collapsible.js +0 -20
- package/dist/components/collapsible.js.map +0 -1
- package/dist/components/collapsible.mjs +0 -3
- package/dist/components/collapsible.mjs.map +0 -1
- package/dist/components/context-menu.js +0 -69
- package/dist/components/context-menu.js.map +0 -1
- package/dist/components/context-menu.mjs +0 -4
- package/dist/components/context-menu.mjs.map +0 -1
- package/dist/components/dialog.js +0 -49
- package/dist/components/dialog.js.map +0 -1
- package/dist/components/dialog.mjs +0 -4
- package/dist/components/dialog.mjs.map +0 -1
- package/dist/components/drawer.js +0 -49
- package/dist/components/drawer.js.map +0 -1
- package/dist/components/drawer.mjs +0 -4
- package/dist/components/drawer.mjs.map +0 -1
- package/dist/components/dropdown-menu.js +0 -69
- package/dist/components/dropdown-menu.js.map +0 -1
- package/dist/components/dropdown-menu.mjs +0 -4
- package/dist/components/dropdown-menu.mjs.map +0 -1
- package/dist/components/form.js +0 -42
- package/dist/components/form.js.map +0 -1
- package/dist/components/form.mjs +0 -5
- package/dist/components/form.mjs.map +0 -1
- package/dist/components/hover-card.js +0 -21
- package/dist/components/hover-card.js.map +0 -1
- package/dist/components/hover-card.mjs +0 -4
- package/dist/components/hover-card.mjs.map +0 -1
- package/dist/components/index.js +0 -1047
- package/dist/components/index.js.map +0 -1
- package/dist/components/index.mjs +0 -46
- package/dist/components/index.mjs.map +0 -1
- package/dist/components/input-otp.js +0 -25
- package/dist/components/input-otp.js.map +0 -1
- package/dist/components/input-otp.mjs +0 -4
- package/dist/components/input-otp.mjs.map +0 -1
- package/dist/components/input.js +0 -13
- package/dist/components/input.js.map +0 -1
- package/dist/components/input.mjs +0 -4
- package/dist/components/input.mjs.map +0 -1
- package/dist/components/label.js +0 -13
- package/dist/components/label.js.map +0 -1
- package/dist/components/label.mjs +0 -4
- package/dist/components/label.mjs.map +0 -1
- package/dist/components/menubar.js +0 -73
- package/dist/components/menubar.js.map +0 -1
- package/dist/components/menubar.mjs +0 -4
- package/dist/components/menubar.mjs.map +0 -1
- package/dist/components/navigation-menu.js +0 -45
- package/dist/components/navigation-menu.js.map +0 -1
- package/dist/components/navigation-menu.mjs +0 -4
- package/dist/components/navigation-menu.mjs.map +0 -1
- package/dist/components/pagination.js +0 -38
- package/dist/components/pagination.js.map +0 -1
- package/dist/components/pagination.mjs +0 -5
- package/dist/components/pagination.mjs.map +0 -1
- package/dist/components/popover.js +0 -25
- package/dist/components/popover.js.map +0 -1
- package/dist/components/popover.mjs +0 -4
- package/dist/components/popover.mjs.map +0 -1
- package/dist/components/progress.js +0 -13
- package/dist/components/progress.js.map +0 -1
- package/dist/components/progress.mjs +0 -4
- package/dist/components/progress.mjs.map +0 -1
- package/dist/components/radio-group.js +0 -17
- package/dist/components/radio-group.js.map +0 -1
- package/dist/components/radio-group.mjs +0 -4
- package/dist/components/radio-group.mjs.map +0 -1
- package/dist/components/resizable.js +0 -21
- package/dist/components/resizable.js.map +0 -1
- package/dist/components/resizable.mjs +0 -4
- package/dist/components/resizable.mjs.map +0 -1
- package/dist/components/scroll-area.js +0 -17
- package/dist/components/scroll-area.js.map +0 -1
- package/dist/components/scroll-area.mjs +0 -4
- package/dist/components/scroll-area.mjs.map +0 -1
- package/dist/components/select.js +0 -49
- package/dist/components/select.js.map +0 -1
- package/dist/components/select.mjs +0 -4
- package/dist/components/select.mjs.map +0 -1
- package/dist/components/separator.js +0 -13
- package/dist/components/separator.js.map +0 -1
- package/dist/components/separator.mjs +0 -4
- package/dist/components/separator.mjs.map +0 -1
- package/dist/components/sheet.js +0 -49
- package/dist/components/sheet.js.map +0 -1
- package/dist/components/sheet.mjs +0 -4
- package/dist/components/sheet.mjs.map +0 -1
- package/dist/components/sidebar.js +0 -111
- package/dist/components/sidebar.js.map +0 -1
- package/dist/components/sidebar.mjs +0 -10
- package/dist/components/sidebar.mjs.map +0 -1
- package/dist/components/skeleton.js +0 -13
- package/dist/components/skeleton.js.map +0 -1
- package/dist/components/skeleton.mjs +0 -4
- package/dist/components/skeleton.mjs.map +0 -1
- package/dist/components/slider.js +0 -13
- package/dist/components/slider.js.map +0 -1
- package/dist/components/slider.mjs +0 -4
- package/dist/components/slider.mjs.map +0 -1
- package/dist/components/switch.js +0 -13
- package/dist/components/switch.js.map +0 -1
- package/dist/components/switch.mjs +0 -4
- package/dist/components/switch.mjs.map +0 -1
- package/dist/components/table.js +0 -41
- package/dist/components/table.js.map +0 -1
- package/dist/components/table.mjs +0 -4
- package/dist/components/table.mjs.map +0 -1
- package/dist/components/tabs.js +0 -25
- package/dist/components/tabs.js.map +0 -1
- package/dist/components/tabs.mjs +0 -4
- package/dist/components/tabs.mjs.map +0 -1
- package/dist/components/textarea.js +0 -13
- package/dist/components/textarea.js.map +0 -1
- package/dist/components/textarea.mjs +0 -4
- package/dist/components/textarea.mjs.map +0 -1
- package/dist/components/toast.js +0 -37
- package/dist/components/toast.js.map +0 -1
- package/dist/components/toast.mjs +0 -4
- package/dist/components/toast.mjs.map +0 -1
- package/dist/components/toggle-group.js +0 -18
- package/dist/components/toggle-group.js.map +0 -1
- package/dist/components/toggle-group.mjs +0 -5
- package/dist/components/toggle-group.mjs.map +0 -1
- package/dist/components/toggle.js +0 -17
- package/dist/components/toggle.js.map +0 -1
- package/dist/components/toggle.mjs +0 -4
- package/dist/components/toggle.mjs.map +0 -1
- package/dist/components/tooltip.js +0 -25
- package/dist/components/tooltip.js.map +0 -1
- package/dist/components/tooltip.mjs +0 -4
- package/dist/components/tooltip.mjs.map +0 -1
- package/dist/effects/index.js +0 -162
- package/dist/effects/index.js.map +0 -1
- package/dist/effects/index.mjs +0 -156
- package/dist/effects/index.mjs.map +0 -1
- package/dist/lib/utils.js +0 -12
- package/dist/lib/utils.js.map +0 -1
- package/dist/lib/utils.mjs +0 -3
- package/dist/lib/utils.mjs.map +0 -1
- package/dist/markdown/index.js +0 -669
- package/dist/markdown/index.js.map +0 -1
- package/dist/markdown/index.mjs +0 -635
- package/dist/markdown/index.mjs.map +0 -1
- package/dist/qr/index.js +0 -101
- package/dist/qr/index.js.map +0 -1
- package/dist/qr/index.mjs +0 -98
- package/dist/qr/index.mjs.map +0 -1
- package/dist/upload/index.js +0 -166
- package/dist/upload/index.js.map +0 -1
- package/dist/upload/index.mjs +0 -163
- package/dist/upload/index.mjs.map +0 -1
- package/publish.sh +0 -27
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type Block from './block'
|
|
2
|
+
|
|
3
|
+
import type { BulletItem, GridDef } from '../../types'
|
|
4
|
+
|
|
5
|
+
interface BulletCardsBlock extends Block {
|
|
6
|
+
blockType: 'bullet-cards'
|
|
7
|
+
/**
|
|
8
|
+
* no-card-border
|
|
9
|
+
* mobile-small-text
|
|
10
|
+
* borders-muted-1 / borders-muted-3
|
|
11
|
+
* default: 2
|
|
12
|
+
*/
|
|
13
|
+
specifiers?: string
|
|
14
|
+
grid: GridDef
|
|
15
|
+
cards: BulletItem[]
|
|
16
|
+
/** in px */
|
|
17
|
+
iconSize?: number
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export {
|
|
21
|
+
type BulletCardsBlock as default
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
|
|
3
|
+
import type CTABlock from './cta-block'
|
|
4
|
+
import type Block from './block'
|
|
5
|
+
import type ImageBlock from './image-block'
|
|
6
|
+
import type VideoBlock from './video-block'
|
|
7
|
+
|
|
8
|
+
interface CardBlock extends Block {
|
|
9
|
+
blockType: 'card'
|
|
10
|
+
specifiers?: string // 'media-left' or 'appear-disabled' or 'no-borders', etc... can be combined
|
|
11
|
+
title?: string
|
|
12
|
+
byline?: string
|
|
13
|
+
icon?: React.ReactNode // for title area
|
|
14
|
+
iconAfter?: boolean
|
|
15
|
+
media?: ImageBlock | VideoBlock // TODO: Media Stack
|
|
16
|
+
content?: React.ReactNode
|
|
17
|
+
cta?: CTABlock
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export {
|
|
21
|
+
type CardBlock as default
|
|
22
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
import type Block from './block'
|
|
3
|
+
import type CTABlock from './cta-block'
|
|
4
|
+
import type EnhHeadingBlock from './enh-heading-block'
|
|
5
|
+
|
|
6
|
+
interface CarteBlancheBlock extends Block {
|
|
7
|
+
blockType: 'carte-blanche'
|
|
8
|
+
// big-padding
|
|
9
|
+
// no-outer-borders
|
|
10
|
+
// no-internal-borders
|
|
11
|
+
// style-ghost (no-internal-borders, no outer border, no padding)
|
|
12
|
+
specifiers?: string
|
|
13
|
+
topContent?: Block[]
|
|
14
|
+
heading?: EnhHeadingBlock
|
|
15
|
+
content?: Block[]
|
|
16
|
+
cta?: CTABlock
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
type CarteBlancheBlock as default
|
|
21
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { LinkDef, ButtonDef } from '../../types'
|
|
2
|
+
import type Block from './block'
|
|
3
|
+
|
|
4
|
+
interface CTABlock extends Block {
|
|
5
|
+
blockType: 'cta'
|
|
6
|
+
// fill: fills the parent width with the elements
|
|
7
|
+
// left / right: (>= md) left or right justify the elements (default is center)
|
|
8
|
+
// mobile-2-columns: mobile defaults to rendering each element full width,
|
|
9
|
+
// on it's own line. This renders them in two columns instead.
|
|
10
|
+
// mobile-center-first-if-odd: if (mobile-2-columns) and length is odd,
|
|
11
|
+
// default is to center last
|
|
12
|
+
// mobile-odd-full-width: fills the full two columns w the centered element
|
|
13
|
+
specifiers?: string
|
|
14
|
+
elements: (LinkDef | ButtonDef)[]
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export {
|
|
18
|
+
type CTABlock as default
|
|
19
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type Block from './block'
|
|
2
|
+
|
|
3
|
+
// level is heading tag level. 1 renders as <h1>, etc... 0 renders as <p>
|
|
4
|
+
//
|
|
5
|
+
// mb: is bottom margin in tw units. 'mb-1' produces 0.25rem, so a value of 4 would produce 1rem
|
|
6
|
+
// These are dynamically generated from a template string. mb-1 --> mb-12 have been safelisted.
|
|
7
|
+
// Any higher values used would have to explicitly safelisted in tailwind config.
|
|
8
|
+
// The margin will only be applied if the next element down is present.
|
|
9
|
+
// (eg, heading mb applies only if there is a byline.)
|
|
10
|
+
|
|
11
|
+
interface EnhHeadingBlock extends Block {
|
|
12
|
+
blockType: 'enh-heading'
|
|
13
|
+
// tbd: icon-w-heading (if preheading is present),
|
|
14
|
+
// tbd: icon-w-byline (if preheading and heading is present),
|
|
15
|
+
// tbd: icon-above: above first element
|
|
16
|
+
// tbd: icon-to-right: to right of corresponding element or right justified if 'icon-above'
|
|
17
|
+
// mobile-heading-centered
|
|
18
|
+
// left / right / center for preheading and heading (byline stays left)
|
|
19
|
+
// byline-left / byline-right / byline-center
|
|
20
|
+
// preheading-heading-font
|
|
21
|
+
specifiers?: string
|
|
22
|
+
// By default, appears inline to left of first element (preheading or heading)
|
|
23
|
+
// unless indicated otherwise in specifiers
|
|
24
|
+
icon?: React.ReactNode // ReactNode or url string to asset
|
|
25
|
+
iconSize?: number // if url string, this sets the size
|
|
26
|
+
preheading?: {
|
|
27
|
+
text: string
|
|
28
|
+
level?: number // default: 4
|
|
29
|
+
mb?: number // default: 2
|
|
30
|
+
}
|
|
31
|
+
heading: {
|
|
32
|
+
text: string
|
|
33
|
+
level?: number // default: 1
|
|
34
|
+
mb?: number // default: 2
|
|
35
|
+
}
|
|
36
|
+
byline?: {
|
|
37
|
+
text: string
|
|
38
|
+
level?: number // default: 6
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export {
|
|
43
|
+
type EnhHeadingBlock as default
|
|
44
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type Block from "./block"
|
|
2
|
+
import type GridDef from "../../types/grid-def"
|
|
3
|
+
|
|
4
|
+
interface GridBlock {
|
|
5
|
+
blockType: 'grid'
|
|
6
|
+
specifiers?: string
|
|
7
|
+
grid: GridDef
|
|
8
|
+
/**
|
|
9
|
+
* Ignored if children are supplied to the GridBlockComp
|
|
10
|
+
*/
|
|
11
|
+
cells?: Block[]
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
type GridBlock as default
|
|
16
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type Block from './block'
|
|
2
|
+
|
|
3
|
+
interface HeadingBlock extends Block {
|
|
4
|
+
blockType: 'heading'
|
|
5
|
+
heading: string
|
|
6
|
+
byline?: string
|
|
7
|
+
level?: number
|
|
8
|
+
bylineLevel?: number
|
|
9
|
+
spaceBetween?: number
|
|
10
|
+
spaceAfter?: number
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export {
|
|
14
|
+
type HeadingBlock as default
|
|
15
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ImageDef } from '../../types'
|
|
2
|
+
import type Block from './block'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* See {@link ImageDef}
|
|
6
|
+
* see https://nextjs.org/docs/app/api-reference/components/image
|
|
7
|
+
* as well as React.ImgHTMLAttributes.
|
|
8
|
+
*/
|
|
9
|
+
interface ImageBlock extends Block, ImageDef {
|
|
10
|
+
blockType: 'image'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Alignement: 'left' (default) / 'right' / 'center' (must be in flex-col parent)
|
|
14
|
+
* 'mobile-no-scale': By default, scales to 3/4 height (mobile and w < 'md')
|
|
15
|
+
* 'mobile-full-width': Overrides dim, etc. and renders full width (maintaining aspect ratio)
|
|
16
|
+
*/
|
|
17
|
+
specifiers?: string
|
|
18
|
+
/** @deprecated Please use 'mobile-full-width' in specifiers */
|
|
19
|
+
fullWidthOnMobile?: boolean
|
|
20
|
+
/** Next props */
|
|
21
|
+
props?: {
|
|
22
|
+
sizes?: string
|
|
23
|
+
/** if true, any alignement specifiers are ignored */
|
|
24
|
+
fill?: boolean
|
|
25
|
+
style?: any
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export {
|
|
30
|
+
type ImageBlock as default,
|
|
31
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type AccordianBlock from './accordian-block'
|
|
2
|
+
import type Block from './block'
|
|
3
|
+
import type BulletCardsBlock from './bullet-cards-block'
|
|
4
|
+
import type CardBlock from './card-block'
|
|
5
|
+
import type CarteBlancheBlock from './carte-blanche-block'
|
|
6
|
+
import type CTABlock from './cta-block'
|
|
7
|
+
import type ElementBlock from './element-block'
|
|
8
|
+
import type GridBlock from './grid-block'
|
|
9
|
+
import type GroupBlock from './group-block'
|
|
10
|
+
import type EnhHeadingBlock from './enh-heading-block'
|
|
11
|
+
import type HeadingBlock from './heading-block'
|
|
12
|
+
import type ImageBlock from './image-block'
|
|
13
|
+
import type VideoBlock from './video-block'
|
|
14
|
+
import type SpaceBlock from './space-block'
|
|
15
|
+
import { SPACE_DEFAULTS } from './space-block'
|
|
16
|
+
import type ScreenfulBlock from './screenful-block'
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
type AccordianBlock,
|
|
20
|
+
type Block,
|
|
21
|
+
type BulletCardsBlock,
|
|
22
|
+
type CardBlock,
|
|
23
|
+
type CarteBlancheBlock,
|
|
24
|
+
type CTABlock,
|
|
25
|
+
type ElementBlock,
|
|
26
|
+
type GridBlock,
|
|
27
|
+
type GroupBlock,
|
|
28
|
+
type HeadingBlock,
|
|
29
|
+
type EnhHeadingBlock,
|
|
30
|
+
type ImageBlock,
|
|
31
|
+
type VideoBlock,
|
|
32
|
+
type SpaceBlock,
|
|
33
|
+
type ScreenfulBlock,
|
|
34
|
+
SPACE_DEFAULTS
|
|
35
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ReactNode } from 'react'
|
|
2
|
+
|
|
3
|
+
import type Block from './block'
|
|
4
|
+
import type VideoBlock from './video-block'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A common screenful of content
|
|
8
|
+
* An optional banner image or video
|
|
9
|
+
* Content can be in columns
|
|
10
|
+
*/
|
|
11
|
+
interface ScreenfulBlock extends Block {
|
|
12
|
+
blockType: 'screenful'
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Either an image URL, or a Video Block
|
|
17
|
+
*
|
|
18
|
+
* If VideoBlock, then it's poster will be rendered server-side
|
|
19
|
+
* and the <video> component will be lazy-loaded client-side.
|
|
20
|
+
*
|
|
21
|
+
* If in a scrolling situation, the video will autoplay when 75% in view
|
|
22
|
+
*/
|
|
23
|
+
banner?: string | VideoBlock // TODO: should be VideoDef
|
|
24
|
+
|
|
25
|
+
/** Specifies rendering and layout hints and variants for block as a whole */
|
|
26
|
+
specifiers?: string
|
|
27
|
+
|
|
28
|
+
/** Specifies rendering and layout hints and variants for corresponding column */
|
|
29
|
+
columnSpecifiers?: string[]
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Mobile: The order in the single column mobile layout in which the columns appear.
|
|
33
|
+
* Overrides column order.
|
|
34
|
+
* eg, if you want the second tile of three at the top: [1, 0, 2]
|
|
35
|
+
*/
|
|
36
|
+
mobileOrder?: number[]
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Content Blocks for 1-3 columns.
|
|
40
|
+
* (More than that is allowed, but impractical at many resolutions!)
|
|
41
|
+
* If > 1, it will be enclosed in a 'grid grid-cols-<x>' div.
|
|
42
|
+
*/
|
|
43
|
+
contentColumns: Block[][]
|
|
44
|
+
|
|
45
|
+
/** optional footer element below the grid */
|
|
46
|
+
footer?: ReactNode
|
|
47
|
+
|
|
48
|
+
/** optional id for linking to this slide / screenful */
|
|
49
|
+
anchorId?: string
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export {
|
|
53
|
+
type ScreenfulBlock as default
|
|
54
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { Breakpoint } from '../../types'
|
|
2
|
+
|
|
3
|
+
import type Block from './block'
|
|
4
|
+
|
|
5
|
+
type TWSpaceUnit = number // TODO, pull from tw conf
|
|
6
|
+
type HeadingLevel = 0 | 1 | 2 | 3 | 4 | 5 | 6
|
|
7
|
+
|
|
8
|
+
const SPACE_DEFAULTS = {
|
|
9
|
+
xs: 2,
|
|
10
|
+
sm: 4,
|
|
11
|
+
md: 5,
|
|
12
|
+
lg: 6,
|
|
13
|
+
xl: 8
|
|
14
|
+
} satisfies {
|
|
15
|
+
[key in (Breakpoint)]?: TWSpaceUnit
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
interface SpaceBlock extends Block {
|
|
20
|
+
blockType: 'space'
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* TW units of vertical space, applied at Breakpoints
|
|
24
|
+
* or
|
|
25
|
+
* if just a number, that number at all Breakpoints
|
|
26
|
+
*
|
|
27
|
+
* default {
|
|
28
|
+
* xs: 2,
|
|
29
|
+
* sm: 4,
|
|
30
|
+
* md: 5,
|
|
31
|
+
* lg: 6,
|
|
32
|
+
* xl: 8
|
|
33
|
+
* }
|
|
34
|
+
*
|
|
35
|
+
* Any provided values will be merge w the defaults
|
|
36
|
+
* And applied as if they were tw classes in ascending
|
|
37
|
+
* order.
|
|
38
|
+
*
|
|
39
|
+
* impl: <div className='invisible w-[1px] xs:h-<xsval> sm:h-<smval> etc...' />
|
|
40
|
+
*/
|
|
41
|
+
sizes?: {
|
|
42
|
+
[key in (Breakpoint)]?: TWSpaceUnit
|
|
43
|
+
} | TWSpaceUnit
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Heading levels. Gives the vertical space that the corresponding
|
|
47
|
+
* h tag would give.
|
|
48
|
+
* default: 3 (height of <h3>)
|
|
49
|
+
* 0 = 1rem (plus any gaps),
|
|
50
|
+
* For example, 1 = <h1 style={visibility: hidden}> </h1>
|
|
51
|
+
* As <ApplyTypography> would render it, plus any gap.
|
|
52
|
+
*/
|
|
53
|
+
level?: HeadingLevel
|
|
54
|
+
|
|
55
|
+
test?: boolean
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export {
|
|
60
|
+
type SpaceBlock as default,
|
|
61
|
+
type TWSpaceUnit,
|
|
62
|
+
type HeadingLevel,
|
|
63
|
+
SPACE_DEFAULTS
|
|
64
|
+
}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { cn } from '@hanzo/ui/util'
|
|
4
|
+
import { Button } from '@hanzo/ui/primitives'
|
|
5
|
+
import { Input } from '@hanzo/ui/primitives'
|
|
6
|
+
import { Label } from '@hanzo/ui/primitives'
|
|
7
|
+
import { RadioGroup, RadioGroupItem } from '@hanzo/ui/primitives'
|
|
8
|
+
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@hanzo/ui/primitives'
|
|
9
|
+
import { Separator } from '@hanzo/ui/primitives'
|
|
10
|
+
import { Checkbox } from '@hanzo/ui/primitives'
|
|
11
|
+
|
|
12
|
+
interface CheckoutProps extends React.ComponentPropsWithoutRef<'div'> {
|
|
13
|
+
orderSummary: {
|
|
14
|
+
items: Array<{
|
|
15
|
+
name: string
|
|
16
|
+
quantity: number
|
|
17
|
+
price: number
|
|
18
|
+
}>
|
|
19
|
+
subtotal: number
|
|
20
|
+
shipping: number
|
|
21
|
+
tax: number
|
|
22
|
+
total: number
|
|
23
|
+
currency?: string
|
|
24
|
+
}
|
|
25
|
+
onSubmit?: (data: any) => void
|
|
26
|
+
onBack?: () => void
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function Checkout({
|
|
30
|
+
className,
|
|
31
|
+
orderSummary,
|
|
32
|
+
onSubmit,
|
|
33
|
+
onBack,
|
|
34
|
+
...props
|
|
35
|
+
}: CheckoutProps) {
|
|
36
|
+
const formatPrice = (price: number, currency = '$') => {
|
|
37
|
+
return `${currency}${price.toFixed(2)}`
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
|
|
41
|
+
e.preventDefault()
|
|
42
|
+
const formData = new FormData(e.currentTarget)
|
|
43
|
+
const data = Object.fromEntries(formData.entries())
|
|
44
|
+
onSubmit?.(data)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<div className={cn('container py-8', className)} {...props}>
|
|
49
|
+
<form onSubmit={handleSubmit} className="grid gap-8 lg:grid-cols-3">
|
|
50
|
+
<div className="lg:col-span-2 space-y-6">
|
|
51
|
+
{/* Shipping Information */}
|
|
52
|
+
<Card>
|
|
53
|
+
<CardHeader>
|
|
54
|
+
<CardTitle>Shipping Information</CardTitle>
|
|
55
|
+
<CardDescription>
|
|
56
|
+
Enter your shipping address details
|
|
57
|
+
</CardDescription>
|
|
58
|
+
</CardHeader>
|
|
59
|
+
<CardContent className="grid gap-4">
|
|
60
|
+
<div className="grid gap-4 sm:grid-cols-2">
|
|
61
|
+
<div className="grid gap-2">
|
|
62
|
+
<Label htmlFor="firstName">First Name</Label>
|
|
63
|
+
<Input id="firstName" name="firstName" required />
|
|
64
|
+
</div>
|
|
65
|
+
<div className="grid gap-2">
|
|
66
|
+
<Label htmlFor="lastName">Last Name</Label>
|
|
67
|
+
<Input id="lastName" name="lastName" required />
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
<div className="grid gap-2">
|
|
71
|
+
<Label htmlFor="email">Email</Label>
|
|
72
|
+
<Input id="email" name="email" type="email" required />
|
|
73
|
+
</div>
|
|
74
|
+
<div className="grid gap-2">
|
|
75
|
+
<Label htmlFor="address">Street Address</Label>
|
|
76
|
+
<Input id="address" name="address" required />
|
|
77
|
+
</div>
|
|
78
|
+
<div className="grid gap-2">
|
|
79
|
+
<Label htmlFor="address2">Apartment, suite, etc. (optional)</Label>
|
|
80
|
+
<Input id="address2" name="address2" />
|
|
81
|
+
</div>
|
|
82
|
+
<div className="grid gap-4 sm:grid-cols-3">
|
|
83
|
+
<div className="grid gap-2">
|
|
84
|
+
<Label htmlFor="city">City</Label>
|
|
85
|
+
<Input id="city" name="city" required />
|
|
86
|
+
</div>
|
|
87
|
+
<div className="grid gap-2">
|
|
88
|
+
<Label htmlFor="state">State / Province</Label>
|
|
89
|
+
<Input id="state" name="state" required />
|
|
90
|
+
</div>
|
|
91
|
+
<div className="grid gap-2">
|
|
92
|
+
<Label htmlFor="zip">ZIP / Postal Code</Label>
|
|
93
|
+
<Input id="zip" name="zip" required />
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
<div className="grid gap-2">
|
|
97
|
+
<Label htmlFor="phone">Phone Number</Label>
|
|
98
|
+
<Input id="phone" name="phone" type="tel" />
|
|
99
|
+
</div>
|
|
100
|
+
</CardContent>
|
|
101
|
+
</Card>
|
|
102
|
+
|
|
103
|
+
{/* Payment Method */}
|
|
104
|
+
<Card>
|
|
105
|
+
<CardHeader>
|
|
106
|
+
<CardTitle>Payment Method</CardTitle>
|
|
107
|
+
<CardDescription>
|
|
108
|
+
Select your payment method
|
|
109
|
+
</CardDescription>
|
|
110
|
+
</CardHeader>
|
|
111
|
+
<CardContent className="grid gap-6">
|
|
112
|
+
<RadioGroup defaultValue="card" name="paymentMethod">
|
|
113
|
+
<div className="flex items-center space-x-2">
|
|
114
|
+
<RadioGroupItem value="card" id="card" />
|
|
115
|
+
<Label htmlFor="card">Credit Card</Label>
|
|
116
|
+
</div>
|
|
117
|
+
<div className="flex items-center space-x-2">
|
|
118
|
+
<RadioGroupItem value="paypal" id="paypal" />
|
|
119
|
+
<Label htmlFor="paypal">PayPal</Label>
|
|
120
|
+
</div>
|
|
121
|
+
<div className="flex items-center space-x-2">
|
|
122
|
+
<RadioGroupItem value="crypto" id="crypto" />
|
|
123
|
+
<Label htmlFor="crypto">Cryptocurrency</Label>
|
|
124
|
+
</div>
|
|
125
|
+
</RadioGroup>
|
|
126
|
+
|
|
127
|
+
<div className="grid gap-4">
|
|
128
|
+
<div className="grid gap-2">
|
|
129
|
+
<Label htmlFor="cardNumber">Card Number</Label>
|
|
130
|
+
<Input
|
|
131
|
+
id="cardNumber"
|
|
132
|
+
name="cardNumber"
|
|
133
|
+
placeholder="1234 5678 9012 3456"
|
|
134
|
+
/>
|
|
135
|
+
</div>
|
|
136
|
+
<div className="grid gap-4 sm:grid-cols-3">
|
|
137
|
+
<div className="grid gap-2 sm:col-span-2">
|
|
138
|
+
<Label htmlFor="expiry">Expiry Date</Label>
|
|
139
|
+
<Input
|
|
140
|
+
id="expiry"
|
|
141
|
+
name="expiry"
|
|
142
|
+
placeholder="MM/YY"
|
|
143
|
+
/>
|
|
144
|
+
</div>
|
|
145
|
+
<div className="grid gap-2">
|
|
146
|
+
<Label htmlFor="cvc">CVC</Label>
|
|
147
|
+
<Input
|
|
148
|
+
id="cvc"
|
|
149
|
+
name="cvc"
|
|
150
|
+
placeholder="123"
|
|
151
|
+
/>
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
</CardContent>
|
|
156
|
+
</Card>
|
|
157
|
+
|
|
158
|
+
{/* Billing Address */}
|
|
159
|
+
<Card>
|
|
160
|
+
<CardHeader>
|
|
161
|
+
<CardTitle>Billing Address</CardTitle>
|
|
162
|
+
</CardHeader>
|
|
163
|
+
<CardContent>
|
|
164
|
+
<div className="flex items-center space-x-2">
|
|
165
|
+
<Checkbox id="sameAsShipping" name="sameAsShipping" defaultChecked />
|
|
166
|
+
<label
|
|
167
|
+
htmlFor="sameAsShipping"
|
|
168
|
+
className="text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
|
|
169
|
+
>
|
|
170
|
+
Same as shipping address
|
|
171
|
+
</label>
|
|
172
|
+
</div>
|
|
173
|
+
</CardContent>
|
|
174
|
+
</Card>
|
|
175
|
+
</div>
|
|
176
|
+
|
|
177
|
+
{/* Order Summary */}
|
|
178
|
+
<div>
|
|
179
|
+
<Card>
|
|
180
|
+
<CardHeader>
|
|
181
|
+
<CardTitle>Order Summary</CardTitle>
|
|
182
|
+
</CardHeader>
|
|
183
|
+
<CardContent className="space-y-4">
|
|
184
|
+
<div className="space-y-2">
|
|
185
|
+
{orderSummary.items.map((item, i) => (
|
|
186
|
+
<div key={i} className="flex justify-between text-sm">
|
|
187
|
+
<span className="text-muted-foreground">
|
|
188
|
+
{item.name} x {item.quantity}
|
|
189
|
+
</span>
|
|
190
|
+
<span>
|
|
191
|
+
{formatPrice(item.price * item.quantity, orderSummary.currency)}
|
|
192
|
+
</span>
|
|
193
|
+
</div>
|
|
194
|
+
))}
|
|
195
|
+
</div>
|
|
196
|
+
<Separator />
|
|
197
|
+
<div className="space-y-2">
|
|
198
|
+
<div className="flex justify-between">
|
|
199
|
+
<span>Subtotal</span>
|
|
200
|
+
<span>{formatPrice(orderSummary.subtotal, orderSummary.currency)}</span>
|
|
201
|
+
</div>
|
|
202
|
+
<div className="flex justify-between">
|
|
203
|
+
<span>Shipping</span>
|
|
204
|
+
<span>{formatPrice(orderSummary.shipping, orderSummary.currency)}</span>
|
|
205
|
+
</div>
|
|
206
|
+
<div className="flex justify-between">
|
|
207
|
+
<span>Tax</span>
|
|
208
|
+
<span>{formatPrice(orderSummary.tax, orderSummary.currency)}</span>
|
|
209
|
+
</div>
|
|
210
|
+
</div>
|
|
211
|
+
<Separator />
|
|
212
|
+
<div className="flex justify-between text-lg font-semibold">
|
|
213
|
+
<span>Total</span>
|
|
214
|
+
<span>{formatPrice(orderSummary.total, orderSummary.currency)}</span>
|
|
215
|
+
</div>
|
|
216
|
+
</CardContent>
|
|
217
|
+
<CardFooter className="flex-col gap-2">
|
|
218
|
+
<Button type="submit" className="w-full" size="lg">
|
|
219
|
+
Complete Order
|
|
220
|
+
</Button>
|
|
221
|
+
{onBack && (
|
|
222
|
+
<Button
|
|
223
|
+
type="button"
|
|
224
|
+
variant="outline"
|
|
225
|
+
className="w-full"
|
|
226
|
+
onClick={onBack}
|
|
227
|
+
>
|
|
228
|
+
Back to Cart
|
|
229
|
+
</Button>
|
|
230
|
+
)}
|
|
231
|
+
</CardFooter>
|
|
232
|
+
</Card>
|
|
233
|
+
|
|
234
|
+
<div className="mt-4 text-xs text-center text-muted-foreground">
|
|
235
|
+
Your payment information is encrypted and secure.
|
|
236
|
+
We never store your credit card details.
|
|
237
|
+
</div>
|
|
238
|
+
</div>
|
|
239
|
+
</form>
|
|
240
|
+
</div>
|
|
241
|
+
)
|
|
242
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { ProductGrid } from './product-grid'
|
|
2
|
+
export { ProductDetail } from './product-detail'
|
|
3
|
+
export { ShoppingCart } from './shopping-cart'
|
|
4
|
+
export { Checkout } from './checkout'
|
|
5
|
+
|
|
6
|
+
export type { Product } from './product-grid'
|
|
7
|
+
export type { CartItem } from './shopping-cart'
|