love-ui 1.2.13 → 1.2.15
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 +6 -6
- package/package.json +7 -37
- package/registry/__index__.tsx +590 -0
- package/registry/default/examples/accordion-controlled.tsx +56 -0
- package/registry/default/examples/accordion-demo.tsx +39 -0
- package/registry/default/examples/accordion-multiple.tsx +35 -0
- package/registry/default/examples/accordion-product-faq.tsx +25 -0
- package/registry/default/examples/accordion-single.tsx +35 -0
- package/registry/default/examples/alert-billing-notice.tsx +19 -0
- package/registry/default/examples/alert-demo.tsx +16 -0
- package/registry/default/examples/alert-dialog-demo.tsx +38 -0
- package/registry/default/examples/alert-error.tsx +19 -0
- package/registry/default/examples/alert-info.tsx +19 -0
- package/registry/default/examples/alert-success.tsx +20 -0
- package/registry/default/examples/alert-warning.tsx +19 -0
- package/registry/default/examples/alert-with-icon-action.tsx +27 -0
- package/registry/default/examples/alert-with-icon.tsx +19 -0
- package/registry/default/examples/autocomplete-async.tsx +134 -0
- package/registry/default/examples/autocomplete-autohighlight.tsx +44 -0
- package/registry/default/examples/autocomplete-demo.tsx +44 -0
- package/registry/default/examples/autocomplete-disabled.tsx +44 -0
- package/registry/default/examples/autocomplete-form.tsx +69 -0
- package/registry/default/examples/autocomplete-grouped.tsx +112 -0
- package/registry/default/examples/autocomplete-inline.tsx +44 -0
- package/registry/default/examples/autocomplete-lg.tsx +45 -0
- package/registry/default/examples/autocomplete-limit.tsx +83 -0
- package/registry/default/examples/autocomplete-members.tsx +38 -0
- package/registry/default/examples/autocomplete-sm.tsx +45 -0
- package/registry/default/examples/autocomplete-with-clear.tsx +45 -0
- package/registry/default/examples/autocomplete-with-label.tsx +52 -0
- package/registry/default/examples/autocomplete-with-trigger-clear.tsx +46 -0
- package/registry/default/examples/avatar-demo.tsx +17 -0
- package/registry/default/examples/avatar-fallback.tsx +9 -0
- package/registry/default/examples/avatar-group.tsx +33 -0
- package/registry/default/examples/avatar-radius.tsx +33 -0
- package/registry/default/examples/avatar-size.tsx +33 -0
- package/registry/default/examples/avatar-team-stack.tsx +27 -0
- package/registry/default/examples/badge-demo.tsx +5 -0
- package/registry/default/examples/badge-destructive.tsx +5 -0
- package/registry/default/examples/badge-error.tsx +5 -0
- package/registry/default/examples/badge-info.tsx +5 -0
- package/registry/default/examples/badge-lg.tsx +5 -0
- package/registry/default/examples/badge-outline.tsx +5 -0
- package/registry/default/examples/badge-release-status.tsx +16 -0
- package/registry/default/examples/badge-secondary.tsx +5 -0
- package/registry/default/examples/badge-sm.tsx +5 -0
- package/registry/default/examples/badge-success.tsx +5 -0
- package/registry/default/examples/badge-warning.tsx +5 -0
- package/registry/default/examples/badge-with-icon.tsx +12 -0
- package/registry/default/examples/badge-with-link.tsx +7 -0
- package/registry/default/examples/breadcrumb-compact-path.tsx +22 -0
- package/registry/default/examples/breadcrumb-custom-separator.tsx +34 -0
- package/registry/default/examples/breadcrumb-demo.tsx +60 -0
- package/registry/default/examples/breadcrumb-with-ellipsis.tsx +25 -0
- package/registry/default/examples/breadcrumb-workspace-path.tsx +28 -0
- package/registry/default/examples/button-command-bar.tsx +18 -0
- package/registry/default/examples/button-demo.tsx +5 -0
- package/registry/default/examples/button-destructive-outline.tsx +5 -0
- package/registry/default/examples/button-destructive.tsx +5 -0
- package/registry/default/examples/button-disabled.tsx +5 -0
- package/registry/default/examples/button-ghost.tsx +5 -0
- package/registry/default/examples/button-icon-lg.tsx +11 -0
- package/registry/default/examples/button-icon-sm.tsx +11 -0
- package/registry/default/examples/button-icon.tsx +11 -0
- package/registry/default/examples/button-lg.tsx +5 -0
- package/registry/default/examples/button-link.tsx +5 -0
- package/registry/default/examples/button-loading.tsx +12 -0
- package/registry/default/examples/button-outline.tsx +5 -0
- package/registry/default/examples/button-secondary.tsx +5 -0
- package/registry/default/examples/button-sm.tsx +5 -0
- package/registry/default/examples/button-with-icon.tsx +12 -0
- package/registry/default/examples/button-with-link.tsx +7 -0
- package/registry/default/examples/button-xl.tsx +5 -0
- package/registry/default/examples/button-xs.tsx +5 -0
- package/registry/default/examples/card-billing-plan.tsx +26 -0
- package/registry/default/examples/card-demo.tsx +71 -0
- package/registry/default/examples/card-metric-summary.tsx +29 -0
- package/registry/default/examples/card-team-member.tsx +34 -0
- package/registry/default/examples/checkbox-card.tsx +16 -0
- package/registry/default/examples/checkbox-demo.tsx +11 -0
- package/registry/default/examples/checkbox-disabled.tsx +11 -0
- package/registry/default/examples/checkbox-form.tsx +39 -0
- package/registry/default/examples/checkbox-group-demo.tsx +25 -0
- package/registry/default/examples/checkbox-group-disabled.tsx +25 -0
- package/registry/default/examples/checkbox-group-form.tsx +54 -0
- package/registry/default/examples/checkbox-group-nested-parent.tsx +90 -0
- package/registry/default/examples/checkbox-group-parent.tsx +38 -0
- package/registry/default/examples/checkbox-notification-row.tsx +17 -0
- package/registry/default/examples/checkbox-with-description.tsx +21 -0
- package/registry/default/examples/code-block-diff.tsx +42 -0
- package/registry/default/examples/code-block-focus.tsx +28 -0
- package/registry/default/examples/code-block-headless.tsx +19 -0
- package/registry/default/examples/code-block-highlight-line.tsx +28 -0
- package/registry/default/examples/code-block-highlight-word.tsx +28 -0
- package/registry/default/examples/code-block-no-highlighting.tsx +34 -0
- package/registry/default/examples/code-block-numberless.tsx +34 -0
- package/registry/default/examples/code-block-shared/index.tsx +2 -0
- package/registry/default/examples/code-block-shared.tsx +26 -0
- package/registry/default/examples/code-block-theme.tsx +36 -0
- package/registry/default/examples/code-block.tsx +34 -0
- package/registry/default/examples/collapsible-checklist.tsx +26 -0
- package/registry/default/examples/collapsible-command-help.tsx +16 -0
- package/registry/default/examples/collapsible-demo.tsx +31 -0
- package/registry/default/examples/collapsible-release-notes.tsx +21 -0
- package/registry/default/examples/combobox-assignee.tsx +34 -0
- package/registry/default/examples/combobox-autohighlight.tsx +44 -0
- package/registry/default/examples/combobox-demo.tsx +44 -0
- package/registry/default/examples/combobox-disabled.tsx +44 -0
- package/registry/default/examples/combobox-form.tsx +68 -0
- package/registry/default/examples/combobox-grouped.tsx +112 -0
- package/registry/default/examples/combobox-lg.tsx +45 -0
- package/registry/default/examples/combobox-multiple-form.tsx +94 -0
- package/registry/default/examples/combobox-multiple.tsx +60 -0
- package/registry/default/examples/combobox-sm.tsx +45 -0
- package/registry/default/examples/combobox-with-clear.tsx +45 -0
- package/registry/default/examples/combobox-with-inner-input.tsx +880 -0
- package/registry/default/examples/combobox-with-label.tsx +52 -0
- package/registry/default/examples/dialog-close-confirmation.tsx +112 -0
- package/registry/default/examples/dialog-demo.tsx +50 -0
- package/registry/default/examples/dialog-from-menu.tsx +53 -0
- package/registry/default/examples/dialog-invite-member.tsx +34 -0
- package/registry/default/examples/dialog-nested.tsx +71 -0
- package/registry/default/examples/empty-demo.tsx +36 -0
- package/registry/default/examples/empty-filtered-results.tsx +24 -0
- package/registry/default/examples/empty-inbox-zero.tsx +21 -0
- package/registry/default/examples/empty-upload-queue.tsx +24 -0
- package/registry/default/examples/field-autocomplete.tsx +53 -0
- package/registry/default/examples/field-checkbox-group.tsx +38 -0
- package/registry/default/examples/field-checkbox.tsx +13 -0
- package/registry/default/examples/field-combobox-multiple.tsx +69 -0
- package/registry/default/examples/field-combobox.tsx +53 -0
- package/registry/default/examples/field-complete-form.tsx +113 -0
- package/registry/default/examples/field-demo.tsx +16 -0
- package/registry/default/examples/field-disabled.tsx +22 -0
- package/registry/default/examples/field-error.tsx +16 -0
- package/registry/default/examples/field-number-field.tsx +27 -0
- package/registry/default/examples/field-password.tsx +11 -0
- package/registry/default/examples/field-radio.tsx +37 -0
- package/registry/default/examples/field-required.tsx +22 -0
- package/registry/default/examples/field-select.tsx +41 -0
- package/registry/default/examples/field-slider.tsx +16 -0
- package/registry/default/examples/field-switch.tsx +13 -0
- package/registry/default/examples/field-textarea.tsx +25 -0
- package/registry/default/examples/field-validity.tsx +37 -0
- package/registry/default/examples/fieldset-billing-address.tsx +12 -0
- package/registry/default/examples/fieldset-danger-zone.tsx +15 -0
- package/registry/default/examples/fieldset-demo.tsx +33 -0
- package/registry/default/examples/fieldset-notification-settings.tsx +14 -0
- package/registry/default/examples/form-demo.tsx +43 -0
- package/registry/default/examples/form-newsletter.tsx +16 -0
- package/registry/default/examples/form-profile-card.tsx +13 -0
- package/registry/default/examples/form-zod.tsx +84 -0
- package/registry/default/examples/form.tsx +318 -0
- package/registry/default/examples/frame-analytics-panel.tsx +16 -0
- package/registry/default/examples/frame-code-output.tsx +11 -0
- package/registry/default/examples/frame-demo.tsx +26 -0
- package/registry/default/examples/frame-device-preview.tsx +14 -0
- package/registry/default/examples/gooey-toast-demo.tsx +104 -0
- package/registry/default/examples/gooey-toast-position.tsx +36 -0
- package/registry/default/examples/gooey-toast-promise.tsx +31 -0
- package/registry/default/examples/gooey-toast-states.tsx +76 -0
- package/registry/default/examples/gooey-toast-with-button.tsx +34 -0
- package/registry/default/examples/group-demo.tsx +28 -0
- package/registry/default/examples/group-filter-actions.tsx +14 -0
- package/registry/default/examples/group-segmented-filters.tsx +12 -0
- package/registry/default/examples/group-toolbar-actions.tsx +14 -0
- package/registry/default/examples/group-with-input.tsx +23 -0
- package/registry/default/examples/input-demo.tsx +7 -0
- package/registry/default/examples/input-disabled.tsx +11 -0
- package/registry/default/examples/input-file.tsx +5 -0
- package/registry/default/examples/input-lg.tsx +11 -0
- package/registry/default/examples/input-search-inline.tsx +12 -0
- package/registry/default/examples/input-sm.tsx +11 -0
- package/registry/default/examples/input-with-button.tsx +15 -0
- package/registry/default/examples/input-with-label.tsx +19 -0
- package/registry/default/examples/label-password-field.tsx +11 -0
- package/registry/default/examples/menu-checkbox.tsx +21 -0
- package/registry/default/examples/menu-close-on-click.tsx +22 -0
- package/registry/default/examples/menu-demo.tsx +102 -0
- package/registry/default/examples/menu-group-labels.tsx +27 -0
- package/registry/default/examples/menu-hover.tsx +21 -0
- package/registry/default/examples/menu-link.tsx +25 -0
- package/registry/default/examples/menu-nested.tsx +31 -0
- package/registry/default/examples/menu-project-actions.tsx +17 -0
- package/registry/default/examples/menu-radio-group.tsx +25 -0
- package/registry/default/examples/meter-demo.tsx +21 -0
- package/registry/default/examples/meter-simple.tsx +5 -0
- package/registry/default/examples/meter-storage-quota.tsx +13 -0
- package/registry/default/examples/meter-with-formatted-value.tsx +23 -0
- package/registry/default/examples/meter-with-range.tsx +23 -0
- package/registry/default/examples/number-field-demo.tsx +19 -0
- package/registry/default/examples/number-field-disabled.tsx +19 -0
- package/registry/default/examples/number-field-form.tsx +75 -0
- package/registry/default/examples/number-field-lg.tsx +19 -0
- package/registry/default/examples/number-field-sm.tsx +19 -0
- package/registry/default/examples/number-field-ticket-count.tsx +19 -0
- package/registry/default/examples/number-field-with-formatted-value.tsx +22 -0
- package/registry/default/examples/number-field-with-label.tsx +26 -0
- package/registry/default/examples/number-field-with-range.tsx +19 -0
- package/registry/default/examples/number-field-with-scrub.tsx +21 -0
- package/registry/default/examples/number-field-with-step.tsx +31 -0
- package/registry/default/examples/pagination-compact.tsx +13 -0
- package/registry/default/examples/pagination-demo.tsx +38 -0
- package/registry/default/examples/pagination-mini.tsx +12 -0
- package/registry/default/examples/pagination-results.tsx +22 -0
- package/registry/default/examples/popover-account-summary.tsx +14 -0
- package/registry/default/examples/popover-color-swatch.tsx +20 -0
- package/registry/default/examples/popover-demo.tsx +41 -0
- package/registry/default/examples/popover-with-close.tsx +38 -0
- package/registry/default/examples/preview-card-demo.tsx +46 -0
- package/registry/default/examples/preview-card-product.tsx +18 -0
- package/registry/default/examples/preview-card-profile.tsx +17 -0
- package/registry/default/examples/preview-card-repository.tsx +19 -0
- package/registry/default/examples/progress-demo.tsx +20 -0
- package/registry/default/examples/progress-onboarding.tsx +10 -0
- package/registry/default/examples/progress-with-formatted-value.tsx +23 -0
- package/registry/default/examples/progress-with-label-value.tsx +21 -0
- package/registry/default/examples/radio-group-card.tsx +27 -0
- package/registry/default/examples/radio-group-delivery.tsx +16 -0
- package/registry/default/examples/radio-group-demo.tsx +18 -0
- package/registry/default/examples/radio-group-disabled.tsx +18 -0
- package/registry/default/examples/radio-group-form.tsx +50 -0
- package/registry/default/examples/radio-group-with-description.tsx +27 -0
- package/registry/default/examples/scroll-area-activity.tsx +13 -0
- package/registry/default/examples/scroll-area-both.tsx +24 -0
- package/registry/default/examples/scroll-area-demo.tsx +20 -0
- package/registry/default/examples/scroll-area-horizontal.tsx +18 -0
- package/registry/default/examples/select-demo.tsx +31 -0
- package/registry/default/examples/select-disabled.tsx +31 -0
- package/registry/default/examples/select-form.tsx +64 -0
- package/registry/default/examples/select-lg.tsx +31 -0
- package/registry/default/examples/select-multiple.tsx +54 -0
- package/registry/default/examples/select-sm.tsx +31 -0
- package/registry/default/examples/select-timezone.tsx +16 -0
- package/registry/default/examples/select-with-groups.tsx +56 -0
- package/registry/default/examples/select-without-alignment.tsx +31 -0
- package/registry/default/examples/separator-demo.tsx +25 -0
- package/registry/default/examples/separator-section-label.tsx +11 -0
- package/registry/default/examples/separator-timeline.tsx +13 -0
- package/registry/default/examples/separator-vertical-stack.tsx +13 -0
- package/registry/default/examples/sheet-checkout-summary.tsx +19 -0
- package/registry/default/examples/sheet-demo.tsx +60 -0
- package/registry/default/examples/sheet-position.tsx +82 -0
- package/registry/default/examples/sheet-profile-editor.tsx +19 -0
- package/registry/default/examples/skeleton-chat-list.tsx +14 -0
- package/registry/default/examples/skeleton-dashboard-card.tsx +15 -0
- package/registry/default/examples/skeleton-demo.tsx +112 -0
- package/registry/default/examples/skeleton-only.tsx +17 -0
- package/registry/default/examples/slider-demo.tsx +5 -0
- package/registry/default/examples/slider-form.tsx +46 -0
- package/registry/default/examples/slider-opacity.tsx +12 -0
- package/registry/default/examples/slider-range.tsx +5 -0
- package/registry/default/examples/slider-vertical.tsx +5 -0
- package/registry/default/examples/slider-with-label-value.tsx +13 -0
- package/registry/default/examples/switch-card.tsx +23 -0
- package/registry/default/examples/switch-demo.tsx +11 -0
- package/registry/default/examples/switch-disabled.tsx +11 -0
- package/registry/default/examples/switch-form.tsx +38 -0
- package/registry/default/examples/switch-privacy-mode.tsx +12 -0
- package/registry/default/examples/switch-with-description.tsx +20 -0
- package/registry/default/examples/table-demo.tsx +123 -0
- package/registry/default/examples/table-framed.tsx +132 -0
- package/registry/default/examples/table-invoice-list.tsx +14 -0
- package/registry/default/examples/table-user-roles.tsx +12 -0
- package/registry/default/examples/table.tsx +170 -0
- package/registry/default/examples/tabs-demo.tsx +28 -0
- package/registry/default/examples/tabs-settings.tsx +11 -0
- package/registry/default/examples/tabs-underline-vertical.tsx +34 -0
- package/registry/default/examples/tabs-underline.tsx +30 -0
- package/registry/default/examples/tabs-vertical.tsx +28 -0
- package/registry/default/examples/textarea-demo.tsx +5 -0
- package/registry/default/examples/textarea-disabled.tsx +5 -0
- package/registry/default/examples/textarea-feedback.tsx +5 -0
- package/registry/default/examples/textarea-form.tsx +44 -0
- package/registry/default/examples/textarea-lg.tsx +5 -0
- package/registry/default/examples/textarea-sm.tsx +5 -0
- package/registry/default/examples/textarea-with-label.tsx +14 -0
- package/registry/default/examples/toast-demo.tsx +20 -0
- package/registry/default/examples/toast-heights.tsx +32 -0
- package/registry/default/examples/toast-loading.tsx +21 -0
- package/registry/default/examples/toast-promise.tsx +42 -0
- package/registry/default/examples/toast-sync-complete.tsx +15 -0
- package/registry/default/examples/toast-with-action.tsx +33 -0
- package/registry/default/examples/toast-with-status.tsx +60 -0
- package/registry/default/examples/toggle-demo.tsx +5 -0
- package/registry/default/examples/toggle-disabled.tsx +9 -0
- package/registry/default/examples/toggle-group-demo.tsx +19 -0
- package/registry/default/examples/toggle-group-disabled.tsx +19 -0
- package/registry/default/examples/toggle-group-lg.tsx +19 -0
- package/registry/default/examples/toggle-group-multiple.tsx +19 -0
- package/registry/default/examples/toggle-group-outline-with-separator.tsx +25 -0
- package/registry/default/examples/toggle-group-outline.tsx +19 -0
- package/registry/default/examples/toggle-group-sm.tsx +19 -0
- package/registry/default/examples/toggle-group-with-disabled-item.tsx +19 -0
- package/registry/default/examples/toggle-icon-group.tsx +19 -0
- package/registry/default/examples/toggle-lg.tsx +9 -0
- package/registry/default/examples/toggle-outline.tsx +5 -0
- package/registry/default/examples/toggle-sm.tsx +9 -0
- package/registry/default/examples/toggle-view-mode.tsx +12 -0
- package/registry/default/examples/toggle-with-icon.tsx +11 -0
- package/registry/default/examples/toolbar-canvas-controls.tsx +17 -0
- package/registry/default/examples/toolbar-demo.tsx +155 -0
- package/registry/default/examples/toolbar-density-controls.tsx +17 -0
- package/registry/default/examples/toolbar-media-controls.tsx +16 -0
- package/registry/default/examples/tooltip-demo.tsx +17 -0
- package/registry/default/examples/tooltip-grouped.tsx +46 -0
- package/registry/default/examples/tooltip-icon-row.tsx +13 -0
- package/registry/default/examples/tooltip-keyboard-hints.tsx +11 -0
- package/registry/default/ui/accordion.tsx +66 -0
- package/registry/default/ui/alert-dialog.tsx +16 -0
- package/registry/default/ui/alert.tsx +215 -0
- package/registry/default/ui/autocomplete.tsx +282 -0
- package/registry/default/ui/avatar.tsx +46 -0
- package/registry/default/ui/badge.tsx +57 -0
- package/registry/default/ui/breadcrumb.tsx +109 -0
- package/registry/default/ui/button.tsx +85 -0
- package/registry/default/ui/card.tsx +113 -0
- package/registry/default/ui/checkbox-group.tsx +3 -0
- package/registry/default/ui/checkbox.tsx +71 -0
- package/registry/default/ui/collapsible.tsx +45 -0
- package/registry/default/ui/combobox.tsx +355 -0
- package/registry/default/ui/dialog.tsx +134 -0
- package/registry/default/ui/empty.tsx +127 -0
- package/registry/default/ui/field.tsx +128 -0
- package/registry/default/ui/fieldset.tsx +29 -0
- package/registry/default/ui/form.tsx +9 -0
- package/registry/default/ui/frame.tsx +81 -0
- package/registry/default/ui/group.tsx +62 -0
- package/registry/default/ui/input.tsx +41 -0
- package/registry/default/ui/label.tsx +15 -0
- package/registry/default/ui/menu.tsx +254 -0
- package/registry/default/ui/meter.tsx +67 -0
- package/registry/default/ui/number-field.tsx +160 -0
- package/registry/default/ui/pagination.tsx +147 -0
- package/registry/default/ui/popover.tsx +86 -0
- package/registry/default/ui/preview-card.tsx +55 -0
- package/registry/default/ui/progress.tsx +81 -0
- package/registry/default/ui/radio-group.tsx +36 -0
- package/registry/default/ui/scroll-area.tsx +62 -0
- package/registry/default/ui/select.tsx +187 -0
- package/registry/default/ui/separator.tsx +23 -0
- package/registry/default/ui/sheet.tsx +134 -0
- package/registry/default/ui/skeleton.tsx +18 -0
- package/registry/default/ui/slider.tsx +77 -0
- package/registry/default/ui/switch.tsx +27 -0
- package/registry/default/ui/table.tsx +127 -0
- package/registry/default/ui/tabs.tsx +90 -0
- package/registry/default/ui/textarea.tsx +35 -0
- package/registry/default/ui/toast.tsx +351 -0
- package/registry/default/ui/toggle-group.tsx +9 -0
- package/registry/default/ui/toggle.tsx +105 -0
- package/registry/default/ui/toolbar.tsx +83 -0
- package/registry/default/ui/tooltip.tsx +57 -0
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -15
- package/dist/mcp-server.d.ts +0 -1
- package/dist/mcp-server.js +0 -2
- package/packages/announcement/index.tsx +0 -53
- package/packages/announcement/package.json +0 -23
- package/packages/announcement/tsconfig.json +0 -13
- package/packages/avatar-stack/index.tsx +0 -51
- package/packages/avatar-stack/package.json +0 -23
- package/packages/avatar-stack/tsconfig.json +0 -13
- package/packages/banner/index.tsx +0 -143
- package/packages/banner/package.json +0 -25
- package/packages/banner/tsconfig.json +0 -13
- package/packages/calendar/index.tsx +0 -496
- package/packages/calendar/package.json +0 -26
- package/packages/calendar/tsconfig.json +0 -13
- package/packages/choicebox/index.tsx +0 -113
- package/packages/choicebox/package.json +0 -25
- package/packages/choicebox/tsconfig.json +0 -13
- package/packages/code-block/README.md +0 -62
- package/packages/code-block/components.json +0 -21
- package/packages/code-block/package.json +0 -52
- package/packages/code-block/src/components/code-block/blocks/copy-with-select-package-manager.tsx +0 -146
- package/packages/code-block/src/components/code-block/blocks/copy-with-tabs-package-manager.tsx +0 -110
- package/packages/code-block/src/components/code-block/blocks/inline-code.tsx +0 -28
- package/packages/code-block/src/components/code-block/blocks/multi-tabs.tsx +0 -118
- package/packages/code-block/src/components/code-block/client/shiki.tsx +0 -139
- package/packages/code-block/src/components/code-block/client/sugar-high.tsx +0 -38
- package/packages/code-block/src/components/code-block/code-block.tsx +0 -113
- package/packages/code-block/src/components/code-block/copy-button.tsx +0 -59
- package/packages/code-block/src/components/code-block/mdx/pre-shiki.tsx +0 -42
- package/packages/code-block/src/components/code-block/mdx/pre-sugar-high.tsx +0 -37
- package/packages/code-block/src/components/ui/dropdown-menu.tsx +0 -103
- package/packages/code-block/src/components/ui/tabs.tsx +0 -84
- package/packages/code-block/src/index.ts +0 -35
- package/packages/code-block/src/stores/packageManager.ts +0 -24
- package/packages/code-block/src/styles/globals.css +0 -79
- package/packages/code-block/src/styles/shiki.css +0 -95
- package/packages/code-block/src/styles/sugar-high.css +0 -48
- package/packages/code-block/src/utils/cn.ts +0 -6
- package/packages/code-block/src/utils/copy.ts +0 -9
- package/packages/code-block/src/utils/react-to-text.ts +0 -34
- package/packages/code-block/src/utils/shiki/highlight.ts +0 -47
- package/packages/code-block/src/utils/sugar-high/highlight.ts +0 -12
- package/packages/code-block/tsconfig.json +0 -17
- package/packages/color-picker/index.tsx +0 -467
- package/packages/color-picker/package.json +0 -27
- package/packages/color-picker/tsconfig.json +0 -13
- package/packages/combobox/index.tsx +0 -309
- package/packages/combobox/package.json +0 -25
- package/packages/combobox/tsconfig.json +0 -13
- package/packages/comparison/index.tsx +0 -209
- package/packages/comparison/package.json +0 -25
- package/packages/comparison/tsconfig.json +0 -13
- package/packages/contribution-graph/index.tsx +0 -517
- package/packages/contribution-graph/package.json +0 -24
- package/packages/contribution-graph/tsconfig.json +0 -13
- package/packages/credit-card/index.tsx +0 -348
- package/packages/credit-card/package.json +0 -24
- package/packages/credit-card/tsconfig.json +0 -13
- package/packages/cursor/index.tsx +0 -62
- package/packages/cursor/package.json +0 -23
- package/packages/cursor/tsconfig.json +0 -13
- package/packages/deck/index.tsx +0 -297
- package/packages/deck/package.json +0 -26
- package/packages/deck/tsconfig.json +0 -13
- package/packages/dialog-stack/index.tsx +0 -484
- package/packages/dialog-stack/package.json +0 -25
- package/packages/dialog-stack/tsconfig.json +0 -13
- package/packages/dropzone/index.tsx +0 -202
- package/packages/dropzone/package.json +0 -25
- package/packages/dropzone/tsconfig.json +0 -13
- package/packages/editor/index.tsx +0 -1996
- package/packages/editor/package.json +0 -41
- package/packages/editor/tsconfig.json +0 -13
- package/packages/eslint-config/base.js +0 -32
- package/packages/eslint-config/next.js +0 -49
- package/packages/eslint-config/package.json +0 -33
- package/packages/eslint-config/react-internal.js +0 -39
- package/packages/ether/README.md +0 -39
- package/packages/ether/index.tsx +0 -1297
- package/packages/ether/package.json +0 -59
- package/packages/ether/tsconfig.json +0 -18
- package/packages/gantt/index.tsx +0 -1469
- package/packages/gantt/package.json +0 -31
- package/packages/gantt/tsconfig.json +0 -13
- package/packages/glimpse/index.tsx +0 -67
- package/packages/glimpse/package.json +0 -23
- package/packages/glimpse/server.tsx +0 -21
- package/packages/glimpse/tsconfig.json +0 -13
- package/packages/gooey-toast/package.json +0 -28
- package/packages/gooey-toast/src/gooey.tsx +0 -614
- package/packages/gooey-toast/src/icons.tsx +0 -68
- package/packages/gooey-toast/src/index.ts +0 -10
- package/packages/gooey-toast/src/styles.css +0 -511
- package/packages/gooey-toast/src/toast.tsx +0 -444
- package/packages/gooey-toast/src/types.ts +0 -45
- package/packages/gooey-toast/tsconfig.json +0 -13
- package/packages/gradiant-blinds/README.md +0 -39
- package/packages/gradiant-blinds/index.tsx +0 -390
- package/packages/gradiant-blinds/package.json +0 -60
- package/packages/gradiant-blinds/tsconfig.json +0 -18
- package/packages/gradient-mesh/index.tsx +0 -236
- package/packages/gradient-mesh/package.json +0 -62
- package/packages/gradient-mesh/tsconfig.json +0 -10
- package/packages/image-crop/index.tsx +0 -368
- package/packages/image-crop/package.json +0 -26
- package/packages/image-crop/tsconfig.json +0 -13
- package/packages/image-zoom/index.tsx +0 -52
- package/packages/image-zoom/package.json +0 -24
- package/packages/image-zoom/tsconfig.json +0 -13
- package/packages/kanban/index.tsx +0 -338
- package/packages/kanban/package.json +0 -27
- package/packages/kanban/tsconfig.json +0 -13
- package/packages/list/index.tsx +0 -152
- package/packages/list/package.json +0 -25
- package/packages/list/tsconfig.json +0 -13
- package/packages/love-ui/components.json +0 -20
- package/packages/love-ui/eslint.config.js +0 -4
- package/packages/love-ui/index.ts +0 -3
- package/packages/love-ui/package.json +0 -60
- package/packages/love-ui/postcss.config.mjs +0 -6
- package/packages/love-ui/src/components/code-block.tsx +0 -38
- package/packages/love-ui/src/components/copy-button.tsx +0 -59
- package/packages/love-ui/src/components/icons.tsx +0 -207
- package/packages/love-ui/src/components/mobile-nav.tsx +0 -123
- package/packages/love-ui/src/components/mode-switcher.tsx +0 -42
- package/packages/love-ui/src/components/page-header.tsx +0 -43
- package/packages/love-ui/src/components/product-label.tsx +0 -61
- package/packages/love-ui/src/components/products-dropdown.tsx +0 -81
- package/packages/love-ui/src/components/site-cta.tsx +0 -19
- package/packages/love-ui/src/components/site-footer.tsx +0 -13
- package/packages/love-ui/src/components/site-header.tsx +0 -56
- package/packages/love-ui/src/components/theme-provider.tsx +0 -22
- package/packages/love-ui/src/hooks/use-copy-to-clipboard.ts +0 -38
- package/packages/love-ui/src/hooks/use-media.tsx +0 -22
- package/packages/love-ui/src/lib/config.ts +0 -20
- package/packages/love-ui/src/lib/highlight-code.ts +0 -86
- package/packages/love-ui/src/lib/utils.ts +0 -10
- package/packages/love-ui/src/styles/globals.css +0 -349
- package/packages/love-ui/src/ui/accordion.tsx +0 -66
- package/packages/love-ui/src/ui/alert-dialog.tsx +0 -136
- package/packages/love-ui/src/ui/alert.tsx +0 -81
- package/packages/love-ui/src/ui/autocomplete.tsx +0 -282
- package/packages/love-ui/src/ui/avatar.tsx +0 -46
- package/packages/love-ui/src/ui/badge.tsx +0 -57
- package/packages/love-ui/src/ui/breadcrumb.tsx +0 -110
- package/packages/love-ui/src/ui/button.tsx +0 -85
- package/packages/love-ui/src/ui/card.tsx +0 -114
- package/packages/love-ui/src/ui/chart.tsx +0 -367
- package/packages/love-ui/src/ui/checkbox-group.tsx +0 -16
- package/packages/love-ui/src/ui/checkbox.tsx +0 -67
- package/packages/love-ui/src/ui/collapsible.tsx +0 -45
- package/packages/love-ui/src/ui/combobox.tsx +0 -355
- package/packages/love-ui/src/ui/command.tsx +0 -185
- package/packages/love-ui/src/ui/dialog.tsx +0 -135
- package/packages/love-ui/src/ui/empty.tsx +0 -128
- package/packages/love-ui/src/ui/field.tsx +0 -96
- package/packages/love-ui/src/ui/fieldset.tsx +0 -29
- package/packages/love-ui/src/ui/form.tsx +0 -17
- package/packages/love-ui/src/ui/frame.tsx +0 -82
- package/packages/love-ui/src/ui/group.tsx +0 -62
- package/packages/love-ui/src/ui/input.tsx +0 -41
- package/packages/love-ui/src/ui/kbd.tsx +0 -27
- package/packages/love-ui/src/ui/label.tsx +0 -16
- package/packages/love-ui/src/ui/menu.tsx +0 -255
- package/packages/love-ui/src/ui/meter.tsx +0 -67
- package/packages/love-ui/src/ui/number-field.tsx +0 -161
- package/packages/love-ui/src/ui/pagination.tsx +0 -136
- package/packages/love-ui/src/ui/popover.tsx +0 -158
- package/packages/love-ui/src/ui/preview-card.tsx +0 -55
- package/packages/love-ui/src/ui/progress.tsx +0 -81
- package/packages/love-ui/src/ui/radio-group.tsx +0 -36
- package/packages/love-ui/src/ui/scroll-area.tsx +0 -62
- package/packages/love-ui/src/ui/select.tsx +0 -186
- package/packages/love-ui/src/ui/separator.tsx +0 -23
- package/packages/love-ui/src/ui/sheet.tsx +0 -135
- package/packages/love-ui/src/ui/skeleton.tsx +0 -18
- package/packages/love-ui/src/ui/slider.tsx +0 -76
- package/packages/love-ui/src/ui/switch.tsx +0 -27
- package/packages/love-ui/src/ui/table.tsx +0 -127
- package/packages/love-ui/src/ui/tabs.tsx +0 -90
- package/packages/love-ui/src/ui/textarea.tsx +0 -36
- package/packages/love-ui/src/ui/toast.tsx +0 -169
- package/packages/love-ui/src/ui/toggle-group.tsx +0 -84
- package/packages/love-ui/src/ui/toggle.tsx +0 -45
- package/packages/love-ui/src/ui/toolbar.tsx +0 -83
- package/packages/love-ui/src/ui/tooltip.tsx +0 -57
- package/packages/love-ui/tsconfig.json +0 -11
- package/packages/love-ui/tsconfig.lint.json +0 -8
- package/packages/loveui-skills/SKILL.md +0 -99
- package/packages/loveui-skills/agents/openai.yaml +0 -11
- package/packages/loveui-skills/references/design-directions.md +0 -60
- package/packages/loveui-skills/references/mcp-catalog-workflow.md +0 -68
- package/packages/loveui-skills/references/page-blueprints.md +0 -76
- package/packages/loveui-skills/references/quality-gates.md +0 -51
- package/packages/marquee/index.tsx +0 -59
- package/packages/marquee/package.json +0 -24
- package/packages/marquee/tsconfig.json +0 -13
- package/packages/mini-calendar/index.tsx +0 -230
- package/packages/mini-calendar/package.json +0 -27
- package/packages/mini-calendar/tsconfig.json +0 -13
- package/packages/patterns/accordion/form/accordion-form-1.tsx +0 -83
- package/packages/patterns/accordion/form/accordion-form-2.tsx +0 -89
- package/packages/patterns/accordion/multi-level/accordion-multi-level-1.tsx +0 -83
- package/packages/patterns/accordion/multi-level/accordion-multi-level-2.tsx +0 -92
- package/packages/patterns/accordion/multi-level/accordion-multi-level-3.tsx +0 -89
- package/packages/patterns/accordion/multi-level/accordion-multi-level-4.tsx +0 -89
- package/packages/patterns/accordion/standard/accordion-standard-1.tsx +0 -43
- package/packages/patterns/accordion/standard/accordion-standard-2.tsx +0 -45
- package/packages/patterns/accordion/standard/accordion-standard-3.tsx +0 -52
- package/packages/patterns/accordion/standard/accordion-standard-4.tsx +0 -52
- package/packages/patterns/accordion/standard/accordion-standard-5.tsx +0 -59
- package/packages/patterns/accordion/standard/accordion-standard-6.tsx +0 -72
- package/packages/patterns/accordion/standard/accordion-standard-7.tsx +0 -79
- package/packages/patterns/accordion/subtitle/accordion-subtitle-1.tsx +0 -56
- package/packages/patterns/accordion/subtitle/accordion-subtitle-2.tsx +0 -66
- package/packages/patterns/accordion/subtitle/accordion-subtitle-3.tsx +0 -63
- package/packages/patterns/accordion/subtitle/accordion-subtitle-4.tsx +0 -66
- package/packages/patterns/accordion/tabs/accordion-tabs-1.tsx +0 -52
- package/packages/patterns/accordion/tabs/accordion-tabs-2.tsx +0 -43
- package/packages/patterns/accordion/tabs/accordion-tabs-3.tsx +0 -52
- package/packages/patterns/accordion/tabs/accordion-tabs-4.tsx +0 -45
- package/packages/patterns/alert/error/alert-error-1.tsx +0 -11
- package/packages/patterns/alert/error/alert-error-2.tsx +0 -14
- package/packages/patterns/alert/error/alert-error-3.tsx +0 -22
- package/packages/patterns/alert/error/alert-error-4.tsx +0 -27
- package/packages/patterns/alert/error/alert-error-5.tsx +0 -29
- package/packages/patterns/alert/info/alert-info-1.tsx +0 -11
- package/packages/patterns/alert/info/alert-info-2.tsx +0 -14
- package/packages/patterns/alert/info/alert-info-3.tsx +0 -26
- package/packages/patterns/alert/info/alert-info-4.tsx +0 -31
- package/packages/patterns/alert/info/alert-info-5.tsx +0 -34
- package/packages/patterns/alert/standard/alert-standard-1.tsx +0 -11
- package/packages/patterns/alert/standard/alert-standard-2.tsx +0 -14
- package/packages/patterns/alert/standard/alert-standard-3.tsx +0 -22
- package/packages/patterns/alert/standard/alert-standard-4.tsx +0 -27
- package/packages/patterns/alert/standard/alert-standard-5.tsx +0 -29
- package/packages/patterns/alert/success/alert-success-1.tsx +0 -11
- package/packages/patterns/alert/success/alert-success-2.tsx +0 -14
- package/packages/patterns/alert/success/alert-success-3.tsx +0 -26
- package/packages/patterns/alert/success/alert-success-4.tsx +0 -31
- package/packages/patterns/alert/success/alert-success-5.tsx +0 -33
- package/packages/patterns/alert/warning/alert-warning-1.tsx +0 -11
- package/packages/patterns/alert/warning/alert-warning-2.tsx +0 -14
- package/packages/patterns/alert/warning/alert-warning-3.tsx +0 -26
- package/packages/patterns/alert/warning/alert-warning-4.tsx +0 -32
- package/packages/patterns/alert/warning/alert-warning-5.tsx +0 -33
- package/packages/patterns/alert-dialog/confirmation/alert-dialog-confirmation-1.tsx +0 -37
- package/packages/patterns/alert-dialog/confirmation/alert-dialog-confirmation-2.tsx +0 -41
- package/packages/patterns/alert-dialog/confirmation/alert-dialog-confirmation-3.tsx +0 -43
- package/packages/patterns/alert-dialog/confirmation/alert-dialog-confirmation-4.tsx +0 -37
- package/packages/patterns/alert-dialog/confirmation/alert-dialog-confirmation-5.tsx +0 -36
- package/packages/patterns/alert-dialog/confirmation/alert-dialog-confirmation-6.tsx +0 -40
- package/packages/patterns/alert-dialog/custom-actions/alert-dialog-custom-actions-1.tsx +0 -41
- package/packages/patterns/alert-dialog/custom-actions/alert-dialog-custom-actions-2.tsx +0 -42
- package/packages/patterns/alert-dialog/custom-actions/alert-dialog-custom-actions-3.tsx +0 -41
- package/packages/patterns/alert-dialog/custom-actions/alert-dialog-custom-actions-4.tsx +0 -54
- package/packages/patterns/alert-dialog/custom-actions/alert-dialog-custom-actions-5.tsx +0 -40
- package/packages/patterns/alert-dialog/destructive/alert-dialog-destructive-1.tsx +0 -39
- package/packages/patterns/alert-dialog/destructive/alert-dialog-destructive-2.tsx +0 -43
- package/packages/patterns/alert-dialog/destructive/alert-dialog-destructive-3.tsx +0 -51
- package/packages/patterns/alert-dialog/destructive/alert-dialog-destructive-4.tsx +0 -46
- package/packages/patterns/alert-dialog/destructive/alert-dialog-destructive-5.tsx +0 -46
- package/packages/patterns/alert-dialog/destructive/alert-dialog-destructive-6.tsx +0 -46
- package/packages/patterns/alert-dialog/destructive/alert-dialog-destructive-7.tsx +0 -43
- package/packages/patterns/alert-dialog/form/alert-dialog-form-1.tsx +0 -47
- package/packages/patterns/alert-dialog/form/alert-dialog-form-2.tsx +0 -53
- package/packages/patterns/alert-dialog/form/alert-dialog-form-3.tsx +0 -64
- package/packages/patterns/alert-dialog/form/alert-dialog-form-4.tsx +0 -47
- package/packages/patterns/alert-dialog/form/alert-dialog-form-5.tsx +0 -55
- package/packages/patterns/alert-dialog/form/alert-dialog-form-6.tsx +0 -69
- package/packages/patterns/alert-dialog/form/alert-dialog-form-7.tsx +0 -73
- package/packages/patterns/alert-dialog/informational/alert-dialog-informational-1.tsx +0 -35
- package/packages/patterns/alert-dialog/informational/alert-dialog-informational-2.tsx +0 -39
- package/packages/patterns/alert-dialog/informational/alert-dialog-informational-3.tsx +0 -48
- package/packages/patterns/alert-dialog/informational/alert-dialog-informational-4.tsx +0 -41
- package/packages/patterns/alert-dialog/informational/alert-dialog-informational-5.tsx +0 -42
- package/packages/patterns/alert-dialog/informational/alert-dialog-informational-6.tsx +0 -43
- package/packages/patterns/alert-dialog/informational/alert-dialog-informational-7.tsx +0 -58
- package/packages/patterns/alert-dialog/success/alert-dialog-success-1.tsx +0 -34
- package/packages/patterns/alert-dialog/success/alert-dialog-success-2.tsx +0 -39
- package/packages/patterns/alert-dialog/success/alert-dialog-success-3.tsx +0 -39
- package/packages/patterns/alert-dialog/success/alert-dialog-success-4.tsx +0 -52
- package/packages/patterns/alert-dialog/success/alert-dialog-success-5.tsx +0 -50
- package/packages/patterns/alert-dialog/success/alert-dialog-success-6.tsx +0 -41
- package/packages/patterns/alert-dialog/success/alert-dialog-success-7.tsx +0 -44
- package/packages/patterns/aspect-ratio/standard/aspect-ratio-standard-1.tsx +0 -15
- package/packages/patterns/aspect-ratio/standard/aspect-ratio-standard-2.tsx +0 -15
- package/packages/patterns/aspect-ratio/standard/aspect-ratio-standard-3.tsx +0 -15
- package/packages/patterns/aspect-ratio/standard/aspect-ratio-standard-4.tsx +0 -15
- package/packages/patterns/aspect-ratio/standard/aspect-ratio-standard-5.tsx +0 -15
- package/packages/patterns/aspect-ratio/standard/aspect-ratio-standard-6.tsx +0 -15
- package/packages/patterns/aspect-ratio/standard/aspect-ratio-standard-7.tsx +0 -15
- package/packages/patterns/avatar/square/avatar-square-1.tsx +0 -15
- package/packages/patterns/avatar/square/avatar-square-2.tsx +0 -11
- package/packages/patterns/avatar/square/avatar-square-3.tsx +0 -14
- package/packages/patterns/avatar/square/avatar-square-4.tsx +0 -18
- package/packages/patterns/avatar/square/avatar-square-5.tsx +0 -18
- package/packages/patterns/avatar/square/avatar-square-6.tsx +0 -21
- package/packages/patterns/avatar/square/avatar-square-7.tsx +0 -20
- package/packages/patterns/avatar/standard/avatar-standard-1.tsx +0 -15
- package/packages/patterns/avatar/standard/avatar-standard-2.tsx +0 -11
- package/packages/patterns/avatar/standard/avatar-standard-3.tsx +0 -14
- package/packages/patterns/avatar/standard/avatar-standard-4.tsx +0 -18
- package/packages/patterns/avatar/standard/avatar-standard-5.tsx +0 -18
- package/packages/patterns/avatar/standard/avatar-standard-6.tsx +0 -21
- package/packages/patterns/avatar/standard/avatar-standard-7.tsx +0 -20
- package/packages/patterns/badge/destructive/badge-destructive-1.tsx +0 -7
- package/packages/patterns/badge/destructive/badge-destructive-2.tsx +0 -13
- package/packages/patterns/badge/destructive/badge-destructive-3.tsx +0 -13
- package/packages/patterns/badge/destructive/badge-destructive-4.tsx +0 -13
- package/packages/patterns/badge/destructive/badge-destructive-5.tsx +0 -14
- package/packages/patterns/badge/outline/badge-outline-1.tsx +0 -7
- package/packages/patterns/badge/outline/badge-outline-2.tsx +0 -13
- package/packages/patterns/badge/outline/badge-outline-3.tsx +0 -13
- package/packages/patterns/badge/outline/badge-outline-4.tsx +0 -13
- package/packages/patterns/badge/outline/badge-outline-5.tsx +0 -14
- package/packages/patterns/badge/secondary/badge-secondary-1.tsx +0 -7
- package/packages/patterns/badge/secondary/badge-secondary-2.tsx +0 -13
- package/packages/patterns/badge/secondary/badge-secondary-3.tsx +0 -13
- package/packages/patterns/badge/secondary/badge-secondary-4.tsx +0 -13
- package/packages/patterns/badge/secondary/badge-secondary-5.tsx +0 -14
- package/packages/patterns/badge/standard/badge-standard-1.tsx +0 -7
- package/packages/patterns/badge/standard/badge-standard-2.tsx +0 -13
- package/packages/patterns/badge/standard/badge-standard-3.tsx +0 -13
- package/packages/patterns/badge/standard/badge-standard-4.tsx +0 -13
- package/packages/patterns/badge/standard/badge-standard-5.tsx +0 -11
- package/packages/patterns/breadcrumb/home-icon/breadcrumb-home-icon-1.tsx +0 -38
- package/packages/patterns/breadcrumb/home-icon/breadcrumb-home-icon-2.tsx +0 -52
- package/packages/patterns/breadcrumb/home-icon/breadcrumb-home-icon-3.tsx +0 -42
- package/packages/patterns/breadcrumb/home-icon/breadcrumb-home-icon-4.tsx +0 -33
- package/packages/patterns/breadcrumb/home-icon/breadcrumb-home-icon-5.tsx +0 -33
- package/packages/patterns/breadcrumb/home-icon/breadcrumb-home-icon-6.tsx +0 -37
- package/packages/patterns/breadcrumb/home-icon/breadcrumb-home-icon-7.tsx +0 -49
- package/packages/patterns/breadcrumb/standard/breadcrumb-standard-1.tsx +0 -35
- package/packages/patterns/breadcrumb/standard/breadcrumb-standard-2.tsx +0 -50
- package/packages/patterns/breadcrumb/standard/breadcrumb-standard-3.tsx +0 -43
- package/packages/patterns/breadcrumb/standard/breadcrumb-standard-4.tsx +0 -30
- package/packages/patterns/breadcrumb/standard/breadcrumb-standard-5.tsx +0 -30
- package/packages/patterns/breadcrumb/standard/breadcrumb-standard-6.tsx +0 -35
- package/packages/patterns/breadcrumb/standard/breadcrumb-standard-7.tsx +0 -46
- package/packages/patterns/button/destructive/button-destructive-1.tsx +0 -7
- package/packages/patterns/button/destructive/button-destructive-2.tsx +0 -13
- package/packages/patterns/button/destructive/button-destructive-3.tsx +0 -13
- package/packages/patterns/button/destructive/button-destructive-4.tsx +0 -11
- package/packages/patterns/button/destructive/button-destructive-5.tsx +0 -13
- package/packages/patterns/button/destructive/button-destructive-6.tsx +0 -15
- package/packages/patterns/button/destructive/button-destructive-7.tsx +0 -13
- package/packages/patterns/button/link/button-link-1.tsx +0 -7
- package/packages/patterns/button/link/button-link-2.tsx +0 -13
- package/packages/patterns/button/link/button-link-3.tsx +0 -13
- package/packages/patterns/button/link/button-link-4.tsx +0 -11
- package/packages/patterns/button/link/button-link-5.tsx +0 -13
- package/packages/patterns/button/link/button-link-6.tsx +0 -15
- package/packages/patterns/button/link/button-link-7.tsx +0 -13
- package/packages/patterns/button/outline/button-outline-1.tsx +0 -7
- package/packages/patterns/button/outline/button-outline-2.tsx +0 -13
- package/packages/patterns/button/outline/button-outline-3.tsx +0 -13
- package/packages/patterns/button/outline/button-outline-4.tsx +0 -11
- package/packages/patterns/button/outline/button-outline-5.tsx +0 -13
- package/packages/patterns/button/outline/button-outline-6.tsx +0 -15
- package/packages/patterns/button/outline/button-outline-7.tsx +0 -13
- package/packages/patterns/button/secondary/button-secondary-1.tsx +0 -7
- package/packages/patterns/button/secondary/button-secondary-2.tsx +0 -13
- package/packages/patterns/button/secondary/button-secondary-3.tsx +0 -13
- package/packages/patterns/button/secondary/button-secondary-4.tsx +0 -11
- package/packages/patterns/button/secondary/button-secondary-5.tsx +0 -13
- package/packages/patterns/button/secondary/button-secondary-6.tsx +0 -15
- package/packages/patterns/button/secondary/button-secondary-7.tsx +0 -13
- package/packages/patterns/button/standard/button-standard-1.tsx +0 -7
- package/packages/patterns/button/standard/button-standard-2.tsx +0 -13
- package/packages/patterns/button/standard/button-standard-3.tsx +0 -13
- package/packages/patterns/button/standard/button-standard-4.tsx +0 -7
- package/packages/patterns/button/standard/button-standard-5.tsx +0 -13
- package/packages/patterns/button/standard/button-standard-6.tsx +0 -15
- package/packages/patterns/button/standard/button-standard-7.tsx +0 -13
- package/packages/patterns/button-group/actions/button-group-actions-1.tsx +0 -37
- package/packages/patterns/button-group/actions/button-group-actions-2.tsx +0 -44
- package/packages/patterns/button-group/actions/button-group-actions-3.tsx +0 -46
- package/packages/patterns/button-group/actions/button-group-actions-4.tsx +0 -41
- package/packages/patterns/button-group/advanced/button-group-advanced-1.tsx +0 -54
- package/packages/patterns/button-group/advanced/button-group-advanced-2.tsx +0 -49
- package/packages/patterns/button-group/advanced/button-group-advanced-3.tsx +0 -55
- package/packages/patterns/button-group/advanced/button-group-advanced-4.tsx +0 -78
- package/packages/patterns/button-group/badges/button-group-badges-1.tsx +0 -28
- package/packages/patterns/button-group/badges/button-group-badges-2.tsx +0 -32
- package/packages/patterns/button-group/badges/button-group-badges-3.tsx +0 -32
- package/packages/patterns/button-group/badges/button-group-badges-4.tsx +0 -39
- package/packages/patterns/button-group/display/button-group-display-1.tsx +0 -68
- package/packages/patterns/button-group/display/button-group-display-2.tsx +0 -67
- package/packages/patterns/button-group/display/button-group-display-3.tsx +0 -85
- package/packages/patterns/button-group/display/button-group-display-4.tsx +0 -78
- package/packages/patterns/button-group/forms/button-group-forms-1.tsx +0 -78
- package/packages/patterns/button-group/forms/button-group-forms-2.tsx +0 -78
- package/packages/patterns/button-group/forms/button-group-forms-3.tsx +0 -71
- package/packages/patterns/button-group/forms/button-group-forms-4.tsx +0 -60
- package/packages/patterns/button-group/interactive/button-group-interactive-1.tsx +0 -68
- package/packages/patterns/button-group/interactive/button-group-interactive-2.tsx +0 -79
- package/packages/patterns/button-group/interactive/button-group-interactive-3.tsx +0 -82
- package/packages/patterns/button-group/interactive/button-group-interactive-4.tsx +0 -79
- package/packages/patterns/button-group/media/button-group-media-1.tsx +0 -66
- package/packages/patterns/button-group/media/button-group-media-2.tsx +0 -62
- package/packages/patterns/button-group/media/button-group-media-3.tsx +0 -67
- package/packages/patterns/button-group/media/button-group-media-4.tsx +0 -62
- package/packages/patterns/button-group/navigation/button-group-navigation-1.tsx +0 -76
- package/packages/patterns/button-group/navigation/button-group-navigation-2.tsx +0 -70
- package/packages/patterns/button-group/navigation/button-group-navigation-3.tsx +0 -73
- package/packages/patterns/button-group/patterns/button-group-patterns-1.tsx +0 -73
- package/packages/patterns/button-group/patterns/button-group-patterns-2.tsx +0 -60
- package/packages/patterns/button-group/patterns/button-group-patterns-3.tsx +0 -79
- package/packages/patterns/button-group/patterns/button-group-patterns-4.tsx +0 -53
- package/packages/patterns/button-group/standard/button-group-standard-1.tsx +0 -32
- package/packages/patterns/button-group/standard/button-group-standard-2.tsx +0 -30
- package/packages/patterns/button-group/standard/button-group-standard-3.tsx +0 -20
- package/packages/patterns/button-group/standard/button-group-standard-4.tsx +0 -39
- package/packages/patterns/calendar/dialog/calendar-dialog-1.tsx +0 -58
- package/packages/patterns/calendar/dialog/calendar-dialog-2.tsx +0 -97
- package/packages/patterns/calendar/dialog/calendar-dialog-3.tsx +0 -78
- package/packages/patterns/calendar/dialog/calendar-dialog-4.tsx +0 -62
- package/packages/patterns/calendar/dialog/calendar-dialog-5.tsx +0 -82
- package/packages/patterns/calendar/dialog/calendar-dialog-6.tsx +0 -63
- package/packages/patterns/calendar/dialog/calendar-dialog-7.tsx +0 -59
- package/packages/patterns/calendar/dialog/calendar-dialog-8.tsx +0 -78
- package/packages/patterns/calendar/standard/calendar-standard-1.tsx +0 -40
- package/packages/patterns/calendar/standard/calendar-standard-2.tsx +0 -77
- package/packages/patterns/calendar/standard/calendar-standard-3.tsx +0 -59
- package/packages/patterns/calendar/standard/calendar-standard-4.tsx +0 -44
- package/packages/patterns/calendar/standard/calendar-standard-5.tsx +0 -65
- package/packages/patterns/calendar/standard/calendar-standard-6.tsx +0 -45
- package/packages/patterns/calendar/standard/calendar-standard-7.tsx +0 -41
- package/packages/patterns/calendar/standard/calendar-standard-8.tsx +0 -60
- package/packages/patterns/card/standard/card-standard-1.tsx +0 -29
- package/packages/patterns/card/standard/card-standard-2.tsx +0 -72
- package/packages/patterns/card/standard/card-standard-3.tsx +0 -57
- package/packages/patterns/card/standard/card-standard-4.tsx +0 -56
- package/packages/patterns/carousel/standard/carousel-standard-1.tsx +0 -35
- package/packages/patterns/carousel/standard/carousel-standard-2.tsx +0 -65
- package/packages/patterns/carousel/standard/carousel-standard-3.tsx +0 -80
- package/packages/patterns/carousel/standard/carousel-standard-4.tsx +0 -50
- package/packages/patterns/chart/area/chart-area-axes.tsx +0 -76
- package/packages/patterns/chart/area/chart-area-default.tsx +0 -65
- package/packages/patterns/chart/area/chart-area-gradient.tsx +0 -101
- package/packages/patterns/chart/area/chart-area-icons.tsx +0 -84
- package/packages/patterns/chart/area/chart-area-interactive.tsx +0 -206
- package/packages/patterns/chart/area/chart-area-legend.tsx +0 -81
- package/packages/patterns/chart/area/chart-area-linear.tsx +0 -64
- package/packages/patterns/chart/area/chart-area-stacked-expand.tsx +0 -92
- package/packages/patterns/chart/area/chart-area-stacked.tsx +0 -78
- package/packages/patterns/chart/area/chart-area-step.tsx +0 -67
- package/packages/patterns/chart/bar/chart-bar-active.tsx +0 -86
- package/packages/patterns/chart/bar/chart-bar-default.tsx +0 -52
- package/packages/patterns/chart/bar/chart-bar-horizontal.tsx +0 -60
- package/packages/patterns/chart/bar/chart-bar-interactive.tsx +0 -176
- package/packages/patterns/chart/bar/chart-bar-label-custom.tsx +0 -96
- package/packages/patterns/chart/bar/chart-bar-label.tsx +0 -65
- package/packages/patterns/chart/bar/chart-bar-mixed.tsx +0 -80
- package/packages/patterns/chart/bar/chart-bar-multiple.tsx +0 -57
- package/packages/patterns/chart/bar/chart-bar-negative.tsx +0 -52
- package/packages/patterns/chart/bar/chart-bar-stacked.tsx +0 -67
- package/packages/patterns/chart/line/chart-line-default.tsx +0 -65
- package/packages/patterns/chart/line/chart-line-dots-colors.tsx +0 -93
- package/packages/patterns/chart/line/chart-line-dots-custom.tsx +0 -83
- package/packages/patterns/chart/line/chart-line-dots.tsx +0 -74
- package/packages/patterns/chart/line/chart-line-interactive.tsx +0 -182
- package/packages/patterns/chart/line/chart-line-label-custom.tsx +0 -100
- package/packages/patterns/chart/line/chart-line-label.tsx +0 -82
- package/packages/patterns/chart/line/chart-line-linear.tsx +0 -65
- package/packages/patterns/chart/line/chart-line-multiple.tsx +0 -73
- package/packages/patterns/chart/line/chart-line-step.tsx +0 -65
- package/packages/patterns/chart/pie/chart-pie-donut-active.tsx +0 -76
- package/packages/patterns/chart/pie/chart-pie-donut-text.tsx +0 -101
- package/packages/patterns/chart/pie/chart-pie-donut.tsx +0 -70
- package/packages/patterns/chart/pie/chart-pie-interactive.tsx +0 -125
- package/packages/patterns/chart/pie/chart-pie-label-custom.tsx +0 -82
- package/packages/patterns/chart/pie/chart-pie-label-list.tsx +0 -74
- package/packages/patterns/chart/pie/chart-pie-label.tsx +0 -62
- package/packages/patterns/chart/pie/chart-pie-legend.tsx +0 -65
- package/packages/patterns/chart/pie/chart-pie-separator-none.tsx +0 -65
- package/packages/patterns/chart/pie/chart-pie-simple.tsx +0 -65
- package/packages/patterns/chart/pie/chart-pie-stacked.tsx +0 -94
- package/packages/patterns/chart/radar/chart-radar-default.tsx +0 -50
- package/packages/patterns/chart/radar/chart-radar-dots.tsx +0 -54
- package/packages/patterns/chart/radar/chart-radar-grid-circle-fill.tsx +0 -53
- package/packages/patterns/chart/radar/chart-radar-grid-circle-no-lines.tsx +0 -57
- package/packages/patterns/chart/radar/chart-radar-grid-circle.tsx +0 -57
- package/packages/patterns/chart/radar/chart-radar-grid-custom.tsx +0 -53
- package/packages/patterns/chart/radar/chart-radar-grid-fill.tsx +0 -53
- package/packages/patterns/chart/radar/chart-radar-grid-none.tsx +0 -56
- package/packages/patterns/chart/radar/chart-radar-icons.tsx +0 -70
- package/packages/patterns/chart/radar/chart-radar-label-custom.tsx +0 -95
- package/packages/patterns/chart/radar/chart-radar-legend.tsx +0 -67
- package/packages/patterns/chart/radar/chart-radar-lines-only.tsx +0 -66
- package/packages/patterns/chart/radar/chart-radar-multiple.tsx +0 -58
- package/packages/patterns/chart/radar/chart-radar-radius.tsx +0 -63
- package/packages/patterns/chart/radial/chart-radial-grid.tsx +0 -66
- package/packages/patterns/chart/radial/chart-radial-label.tsx +0 -78
- package/packages/patterns/chart/radial/chart-radial-shape.tsx +0 -85
- package/packages/patterns/chart/radial/chart-radial-simple.tsx +0 -65
- package/packages/patterns/chart/radial/chart-radial-stacked.tsx +0 -88
- package/packages/patterns/chart/radial/chart-radial-text.tsx +0 -86
- package/packages/patterns/chart/tooltip/chart-tooltip-advanced.tsx +0 -107
- package/packages/patterns/chart/tooltip/chart-tooltip-default.tsx +0 -74
- package/packages/patterns/chart/tooltip/chart-tooltip-formatter.tsx +0 -86
- package/packages/patterns/chart/tooltip/chart-tooltip-icons.tsx +0 -74
- package/packages/patterns/chart/tooltip/chart-tooltip-indicator-line.tsx +0 -74
- package/packages/patterns/chart/tooltip/chart-tooltip-indicator-none.tsx +0 -71
- package/packages/patterns/chart/tooltip/chart-tooltip-label-custom.tsx +0 -76
- package/packages/patterns/chart/tooltip/chart-tooltip-label-formatter.tsx +0 -81
- package/packages/patterns/chart/tooltip/chart-tooltip-label-none.tsx +0 -71
- package/packages/patterns/checkbox/standard/checkbox-standard-1.tsx +0 -13
- package/packages/patterns/checkbox/standard/checkbox-standard-11.tsx +0 -18
- package/packages/patterns/checkbox/standard/checkbox-standard-12.tsx +0 -22
- package/packages/patterns/checkbox/standard/checkbox-standard-13.tsx +0 -64
- package/packages/patterns/checkbox/standard/checkbox-standard-2.tsx +0 -26
- package/packages/patterns/checkbox/standard/checkbox-standard-3.tsx +0 -16
- package/packages/patterns/checkbox/standard/checkbox-standard-4.tsx +0 -23
- package/packages/patterns/checkbox/standard/checkbox-standard-5.tsx +0 -33
- package/packages/patterns/checkbox/standard/checkbox-standard-6.tsx +0 -19
- package/packages/patterns/checkbox/standard/checkbox-standard-7.tsx +0 -25
- package/packages/patterns/checkbox/standard/checkbox-standard-8.tsx +0 -25
- package/packages/patterns/checkbox/standard/checkbox-standard-9.tsx +0 -23
- package/packages/patterns/collapsible/card/collapsible-card-1.tsx +0 -26
- package/packages/patterns/collapsible/card/collapsible-card-2.tsx +0 -27
- package/packages/patterns/collapsible/card/collapsible-card-3.tsx +0 -33
- package/packages/patterns/collapsible/card/collapsible-card-4.tsx +0 -27
- package/packages/patterns/collapsible/card/collapsible-card-5.tsx +0 -24
- package/packages/patterns/collapsible/faq/collapsible-faq-1.tsx +0 -26
- package/packages/patterns/collapsible/faq/collapsible-faq-2.tsx +0 -25
- package/packages/patterns/collapsible/faq/collapsible-faq-3.tsx +0 -23
- package/packages/patterns/collapsible/faq/collapsible-faq-4.tsx +0 -26
- package/packages/patterns/collapsible/faq/collapsible-faq-5.tsx +0 -30
- package/packages/patterns/collapsible/outline/collapsible-outline-1.tsx +0 -32
- package/packages/patterns/collapsible/outline/collapsible-outline-2.tsx +0 -30
- package/packages/patterns/collapsible/outline/collapsible-outline-3.tsx +0 -25
- package/packages/patterns/collapsible/outline/collapsible-outline-4.tsx +0 -30
- package/packages/patterns/collapsible/sidebar/collapsible-sidebar-1.tsx +0 -39
- package/packages/patterns/collapsible/sidebar/collapsible-sidebar-2.tsx +0 -40
- package/packages/patterns/collapsible/sidebar/collapsible-sidebar-3.tsx +0 -35
- package/packages/patterns/collapsible/sidebar/collapsible-sidebar-4.tsx +0 -32
- package/packages/patterns/collapsible/standard/collapsible-standard-1.tsx +0 -26
- package/packages/patterns/collapsible/standard/collapsible-standard-2.tsx +0 -23
- package/packages/patterns/collapsible/standard/collapsible-standard-3.tsx +0 -28
- package/packages/patterns/collapsible/standard/collapsible-standard-4.tsx +0 -25
- package/packages/patterns/collapsible/standard/collapsible-standard-5.tsx +0 -35
- package/packages/patterns/combobox/custom-actions/combobox-custom-actions-1.tsx +0 -108
- package/packages/patterns/combobox/custom-actions/combobox-custom-actions-2.tsx +0 -95
- package/packages/patterns/combobox/custom-actions/combobox-custom-actions-3.tsx +0 -115
- package/packages/patterns/combobox/custom-actions/combobox-custom-actions-4.tsx +0 -119
- package/packages/patterns/combobox/custom-actions/combobox-custom-actions-5.tsx +0 -118
- package/packages/patterns/combobox/custom-actions/combobox-custom-actions-6.tsx +0 -88
- package/packages/patterns/combobox/custom-actions/combobox-custom-actions-7.tsx +0 -94
- package/packages/patterns/combobox/grouped/combobox-grouped-1.tsx +0 -109
- package/packages/patterns/combobox/grouped/combobox-grouped-2.tsx +0 -134
- package/packages/patterns/combobox/grouped/combobox-grouped-3.tsx +0 -97
- package/packages/patterns/combobox/grouped/combobox-grouped-4.tsx +0 -105
- package/packages/patterns/combobox/grouped/combobox-grouped-5.tsx +0 -118
- package/packages/patterns/combobox/grouped/combobox-grouped-6.tsx +0 -117
- package/packages/patterns/combobox/grouped/combobox-grouped-7.tsx +0 -116
- package/packages/patterns/combobox/multi-select/combobox-multi-select-1.tsx +0 -117
- package/packages/patterns/combobox/multi-select/combobox-multi-select-2.tsx +0 -109
- package/packages/patterns/combobox/multi-select/combobox-multi-select-3.tsx +0 -96
- package/packages/patterns/combobox/multi-select/combobox-multi-select-4.tsx +0 -83
- package/packages/patterns/combobox/multi-select/combobox-multi-select-5.tsx +0 -104
- package/packages/patterns/combobox/multi-select/combobox-multi-select-6.tsx +0 -109
- package/packages/patterns/combobox/multi-select/combobox-multi-select-7.tsx +0 -102
- package/packages/patterns/combobox/rich-content/combobox-rich-content-1.tsx +0 -114
- package/packages/patterns/combobox/rich-content/combobox-rich-content-2.tsx +0 -98
- package/packages/patterns/combobox/rich-content/combobox-rich-content-3.tsx +0 -94
- package/packages/patterns/combobox/rich-content/combobox-rich-content-4.tsx +0 -112
- package/packages/patterns/combobox/rich-content/combobox-rich-content-5.tsx +0 -102
- package/packages/patterns/combobox/rich-content/combobox-rich-content-6.tsx +0 -95
- package/packages/patterns/combobox/rich-content/combobox-rich-content-7.tsx +0 -114
- package/packages/patterns/combobox/standard/combobox-standard-1.tsx +0 -82
- package/packages/patterns/combobox/standard/combobox-standard-2.tsx +0 -82
- package/packages/patterns/combobox/standard/combobox-standard-3.tsx +0 -96
- package/packages/patterns/combobox/standard/combobox-standard-4.tsx +0 -85
- package/packages/patterns/combobox/standard/combobox-standard-5.tsx +0 -85
- package/packages/patterns/combobox/standard/combobox-standard-6.tsx +0 -81
- package/packages/patterns/combobox/standard/combobox-standard-7.tsx +0 -84
- package/packages/patterns/combobox/with-states/combobox-with-states-1.tsx +0 -91
- package/packages/patterns/combobox/with-states/combobox-with-states-2.tsx +0 -100
- package/packages/patterns/combobox/with-states/combobox-with-states-3.tsx +0 -95
- package/packages/patterns/combobox/with-states/combobox-with-states-4.tsx +0 -84
- package/packages/patterns/combobox/with-states/combobox-with-states-5.tsx +0 -89
- package/packages/patterns/combobox/with-states/combobox-with-states-6.tsx +0 -86
- package/packages/patterns/combobox/with-states/combobox-with-states-7.tsx +0 -29
- package/packages/patterns/command/dialog/command-dialog-1.tsx +0 -37
- package/packages/patterns/command/dialog/command-dialog-2.tsx +0 -72
- package/packages/patterns/command/dialog/command-dialog-3.tsx +0 -66
- package/packages/patterns/command/dialog/command-dialog-4.tsx +0 -64
- package/packages/patterns/command/dialog/command-dialog-5.tsx +0 -65
- package/packages/patterns/command/dialog/command-dialog-6.tsx +0 -68
- package/packages/patterns/command/dialog/command-dialog-7.tsx +0 -62
- package/packages/patterns/command/popover/command-popover-1.tsx +0 -39
- package/packages/patterns/command/popover/command-popover-2.tsx +0 -74
- package/packages/patterns/command/popover/command-popover-3.tsx +0 -68
- package/packages/patterns/command/popover/command-popover-4.tsx +0 -66
- package/packages/patterns/command/popover/command-popover-5.tsx +0 -67
- package/packages/patterns/command/popover/command-popover-6.tsx +0 -70
- package/packages/patterns/command/popover/command-popover-7.tsx +0 -64
- package/packages/patterns/command/standard/command-standard-1.tsx +0 -26
- package/packages/patterns/command/standard/command-standard-2.tsx +0 -61
- package/packages/patterns/command/standard/command-standard-3.tsx +0 -55
- package/packages/patterns/command/standard/command-standard-4.tsx +0 -53
- package/packages/patterns/command/standard/command-standard-5.tsx +0 -54
- package/packages/patterns/command/standard/command-standard-6.tsx +0 -57
- package/packages/patterns/command/standard/command-standard-7.tsx +0 -43
- package/packages/patterns/context-menu/canvas/context-menu-canvas-1.tsx +0 -49
- package/packages/patterns/context-menu/canvas/context-menu-canvas-2.tsx +0 -78
- package/packages/patterns/context-menu/canvas/context-menu-canvas-3.tsx +0 -44
- package/packages/patterns/context-menu/canvas/context-menu-canvas-4.tsx +0 -46
- package/packages/patterns/context-menu/canvas/context-menu-canvas-5.tsx +0 -57
- package/packages/patterns/context-menu/file/context-menu-file-1.tsx +0 -45
- package/packages/patterns/context-menu/file/context-menu-file-2.tsx +0 -47
- package/packages/patterns/context-menu/file/context-menu-file-3.tsx +0 -56
- package/packages/patterns/context-menu/file/context-menu-file-4.tsx +0 -56
- package/packages/patterns/context-menu/file/context-menu-file-5.tsx +0 -42
- package/packages/patterns/context-menu/standard/context-menu-standard-1.tsx +0 -24
- package/packages/patterns/context-menu/standard/context-menu-standard-2.tsx +0 -47
- package/packages/patterns/context-menu/standard/context-menu-standard-3.tsx +0 -44
- package/packages/patterns/context-menu/standard/context-menu-standard-4.tsx +0 -45
- package/packages/patterns/context-menu/standard/context-menu-standard-5.tsx +0 -49
- package/packages/patterns/context-menu/standard/context-menu-standard-6.tsx +0 -38
- package/packages/patterns/context-menu/standard/context-menu-standard-7.tsx +0 -79
- package/packages/patterns/context-menu/table/context-menu-table-1.tsx +0 -32
- package/packages/patterns/context-menu/table/context-menu-table-2.tsx +0 -46
- package/packages/patterns/context-menu/table/context-menu-table-3.tsx +0 -56
- package/packages/patterns/context-menu/table/context-menu-table-4.tsx +0 -49
- package/packages/patterns/context-menu/table/context-menu-table-5.tsx +0 -56
- package/packages/patterns/context-menu/text/context-menu-text-1.tsx +0 -40
- package/packages/patterns/context-menu/text/context-menu-text-2.tsx +0 -45
- package/packages/patterns/context-menu/text/context-menu-text-3.tsx +0 -54
- package/packages/patterns/context-menu/text/context-menu-text-4.tsx +0 -40
- package/packages/patterns/context-menu/text/context-menu-text-5.tsx +0 -63
- package/packages/patterns/data-table/advanced/data-table-advanced-1.tsx +0 -201
- package/packages/patterns/data-table/advanced/data-table-advanced-2.tsx +0 -212
- package/packages/patterns/data-table/advanced/data-table-advanced-3.tsx +0 -191
- package/packages/patterns/data-table/advanced/data-table-advanced-4.tsx +0 -189
- package/packages/patterns/data-table/standard/data-table-standard-1.tsx +0 -183
- package/packages/patterns/data-table/standard/data-table-standard-2.tsx +0 -180
- package/packages/patterns/data-table/standard/data-table-standard-3.tsx +0 -205
- package/packages/patterns/data-table/standard/data-table-standard-4.tsx +0 -212
- package/packages/patterns/date-picker/standard/date-picker-standard-1.tsx +0 -75
- package/packages/patterns/date-picker/standard/date-picker-standard-2.tsx +0 -103
- package/packages/patterns/date-picker/standard/date-picker-standard-3.tsx +0 -91
- package/packages/patterns/date-picker/standard/date-picker-standard-4.tsx +0 -73
- package/packages/patterns/date-picker/standard/date-picker-standard-5.tsx +0 -89
- package/packages/patterns/date-picker/standard/date-picker-standard-6.tsx +0 -69
- package/packages/patterns/date-picker/standard/date-picker-standard-7.tsx +0 -64
- package/packages/patterns/date-picker/standard/date-picker-standard-8.tsx +0 -84
- package/packages/patterns/dialog/standard/dialog-standard-1.tsx +0 -47
- package/packages/patterns/dialog/standard/dialog-standard-10.tsx +0 -84
- package/packages/patterns/dialog/standard/dialog-standard-11.tsx +0 -63
- package/packages/patterns/dialog/standard/dialog-standard-12.tsx +0 -70
- package/packages/patterns/dialog/standard/dialog-standard-13.tsx +0 -65
- package/packages/patterns/dialog/standard/dialog-standard-14.tsx +0 -109
- package/packages/patterns/dialog/standard/dialog-standard-15.tsx +0 -113
- package/packages/patterns/dialog/standard/dialog-standard-16.tsx +0 -127
- package/packages/patterns/dialog/standard/dialog-standard-17.tsx +0 -116
- package/packages/patterns/dialog/standard/dialog-standard-2.tsx +0 -72
- package/packages/patterns/dialog/standard/dialog-standard-3.tsx +0 -78
- package/packages/patterns/dialog/standard/dialog-standard-4.tsx +0 -98
- package/packages/patterns/dialog/standard/dialog-standard-5.tsx +0 -65
- package/packages/patterns/dialog/standard/dialog-standard-6.tsx +0 -42
- package/packages/patterns/dialog/standard/dialog-standard-7.tsx +0 -46
- package/packages/patterns/dialog/standard/dialog-standard-8.tsx +0 -84
- package/packages/patterns/dialog/standard/dialog-standard-9.tsx +0 -70
- package/packages/patterns/drawer/bottom/drawer-bottom-1.tsx +0 -44
- package/packages/patterns/drawer/bottom/drawer-bottom-2.tsx +0 -55
- package/packages/patterns/drawer/bottom/drawer-bottom-3.tsx +0 -68
- package/packages/patterns/drawer/bottom/drawer-bottom-4.tsx +0 -49
- package/packages/patterns/drawer/bottom/drawer-bottom-5.tsx +0 -72
- package/packages/patterns/drawer/bottom/drawer-bottom-6.tsx +0 -40
- package/packages/patterns/drawer/bottom/drawer-bottom-7.tsx +0 -69
- package/packages/patterns/drawer/left/drawer-left-1.tsx +0 -46
- package/packages/patterns/drawer/left/drawer-left-2.tsx +0 -53
- package/packages/patterns/drawer/left/drawer-left-3.tsx +0 -123
- package/packages/patterns/drawer/left/drawer-left-4.tsx +0 -58
- package/packages/patterns/drawer/left/drawer-left-5.tsx +0 -131
- package/packages/patterns/drawer/right/drawer-right-1.tsx +0 -45
- package/packages/patterns/drawer/right/drawer-right-2.tsx +0 -107
- package/packages/patterns/drawer/right/drawer-right-3.tsx +0 -84
- package/packages/patterns/drawer/right/drawer-right-4.tsx +0 -98
- package/packages/patterns/drawer/right/drawer-right-5.tsx +0 -108
- package/packages/patterns/drawer/top/drawer-top-1.tsx +0 -44
- package/packages/patterns/drawer/top/drawer-top-2.tsx +0 -62
- package/packages/patterns/drawer/top/drawer-top-3.tsx +0 -50
- package/packages/patterns/drawer/top/drawer-top-4.tsx +0 -63
- package/packages/patterns/drawer/top/drawer-top-5.tsx +0 -59
- package/packages/patterns/dropdown-menu/actions/dropdown-menu-actions-1.tsx +0 -63
- package/packages/patterns/dropdown-menu/actions/dropdown-menu-actions-2.tsx +0 -61
- package/packages/patterns/dropdown-menu/actions/dropdown-menu-actions-3.tsx +0 -83
- package/packages/patterns/dropdown-menu/actions/dropdown-menu-actions-4.tsx +0 -68
- package/packages/patterns/dropdown-menu/actions/dropdown-menu-actions-5.tsx +0 -78
- package/packages/patterns/dropdown-menu/editor/dropdown-menu-editor-1.tsx +0 -61
- package/packages/patterns/dropdown-menu/editor/dropdown-menu-editor-2.tsx +0 -81
- package/packages/patterns/dropdown-menu/editor/dropdown-menu-editor-3.tsx +0 -58
- package/packages/patterns/dropdown-menu/editor/dropdown-menu-editor-4.tsx +0 -53
- package/packages/patterns/dropdown-menu/editor/dropdown-menu-editor-5.tsx +0 -65
- package/packages/patterns/dropdown-menu/profile/dropdown-menu-profile-1.tsx +0 -61
- package/packages/patterns/dropdown-menu/profile/dropdown-menu-profile-2.tsx +0 -75
- package/packages/patterns/dropdown-menu/profile/dropdown-menu-profile-3.tsx +0 -99
- package/packages/patterns/dropdown-menu/profile/dropdown-menu-profile-4.tsx +0 -87
- package/packages/patterns/dropdown-menu/profile/dropdown-menu-profile-5.tsx +0 -85
- package/packages/patterns/dropdown-menu/settings/dropdown-menu-settings-1.tsx +0 -50
- package/packages/patterns/dropdown-menu/settings/dropdown-menu-settings-2.tsx +0 -75
- package/packages/patterns/dropdown-menu/settings/dropdown-menu-settings-3.tsx +0 -70
- package/packages/patterns/dropdown-menu/settings/dropdown-menu-settings-4.tsx +0 -82
- package/packages/patterns/dropdown-menu/settings/dropdown-menu-settings-5.tsx +0 -74
- package/packages/patterns/dropdown-menu/standard/dropdown-menu-standard-1.tsx +0 -48
- package/packages/patterns/dropdown-menu/standard/dropdown-menu-standard-2.tsx +0 -71
- package/packages/patterns/dropdown-menu/standard/dropdown-menu-standard-3.tsx +0 -68
- package/packages/patterns/dropdown-menu/standard/dropdown-menu-standard-4.tsx +0 -56
- package/packages/patterns/dropdown-menu/standard/dropdown-menu-standard-5.tsx +0 -43
- package/packages/patterns/dropdown-menu/standard/dropdown-menu-standard-6.tsx +0 -72
- package/packages/patterns/dropdown-menu/standard/dropdown-menu-standard-7.tsx +0 -99
- package/packages/patterns/dropdown-menu/support/dropdown-menu-support-1.tsx +0 -52
- package/packages/patterns/dropdown-menu/support/dropdown-menu-support-2.tsx +0 -64
- package/packages/patterns/dropdown-menu/support/dropdown-menu-support-3.tsx +0 -77
- package/packages/patterns/empty/actions/empty-actions-1.tsx +0 -36
- package/packages/patterns/empty/actions/empty-actions-2.tsx +0 -42
- package/packages/patterns/empty/actions/empty-actions-3.tsx +0 -36
- package/packages/patterns/empty/actions/empty-actions-4.tsx +0 -37
- package/packages/patterns/empty/actions/empty-actions-5.tsx +0 -40
- package/packages/patterns/empty/data/empty-data-1.tsx +0 -37
- package/packages/patterns/empty/data/empty-data-2.tsx +0 -29
- package/packages/patterns/empty/data/empty-data-3.tsx +0 -28
- package/packages/patterns/empty/data/empty-data-4.tsx +0 -36
- package/packages/patterns/empty/data/empty-data-5.tsx +0 -43
- package/packages/patterns/empty/search/empty-search-1.tsx +0 -28
- package/packages/patterns/empty/search/empty-search-2.tsx +0 -33
- package/packages/patterns/empty/search/empty-search-3.tsx +0 -33
- package/packages/patterns/empty/search/empty-search-4.tsx +0 -29
- package/packages/patterns/empty/search/empty-search-5.tsx +0 -40
- package/packages/patterns/empty/standard/empty-standard-1.tsx +0 -24
- package/packages/patterns/empty/standard/empty-standard-2.tsx +0 -28
- package/packages/patterns/empty/standard/empty-standard-3.tsx +0 -29
- package/packages/patterns/empty/standard/empty-standard-4.tsx +0 -28
- package/packages/patterns/empty/standard/empty-standard-5.tsx +0 -31
- package/packages/patterns/empty/standard/empty-standard-6.tsx +0 -23
- package/packages/patterns/empty/standard/empty-standard-7.tsx +0 -29
- package/packages/patterns/field/advanced/field-advanced-1.tsx +0 -32
- package/packages/patterns/field/advanced/field-advanced-2.tsx +0 -34
- package/packages/patterns/field/advanced/field-advanced-3.tsx +0 -53
- package/packages/patterns/field/advanced/field-advanced-4.tsx +0 -55
- package/packages/patterns/field/advanced/field-advanced-5.tsx +0 -57
- package/packages/patterns/field/advanced/field-advanced-6.tsx +0 -71
- package/packages/patterns/field/advanced/field-advanced-7.tsx +0 -59
- package/packages/patterns/field/basic-inputs/field-basic-inputs-1.tsx +0 -20
- package/packages/patterns/field/basic-inputs/field-basic-inputs-2.tsx +0 -23
- package/packages/patterns/field/basic-inputs/field-basic-inputs-3.tsx +0 -21
- package/packages/patterns/field/basic-inputs/field-basic-inputs-4.tsx +0 -42
- package/packages/patterns/field/basic-inputs/field-basic-inputs-5.tsx +0 -22
- package/packages/patterns/field/layouts/field-layouts-1.tsx +0 -41
- package/packages/patterns/field/layouts/field-layouts-2.tsx +0 -44
- package/packages/patterns/field/layouts/field-layouts-3.tsx +0 -33
- package/packages/patterns/field/layouts/field-layouts-4.tsx +0 -62
- package/packages/patterns/field/layouts/field-layouts-5.tsx +0 -64
- package/packages/patterns/field/layouts/field-layouts-6.tsx +0 -51
- package/packages/patterns/field/selects/field-selects-1.tsx +0 -32
- package/packages/patterns/field/selects/field-selects-2.tsx +0 -36
- package/packages/patterns/field/selects/field-selects-3.tsx +0 -43
- package/packages/patterns/field/selects/field-selects-4.tsx +0 -49
- package/packages/patterns/field/selects/field-selects-5.tsx +0 -34
- package/packages/patterns/field/selects/field-selects-6.tsx +0 -30
- package/packages/patterns/field/selects/field-selects-7.tsx +0 -32
- package/packages/patterns/field/text-areas/field-text-areas-1.tsx +0 -19
- package/packages/patterns/field/text-areas/field-text-areas-2.tsx +0 -23
- package/packages/patterns/field/text-areas/field-text-areas-3.tsx +0 -34
- package/packages/patterns/field/text-areas/field-text-areas-4.tsx +0 -23
- package/packages/patterns/field/text-areas/field-text-areas-5.tsx +0 -42
- package/packages/patterns/field/text-areas/field-text-areas-6.tsx +0 -24
- package/packages/patterns/field/toggles/field-toggles-1.tsx +0 -17
- package/packages/patterns/field/toggles/field-toggles-2.tsx +0 -50
- package/packages/patterns/field/toggles/field-toggles-3.tsx +0 -40
- package/packages/patterns/field/toggles/field-toggles-4.tsx +0 -42
- package/packages/patterns/field/toggles/field-toggles-5.tsx +0 -15
- package/packages/patterns/field/toggles/field-toggles-6.tsx +0 -26
- package/packages/patterns/field/toggles/field-toggles-7.tsx +0 -28
- package/packages/patterns/form/advanced/form-advanced-1.tsx +0 -83
- package/packages/patterns/form/advanced/form-advanced-2.tsx +0 -75
- package/packages/patterns/form/advanced/form-advanced-3.tsx +0 -114
- package/packages/patterns/form/advanced/form-advanced-4.tsx +0 -91
- package/packages/patterns/form/advanced/form-advanced-5.tsx +0 -121
- package/packages/patterns/form/advanced/form-advanced-6.tsx +0 -163
- package/packages/patterns/form/advanced/form-advanced-7.tsx +0 -182
- package/packages/patterns/form/basic-forms/form-basic-forms-1.tsx +0 -69
- package/packages/patterns/form/basic-forms/form-basic-forms-2.tsx +0 -70
- package/packages/patterns/form/basic-forms/form-basic-forms-3.tsx +0 -70
- package/packages/patterns/form/basic-forms/form-basic-forms-4.tsx +0 -75
- package/packages/patterns/form/basic-forms/form-basic-forms-5.tsx +0 -70
- package/packages/patterns/form/basic-forms/form-basic-forms-6.tsx +0 -70
- package/packages/patterns/form/basic-forms/form-basic-forms-7.tsx +0 -70
- package/packages/patterns/form/layouts/form-layouts-1.tsx +0 -113
- package/packages/patterns/form/layouts/form-layouts-2.tsx +0 -89
- package/packages/patterns/form/layouts/form-layouts-3.tsx +0 -166
- package/packages/patterns/form/layouts/form-layouts-4.tsx +0 -129
- package/packages/patterns/form/layouts/form-layouts-5.tsx +0 -69
- package/packages/patterns/form/layouts/form-layouts-6.tsx +0 -85
- package/packages/patterns/form/layouts/form-layouts-7.tsx +0 -166
- package/packages/patterns/form/multi-field/form-multi-field-1.tsx +0 -90
- package/packages/patterns/form/multi-field/form-multi-field-2.tsx +0 -114
- package/packages/patterns/form/multi-field/form-multi-field-3.tsx +0 -132
- package/packages/patterns/form/multi-field/form-multi-field-4.tsx +0 -131
- package/packages/patterns/form/multi-field/form-multi-field-5.tsx +0 -154
- package/packages/patterns/form/multi-field/form-multi-field-6.tsx +0 -159
- package/packages/patterns/form/multi-field/form-multi-field-7.tsx +0 -232
- package/packages/patterns/form/patterns/form-patterns-1.tsx +0 -110
- package/packages/patterns/form/patterns/form-patterns-2.tsx +0 -160
- package/packages/patterns/form/patterns/form-patterns-3.tsx +0 -160
- package/packages/patterns/form/patterns/form-patterns-4.tsx +0 -159
- package/packages/patterns/form/patterns/form-patterns-5.tsx +0 -222
- package/packages/patterns/form/patterns/form-patterns-6.tsx +0 -258
- package/packages/patterns/form/patterns/form-patterns-7.tsx +0 -249
- package/packages/patterns/form/validation/form-validation-1.tsx +0 -94
- package/packages/patterns/form/validation/form-validation-2.tsx +0 -93
- package/packages/patterns/form/validation/form-validation-3.tsx +0 -100
- package/packages/patterns/form/validation/form-validation-4.tsx +0 -106
- package/packages/patterns/form/validation/form-validation-5.tsx +0 -126
- package/packages/patterns/form/validation/form-validation-6.tsx +0 -126
- package/packages/patterns/form/validation/form-validation-7.tsx +0 -96
- package/packages/patterns/hover-card/info/hover-card-info-1.tsx +0 -29
- package/packages/patterns/hover-card/info/hover-card-info-2.tsx +0 -35
- package/packages/patterns/hover-card/info/hover-card-info-3.tsx +0 -38
- package/packages/patterns/hover-card/info/hover-card-info-4.tsx +0 -37
- package/packages/patterns/hover-card/info/hover-card-info-5.tsx +0 -46
- package/packages/patterns/hover-card/preview/hover-card-preview-1.tsx +0 -44
- package/packages/patterns/hover-card/preview/hover-card-preview-2.tsx +0 -48
- package/packages/patterns/hover-card/preview/hover-card-preview-3.tsx +0 -40
- package/packages/patterns/hover-card/preview/hover-card-preview-4.tsx +0 -51
- package/packages/patterns/hover-card/preview/hover-card-preview-5.tsx +0 -48
- package/packages/patterns/hover-card/profile/hover-card-profile-1.tsx +0 -36
- package/packages/patterns/hover-card/profile/hover-card-profile-2.tsx +0 -50
- package/packages/patterns/hover-card/profile/hover-card-profile-3.tsx +0 -45
- package/packages/patterns/hover-card/profile/hover-card-profile-4.tsx +0 -50
- package/packages/patterns/hover-card/profile/hover-card-profile-5.tsx +0 -54
- package/packages/patterns/hover-card/stats/hover-card-stats-1.tsx +0 -45
- package/packages/patterns/hover-card/stats/hover-card-stats-2.tsx +0 -50
- package/packages/patterns/hover-card/stats/hover-card-stats-3.tsx +0 -53
- package/packages/patterns/hover-card/stats/hover-card-stats-4.tsx +0 -56
- package/packages/patterns/hover-card/stats/hover-card-stats-5.tsx +0 -54
- package/packages/patterns/input/special/input-special-1.tsx +0 -65
- package/packages/patterns/input/special/input-special-2.tsx +0 -19
- package/packages/patterns/input/special/input-special-3.tsx +0 -35
- package/packages/patterns/input/special/input-special-4.tsx +0 -24
- package/packages/patterns/input/special/input-special-5.tsx +0 -27
- package/packages/patterns/input/standard/input-standard-1.tsx +0 -15
- package/packages/patterns/input/standard/input-standard-2.tsx +0 -18
- package/packages/patterns/input/standard/input-standard-3.tsx +0 -23
- package/packages/patterns/input/standard/input-standard-4.tsx +0 -23
- package/packages/patterns/input/standard/input-standard-5.tsx +0 -24
- package/packages/patterns/input/standard/input-standard-6.tsx +0 -33
- package/packages/patterns/input/standard/input-standard-7.tsx +0 -22
- package/packages/patterns/input/types/input-types-1.tsx +0 -24
- package/packages/patterns/input/types/input-types-2.tsx +0 -42
- package/packages/patterns/input/types/input-types-3.tsx +0 -47
- package/packages/patterns/input/types/input-types-4.tsx +0 -24
- package/packages/patterns/input/types/input-types-5.tsx +0 -19
- package/packages/patterns/input/types/input-types-6.tsx +0 -25
- package/packages/patterns/input/types/input-types-7.tsx +0 -25
- package/packages/patterns/input/validation/input-validation-1.tsx +0 -27
- package/packages/patterns/input/validation/input-validation-2.tsx +0 -25
- package/packages/patterns/input/validation/input-validation-3.tsx +0 -26
- package/packages/patterns/input/validation/input-validation-4.tsx +0 -37
- package/packages/patterns/input/validation/input-validation-5.tsx +0 -54
- package/packages/patterns/input-group/ai/input-group-ai-1.tsx +0 -68
- package/packages/patterns/input-group/ai/input-group-ai-2.tsx +0 -42
- package/packages/patterns/input-group/ai/input-group-ai-3.tsx +0 -60
- package/packages/patterns/input-group/ai/input-group-ai-4.tsx +0 -61
- package/packages/patterns/input-group/buttons/input-group-buttons-1.tsx +0 -34
- package/packages/patterns/input-group/buttons/input-group-buttons-2.tsx +0 -39
- package/packages/patterns/input-group/buttons/input-group-buttons-3.tsx +0 -23
- package/packages/patterns/input-group/buttons/input-group-buttons-4.tsx +0 -42
- package/packages/patterns/input-group/custom/input-group-custom-1.tsx +0 -24
- package/packages/patterns/input-group/custom/input-group-custom-2.tsx +0 -31
- package/packages/patterns/input-group/custom/input-group-custom-3.tsx +0 -38
- package/packages/patterns/input-group/custom/input-group-custom-4.tsx +0 -33
- package/packages/patterns/input-group/dropdown/input-group-dropdown-1.tsx +0 -37
- package/packages/patterns/input-group/dropdown/input-group-dropdown-2.tsx +0 -37
- package/packages/patterns/input-group/dropdown/input-group-dropdown-3.tsx +0 -56
- package/packages/patterns/input-group/dropdown/input-group-dropdown-4.tsx +0 -45
- package/packages/patterns/input-group/icons/input-group-icons-1.tsx +0 -19
- package/packages/patterns/input-group/icons/input-group-icons-2.tsx +0 -27
- package/packages/patterns/input-group/icons/input-group-icons-3.tsx +0 -33
- package/packages/patterns/input-group/icons/input-group-icons-4.tsx +0 -36
- package/packages/patterns/input-group/label/input-group-label-1.tsx +0 -27
- package/packages/patterns/input-group/label/input-group-label-2.tsx +0 -43
- package/packages/patterns/input-group/label/input-group-label-3.tsx +0 -36
- package/packages/patterns/input-group/label/input-group-label-4.tsx +0 -23
- package/packages/patterns/input-group/spinner/input-group-spinner-1.tsx +0 -27
- package/packages/patterns/input-group/spinner/input-group-spinner-2.tsx +0 -21
- package/packages/patterns/input-group/spinner/input-group-spinner-3.tsx +0 -25
- package/packages/patterns/input-group/spinner/input-group-spinner-4.tsx +0 -32
- package/packages/patterns/input-group/text/input-group-text-1.tsx +0 -33
- package/packages/patterns/input-group/text/input-group-text-2.tsx +0 -22
- package/packages/patterns/input-group/text/input-group-text-3.tsx +0 -19
- package/packages/patterns/input-group/text/input-group-text-4.tsx +0 -19
- package/packages/patterns/input-group/textarea/input-group-textarea-1.tsx +0 -37
- package/packages/patterns/input-group/textarea/input-group-textarea-2.tsx +0 -23
- package/packages/patterns/input-group/textarea/input-group-textarea-3.tsx +0 -43
- package/packages/patterns/input-group/textarea/input-group-textarea-4.tsx +0 -31
- package/packages/patterns/input-group/tooltip/input-group-tooltip-1.tsx +0 -54
- package/packages/patterns/input-group/tooltip/input-group-tooltip-2.tsx +0 -34
- package/packages/patterns/input-group/tooltip/input-group-tooltip-3.tsx +0 -34
- package/packages/patterns/input-otp/behavior/input-otp-behavior-1.tsx +0 -90
- package/packages/patterns/input-otp/behavior/input-otp-behavior-2.tsx +0 -46
- package/packages/patterns/input-otp/behavior/input-otp-behavior-3.tsx +0 -59
- package/packages/patterns/input-otp/behavior/input-otp-behavior-4.tsx +0 -70
- package/packages/patterns/input-otp/standard/input-otp-standard-1.tsx +0 -26
- package/packages/patterns/input-otp/standard/input-otp-standard-2.tsx +0 -25
- package/packages/patterns/input-otp/standard/input-otp-standard-3.tsx +0 -29
- package/packages/patterns/input-otp/standard/input-otp-standard-4.tsx +0 -42
- package/packages/patterns/input-otp/standard/input-otp-standard-5.tsx +0 -83
- package/packages/patterns/input-otp/states/input-otp-states-1.tsx +0 -29
- package/packages/patterns/input-otp/states/input-otp-states-2.tsx +0 -54
- package/packages/patterns/input-otp/states/input-otp-states-3.tsx +0 -51
- package/packages/patterns/input-otp/states/input-otp-states-4.tsx +0 -59
- package/packages/patterns/input-otp/use-cases/input-otp-use-cases-1.tsx +0 -106
- package/packages/patterns/input-otp/use-cases/input-otp-use-cases-2.tsx +0 -137
- package/packages/patterns/input-otp/use-cases/input-otp-use-cases-3.tsx +0 -128
- package/packages/patterns/input-otp/use-cases/input-otp-use-cases-4.tsx +0 -115
- package/packages/patterns/input-otp/variants/input-otp-variants-1.tsx +0 -34
- package/packages/patterns/input-otp/variants/input-otp-variants-2.tsx +0 -58
- package/packages/patterns/input-otp/variants/input-otp-variants-3.tsx +0 -60
- package/packages/patterns/item/interactive/item-interactive-1.tsx +0 -43
- package/packages/patterns/item/interactive/item-interactive-2.tsx +0 -70
- package/packages/patterns/item/layout/item-layout-1.tsx +0 -45
- package/packages/patterns/item/layout/item-layout-2.tsx +0 -65
- package/packages/patterns/item/layout/item-layout-3.tsx +0 -55
- package/packages/patterns/item/media/item-media-1.tsx +0 -35
- package/packages/patterns/item/media/item-media-2.tsx +0 -42
- package/packages/patterns/item/media/item-media-3.tsx +0 -71
- package/packages/patterns/item/standard/item-standard-1.tsx +0 -30
- package/packages/patterns/item/standard/item-standard-2.tsx +0 -30
- package/packages/patterns/kbd/arrow-keys/kbd-arrow-keys-1.tsx +0 -18
- package/packages/patterns/kbd/arrow-keys/kbd-arrow-keys-2.tsx +0 -14
- package/packages/patterns/kbd/arrow-keys/kbd-arrow-keys-3.tsx +0 -18
- package/packages/patterns/kbd/arrow-keys/kbd-arrow-keys-4.tsx +0 -16
- package/packages/patterns/kbd/function-keys/kbd-function-keys-1.tsx +0 -11
- package/packages/patterns/kbd/function-keys/kbd-function-keys-2.tsx +0 -11
- package/packages/patterns/kbd/function-keys/kbd-function-keys-3.tsx +0 -15
- package/packages/patterns/kbd/function-keys/kbd-function-keys-4.tsx +0 -15
- package/packages/patterns/kbd/function-keys/kbd-function-keys-5.tsx +0 -15
- package/packages/patterns/kbd/function-keys/kbd-function-keys-6.tsx +0 -16
- package/packages/patterns/kbd/platform-specific/kbd-platform-specific-1.tsx +0 -14
- package/packages/patterns/kbd/platform-specific/kbd-platform-specific-2.tsx +0 -14
- package/packages/patterns/kbd/platform-specific/kbd-platform-specific-3.tsx +0 -14
- package/packages/patterns/kbd/platform-specific/kbd-platform-specific-4.tsx +0 -22
- package/packages/patterns/kbd/platform-specific/kbd-platform-specific-5.tsx +0 -14
- package/packages/patterns/kbd/pressed-state/kbd-pressed-state-1.tsx +0 -14
- package/packages/patterns/kbd/pressed-state/kbd-pressed-state-2.tsx +0 -11
- package/packages/patterns/kbd/pressed-state/kbd-pressed-state-3.tsx +0 -16
- package/packages/patterns/kbd/pressed-state/kbd-pressed-state-4.tsx +0 -14
- package/packages/patterns/kbd/pressed-state/kbd-pressed-state-5.tsx +0 -18
- package/packages/patterns/kbd/sequence/kbd-sequence-1.tsx +0 -18
- package/packages/patterns/kbd/sequence/kbd-sequence-2.tsx +0 -15
- package/packages/patterns/kbd/sequence/kbd-sequence-3.tsx +0 -21
- package/packages/patterns/kbd/sequence/kbd-sequence-4.tsx +0 -15
- package/packages/patterns/kbd/shortcut/kbd-shortcut-1.tsx +0 -14
- package/packages/patterns/kbd/shortcut/kbd-shortcut-2.tsx +0 -14
- package/packages/patterns/kbd/shortcut/kbd-shortcut-3.tsx +0 -14
- package/packages/patterns/kbd/shortcut/kbd-shortcut-4.tsx +0 -15
- package/packages/patterns/kbd/shortcut/kbd-shortcut-5.tsx +0 -14
- package/packages/patterns/kbd/sizes/kbd-sizes-1.tsx +0 -14
- package/packages/patterns/kbd/sizes/kbd-sizes-2.tsx +0 -14
- package/packages/patterns/kbd/sizes/kbd-sizes-3.tsx +0 -14
- package/packages/patterns/kbd/sizes/kbd-sizes-4.tsx +0 -13
- package/packages/patterns/kbd/sizes/kbd-sizes-5.tsx +0 -14
- package/packages/patterns/kbd/with-icons/kbd-with-icons-1.tsx +0 -17
- package/packages/patterns/kbd/with-icons/kbd-with-icons-2.tsx +0 -17
- package/packages/patterns/kbd/with-icons/kbd-with-icons-3.tsx +0 -25
- package/packages/patterns/kbd/with-icons/kbd-with-icons-4.tsx +0 -17
- package/packages/patterns/kbd/with-icons/kbd-with-icons-5.tsx +0 -15
- package/packages/patterns/label/standard/label-standard-1.tsx +0 -11
- package/packages/patterns/label/standard/label-standard-2.tsx +0 -14
- package/packages/patterns/label/standard/label-standard-3.tsx +0 -26
- package/packages/patterns/label/standard/label-standard-4.tsx +0 -15
- package/packages/patterns/label/standard/label-standard-5.tsx +0 -12
- package/packages/patterns/label/standard/label-standard-6.tsx +0 -12
- package/packages/patterns/label/standard/label-standard-7.tsx +0 -12
- package/packages/patterns/label/standard/label-standard-8.tsx +0 -9
- package/packages/patterns/menubar/standard/menubar-standard-1.tsx +0 -24
- package/packages/patterns/menubar/standard/menubar-standard-10.tsx +0 -26
- package/packages/patterns/menubar/standard/menubar-standard-2.tsx +0 -34
- package/packages/patterns/menubar/standard/menubar-standard-3.tsx +0 -34
- package/packages/patterns/menubar/standard/menubar-standard-4.tsx +0 -24
- package/packages/patterns/menubar/standard/menubar-standard-5.tsx +0 -29
- package/packages/patterns/menubar/standard/menubar-standard-6.tsx +0 -34
- package/packages/patterns/menubar/standard/menubar-standard-7.tsx +0 -27
- package/packages/patterns/menubar/standard/menubar-standard-8.tsx +0 -63
- package/packages/patterns/menubar/standard/menubar-standard-9.tsx +0 -31
- package/packages/patterns/navigation-menu/complex/navigation-menu-complex-1.tsx +0 -238
- package/packages/patterns/navigation-menu/complex/navigation-menu-complex-2.tsx +0 -100
- package/packages/patterns/navigation-menu/complex/navigation-menu-complex-3.tsx +0 -151
- package/packages/patterns/navigation-menu/complex/navigation-menu-complex-4.tsx +0 -187
- package/packages/patterns/navigation-menu/complex/navigation-menu-complex-5.tsx +0 -168
- package/packages/patterns/navigation-menu/features/navigation-menu-features-1.tsx +0 -92
- package/packages/patterns/navigation-menu/features/navigation-menu-features-2.tsx +0 -118
- package/packages/patterns/navigation-menu/features/navigation-menu-features-3.tsx +0 -122
- package/packages/patterns/navigation-menu/features/navigation-menu-features-4.tsx +0 -101
- package/packages/patterns/navigation-menu/features/navigation-menu-features-5.tsx +0 -176
- package/packages/patterns/navigation-menu/marketing/navigation-menu-marketing-1.tsx +0 -107
- package/packages/patterns/navigation-menu/marketing/navigation-menu-marketing-2.tsx +0 -116
- package/packages/patterns/navigation-menu/marketing/navigation-menu-marketing-3.tsx +0 -119
- package/packages/patterns/navigation-menu/marketing/navigation-menu-marketing-4.tsx +0 -140
- package/packages/patterns/navigation-menu/marketing/navigation-menu-marketing-5.tsx +0 -107
- package/packages/patterns/navigation-menu/standard/navigation-menu-standard-1.tsx +0 -73
- package/packages/patterns/navigation-menu/standard/navigation-menu-standard-2.tsx +0 -51
- package/packages/patterns/navigation-menu/standard/navigation-menu-standard-3.tsx +0 -68
- package/packages/patterns/navigation-menu/standard/navigation-menu-standard-4.tsx +0 -60
- package/packages/patterns/navigation-menu/standard/navigation-menu-standard-5.tsx +0 -82
- package/packages/patterns/package.json +0 -32
- package/packages/patterns/pagination/advanced/pagination-advanced-1.tsx +0 -43
- package/packages/patterns/pagination/advanced/pagination-advanced-2.tsx +0 -43
- package/packages/patterns/pagination/advanced/pagination-advanced-3.tsx +0 -49
- package/packages/patterns/pagination/advanced/pagination-advanced-4.tsx +0 -24
- package/packages/patterns/pagination/advanced/pagination-advanced-5.tsx +0 -39
- package/packages/patterns/pagination/basic/pagination-basic-1.tsx +0 -28
- package/packages/patterns/pagination/basic/pagination-basic-2.tsx +0 -34
- package/packages/patterns/pagination/basic/pagination-basic-3.tsx +0 -36
- package/packages/patterns/pagination/basic/pagination-basic-4.tsx +0 -35
- package/packages/patterns/pagination/basic/pagination-basic-5.tsx +0 -43
- package/packages/patterns/pagination/navigation/pagination-navigation-1.tsx +0 -24
- package/packages/patterns/pagination/navigation/pagination-navigation-2.tsx +0 -27
- package/packages/patterns/pagination/navigation/pagination-navigation-3.tsx +0 -32
- package/packages/patterns/pagination/navigation/pagination-navigation-4.tsx +0 -40
- package/packages/patterns/pagination/sizes/pagination-sizes-1.tsx +0 -40
- package/packages/patterns/pagination/sizes/pagination-sizes-2.tsx +0 -36
- package/packages/patterns/pagination/sizes/pagination-sizes-3.tsx +0 -40
- package/packages/patterns/pagination/sizes/pagination-sizes-4.tsx +0 -28
- package/packages/patterns/pagination/sizes/pagination-sizes-5.tsx +0 -28
- package/packages/patterns/popover/standard/popover-standard-1.tsx +0 -21
- package/packages/patterns/popover/standard/popover-standard-10.tsx +0 -30
- package/packages/patterns/popover/standard/popover-standard-11.tsx +0 -54
- package/packages/patterns/popover/standard/popover-standard-12.tsx +0 -51
- package/packages/patterns/popover/standard/popover-standard-13.tsx +0 -52
- package/packages/patterns/popover/standard/popover-standard-14.tsx +0 -49
- package/packages/patterns/popover/standard/popover-standard-15.tsx +0 -35
- package/packages/patterns/popover/standard/popover-standard-2.tsx +0 -24
- package/packages/patterns/popover/standard/popover-standard-3.tsx +0 -29
- package/packages/patterns/popover/standard/popover-standard-4.tsx +0 -26
- package/packages/patterns/popover/standard/popover-standard-5.tsx +0 -24
- package/packages/patterns/popover/standard/popover-standard-6.tsx +0 -25
- package/packages/patterns/popover/standard/popover-standard-7.tsx +0 -25
- package/packages/patterns/popover/standard/popover-standard-8.tsx +0 -26
- package/packages/patterns/popover/standard/popover-standard-9.tsx +0 -23
- package/packages/patterns/progress/basic/progress-basic-1.tsx +0 -7
- package/packages/patterns/progress/basic/progress-basic-2.tsx +0 -7
- package/packages/patterns/progress/basic/progress-basic-3.tsx +0 -7
- package/packages/patterns/progress/basic/progress-basic-4.tsx +0 -7
- package/packages/patterns/progress/basic/progress-basic-5.tsx +0 -7
- package/packages/patterns/progress/colored/progress-colored-1.tsx +0 -12
- package/packages/patterns/progress/colored/progress-colored-2.tsx +0 -12
- package/packages/patterns/progress/colored/progress-colored-3.tsx +0 -12
- package/packages/patterns/progress/colored/progress-colored-4.tsx +0 -12
- package/packages/patterns/progress/colored/progress-colored-5.tsx +0 -12
- package/packages/patterns/progress/sizes/progress-sizes-1.tsx +0 -7
- package/packages/patterns/progress/sizes/progress-sizes-2.tsx +0 -7
- package/packages/patterns/progress/sizes/progress-sizes-3.tsx +0 -7
- package/packages/patterns/progress/sizes/progress-sizes-4.tsx +0 -7
- package/packages/patterns/progress/sizes/progress-sizes-5.tsx +0 -7
- package/packages/patterns/progress/with-label/progress-with-label-1.tsx +0 -18
- package/packages/patterns/progress/with-label/progress-with-label-2.tsx +0 -15
- package/packages/patterns/progress/with-label/progress-with-label-3.tsx +0 -15
- package/packages/patterns/progress/with-label/progress-with-label-4.tsx +0 -23
- package/packages/patterns/progress/with-label/progress-with-label-5.tsx +0 -23
- package/packages/patterns/radio-group/advanced/radio-group-advanced-1.tsx +0 -39
- package/packages/patterns/radio-group/advanced/radio-group-advanced-2.tsx +0 -71
- package/packages/patterns/radio-group/form/radio-group-form-1.tsx +0 -83
- package/packages/patterns/radio-group/form/radio-group-form-2.tsx +0 -52
- package/packages/patterns/radio-group/layout/radio-group-layout-1.tsx +0 -23
- package/packages/patterns/radio-group/layout/radio-group-layout-2.tsx +0 -44
- package/packages/patterns/radio-group/layout/radio-group-layout-3.tsx +0 -35
- package/packages/patterns/radio-group/standard/radio-group-standard-1.tsx +0 -23
- package/packages/patterns/radio-group/standard/radio-group-standard-2.tsx +0 -38
- package/packages/patterns/scroll-area/advanced/scroll-area-advanced-1.tsx +0 -54
- package/packages/patterns/scroll-area/advanced/scroll-area-advanced-2.tsx +0 -54
- package/packages/patterns/scroll-area/advanced/scroll-area-advanced-3.tsx +0 -89
- package/packages/patterns/scroll-area/layout/scroll-area-layout-1.tsx +0 -37
- package/packages/patterns/scroll-area/layout/scroll-area-layout-2.tsx +0 -45
- package/packages/patterns/scroll-area/layout/scroll-area-layout-3.tsx +0 -99
- package/packages/patterns/scroll-area/standard/scroll-area-standard-1.tsx +0 -52
- package/packages/patterns/scroll-area/standard/scroll-area-standard-2.tsx +0 -56
- package/packages/patterns/separator/basic/separator-basic-1.tsx +0 -13
- package/packages/patterns/separator/basic/separator-basic-2.tsx +0 -15
- package/packages/patterns/separator/basic/separator-basic-3.tsx +0 -21
- package/packages/patterns/separator/basic/separator-basic-4.tsx +0 -19
- package/packages/patterns/separator/basic/separator-basic-5.tsx +0 -7
- package/packages/patterns/separator/spacing/separator-spacing-1.tsx +0 -13
- package/packages/patterns/separator/spacing/separator-spacing-2.tsx +0 -13
- package/packages/patterns/separator/spacing/separator-spacing-3.tsx +0 -13
- package/packages/patterns/separator/spacing/separator-spacing-4.tsx +0 -13
- package/packages/patterns/separator/spacing/separator-spacing-5.tsx +0 -13
- package/packages/patterns/separator/styled/separator-styled-1.tsx +0 -13
- package/packages/patterns/separator/styled/separator-styled-2.tsx +0 -13
- package/packages/patterns/separator/styled/separator-styled-3.tsx +0 -13
- package/packages/patterns/separator/styled/separator-styled-4.tsx +0 -11
- package/packages/patterns/separator/styled/separator-styled-5.tsx +0 -16
- package/packages/patterns/separator/with-text/separator-with-text-1.tsx +0 -17
- package/packages/patterns/separator/with-text/separator-with-text-2.tsx +0 -16
- package/packages/patterns/separator/with-text/separator-with-text-3.tsx +0 -14
- package/packages/patterns/sheet/details/sheet-details-1.tsx +0 -51
- package/packages/patterns/sheet/details/sheet-details-2.tsx +0 -56
- package/packages/patterns/sheet/details/sheet-details-3.tsx +0 -65
- package/packages/patterns/sheet/details/sheet-details-4.tsx +0 -45
- package/packages/patterns/sheet/details/sheet-details-5.tsx +0 -114
- package/packages/patterns/sheet/form/sheet-form-1.tsx +0 -46
- package/packages/patterns/sheet/form/sheet-form-2.tsx +0 -45
- package/packages/patterns/sheet/form/sheet-form-3.tsx +0 -60
- package/packages/patterns/sheet/form/sheet-form-4.tsx +0 -50
- package/packages/patterns/sheet/form/sheet-form-5.tsx +0 -50
- package/packages/patterns/sheet/multi-section/sheet-multi-section-1.tsx +0 -42
- package/packages/patterns/sheet/multi-section/sheet-multi-section-2.tsx +0 -79
- package/packages/patterns/sheet/multi-section/sheet-multi-section-3.tsx +0 -42
- package/packages/patterns/sheet/multi-section/sheet-multi-section-4.tsx +0 -50
- package/packages/patterns/sheet/multi-section/sheet-multi-section-5.tsx +0 -66
- package/packages/patterns/sheet/navigation/sheet-navigation-1.tsx +0 -39
- package/packages/patterns/sheet/navigation/sheet-navigation-2.tsx +0 -57
- package/packages/patterns/sheet/navigation/sheet-navigation-3.tsx +0 -73
- package/packages/patterns/sheet/navigation/sheet-navigation-4.tsx +0 -55
- package/packages/patterns/sheet/navigation/sheet-navigation-5.tsx +0 -46
- package/packages/patterns/sheet/settings/sheet-settings-1.tsx +0 -47
- package/packages/patterns/sheet/settings/sheet-settings-2.tsx +0 -47
- package/packages/patterns/sheet/settings/sheet-settings-3.tsx +0 -55
- package/packages/patterns/sheet/settings/sheet-settings-4.tsx +0 -62
- package/packages/patterns/sheet/settings/sheet-settings-5.tsx +0 -52
- package/packages/patterns/sheet/standard/sheet-standard-1.tsx +0 -29
- package/packages/patterns/sheet/standard/sheet-standard-2.tsx +0 -30
- package/packages/patterns/sheet/standard/sheet-standard-3.tsx +0 -29
- package/packages/patterns/sheet/standard/sheet-standard-4.tsx +0 -29
- package/packages/patterns/skeleton/card/skeleton-card-1.tsx +0 -13
- package/packages/patterns/skeleton/card/skeleton-card-2.tsx +0 -20
- package/packages/patterns/skeleton/card/skeleton-card-3.tsx +0 -21
- package/packages/patterns/skeleton/card/skeleton-card-4.tsx +0 -21
- package/packages/patterns/skeleton/card/skeleton-card-5.tsx +0 -20
- package/packages/patterns/skeleton/content/skeleton-content-1.tsx +0 -26
- package/packages/patterns/skeleton/content/skeleton-content-2.tsx +0 -30
- package/packages/patterns/skeleton/content/skeleton-content-3.tsx +0 -27
- package/packages/patterns/skeleton/content/skeleton-content-4.tsx +0 -31
- package/packages/patterns/skeleton/content/skeleton-content-5.tsx +0 -41
- package/packages/patterns/skeleton/form/skeleton-form-1.tsx +0 -22
- package/packages/patterns/skeleton/form/skeleton-form-2.tsx +0 -27
- package/packages/patterns/skeleton/form/skeleton-form-3.tsx +0 -35
- package/packages/patterns/skeleton/form/skeleton-form-4.tsx +0 -37
- package/packages/patterns/skeleton/form/skeleton-form-5.tsx +0 -28
- package/packages/patterns/skeleton/list/skeleton-list-1.tsx +0 -16
- package/packages/patterns/skeleton/list/skeleton-list-2.tsx +0 -19
- package/packages/patterns/skeleton/list/skeleton-list-3.tsx +0 -20
- package/packages/patterns/skeleton/list/skeleton-list-4.tsx +0 -21
- package/packages/patterns/skeleton/list/skeleton-list-5.tsx +0 -30
- package/packages/patterns/skeleton/profile/skeleton-profile-1.tsx +0 -19
- package/packages/patterns/skeleton/profile/skeleton-profile-2.tsx +0 -33
- package/packages/patterns/skeleton/profile/skeleton-profile-3.tsx +0 -27
- package/packages/patterns/skeleton/profile/skeleton-profile-4.tsx +0 -33
- package/packages/patterns/skeleton/profile/skeleton-profile-5.tsx +0 -22
- package/packages/patterns/skeleton/table/skeleton-table-1.tsx +0 -24
- package/packages/patterns/skeleton/table/skeleton-table-2.tsx +0 -29
- package/packages/patterns/skeleton/table/skeleton-table-3.tsx +0 -27
- package/packages/patterns/skeleton/table/skeleton-table-4.tsx +0 -42
- package/packages/patterns/skeleton/table/skeleton-table-5.tsx +0 -36
- package/packages/patterns/slider/interactive/slider-interactive-1.tsx +0 -38
- package/packages/patterns/slider/interactive/slider-interactive-2.tsx +0 -46
- package/packages/patterns/slider/interactive/slider-interactive-3.tsx +0 -38
- package/packages/patterns/slider/interactive/slider-interactive-4.tsx +0 -34
- package/packages/patterns/slider/interactive/slider-interactive-5.tsx +0 -33
- package/packages/patterns/slider/range/slider-range-1.tsx +0 -26
- package/packages/patterns/slider/range/slider-range-2.tsx +0 -30
- package/packages/patterns/slider/range/slider-range-3.tsx +0 -31
- package/packages/patterns/slider/range/slider-range-4.tsx +0 -39
- package/packages/patterns/slider/range/slider-range-5.tsx +0 -36
- package/packages/patterns/slider/settings/slider-settings-1.tsx +0 -27
- package/packages/patterns/slider/settings/slider-settings-2.tsx +0 -32
- package/packages/patterns/slider/settings/slider-settings-3.tsx +0 -38
- package/packages/patterns/slider/settings/slider-settings-4.tsx +0 -43
- package/packages/patterns/slider/standard/slider-standard-1.tsx +0 -18
- package/packages/patterns/slider/standard/slider-standard-2.tsx +0 -20
- package/packages/patterns/slider/standard/slider-standard-3.tsx +0 -23
- package/packages/patterns/slider/standard/slider-standard-4.tsx +0 -30
- package/packages/patterns/slider/standard/slider-standard-5.tsx +0 -37
- package/packages/patterns/slider/styled/slider-styled-1.tsx +0 -28
- package/packages/patterns/slider/styled/slider-styled-2.tsx +0 -28
- package/packages/patterns/slider/styled/slider-styled-3.tsx +0 -28
- package/packages/patterns/slider/styled/slider-styled-4.tsx +0 -28
- package/packages/patterns/slider/styled/slider-styled-5.tsx +0 -28
- package/packages/patterns/slider/vertical/slider-vertical-1.tsx +0 -27
- package/packages/patterns/slider/vertical/slider-vertical-2.tsx +0 -29
- package/packages/patterns/slider/vertical/slider-vertical-3.tsx +0 -36
- package/packages/patterns/slider/vertical/slider-vertical-4.tsx +0 -31
- package/packages/patterns/slider/vertical/slider-vertical-5.tsx +0 -37
- package/packages/patterns/sonner/content/sonner-content-1.tsx +0 -21
- package/packages/patterns/sonner/content/sonner-content-2.tsx +0 -23
- package/packages/patterns/sonner/content/sonner-content-3.tsx +0 -21
- package/packages/patterns/sonner/content/sonner-content-4.tsx +0 -22
- package/packages/patterns/sonner/content/sonner-content-5.tsx +0 -35
- package/packages/patterns/sonner/interactive/sonner-interactive-1.tsx +0 -24
- package/packages/patterns/sonner/interactive/sonner-interactive-2.tsx +0 -24
- package/packages/patterns/sonner/interactive/sonner-interactive-3.tsx +0 -28
- package/packages/patterns/sonner/interactive/sonner-interactive-4.tsx +0 -22
- package/packages/patterns/sonner/position/sonner-position-1.tsx +0 -21
- package/packages/patterns/sonner/position/sonner-position-2.tsx +0 -21
- package/packages/patterns/sonner/position/sonner-position-3.tsx +0 -21
- package/packages/patterns/sonner/position/sonner-position-4.tsx +0 -21
- package/packages/patterns/sonner/position/sonner-position-5.tsx +0 -21
- package/packages/patterns/sonner/position/sonner-position-6.tsx +0 -21
- package/packages/patterns/sonner/promise/sonner-promise-1.tsx +0 -28
- package/packages/patterns/sonner/promise/sonner-promise-2.tsx +0 -28
- package/packages/patterns/sonner/promise/sonner-promise-3.tsx +0 -28
- package/packages/patterns/sonner/promise/sonner-promise-4.tsx +0 -20
- package/packages/patterns/sonner/standard/sonner-standard-1.tsx +0 -14
- package/packages/patterns/sonner/standard/sonner-standard-2.tsx +0 -17
- package/packages/patterns/sonner/standard/sonner-standard-3.tsx +0 -14
- package/packages/patterns/sonner/standard/sonner-standard-4.tsx +0 -17
- package/packages/patterns/sonner/standard/sonner-standard-5.tsx +0 -17
- package/packages/patterns/spinner/applications/spinner-applications-1.tsx +0 -38
- package/packages/patterns/spinner/applications/spinner-applications-2.tsx +0 -34
- package/packages/patterns/spinner/applications/spinner-applications-3.tsx +0 -33
- package/packages/patterns/spinner/button/spinner-button-1.tsx +0 -13
- package/packages/patterns/spinner/button/spinner-button-2.tsx +0 -13
- package/packages/patterns/spinner/button/spinner-button-3.tsx +0 -12
- package/packages/patterns/spinner/button/spinner-button-4.tsx +0 -13
- package/packages/patterns/spinner/button/spinner-button-5.tsx +0 -13
- package/packages/patterns/spinner/inline/spinner-inline-1.tsx +0 -12
- package/packages/patterns/spinner/inline/spinner-inline-2.tsx +0 -12
- package/packages/patterns/spinner/inline/spinner-inline-3.tsx +0 -12
- package/packages/patterns/spinner/inline/spinner-inline-4.tsx +0 -21
- package/packages/patterns/spinner/standard/spinner-standard-1.tsx +0 -7
- package/packages/patterns/spinner/standard/spinner-standard-2.tsx +0 -7
- package/packages/patterns/spinner/standard/spinner-standard-3.tsx +0 -7
- package/packages/patterns/spinner/standard/spinner-standard-4.tsx +0 -7
- package/packages/patterns/spinner/standard/spinner-standard-5.tsx +0 -7
- package/packages/patterns/switch/cards/switch-cards-1.tsx +0 -27
- package/packages/patterns/switch/cards/switch-cards-2.tsx +0 -28
- package/packages/patterns/switch/cards/switch-cards-3.tsx +0 -35
- package/packages/patterns/switch/cards/switch-cards-4.tsx +0 -25
- package/packages/patterns/switch/icons/switch-icons-1.tsx +0 -16
- package/packages/patterns/switch/icons/switch-icons-2.tsx +0 -19
- package/packages/patterns/switch/icons/switch-icons-3.tsx +0 -16
- package/packages/patterns/switch/labeled/switch-labeled-1.tsx +0 -15
- package/packages/patterns/switch/labeled/switch-labeled-2.tsx +0 -14
- package/packages/patterns/switch/labeled/switch-labeled-3.tsx +0 -22
- package/packages/patterns/switch/labeled/switch-labeled-4.tsx +0 -20
- package/packages/patterns/switch/square/switch-square-1.tsx +0 -14
- package/packages/patterns/switch/square/switch-square-2.tsx +0 -36
- package/packages/patterns/switch/square/switch-square-3.tsx +0 -20
- package/packages/patterns/switch/square/switch-square-4.tsx +0 -27
- package/packages/patterns/switch/standard/switch-standard-1.tsx +0 -9
- package/packages/patterns/switch/standard/switch-standard-2.tsx +0 -9
- package/packages/patterns/switch/standard/switch-standard-3.tsx +0 -9
- package/packages/patterns/switch/standard/switch-standard-4.tsx +0 -9
- package/packages/patterns/table/advanced/table-advanced-1.tsx +0 -66
- package/packages/patterns/table/advanced/table-advanced-2.tsx +0 -86
- package/packages/patterns/table/advanced/table-advanced-3.tsx +0 -42
- package/packages/patterns/table/advanced/table-advanced-4.tsx +0 -114
- package/packages/patterns/table/standard/table-standard-1.tsx +0 -70
- package/packages/patterns/table/standard/table-standard-2.tsx +0 -75
- package/packages/patterns/table/standard/table-standard-3.tsx +0 -64
- package/packages/patterns/table/standard/table-standard-4.tsx +0 -73
- package/packages/patterns/tabs/advanced/tabs-advanced-1.tsx +0 -101
- package/packages/patterns/tabs/advanced/tabs-advanced-2.tsx +0 -118
- package/packages/patterns/tabs/advanced/tabs-advanced-3.tsx +0 -187
- package/packages/patterns/tabs/content/tabs-content-1.tsx +0 -85
- package/packages/patterns/tabs/content/tabs-content-2.tsx +0 -105
- package/packages/patterns/tabs/content/tabs-content-3.tsx +0 -149
- package/packages/patterns/tabs/layout/tabs-layout-1.tsx +0 -62
- package/packages/patterns/tabs/layout/tabs-layout-2.tsx +0 -60
- package/packages/patterns/tabs/layout/tabs-layout-3.tsx +0 -61
- package/packages/patterns/tabs/standard/tabs-standard-1.tsx +0 -52
- package/packages/patterns/tabs/standard/tabs-standard-2.tsx +0 -105
- package/packages/patterns/textarea/form/textarea-form-1.tsx +0 -20
- package/packages/patterns/textarea/form/textarea-form-2.tsx +0 -20
- package/packages/patterns/textarea/form/textarea-form-3.tsx +0 -22
- package/packages/patterns/textarea/form/textarea-form-4.tsx +0 -20
- package/packages/patterns/textarea/form/textarea-form-5.tsx +0 -31
- package/packages/patterns/textarea/labeled/textarea-labeled-1.tsx +0 -17
- package/packages/patterns/textarea/labeled/textarea-labeled-2.tsx +0 -18
- package/packages/patterns/textarea/labeled/textarea-labeled-3.tsx +0 -30
- package/packages/patterns/textarea/labeled/textarea-labeled-4.tsx +0 -20
- package/packages/patterns/textarea/standard/textarea-standard-1.tsx +0 -12
- package/packages/patterns/textarea/standard/textarea-standard-2.tsx +0 -13
- package/packages/patterns/textarea/standard/textarea-standard-3.tsx +0 -14
- package/packages/patterns/textarea/standard/textarea-standard-4.tsx +0 -13
- package/packages/patterns/toggle/sizes/toggle-sizes-1.tsx +0 -14
- package/packages/patterns/toggle/sizes/toggle-sizes-2.tsx +0 -14
- package/packages/patterns/toggle/sizes/toggle-sizes-3.tsx +0 -14
- package/packages/patterns/toggle/standard/toggle-standard-1.tsx +0 -14
- package/packages/patterns/toggle/standard/toggle-standard-2.tsx +0 -14
- package/packages/patterns/toggle/standard/toggle-standard-3.tsx +0 -14
- package/packages/patterns/toggle/standard/toggle-standard-4.tsx +0 -15
- package/packages/patterns/toggle-group/sizes/toggle-group-sizes-1.tsx +0 -22
- package/packages/patterns/toggle-group/sizes/toggle-group-sizes-2.tsx +0 -22
- package/packages/patterns/toggle-group/sizes/toggle-group-sizes-3.tsx +0 -22
- package/packages/patterns/toggle-group/standard/toggle-group-standard-1.tsx +0 -22
- package/packages/patterns/toggle-group/standard/toggle-group-standard-2.tsx +0 -22
- package/packages/patterns/toggle-group/standard/toggle-group-standard-3.tsx +0 -22
- package/packages/patterns/toggle-group/standard/toggle-group-standard-4.tsx +0 -22
- package/packages/patterns/tooltip/content/tooltip-content-1.tsx +0 -28
- package/packages/patterns/tooltip/content/tooltip-content-2.tsx +0 -27
- package/packages/patterns/tooltip/content/tooltip-content-3.tsx +0 -27
- package/packages/patterns/tooltip/content/tooltip-content-4.tsx +0 -36
- package/packages/patterns/tooltip/standard/tooltip-standard-1.tsx +0 -23
- package/packages/patterns/tooltip/standard/tooltip-standard-2.tsx +0 -49
- package/packages/patterns/tooltip/standard/tooltip-standard-3.tsx +0 -26
- package/packages/patterns/tooltip/standard/tooltip-standard-4.tsx +0 -25
- package/packages/patterns/tsconfig.json +0 -13
- package/packages/pill/index.tsx +0 -166
- package/packages/pill/package.json +0 -24
- package/packages/pill/tsconfig.json +0 -13
- package/packages/qr-code/index.tsx +0 -88
- package/packages/qr-code/package.json +0 -27
- package/packages/qr-code/server.tsx +0 -42
- package/packages/qr-code/tsconfig.json +0 -13
- package/packages/rating/index.tsx +0 -243
- package/packages/rating/package.json +0 -25
- package/packages/rating/tsconfig.json +0 -13
- package/packages/reel/index.tsx +0 -748
- package/packages/reel/package.json +0 -26
- package/packages/reel/reel-controlled.tsx +0 -327
- package/packages/reel/tsconfig.json +0 -13
- package/packages/relative-time/index.tsx +0 -181
- package/packages/relative-time/package.json +0 -24
- package/packages/relative-time/tsconfig.json +0 -13
- package/packages/sandbox/index.tsx +0 -251
- package/packages/sandbox/package.json +0 -24
- package/packages/sandbox/tsconfig.json +0 -13
- package/packages/shadcn-ui/components/ui/accordion.tsx +0 -66
- package/packages/shadcn-ui/components/ui/alert-dialog.tsx +0 -157
- package/packages/shadcn-ui/components/ui/alert.tsx +0 -66
- package/packages/shadcn-ui/components/ui/aspect-ratio.tsx +0 -11
- package/packages/shadcn-ui/components/ui/avatar.tsx +0 -53
- package/packages/shadcn-ui/components/ui/badge.tsx +0 -46
- package/packages/shadcn-ui/components/ui/breadcrumb.tsx +0 -109
- package/packages/shadcn-ui/components/ui/button-group.tsx +0 -83
- package/packages/shadcn-ui/components/ui/button.tsx +0 -60
- package/packages/shadcn-ui/components/ui/calendar.tsx +0 -213
- package/packages/shadcn-ui/components/ui/card.tsx +0 -112
- package/packages/shadcn-ui/components/ui/carousel.tsx +0 -241
- package/packages/shadcn-ui/components/ui/chart.tsx +0 -357
- package/packages/shadcn-ui/components/ui/checkbox.tsx +0 -32
- package/packages/shadcn-ui/components/ui/collapsible.tsx +0 -33
- package/packages/shadcn-ui/components/ui/command.tsx +0 -184
- package/packages/shadcn-ui/components/ui/context-menu.tsx +0 -252
- package/packages/shadcn-ui/components/ui/dialog.tsx +0 -143
- package/packages/shadcn-ui/components/ui/drawer.tsx +0 -135
- package/packages/shadcn-ui/components/ui/dropdown-menu.tsx +0 -257
- package/packages/shadcn-ui/components/ui/empty.tsx +0 -104
- package/packages/shadcn-ui/components/ui/field.tsx +0 -244
- package/packages/shadcn-ui/components/ui/form.tsx +0 -167
- package/packages/shadcn-ui/components/ui/hover-card.tsx +0 -44
- package/packages/shadcn-ui/components/ui/input-group.tsx +0 -170
- package/packages/shadcn-ui/components/ui/input-otp.tsx +0 -77
- package/packages/shadcn-ui/components/ui/input.tsx +0 -21
- package/packages/shadcn-ui/components/ui/item.tsx +0 -193
- package/packages/shadcn-ui/components/ui/kbd.tsx +0 -28
- package/packages/shadcn-ui/components/ui/label.tsx +0 -24
- package/packages/shadcn-ui/components/ui/menubar.tsx +0 -276
- package/packages/shadcn-ui/components/ui/navigation-menu.tsx +0 -168
- package/packages/shadcn-ui/components/ui/pagination.tsx +0 -127
- package/packages/shadcn-ui/components/ui/popover.tsx +0 -48
- package/packages/shadcn-ui/components/ui/progress.tsx +0 -31
- package/packages/shadcn-ui/components/ui/radio-group.tsx +0 -45
- package/packages/shadcn-ui/components/ui/resizable.tsx +0 -56
- package/packages/shadcn-ui/components/ui/scroll-area.tsx +0 -58
- package/packages/shadcn-ui/components/ui/select.tsx +0 -187
- package/packages/shadcn-ui/components/ui/separator.tsx +0 -28
- package/packages/shadcn-ui/components/ui/sheet.tsx +0 -139
- package/packages/shadcn-ui/components/ui/sidebar.tsx +0 -726
- package/packages/shadcn-ui/components/ui/skeleton.tsx +0 -13
- package/packages/shadcn-ui/components/ui/slider.tsx +0 -63
- package/packages/shadcn-ui/components/ui/sonner.tsx +0 -25
- package/packages/shadcn-ui/components/ui/spinner.tsx +0 -16
- package/packages/shadcn-ui/components/ui/switch.tsx +0 -31
- package/packages/shadcn-ui/components/ui/table.tsx +0 -116
- package/packages/shadcn-ui/components/ui/tabs.tsx +0 -66
- package/packages/shadcn-ui/components/ui/textarea.tsx +0 -18
- package/packages/shadcn-ui/components/ui/toast.tsx +0 -128
- package/packages/shadcn-ui/components/ui/toaster.tsx +0 -35
- package/packages/shadcn-ui/components/ui/toggle-group.tsx +0 -73
- package/packages/shadcn-ui/components/ui/toggle.tsx +0 -47
- package/packages/shadcn-ui/components/ui/tooltip.tsx +0 -61
- package/packages/shadcn-ui/components.json +0 -21
- package/packages/shadcn-ui/hooks/use-mobile.ts +0 -19
- package/packages/shadcn-ui/hooks/use-mobile.tsx +0 -19
- package/packages/shadcn-ui/hooks/use-toast.ts +0 -194
- package/packages/shadcn-ui/lib/utils.ts +0 -6
- package/packages/shadcn-ui/package.json +0 -39
- package/packages/shadcn-ui/tsconfig.json +0 -17
- package/packages/shader-ripple/index.tsx +0 -303
- package/packages/shader-ripple/package.json +0 -60
- package/packages/shader-ripple/tsconfig.json +0 -18
- package/packages/silk/README.md +0 -40
- package/packages/silk/index.tsx +0 -170
- package/packages/silk/package.json +0 -61
- package/packages/silk/tsconfig.json +0 -18
- package/packages/silk/types.d.ts +0 -23
- package/packages/snippet/index.tsx +0 -123
- package/packages/snippet/package.json +0 -23
- package/packages/snippet/tsconfig.json +0 -13
- package/packages/spinner/index.tsx +0 -271
- package/packages/spinner/package.json +0 -24
- package/packages/spinner/tsconfig.json +0 -13
- package/packages/status/index.tsx +0 -62
- package/packages/status/package.json +0 -23
- package/packages/status/tsconfig.json +0 -13
- package/packages/stories/index.tsx +0 -232
- package/packages/stories/package.json +0 -23
- package/packages/stories/tsconfig.json +0 -13
- package/packages/table/index.tsx +0 -246
- package/packages/table/package.json +0 -26
- package/packages/table/tsconfig.json +0 -13
- package/packages/tags/index.tsx +0 -221
- package/packages/tags/package.json +0 -23
- package/packages/tags/tsconfig.json +0 -13
- package/packages/theme-switcher/index.tsx +0 -99
- package/packages/theme-switcher/package.json +0 -26
- package/packages/theme-switcher/tsconfig.json +0 -13
- package/packages/ticker/index.tsx +0 -195
- package/packages/ticker/package.json +0 -23
- package/packages/ticker/tsconfig.json +0 -13
- package/packages/tree/index.tsx +0 -445
- package/packages/tree/package.json +0 -25
- package/packages/tree/tsconfig.json +0 -13
- package/packages/typescript-config/base.json +0 -27
- package/packages/typescript-config/nextjs.json +0 -13
- package/packages/typescript-config/package.json +0 -15
- package/packages/typescript-config/react-library.json +0 -8
- package/packages/typescript-config/types/minimatch/index.d.ts +0 -26
- package/packages/typography/package.json +0 -26
- package/packages/typography/styles.css +0 -326
- package/packages/typography/tsconfig.json +0 -13
- package/packages/video-player/index.tsx +0 -125
- package/packages/video-player/package.json +0 -24
- package/packages/video-player/tsconfig.json +0 -13
- package/public/r/accordion-controlled.json +0 -20
- package/public/r/accordion-demo.json +0 -19
- package/public/r/accordion-multiple.json +0 -19
- package/public/r/accordion-single.json +0 -19
- package/public/r/accordion.json +0 -15
- package/public/r/alert-demo.json +0 -19
- package/public/r/alert-dialog-demo.json +0 -20
- package/public/r/alert-dialog.json +0 -15
- package/public/r/alert-error.json +0 -20
- package/public/r/alert-info.json +0 -20
- package/public/r/alert-success.json +0 -20
- package/public/r/alert-warning.json +0 -20
- package/public/r/alert-with-icon-action.json +0 -20
- package/public/r/alert-with-icon.json +0 -19
- package/public/r/alert.json +0 -32
- package/public/r/announcement-tagless.json +0 -21
- package/public/r/announcement-themes.json +0 -21
- package/public/r/announcement.json +0 -20
- package/public/r/autocomplete-async.json +0 -21
- package/public/r/autocomplete-autohighlight.json +0 -20
- package/public/r/autocomplete-demo.json +0 -20
- package/public/r/autocomplete-disabled.json +0 -21
- package/public/r/autocomplete-form.json +0 -23
- package/public/r/autocomplete-grouped.json +0 -20
- package/public/r/autocomplete-inline.json +0 -20
- package/public/r/autocomplete-lg.json +0 -20
- package/public/r/autocomplete-limit.json +0 -20
- package/public/r/autocomplete-sm.json +0 -20
- package/public/r/autocomplete-with-clear.json +0 -20
- package/public/r/autocomplete-with-label.json +0 -21
- package/public/r/autocomplete-with-trigger-clear.json +0 -20
- package/public/r/autocomplete.json +0 -19
- package/public/r/avatar-demo.json +0 -19
- package/public/r/avatar-fallback.json +0 -19
- package/public/r/avatar-group.json +0 -20
- package/public/r/avatar-radius.json +0 -19
- package/public/r/avatar-size.json +0 -19
- package/public/r/avatar-stack-hover.json +0 -22
- package/public/r/avatar-stack.json +0 -21
- package/public/r/avatar.json +0 -15
- package/public/r/badge-demo.json +0 -19
- package/public/r/badge-destructive.json +0 -21
- package/public/r/badge-error.json +0 -20
- package/public/r/badge-info.json +0 -20
- package/public/r/badge-lg.json +0 -19
- package/public/r/badge-outline.json +0 -19
- package/public/r/badge-secondary.json +0 -19
- package/public/r/badge-sm.json +0 -19
- package/public/r/badge-success.json +0 -20
- package/public/r/badge-warning.json +0 -20
- package/public/r/badge-with-icon.json +0 -19
- package/public/r/badge-with-link.json +0 -19
- package/public/r/badge.json +0 -35
- package/public/r/banner-inset.json +0 -21
- package/public/r/banner-themes.json +0 -21
- package/public/r/banner.json +0 -20
- package/public/r/bookmarks.json +0 -206
- package/public/r/breadcrumb-custom-separator.json +0 -19
- package/public/r/breadcrumb-demo.json +0 -21
- package/public/r/breadcrumb.json +0 -15
- package/public/r/button-demo.json +0 -19
- package/public/r/button-destructive-outline.json +0 -20
- package/public/r/button-destructive.json +0 -21
- package/public/r/button-disabled.json +0 -20
- package/public/r/button-ghost.json +0 -19
- package/public/r/button-icon-lg.json +0 -19
- package/public/r/button-icon-sm.json +0 -19
- package/public/r/button-icon.json +0 -19
- package/public/r/button-lg.json +0 -19
- package/public/r/button-link.json +0 -19
- package/public/r/button-loading.json +0 -20
- package/public/r/button-outline.json +0 -19
- package/public/r/button-secondary.json +0 -19
- package/public/r/button-sm.json +0 -19
- package/public/r/button-with-icon.json +0 -19
- package/public/r/button-with-link.json +0 -19
- package/public/r/button-xl.json +0 -19
- package/public/r/button-xs.json +0 -19
- package/public/r/button.json +0 -23
- package/public/r/calendar-headless.json +0 -22
- package/public/r/calendar-rac.json +0 -16
- package/public/r/calendar.json +0 -21
- package/public/r/card-demo.json +0 -28
- package/public/r/card.json +0 -13
- package/public/r/chart.json +0 -15
- package/public/r/checkbox-card.json +0 -22
- package/public/r/checkbox-demo.json +0 -21
- package/public/r/checkbox-disabled.json +0 -22
- package/public/r/checkbox-form.json +0 -25
- package/public/r/checkbox-group-demo.json +0 -22
- package/public/r/checkbox-group-disabled.json +0 -23
- package/public/r/checkbox-group-form.json +0 -29
- package/public/r/checkbox-group-nested-parent.json +0 -23
- package/public/r/checkbox-group-parent.json +0 -23
- package/public/r/checkbox-group.json +0 -15
- package/public/r/checkbox-tree.json +0 -12
- package/public/r/checkbox-with-description.json +0 -23
- package/public/r/checkbox.json +0 -15
- package/public/r/choicebox-inline.json +0 -20
- package/public/r/choicebox.json +0 -20
- package/public/r/code-block-diff.json +0 -21
- package/public/r/code-block-focus.json +0 -20
- package/public/r/code-block-headless.json +0 -21
- package/public/r/code-block-highlight-line.json +0 -21
- package/public/r/code-block-highlight-word.json +0 -21
- package/public/r/code-block-no-highlighting.json +0 -20
- package/public/r/code-block-numberless.json +0 -20
- package/public/r/code-block-theme.json +0 -21
- package/public/r/code-block.json +0 -20
- package/public/r/codebase.json +0 -19
- package/public/r/collaborative-canvas.json +0 -19
- package/public/r/collapsible-demo.json +0 -19
- package/public/r/collapsible.json +0 -15
- package/public/r/color-picker.json +0 -21
- package/public/r/colors-zinc.json +0 -61
- package/public/r/combobox-autohighlight.json +0 -20
- package/public/r/combobox-controlled.json +0 -21
- package/public/r/combobox-create-new.json +0 -21
- package/public/r/combobox-demo.json +0 -20
- package/public/r/combobox-disabled.json +0 -21
- package/public/r/combobox-fixed-width.json +0 -20
- package/public/r/combobox-form.json +0 -24
- package/public/r/combobox-grouped.json +0 -20
- package/public/r/combobox-lg.json +0 -20
- package/public/r/combobox-multiple-form.json +0 -25
- package/public/r/combobox-multiple.json +0 -20
- package/public/r/combobox-sm.json +0 -20
- package/public/r/combobox-with-clear.json +0 -20
- package/public/r/combobox-with-inner-input.json +0 -21
- package/public/r/combobox-with-label.json +0 -21
- package/public/r/combobox.json +0 -19
- package/public/r/command.json +0 -18
- package/public/r/comp-01.json +0 -22
- package/public/r/comp-02.json +0 -23
- package/public/r/comp-03.json +0 -23
- package/public/r/comp-04.json +0 -23
- package/public/r/comp-05.json +0 -22
- package/public/r/comp-06.json +0 -23
- package/public/r/comp-07.json +0 -22
- package/public/r/comp-08.json +0 -23
- package/public/r/comp-09.json +0 -22
- package/public/r/comp-10.json +0 -22
- package/public/r/comp-100.json +0 -23
- package/public/r/comp-101.json +0 -23
- package/public/r/comp-102.json +0 -23
- package/public/r/comp-103.json +0 -23
- package/public/r/comp-104.json +0 -23
- package/public/r/comp-105.json +0 -23
- package/public/r/comp-106.json +0 -22
- package/public/r/comp-107.json +0 -22
- package/public/r/comp-108.json +0 -23
- package/public/r/comp-109.json +0 -22
- package/public/r/comp-11.json +0 -22
- package/public/r/comp-110.json +0 -22
- package/public/r/comp-111.json +0 -21
- package/public/r/comp-112.json +0 -21
- package/public/r/comp-113.json +0 -22
- package/public/r/comp-114.json +0 -23
- package/public/r/comp-115.json +0 -22
- package/public/r/comp-116.json +0 -22
- package/public/r/comp-117.json +0 -23
- package/public/r/comp-118.json +0 -23
- package/public/r/comp-119.json +0 -27
- package/public/r/comp-12.json +0 -22
- package/public/r/comp-120.json +0 -27
- package/public/r/comp-121.json +0 -27
- package/public/r/comp-122.json +0 -27
- package/public/r/comp-123.json +0 -22
- package/public/r/comp-124.json +0 -22
- package/public/r/comp-125.json +0 -31
- package/public/r/comp-126.json +0 -31
- package/public/r/comp-127.json +0 -21
- package/public/r/comp-128.json +0 -21
- package/public/r/comp-129.json +0 -24
- package/public/r/comp-13.json +0 -22
- package/public/r/comp-130.json +0 -23
- package/public/r/comp-131.json +0 -23
- package/public/r/comp-132.json +0 -23
- package/public/r/comp-133.json +0 -23
- package/public/r/comp-134.json +0 -23
- package/public/r/comp-135.json +0 -24
- package/public/r/comp-136.json +0 -23
- package/public/r/comp-137.json +0 -23
- package/public/r/comp-138.json +0 -25
- package/public/r/comp-139.json +0 -23
- package/public/r/comp-14.json +0 -22
- package/public/r/comp-140.json +0 -23
- package/public/r/comp-141.json +0 -23
- package/public/r/comp-142.json +0 -25
- package/public/r/comp-143.json +0 -23
- package/public/r/comp-144.json +0 -24
- package/public/r/comp-145.json +0 -24
- package/public/r/comp-146.json +0 -24
- package/public/r/comp-147.json +0 -24
- package/public/r/comp-148.json +0 -25
- package/public/r/comp-149.json +0 -24
- package/public/r/comp-15.json +0 -22
- package/public/r/comp-150.json +0 -21
- package/public/r/comp-151.json +0 -23
- package/public/r/comp-152.json +0 -23
- package/public/r/comp-153.json +0 -23
- package/public/r/comp-154.json +0 -23
- package/public/r/comp-155.json +0 -23
- package/public/r/comp-156.json +0 -25
- package/public/r/comp-157.json +0 -27
- package/public/r/comp-158.json +0 -24
- package/public/r/comp-159.json +0 -24
- package/public/r/comp-16.json +0 -22
- package/public/r/comp-160.json +0 -24
- package/public/r/comp-161.json +0 -24
- package/public/r/comp-162.json +0 -24
- package/public/r/comp-163.json +0 -28
- package/public/r/comp-164.json +0 -24
- package/public/r/comp-165.json +0 -24
- package/public/r/comp-166.json +0 -25
- package/public/r/comp-167.json +0 -24
- package/public/r/comp-168.json +0 -24
- package/public/r/comp-169.json +0 -23
- package/public/r/comp-17.json +0 -25
- package/public/r/comp-170.json +0 -25
- package/public/r/comp-171.json +0 -28
- package/public/r/comp-172.json +0 -23
- package/public/r/comp-173.json +0 -23
- package/public/r/comp-174.json +0 -23
- package/public/r/comp-175.json +0 -23
- package/public/r/comp-176.json +0 -23
- package/public/r/comp-177.json +0 -23
- package/public/r/comp-178.json +0 -23
- package/public/r/comp-179.json +0 -24
- package/public/r/comp-18.json +0 -25
- package/public/r/comp-180.json +0 -23
- package/public/r/comp-181.json +0 -25
- package/public/r/comp-182.json +0 -24
- package/public/r/comp-183.json +0 -25
- package/public/r/comp-184.json +0 -25
- package/public/r/comp-185.json +0 -24
- package/public/r/comp-186.json +0 -25
- package/public/r/comp-187.json +0 -25
- package/public/r/comp-188.json +0 -25
- package/public/r/comp-189.json +0 -23
- package/public/r/comp-19.json +0 -23
- package/public/r/comp-190.json +0 -23
- package/public/r/comp-191.json +0 -24
- package/public/r/comp-192.json +0 -23
- package/public/r/comp-193.json +0 -23
- package/public/r/comp-194.json +0 -24
- package/public/r/comp-195.json +0 -23
- package/public/r/comp-196.json +0 -24
- package/public/r/comp-197.json +0 -23
- package/public/r/comp-198.json +0 -23
- package/public/r/comp-199.json +0 -23
- package/public/r/comp-20.json +0 -23
- package/public/r/comp-200.json +0 -25
- package/public/r/comp-201.json +0 -22
- package/public/r/comp-202.json +0 -22
- package/public/r/comp-203.json +0 -23
- package/public/r/comp-204.json +0 -23
- package/public/r/comp-205.json +0 -23
- package/public/r/comp-206.json +0 -24
- package/public/r/comp-207.json +0 -23
- package/public/r/comp-208.json +0 -23
- package/public/r/comp-209.json +0 -23
- package/public/r/comp-21.json +0 -23
- package/public/r/comp-210.json +0 -24
- package/public/r/comp-211.json +0 -24
- package/public/r/comp-212.json +0 -23
- package/public/r/comp-213.json +0 -23
- package/public/r/comp-214.json +0 -23
- package/public/r/comp-215.json +0 -24
- package/public/r/comp-216.json +0 -22
- package/public/r/comp-217.json +0 -22
- package/public/r/comp-218.json +0 -25
- package/public/r/comp-219.json +0 -23
- package/public/r/comp-22.json +0 -23
- package/public/r/comp-220.json +0 -24
- package/public/r/comp-221.json +0 -23
- package/public/r/comp-222.json +0 -26
- package/public/r/comp-223.json +0 -26
- package/public/r/comp-224.json +0 -23
- package/public/r/comp-225.json +0 -24
- package/public/r/comp-226.json +0 -26
- package/public/r/comp-227.json +0 -26
- package/public/r/comp-228.json +0 -26
- package/public/r/comp-229.json +0 -30
- package/public/r/comp-23.json +0 -24
- package/public/r/comp-230.json +0 -30
- package/public/r/comp-231.json +0 -32
- package/public/r/comp-232.json +0 -31
- package/public/r/comp-233.json +0 -30
- package/public/r/comp-234.json +0 -28
- package/public/r/comp-235.json +0 -28
- package/public/r/comp-236.json +0 -24
- package/public/r/comp-237.json +0 -26
- package/public/r/comp-238.json +0 -26
- package/public/r/comp-239.json +0 -26
- package/public/r/comp-24.json +0 -23
- package/public/r/comp-240.json +0 -23
- package/public/r/comp-241.json +0 -24
- package/public/r/comp-242.json +0 -23
- package/public/r/comp-243.json +0 -23
- package/public/r/comp-244.json +0 -23
- package/public/r/comp-245.json +0 -23
- package/public/r/comp-246.json +0 -23
- package/public/r/comp-247.json +0 -23
- package/public/r/comp-248.json +0 -23
- package/public/r/comp-249.json +0 -24
- package/public/r/comp-25.json +0 -24
- package/public/r/comp-250.json +0 -25
- package/public/r/comp-251.json +0 -25
- package/public/r/comp-252.json +0 -25
- package/public/r/comp-253.json +0 -25
- package/public/r/comp-254.json +0 -35
- package/public/r/comp-255.json +0 -30
- package/public/r/comp-256.json +0 -25
- package/public/r/comp-257.json +0 -25
- package/public/r/comp-258.json +0 -32
- package/public/r/comp-259.json +0 -26
- package/public/r/comp-26.json +0 -24
- package/public/r/comp-260.json +0 -26
- package/public/r/comp-261.json +0 -24
- package/public/r/comp-262.json +0 -31
- package/public/r/comp-263.json +0 -25
- package/public/r/comp-264.json +0 -33
- package/public/r/comp-265.json +0 -32
- package/public/r/comp-266.json +0 -24
- package/public/r/comp-267.json +0 -19
- package/public/r/comp-268.json +0 -19
- package/public/r/comp-269.json +0 -19
- package/public/r/comp-27.json +0 -24
- package/public/r/comp-270.json +0 -19
- package/public/r/comp-271.json +0 -19
- package/public/r/comp-272.json +0 -19
- package/public/r/comp-273.json +0 -19
- package/public/r/comp-274.json +0 -19
- package/public/r/comp-275.json +0 -19
- package/public/r/comp-276.json +0 -19
- package/public/r/comp-277.json +0 -21
- package/public/r/comp-278.json +0 -21
- package/public/r/comp-279.json +0 -23
- package/public/r/comp-28.json +0 -24
- package/public/r/comp-280.json +0 -23
- package/public/r/comp-281.json +0 -23
- package/public/r/comp-282.json +0 -23
- package/public/r/comp-283.json +0 -23
- package/public/r/comp-284.json +0 -23
- package/public/r/comp-285.json +0 -23
- package/public/r/comp-286.json +0 -23
- package/public/r/comp-287.json +0 -24
- package/public/r/comp-288.json +0 -23
- package/public/r/comp-289.json +0 -24
- package/public/r/comp-29.json +0 -24
- package/public/r/comp-290.json +0 -24
- package/public/r/comp-291.json +0 -24
- package/public/r/comp-292.json +0 -24
- package/public/r/comp-293.json +0 -26
- package/public/r/comp-294.json +0 -24
- package/public/r/comp-295.json +0 -23
- package/public/r/comp-296.json +0 -23
- package/public/r/comp-297.json +0 -30
- package/public/r/comp-298.json +0 -26
- package/public/r/comp-299.json +0 -28
- package/public/r/comp-30.json +0 -23
- package/public/r/comp-300.json +0 -29
- package/public/r/comp-301.json +0 -24
- package/public/r/comp-302.json +0 -18
- package/public/r/comp-303.json +0 -18
- package/public/r/comp-304.json +0 -18
- package/public/r/comp-305.json +0 -21
- package/public/r/comp-306.json +0 -21
- package/public/r/comp-307.json +0 -21
- package/public/r/comp-308.json +0 -21
- package/public/r/comp-309.json +0 -21
- package/public/r/comp-31.json +0 -21
- package/public/r/comp-310.json +0 -23
- package/public/r/comp-311.json +0 -20
- package/public/r/comp-312.json +0 -21
- package/public/r/comp-313.json +0 -26
- package/public/r/comp-314.json +0 -26
- package/public/r/comp-315.json +0 -24
- package/public/r/comp-316.json +0 -25
- package/public/r/comp-317.json +0 -24
- package/public/r/comp-318.json +0 -24
- package/public/r/comp-319.json +0 -24
- package/public/r/comp-32.json +0 -21
- package/public/r/comp-320.json +0 -27
- package/public/r/comp-321.json +0 -28
- package/public/r/comp-322.json +0 -27
- package/public/r/comp-323.json +0 -30
- package/public/r/comp-324.json +0 -28
- package/public/r/comp-325.json +0 -29
- package/public/r/comp-326.json +0 -30
- package/public/r/comp-327.json +0 -30
- package/public/r/comp-328.json +0 -37
- package/public/r/comp-329.json +0 -38
- package/public/r/comp-33.json +0 -18
- package/public/r/comp-330.json +0 -27
- package/public/r/comp-331.json +0 -42
- package/public/r/comp-332.json +0 -25
- package/public/r/comp-333.json +0 -29
- package/public/r/comp-334.json +0 -22
- package/public/r/comp-335.json +0 -22
- package/public/r/comp-336.json +0 -22
- package/public/r/comp-337.json +0 -22
- package/public/r/comp-338.json +0 -22
- package/public/r/comp-339.json +0 -22
- package/public/r/comp-34.json +0 -27
- package/public/r/comp-340.json +0 -22
- package/public/r/comp-341.json +0 -22
- package/public/r/comp-342.json +0 -22
- package/public/r/comp-343.json +0 -22
- package/public/r/comp-344.json +0 -22
- package/public/r/comp-345.json +0 -22
- package/public/r/comp-346.json +0 -22
- package/public/r/comp-347.json +0 -22
- package/public/r/comp-348.json +0 -22
- package/public/r/comp-349.json +0 -22
- package/public/r/comp-35.json +0 -27
- package/public/r/comp-350.json +0 -22
- package/public/r/comp-351.json +0 -22
- package/public/r/comp-352.json +0 -24
- package/public/r/comp-353.json +0 -24
- package/public/r/comp-354.json +0 -23
- package/public/r/comp-355.json +0 -23
- package/public/r/comp-356.json +0 -23
- package/public/r/comp-357.json +0 -23
- package/public/r/comp-358.json +0 -23
- package/public/r/comp-359.json +0 -24
- package/public/r/comp-36.json +0 -26
- package/public/r/comp-360.json +0 -25
- package/public/r/comp-361.json +0 -23
- package/public/r/comp-362.json +0 -24
- package/public/r/comp-363.json +0 -27
- package/public/r/comp-364.json +0 -26
- package/public/r/comp-365.json +0 -24
- package/public/r/comp-366.json +0 -23
- package/public/r/comp-367.json +0 -23
- package/public/r/comp-368.json +0 -23
- package/public/r/comp-369.json +0 -23
- package/public/r/comp-37.json +0 -23
- package/public/r/comp-370.json +0 -23
- package/public/r/comp-371.json +0 -24
- package/public/r/comp-372.json +0 -24
- package/public/r/comp-373.json +0 -25
- package/public/r/comp-374.json +0 -26
- package/public/r/comp-375.json +0 -25
- package/public/r/comp-376.json +0 -26
- package/public/r/comp-377.json +0 -27
- package/public/r/comp-378.json +0 -24
- package/public/r/comp-379.json +0 -24
- package/public/r/comp-38.json +0 -23
- package/public/r/comp-380.json +0 -24
- package/public/r/comp-381.json +0 -26
- package/public/r/comp-382.json +0 -25
- package/public/r/comp-383.json +0 -26
- package/public/r/comp-384.json +0 -24
- package/public/r/comp-385.json +0 -24
- package/public/r/comp-386.json +0 -24
- package/public/r/comp-387.json +0 -28
- package/public/r/comp-388.json +0 -26
- package/public/r/comp-389.json +0 -24
- package/public/r/comp-39.json +0 -23
- package/public/r/comp-390.json +0 -23
- package/public/r/comp-391.json +0 -23
- package/public/r/comp-392.json +0 -23
- package/public/r/comp-393.json +0 -23
- package/public/r/comp-394.json +0 -24
- package/public/r/comp-395.json +0 -24
- package/public/r/comp-396.json +0 -24
- package/public/r/comp-397.json +0 -25
- package/public/r/comp-398.json +0 -26
- package/public/r/comp-399.json +0 -26
- package/public/r/comp-40.json +0 -23
- package/public/r/comp-400.json +0 -20
- package/public/r/comp-401.json +0 -19
- package/public/r/comp-402.json +0 -19
- package/public/r/comp-403.json +0 -19
- package/public/r/comp-404.json +0 -19
- package/public/r/comp-405.json +0 -19
- package/public/r/comp-406.json +0 -19
- package/public/r/comp-407.json +0 -19
- package/public/r/comp-408.json +0 -19
- package/public/r/comp-409.json +0 -22
- package/public/r/comp-41.json +0 -29
- package/public/r/comp-410.json +0 -22
- package/public/r/comp-411.json +0 -22
- package/public/r/comp-412.json +0 -19
- package/public/r/comp-413.json +0 -22
- package/public/r/comp-414.json +0 -22
- package/public/r/comp-415.json +0 -22
- package/public/r/comp-416.json +0 -23
- package/public/r/comp-417.json +0 -22
- package/public/r/comp-418.json +0 -23
- package/public/r/comp-419.json +0 -23
- package/public/r/comp-42.json +0 -30
- package/public/r/comp-420.json +0 -23
- package/public/r/comp-421.json +0 -23
- package/public/r/comp-422.json +0 -23
- package/public/r/comp-423.json +0 -24
- package/public/r/comp-424.json +0 -22
- package/public/r/comp-425.json +0 -23
- package/public/r/comp-426.json +0 -23
- package/public/r/comp-427.json +0 -23
- package/public/r/comp-428.json +0 -23
- package/public/r/comp-429.json +0 -23
- package/public/r/comp-43.json +0 -32
- package/public/r/comp-430.json +0 -23
- package/public/r/comp-431.json +0 -23
- package/public/r/comp-432.json +0 -23
- package/public/r/comp-433.json +0 -24
- package/public/r/comp-434.json +0 -24
- package/public/r/comp-435.json +0 -24
- package/public/r/comp-436.json +0 -24
- package/public/r/comp-437.json +0 -25
- package/public/r/comp-438.json +0 -23
- package/public/r/comp-439.json +0 -24
- package/public/r/comp-44.json +0 -25
- package/public/r/comp-440.json +0 -25
- package/public/r/comp-441.json +0 -25
- package/public/r/comp-442.json +0 -24
- package/public/r/comp-443.json +0 -24
- package/public/r/comp-444.json +0 -24
- package/public/r/comp-445.json +0 -24
- package/public/r/comp-446.json +0 -24
- package/public/r/comp-447.json +0 -25
- package/public/r/comp-448.json +0 -23
- package/public/r/comp-449.json +0 -23
- package/public/r/comp-45.json +0 -25
- package/public/r/comp-450.json +0 -23
- package/public/r/comp-451.json +0 -23
- package/public/r/comp-452.json +0 -23
- package/public/r/comp-453.json +0 -25
- package/public/r/comp-454.json +0 -22
- package/public/r/comp-455.json +0 -22
- package/public/r/comp-456.json +0 -22
- package/public/r/comp-457.json +0 -21
- package/public/r/comp-458.json +0 -22
- package/public/r/comp-459.json +0 -26
- package/public/r/comp-46.json +0 -26
- package/public/r/comp-460.json +0 -26
- package/public/r/comp-461.json +0 -27
- package/public/r/comp-462.json +0 -27
- package/public/r/comp-463.json +0 -30
- package/public/r/comp-464.json +0 -29
- package/public/r/comp-465.json +0 -29
- package/public/r/comp-466.json +0 -21
- package/public/r/comp-467.json +0 -23
- package/public/r/comp-468.json +0 -21
- package/public/r/comp-469.json +0 -21
- package/public/r/comp-47.json +0 -32
- package/public/r/comp-470.json +0 -21
- package/public/r/comp-471.json +0 -21
- package/public/r/comp-472.json +0 -23
- package/public/r/comp-473.json +0 -24
- package/public/r/comp-474.json +0 -22
- package/public/r/comp-475.json +0 -22
- package/public/r/comp-476.json +0 -21
- package/public/r/comp-477.json +0 -31
- package/public/r/comp-478.json +0 -36
- package/public/r/comp-479.json +0 -28
- package/public/r/comp-48.json +0 -32
- package/public/r/comp-480.json +0 -30
- package/public/r/comp-481.json +0 -34
- package/public/r/comp-482.json +0 -33
- package/public/r/comp-483.json +0 -37
- package/public/r/comp-484.json +0 -41
- package/public/r/comp-485.json +0 -43
- package/public/r/comp-486.json +0 -23
- package/public/r/comp-487.json +0 -26
- package/public/r/comp-488.json +0 -27
- package/public/r/comp-489.json +0 -28
- package/public/r/comp-49.json +0 -32
- package/public/r/comp-490.json +0 -23
- package/public/r/comp-491.json +0 -24
- package/public/r/comp-492.json +0 -25
- package/public/r/comp-493.json +0 -23
- package/public/r/comp-494.json +0 -23
- package/public/r/comp-495.json +0 -24
- package/public/r/comp-496.json +0 -23
- package/public/r/comp-497.json +0 -24
- package/public/r/comp-498.json +0 -24
- package/public/r/comp-499.json +0 -24
- package/public/r/comp-50.json +0 -32
- package/public/r/comp-500.json +0 -25
- package/public/r/comp-501.json +0 -25
- package/public/r/comp-502.json +0 -26
- package/public/r/comp-503.json +0 -27
- package/public/r/comp-504.json +0 -28
- package/public/r/comp-505.json +0 -28
- package/public/r/comp-506.json +0 -26
- package/public/r/comp-507.json +0 -27
- package/public/r/comp-508.json +0 -25
- package/public/r/comp-509.json +0 -25
- package/public/r/comp-51.json +0 -23
- package/public/r/comp-510.json +0 -24
- package/public/r/comp-511.json +0 -27
- package/public/r/comp-512.json +0 -27
- package/public/r/comp-513.json +0 -21
- package/public/r/comp-514.json +0 -21
- package/public/r/comp-515.json +0 -21
- package/public/r/comp-516.json +0 -22
- package/public/r/comp-517.json +0 -22
- package/public/r/comp-518.json +0 -21
- package/public/r/comp-519.json +0 -21
- package/public/r/comp-52.json +0 -23
- package/public/r/comp-520.json +0 -22
- package/public/r/comp-521.json +0 -22
- package/public/r/comp-522.json +0 -21
- package/public/r/comp-523.json +0 -21
- package/public/r/comp-524.json +0 -21
- package/public/r/comp-525.json +0 -21
- package/public/r/comp-526.json +0 -22
- package/public/r/comp-527.json +0 -23
- package/public/r/comp-528.json +0 -22
- package/public/r/comp-529.json +0 -22
- package/public/r/comp-53.json +0 -24
- package/public/r/comp-530.json +0 -22
- package/public/r/comp-531.json +0 -22
- package/public/r/comp-532.json +0 -22
- package/public/r/comp-533.json +0 -22
- package/public/r/comp-534.json +0 -22
- package/public/r/comp-535.json +0 -22
- package/public/r/comp-536.json +0 -22
- package/public/r/comp-537.json +0 -22
- package/public/r/comp-538.json +0 -22
- package/public/r/comp-539.json +0 -22
- package/public/r/comp-54.json +0 -26
- package/public/r/comp-540.json +0 -21
- package/public/r/comp-541.json +0 -21
- package/public/r/comp-542.json +0 -124
- package/public/r/comp-543.json +0 -29
- package/public/r/comp-544.json +0 -26
- package/public/r/comp-545.json +0 -29
- package/public/r/comp-546.json +0 -29
- package/public/r/comp-547.json +0 -29
- package/public/r/comp-548.json +0 -29
- package/public/r/comp-549.json +0 -29
- package/public/r/comp-55.json +0 -27
- package/public/r/comp-550.json +0 -29
- package/public/r/comp-551.json +0 -30
- package/public/r/comp-552.json +0 -29
- package/public/r/comp-553.json +0 -29
- package/public/r/comp-554.json +0 -36
- package/public/r/comp-555.json +0 -23
- package/public/r/comp-556.json +0 -23
- package/public/r/comp-557.json +0 -23
- package/public/r/comp-558.json +0 -23
- package/public/r/comp-559.json +0 -23
- package/public/r/comp-56.json +0 -26
- package/public/r/comp-560.json +0 -23
- package/public/r/comp-561.json +0 -25
- package/public/r/comp-562.json +0 -23
- package/public/r/comp-563.json +0 -23
- package/public/r/comp-564.json +0 -24
- package/public/r/comp-565.json +0 -20
- package/public/r/comp-566.json +0 -20
- package/public/r/comp-567.json +0 -20
- package/public/r/comp-568.json +0 -20
- package/public/r/comp-569.json +0 -20
- package/public/r/comp-57.json +0 -26
- package/public/r/comp-570.json +0 -20
- package/public/r/comp-571.json +0 -23
- package/public/r/comp-572.json +0 -23
- package/public/r/comp-573.json +0 -20
- package/public/r/comp-574.json +0 -22
- package/public/r/comp-575.json +0 -20
- package/public/r/comp-576.json +0 -21
- package/public/r/comp-577.json +0 -23
- package/public/r/comp-578.json +0 -28
- package/public/r/comp-579.json +0 -28
- package/public/r/comp-58.json +0 -25
- package/public/r/comp-580.json +0 -29
- package/public/r/comp-581.json +0 -45
- package/public/r/comp-582.json +0 -42
- package/public/r/comp-583.json +0 -41
- package/public/r/comp-584.json +0 -41
- package/public/r/comp-585.json +0 -41
- package/public/r/comp-586.json +0 -34
- package/public/r/comp-587.json +0 -29
- package/public/r/comp-588.json +0 -33
- package/public/r/comp-589.json +0 -37
- package/public/r/comp-59.json +0 -22
- package/public/r/comp-590.json +0 -40
- package/public/r/comp-591.json +0 -29
- package/public/r/comp-592.json +0 -41
- package/public/r/comp-593.json +0 -36
- package/public/r/comp-594.json +0 -33
- package/public/r/comp-595.json +0 -22
- package/public/r/comp-596.json +0 -26
- package/public/r/comp-597.json +0 -22
- package/public/r/comp-598.json +0 -22
- package/public/r/comp-599.json +0 -22
- package/public/r/comp-60.json +0 -23
- package/public/r/comp-600.json +0 -17
- package/public/r/comp-601.json +0 -20
- package/public/r/comp-602.json +0 -17
- package/public/r/comp-603.json +0 -20
- package/public/r/comp-604.json +0 -17
- package/public/r/comp-605.json +0 -17
- package/public/r/comp-606.json +0 -20
- package/public/r/comp-607.json +0 -20
- package/public/r/comp-608.json +0 -20
- package/public/r/comp-609.json +0 -20
- package/public/r/comp-61.json +0 -23
- package/public/r/comp-610.json +0 -23
- package/public/r/comp-611.json +0 -23
- package/public/r/comp-612.json +0 -17
- package/public/r/comp-613.json +0 -20
- package/public/r/comp-614.json +0 -17
- package/public/r/comp-615.json +0 -26
- package/public/r/comp-616.json +0 -26
- package/public/r/comp-617.json +0 -26
- package/public/r/comp-62.json +0 -23
- package/public/r/comp-63.json +0 -22
- package/public/r/comp-64.json +0 -23
- package/public/r/comp-65.json +0 -22
- package/public/r/comp-66.json +0 -22
- package/public/r/comp-67.json +0 -23
- package/public/r/comp-68.json +0 -24
- package/public/r/comp-69.json +0 -24
- package/public/r/comp-70.json +0 -24
- package/public/r/comp-71.json +0 -22
- package/public/r/comp-72.json +0 -21
- package/public/r/comp-73.json +0 -18
- package/public/r/comp-74.json +0 -27
- package/public/r/comp-75.json +0 -22
- package/public/r/comp-76.json +0 -23
- package/public/r/comp-77.json +0 -22
- package/public/r/comp-78.json +0 -21
- package/public/r/comp-79.json +0 -22
- package/public/r/comp-80.json +0 -21
- package/public/r/comp-81.json +0 -21
- package/public/r/comp-82.json +0 -22
- package/public/r/comp-83.json +0 -21
- package/public/r/comp-84.json +0 -21
- package/public/r/comp-85.json +0 -22
- package/public/r/comp-86.json +0 -22
- package/public/r/comp-87.json +0 -21
- package/public/r/comp-88.json +0 -22
- package/public/r/comp-89.json +0 -21
- package/public/r/comp-90.json +0 -22
- package/public/r/comp-91.json +0 -22
- package/public/r/comp-92.json +0 -22
- package/public/r/comp-93.json +0 -22
- package/public/r/comp-94.json +0 -24
- package/public/r/comp-95.json +0 -26
- package/public/r/comp-96.json +0 -21
- package/public/r/comp-97.json +0 -21
- package/public/r/comp-98.json +0 -22
- package/public/r/comp-99.json +0 -23
- package/public/r/comparison-event-handlers.json +0 -22
- package/public/r/comparison-hover.json +0 -22
- package/public/r/comparison.json +0 -21
- package/public/r/context-menu.json +0 -16
- package/public/r/contribution-graph-custom-blocks.json +0 -23
- package/public/r/contribution-graph-custom-footer.json +0 -23
- package/public/r/contribution-graph-custom-theme.json +0 -23
- package/public/r/contribution-graph-minimal.json +0 -22
- package/public/r/contribution-graph-size.json +0 -23
- package/public/r/contribution-graph-tooltip.json +0 -23
- package/public/r/contribution-graph.json +0 -22
- package/public/r/credit-card-apple.json +0 -20
- package/public/r/credit-card-back.json +0 -20
- package/public/r/credit-card.json +0 -20
- package/public/r/cropper.json +0 -15
- package/public/r/cursor-color.json +0 -20
- package/public/r/cursor-message.json +0 -20
- package/public/r/cursor-name-message.json +0 -21
- package/public/r/cursor-name.json +0 -20
- package/public/r/cursor-only.json +0 -19
- package/public/r/cursor.json +0 -20
- package/public/r/dashboard-1.json +0 -263
- package/public/r/dashboard-2.json +0 -264
- package/public/r/dashboard-3.json +0 -225
- package/public/r/datefield-rac.json +0 -15
- package/public/r/deck-controlled.json +0 -22
- package/public/r/deck-product-cards.json +0 -22
- package/public/r/deck.json +0 -20
- package/public/r/dialog-close-confirmation.json +0 -29
- package/public/r/dialog-demo.json +0 -25
- package/public/r/dialog-from-menu.json +0 -23
- package/public/r/dialog-nested.json +0 -23
- package/public/r/dialog-stack-controlled.json +0 -22
- package/public/r/dialog-stack-navigation.json +0 -22
- package/public/r/dialog-stack-six.json +0 -22
- package/public/r/dialog-stack.json +0 -22
- package/public/r/dialog.json +0 -15
- package/public/r/dropdown-menu.json +0 -15
- package/public/r/dropzone-accept.json +0 -20
- package/public/r/dropzone-custom-empty-state.json +0 -21
- package/public/r/dropzone-image-preview.json +0 -21
- package/public/r/dropzone-min-max.json +0 -20
- package/public/r/dropzone-multiple.json +0 -21
- package/public/r/dropzone.json +0 -21
- package/public/r/editor.json +0 -21
- package/public/r/emails.json +0 -243
- package/public/r/empty-demo.json +0 -20
- package/public/r/empty.json +0 -12
- package/public/r/ether.json +0 -15
- package/public/r/example-app-calendar.json +0 -323
- package/public/r/field-2.json +0 -19
- package/public/r/field-autocomplete.json +0 -23
- package/public/r/field-checkbox-group.json +0 -26
- package/public/r/field-checkbox.json +0 -22
- package/public/r/field-combobox-multiple.json +0 -24
- package/public/r/field-combobox.json +0 -23
- package/public/r/field-complete-form.json +0 -30
- package/public/r/field-demo.json +0 -22
- package/public/r/field-disabled.json +0 -23
- package/public/r/field-error.json +0 -21
- package/public/r/field-number-field.json +0 -25
- package/public/r/field-radio.json +0 -26
- package/public/r/field-required.json +0 -21
- package/public/r/field-select.json +0 -24
- package/public/r/field-slider.json +0 -24
- package/public/r/field-switch.json +0 -22
- package/public/r/field-textarea.json +0 -24
- package/public/r/field-validity.json +0 -19
- package/public/r/field.json +0 -23
- package/public/r/fieldset-demo.json +0 -24
- package/public/r/fieldset.json +0 -15
- package/public/r/files.json +0 -195
- package/public/r/form-demo.json +0 -24
- package/public/r/form-zod.json +0 -29
- package/public/r/form.json +0 -20
- package/public/r/frame-demo.json +0 -19
- package/public/r/frame.json +0 -12
- package/public/r/gantt-lanes.json +0 -23
- package/public/r/gantt-no-sidebar.json +0 -22
- package/public/r/gantt-read-only.json +0 -22
- package/public/r/gantt.json +0 -22
- package/public/r/glimpse-custom.json +0 -21
- package/public/r/glimpse.json +0 -20
- package/public/r/gooey-toast-demo.json +0 -23
- package/public/r/gooey-toast-position.json +0 -20
- package/public/r/gooey-toast-promise.json +0 -20
- package/public/r/gooey-toast-states.json +0 -20
- package/public/r/gooey-toast-with-button.json +0 -20
- package/public/r/gradient-blinds.json +0 -15
- package/public/r/group-demo.json +0 -20
- package/public/r/group-with-input.json +0 -21
- package/public/r/group.json +0 -18
- package/public/r/hero.json +0 -24
- package/public/r/hover-card.json +0 -15
- package/public/r/image-crop-circular.json +0 -23
- package/public/r/image-crop-custom.json +0 -24
- package/public/r/image-crop.json +0 -23
- package/public/r/image-zoom-background.json +0 -22
- package/public/r/image-zoom-margin.json +0 -21
- package/public/r/image-zoom.json +0 -21
- package/public/r/input-demo.json +0 -19
- package/public/r/input-disabled.json +0 -20
- package/public/r/input-file.json +0 -20
- package/public/r/input-group.json +0 -20
- package/public/r/input-lg.json +0 -19
- package/public/r/input-sm.json +0 -19
- package/public/r/input-with-button.json +0 -21
- package/public/r/input-with-label.json +0 -21
- package/public/r/input.json +0 -15
- package/public/r/kanban-simple.json +0 -21
- package/public/r/kanban.json +0 -21
- package/public/r/kbd.json +0 -12
- package/public/r/label.json +0 -15
- package/public/r/leads.json +0 -271
- package/public/r/list-simple.json +0 -21
- package/public/r/list.json +0 -21
- package/public/r/maps.json +0 -188
- package/public/r/marquee-no-fade.json +0 -20
- package/public/r/marquee-raw.json +0 -21
- package/public/r/marquee-spacing.json +0 -21
- package/public/r/marquee.json +0 -20
- package/public/r/menu-checkbox.json +0 -21
- package/public/r/menu-close-on-click.json +0 -20
- package/public/r/menu-demo.json +0 -20
- package/public/r/menu-group-labels.json +0 -21
- package/public/r/menu-hover.json +0 -20
- package/public/r/menu-link.json +0 -21
- package/public/r/menu-nested.json +0 -20
- package/public/r/menu-radio-group.json +0 -21
- package/public/r/menu.json +0 -23
- package/public/r/meter-demo.json +0 -19
- package/public/r/meter-simple.json +0 -19
- package/public/r/meter-with-formatted-value.json +0 -19
- package/public/r/meter-with-range.json +0 -19
- package/public/r/meter.json +0 -15
- package/public/r/mini-calendar-controlled.json +0 -21
- package/public/r/mini-calendar-custom.json +0 -21
- package/public/r/mini-calendar-days.json +0 -20
- package/public/r/mini-calendar.json +0 -20
- package/public/r/multiselect.json +0 -15
- package/public/r/navigation-menu.json +0 -12
- package/public/r/number-field-demo.json +0 -19
- package/public/r/number-field-disabled.json +0 -21
- package/public/r/number-field-form.json +0 -25
- package/public/r/number-field-lg.json +0 -19
- package/public/r/number-field-sm.json +0 -19
- package/public/r/number-field-with-formatted-value.json +0 -19
- package/public/r/number-field-with-label.json +0 -24
- package/public/r/number-field-with-range.json +0 -20
- package/public/r/number-field-with-scrub.json +0 -19
- package/public/r/number-field-with-step.json +0 -19
- package/public/r/number-field.json +0 -15
- package/public/r/pagination-demo.json +0 -19
- package/public/r/pagination.json +0 -18
- package/public/r/particle-bu-1.json +0 -22
- package/public/r/particle-bu-2.json +0 -22
- package/public/r/particle-bu-3.json +0 -22
- package/public/r/particle-bu-4.json +0 -22
- package/public/r/particle-bu-5.json +0 -22
- package/public/r/particle-bu-6.json +0 -22
- package/public/r/particle-bu-7.json +0 -22
- package/public/r/particle-fr-1.json +0 -25
- package/public/r/particle-pa-1.json +0 -19
- package/public/r/particle-pa-2.json +0 -21
- package/public/r/pill-avatar-group.json +0 -21
- package/public/r/pill-avatar.json +0 -21
- package/public/r/pill-button.json +0 -20
- package/public/r/pill-delta.json +0 -21
- package/public/r/pill-icon.json +0 -21
- package/public/r/pill-indicator.json +0 -20
- package/public/r/pill-status.json +0 -21
- package/public/r/pill.json +0 -20
- package/public/r/popover-demo.json +0 -27
- package/public/r/popover-with-close.json +0 -21
- package/public/r/popover.json +0 -15
- package/public/r/preview-card-demo.json +0 -21
- package/public/r/preview-card.json +0 -15
- package/public/r/pricing.json +0 -24
- package/public/r/progress-demo.json +0 -19
- package/public/r/progress-with-formatted-value.json +0 -19
- package/public/r/progress-with-label-value.json +0 -20
- package/public/r/progress.json +0 -15
- package/public/r/qr-code-robust.json +0 -21
- package/public/r/qr-code-server.json +0 -21
- package/public/r/qr-code-styling.json +0 -21
- package/public/r/qr-code.json +0 -20
- package/public/r/radio-group-card.json +0 -21
- package/public/r/radio-group-demo.json +0 -21
- package/public/r/radio-group-disabled.json +0 -21
- package/public/r/radio-group-form.json +0 -27
- package/public/r/radio-group-with-description.json +0 -23
- package/public/r/radio-group.json +0 -15
- package/public/r/rating-colors.json +0 -21
- package/public/r/rating-controlled.json +0 -21
- package/public/r/rating-icon.json +0 -21
- package/public/r/rating-size.json +0 -20
- package/public/r/rating.json +0 -20
- package/public/r/reel-custom.json +0 -22
- package/public/r/reel-images.json +0 -21
- package/public/r/reel-minimal.json +0 -20
- package/public/r/reel.json +0 -21
- package/public/r/registry.json +0 -26204
- package/public/r/relative-time-controlled.json +0 -21
- package/public/r/relative-time-format-date.json +0 -20
- package/public/r/relative-time-format-time.json +0 -20
- package/public/r/relative-time.json +0 -20
- package/public/r/rentals.json +0 -187
- package/public/r/roadmap.json +0 -28
- package/public/r/sandbox-no-file-explorer.json +0 -21
- package/public/r/sandbox.json +0 -21
- package/public/r/scroll-area-both.json +0 -19
- package/public/r/scroll-area-demo.json +0 -19
- package/public/r/scroll-area-horizontal.json +0 -19
- package/public/r/scroll-area.json +0 -15
- package/public/r/select-demo.json +0 -19
- package/public/r/select-disabled.json +0 -20
- package/public/r/select-form.json +0 -26
- package/public/r/select-lg.json +0 -19
- package/public/r/select-multiple.json +0 -19
- package/public/r/select-native.json +0 -12
- package/public/r/select-sm.json +0 -19
- package/public/r/select-with-groups.json +0 -19
- package/public/r/select-without-alignment.json +0 -19
- package/public/r/select.json +0 -15
- package/public/r/separator-demo.json +0 -19
- package/public/r/separator.json +0 -15
- package/public/r/sheet-demo.json +0 -23
- package/public/r/sheet-position.json +0 -20
- package/public/r/sheet.json +0 -18
- package/public/r/sidebar-nav.json +0 -22
- package/public/r/silk.json +0 -16
- package/public/r/skeleton-demo.json +0 -21
- package/public/r/skeleton-only.json +0 -19
- package/public/r/skeleton.json +0 -24
- package/public/r/slider-demo.json +0 -19
- package/public/r/slider-form.json +0 -27
- package/public/r/slider-range.json +0 -20
- package/public/r/slider-vertical.json +0 -20
- package/public/r/slider-with-label-value.json +0 -21
- package/public/r/slider.json +0 -15
- package/public/r/snippet-npm.json +0 -22
- package/public/r/snippet.json +0 -21
- package/public/r/sonner.json +0 -16
- package/public/r/spinner-customization.json +0 -21
- package/public/r/spinner-variants.json +0 -21
- package/public/r/spinner.json +0 -20
- package/public/r/stats-card.json +0 -22
- package/public/r/status-custom.json +0 -21
- package/public/r/status.json +0 -20
- package/public/r/stepper.json +0 -15
- package/public/r/stories-avatars.json +0 -21
- package/public/r/stories-images.json +0 -21
- package/public/r/stories.json +0 -21
- package/public/r/switch-card.json +0 -22
- package/public/r/switch-demo.json +0 -21
- package/public/r/switch-disabled.json +0 -22
- package/public/r/switch-form.json +0 -25
- package/public/r/switch-with-description.json +0 -23
- package/public/r/switch.json +0 -15
- package/public/r/table-demo.json +0 -21
- package/public/r/table-framed.json +0 -23
- package/public/r/table-simple.json +0 -21
- package/public/r/table.json +0 -21
- package/public/r/tabs-demo.json +0 -19
- package/public/r/tabs-underline-vertical.json +0 -20
- package/public/r/tabs-underline.json +0 -19
- package/public/r/tabs-vertical.json +0 -20
- package/public/r/tabs.json +0 -15
- package/public/r/tags-create.json +0 -21
- package/public/r/tags-filter.json +0 -21
- package/public/r/tags.json +0 -20
- package/public/r/template-auth-eight.json +0 -28
- package/public/r/template-auth-five.json +0 -28
- package/public/r/template-auth-four.json +0 -29
- package/public/r/template-auth-nine.json +0 -28
- package/public/r/template-auth-one.json +0 -49
- package/public/r/template-auth-seven.json +0 -29
- package/public/r/template-auth-six.json +0 -28
- package/public/r/template-auth-three.json +0 -49
- package/public/r/template-auth-two.json +0 -44
- package/public/r/template-hero-eight.json +0 -83
- package/public/r/template-hero-eleven.json +0 -29
- package/public/r/template-hero-five.json +0 -35
- package/public/r/template-hero-four.json +0 -35
- package/public/r/template-hero-fourteen.json +0 -101
- package/public/r/template-hero-nine.json +0 -74
- package/public/r/template-hero-one.json +0 -90
- package/public/r/template-hero-seven.json +0 -83
- package/public/r/template-hero-six.json +0 -83
- package/public/r/template-hero-ten.json +0 -77
- package/public/r/template-hero-thirteen.json +0 -101
- package/public/r/template-hero-three.json +0 -35
- package/public/r/template-hero-twelve.json +0 -30
- package/public/r/template-hero-two.json +0 -96
- package/public/r/template-logo-cloud-five.json +0 -68
- package/public/r/template-logo-cloud-four.json +0 -71
- package/public/r/template-logo-cloud-one.json +0 -89
- package/public/r/template-logo-cloud-three.json +0 -71
- package/public/r/template-logo-cloud-two.json +0 -74
- package/public/r/textarea-demo.json +0 -19
- package/public/r/textarea-disabled.json +0 -20
- package/public/r/textarea-form.json +0 -25
- package/public/r/textarea-lg.json +0 -19
- package/public/r/textarea-sm.json +0 -19
- package/public/r/textarea-with-label.json +0 -22
- package/public/r/textarea.json +0 -15
- package/public/r/theme-switcher-uncontrolled.json +0 -21
- package/public/r/theme-switcher.json +0 -21
- package/public/r/ticker-currency.json +0 -20
- package/public/r/ticker-inline.json +0 -20
- package/public/r/ticker-percent.json +0 -20
- package/public/r/ticker.json +0 -20
- package/public/r/timeline.json +0 -15
- package/public/r/toast-demo.json +0 -20
- package/public/r/toast-heights.json +0 -19
- package/public/r/toast-loading.json +0 -21
- package/public/r/toast-promise.json +0 -20
- package/public/r/toast-with-action.json +0 -20
- package/public/r/toast-with-status.json +0 -20
- package/public/r/toast.json +0 -18
- package/public/r/toggle-demo.json +0 -19
- package/public/r/toggle-disabled.json +0 -20
- package/public/r/toggle-group-demo.json +0 -20
- package/public/r/toggle-group-disabled.json +0 -21
- package/public/r/toggle-group-lg.json +0 -20
- package/public/r/toggle-group-multiple.json +0 -20
- package/public/r/toggle-group-outline-with-separator.json +0 -20
- package/public/r/toggle-group-outline.json +0 -20
- package/public/r/toggle-group-sm.json +0 -20
- package/public/r/toggle-group-with-disabled-item.json +0 -21
- package/public/r/toggle-group.json +0 -19
- package/public/r/toggle-icon-group.json +0 -19
- package/public/r/toggle-lg.json +0 -19
- package/public/r/toggle-outline.json +0 -19
- package/public/r/toggle-sm.json +0 -19
- package/public/r/toggle-with-icon.json +0 -19
- package/public/r/toggle.json +0 -15
- package/public/r/toolbar-demo.json +0 -27
- package/public/r/toolbar.json +0 -15
- package/public/r/tooltip-demo.json +0 -21
- package/public/r/tooltip-grouped.json +0 -22
- package/public/r/tooltip.json +0 -15
- package/public/r/tree-controlled.json +0 -21
- package/public/r/tree-custom-icons.json +0 -21
- package/public/r/tree-no-lines.json +0 -20
- package/public/r/tree-simple.json +0 -20
- package/public/r/tree.json +0 -20
- package/public/r/typography.json +0 -21
- package/public/r/ui.json +0 -57
- package/public/r/use-character-limit.json +0 -12
- package/public/r/use-file-upload.json +0 -12
- package/public/r/use-pagination.json +0 -12
- package/public/r/use-slider-with-input.json +0 -12
- package/public/r/use-toast.json +0 -12
- package/public/r/utils.json +0 -16
- package/public/r/video-player.json +0 -21
- package/tsup.config.ts +0 -11
package/public/r/comp-538.json
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
-
"name": "comp-538",
|
|
4
|
-
"type": "registry:component",
|
|
5
|
-
"registryDependencies": [
|
|
6
|
-
"https://loveui.dev/building-blocks/r/timeline.json"
|
|
7
|
-
],
|
|
8
|
-
"files": [
|
|
9
|
-
{
|
|
10
|
-
"path": "registry/default/components/comp-538.tsx",
|
|
11
|
-
"content": "import {\n Timeline,\n TimelineContent,\n TimelineDate,\n TimelineItem,\n} from \"@/registry/building-blocks/default/ui/timeline\"\n\nconst items = [\n {\n id: 1,\n date: new Date(\"2024-01-09T10:55:00\"),\n description: \"System backup completed successfully.\",\n },\n {\n id: 2,\n date: new Date(\"2024-01-09T10:50:00\"),\n description:\n \"User authentication service restarted due to configuration update.\",\n },\n {\n id: 3,\n date: new Date(\"2024-01-09T10:45:00\"),\n description: \"Warning: High CPU usage detected on worker node-03.\",\n },\n {\n id: 4,\n date: new Date(\"2024-01-09T10:40:00\"),\n description: \"New deployment initiated for api-service v2.1.0.\",\n },\n]\n\nexport default function Component() {\n return (\n <Timeline className=\"divide-y rounded-lg border\">\n {items.map((item) => (\n <TimelineItem key={item.id} step={item.id} className=\"m-0! px-4! py-3!\">\n <TimelineContent className=\"text-foreground\">\n {item.description}\n <TimelineDate className=\"mt-1\">\n {item.date.toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n })}{\" \"}\n at{\" \"}\n {item.date.toLocaleTimeString(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: true,\n })}\n </TimelineDate>\n </TimelineContent>\n </TimelineItem>\n ))}\n </Timeline>\n )\n}\n",
|
|
12
|
-
"type": "registry:component"
|
|
13
|
-
}
|
|
14
|
-
],
|
|
15
|
-
"meta": {
|
|
16
|
-
"tags": [
|
|
17
|
-
"timeline",
|
|
18
|
-
"vertical timeline"
|
|
19
|
-
],
|
|
20
|
-
"colSpan": 2
|
|
21
|
-
}
|
|
22
|
-
}
|
package/public/r/comp-539.json
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
-
"name": "comp-539",
|
|
4
|
-
"type": "registry:component",
|
|
5
|
-
"registryDependencies": [
|
|
6
|
-
"https://loveui.dev/building-blocks/r/timeline.json"
|
|
7
|
-
],
|
|
8
|
-
"files": [
|
|
9
|
-
{
|
|
10
|
-
"path": "registry/default/components/comp-539.tsx",
|
|
11
|
-
"content": "import {\n BookOpenIcon,\n LucideIcon,\n MessageCircleIcon,\n PencilIcon,\n PlusIcon,\n} from \"lucide-react\"\nimport {\n Timeline,\n TimelineContent,\n TimelineItem,\n} from \"@/registry/building-blocks/default/ui/timeline\"\n\nconst items: {\n id: number\n user: string\n image: string\n action: ActionType\n date: Date\n}[] = [\n {\n id: 1,\n user: \"Connor\",\n image: \"https://i.pravatar.cc/160?img=9\",\n action: \"post\",\n date: new Date(Date.now() - 59000), // 59 seconds ago\n },\n {\n id: 2,\n user: \"Connor\",\n image: \"https://i.pravatar.cc/160?img=9\",\n action: \"reply\",\n date: new Date(Date.now() - 180000), // 3 minutes ago\n },\n {\n id: 3,\n user: \"Connor\",\n image: \"https://i.pravatar.cc/160?img=9\",\n action: \"edit\",\n date: new Date(Date.now() - 300000), // 5 minutes ago\n },\n {\n id: 4,\n user: \"Connor\",\n image: \"https://i.pravatar.cc/160?img=9\",\n action: \"create\",\n date: new Date(Date.now() - 600000), // 10 minutes ago\n },\n]\n\ntype ActionType = \"post\" | \"reply\" | \"edit\" | \"create\"\n\nfunction getActionIcon(action: ActionType): LucideIcon {\n const icons: Record<ActionType, LucideIcon> = {\n post: BookOpenIcon,\n reply: MessageCircleIcon,\n edit: PencilIcon,\n create: PlusIcon,\n }\n return icons[action]\n}\n\nfunction getActionText(action: ActionType): string {\n const texts: Record<ActionType, string> = {\n post: \"wrote a new post\",\n reply: \"replied to a comment\",\n edit: \"edited a post\",\n create: \"created a new project\",\n }\n return texts[action]\n}\n\nfunction getRelativeTimeString(date: Date): string {\n const now = new Date()\n const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000)\n\n if (diffInSeconds < 60) {\n return `${diffInSeconds} seconds ago`\n } else if (diffInSeconds < 3600) {\n const minutes = Math.floor(diffInSeconds / 60)\n return `${minutes} ${minutes === 1 ? \"minute\" : \"minutes\"} ago`\n } else if (diffInSeconds < 86400) {\n const hours = Math.floor(diffInSeconds / 3600)\n return `${hours} ${hours === 1 ? \"hour\" : \"hours\"} ago`\n } else {\n const days = Math.floor(diffInSeconds / 86400)\n return `${days} ${days === 1 ? \"day\" : \"days\"} ago`\n }\n}\n\nexport default function Component() {\n return (\n <div className=\"space-y-3\">\n <div className=\"text-xs font-medium text-muted-foreground\">Activity</div>\n <Timeline>\n {items.map((item) => {\n const ActionIcon = getActionIcon(item.action)\n return (\n <TimelineItem\n key={item.id}\n step={item.id}\n className=\"m-0! flex-row items-center gap-3 py-2.5!\"\n >\n <ActionIcon className=\"text-muted-foreground/80\" size={16} />\n <img\n src={item.image}\n alt={item.user}\n className=\"size-6 rounded-full\"\n />\n <TimelineContent className=\"text-foreground\">\n <a className=\"font-medium hover:underline\" href=\"#\">\n {item.user}\n </a>\n <span className=\"font-normal\">\n {\" \"}\n {getActionText(item.action)}{\" \"}\n <a className=\"hover:underline\" href=\"#\">\n {getRelativeTimeString(item.date)}\n </a>\n </span>\n </TimelineContent>\n </TimelineItem>\n )\n })}\n </Timeline>\n </div>\n )\n}\n",
|
|
12
|
-
"type": "registry:component"
|
|
13
|
-
}
|
|
14
|
-
],
|
|
15
|
-
"meta": {
|
|
16
|
-
"tags": [
|
|
17
|
-
"timeline",
|
|
18
|
-
"vertical timeline"
|
|
19
|
-
],
|
|
20
|
-
"colSpan": 2
|
|
21
|
-
}
|
|
22
|
-
}
|
package/public/r/comp-54.json
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
-
"name": "comp-54",
|
|
4
|
-
"type": "registry:component",
|
|
5
|
-
"dependencies": [
|
|
6
|
-
"use-mask-input"
|
|
7
|
-
],
|
|
8
|
-
"registryDependencies": [
|
|
9
|
-
"https://loveui.dev/building-blocks/r/input.json",
|
|
10
|
-
"https://loveui.dev/building-blocks/r/label.json"
|
|
11
|
-
],
|
|
12
|
-
"files": [
|
|
13
|
-
{
|
|
14
|
-
"path": "registry/default/components/comp-54.tsx",
|
|
15
|
-
"content": "\"use client\"\n\nimport { useId } from \"react\"\nimport { withMask } from \"use-mask-input\"\n\nimport { Input } from \"@/registry/building-blocks/default/ui/input\"\nimport { Label } from \"@/registry/building-blocks/default/ui/label\"\n\nexport default function Component() {\n const id = useId()\n return (\n <div className=\"*:not-first:mt-2\">\n <Label htmlFor={id}>Input with mask</Label>\n <Input\n id={id}\n placeholder=\"AB12 CDE\"\n type=\"text\"\n ref={(input) => {\n if (input) {\n withMask(\"AA99 AAA\", {\n placeholder: \"\",\n showMaskOnHover: false,\n })(input)\n }\n }}\n />\n <p\n className=\"mt-2 text-xs text-muted-foreground\"\n role=\"region\"\n aria-live=\"polite\"\n >\n Built with{\" \"}\n <a\n className=\"underline hover:text-foreground\"\n href=\"https://github.com/eduardoborges/use-mask-input\"\n target=\"_blank\"\n rel=\"noopener nofollow\"\n >\n use-mask-input\n </a>\n </p>\n </div>\n )\n}\n",
|
|
16
|
-
"type": "registry:component"
|
|
17
|
-
}
|
|
18
|
-
],
|
|
19
|
-
"meta": {
|
|
20
|
-
"tags": [
|
|
21
|
-
"input",
|
|
22
|
-
"label",
|
|
23
|
-
"mask"
|
|
24
|
-
]
|
|
25
|
-
}
|
|
26
|
-
}
|
package/public/r/comp-540.json
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
-
"name": "comp-540",
|
|
4
|
-
"type": "registry:component",
|
|
5
|
-
"registryDependencies": [
|
|
6
|
-
"https://loveui.dev/building-blocks/r/timeline.json"
|
|
7
|
-
],
|
|
8
|
-
"files": [
|
|
9
|
-
{
|
|
10
|
-
"path": "registry/default/components/comp-540.tsx",
|
|
11
|
-
"content": "import {\n Timeline,\n TimelineContent,\n TimelineDate,\n TimelineHeader,\n TimelineIndicator,\n TimelineItem,\n TimelineSeparator,\n TimelineTitle,\n} from \"@/registry/building-blocks/default/ui/timeline\"\n\nconst items = [\n {\n id: 1,\n date: \"Mar 15, 2024\",\n title: \"Project Kickoff\",\n description: \"Initial team meeting.\",\n },\n {\n id: 2,\n date: \"Mar 22, 2024\",\n title: \"Design Phase\",\n description: \"Completed wireframes.\",\n },\n {\n id: 3,\n date: \"Apr 5, 2024\",\n title: \"Development Sprint\",\n description: \"Backend development.\",\n },\n {\n id: 4,\n date: \"Apr 19, 2024\",\n title: \"Testing & Deployment\",\n description: \"Performance optimization.\",\n },\n]\n\nexport default function Component() {\n return (\n <Timeline defaultValue={3} orientation=\"horizontal\">\n {items.map((item) => (\n <TimelineItem key={item.id} step={item.id}>\n <TimelineHeader>\n <TimelineSeparator />\n <TimelineDate>{item.date}</TimelineDate>\n <TimelineTitle>{item.title}</TimelineTitle>\n <TimelineIndicator />\n </TimelineHeader>\n <TimelineContent>{item.description}</TimelineContent>\n </TimelineItem>\n ))}\n </Timeline>\n )\n}\n",
|
|
12
|
-
"type": "registry:component"
|
|
13
|
-
}
|
|
14
|
-
],
|
|
15
|
-
"meta": {
|
|
16
|
-
"tags": [
|
|
17
|
-
"timeline"
|
|
18
|
-
],
|
|
19
|
-
"colSpan": 3
|
|
20
|
-
}
|
|
21
|
-
}
|
package/public/r/comp-541.json
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
-
"name": "comp-541",
|
|
4
|
-
"type": "registry:component",
|
|
5
|
-
"registryDependencies": [
|
|
6
|
-
"https://loveui.dev/building-blocks/r/timeline.json"
|
|
7
|
-
],
|
|
8
|
-
"files": [
|
|
9
|
-
{
|
|
10
|
-
"path": "registry/default/components/comp-541.tsx",
|
|
11
|
-
"content": "import {\n Timeline,\n TimelineContent,\n TimelineDate,\n TimelineHeader,\n TimelineIndicator,\n TimelineItem,\n TimelineSeparator,\n TimelineTitle,\n} from \"@/registry/building-blocks/default/ui/timeline\"\n\nconst items = [\n {\n id: 1,\n date: \"Mar 15, 2024\",\n title: \"Project Kickoff\",\n description: \"Initial team meeting.\",\n },\n {\n id: 2,\n date: \"Mar 22, 2024\",\n title: \"Design Phase\",\n description: \"Completed wireframes.\",\n },\n {\n id: 3,\n date: \"Apr 5, 2024\",\n title: \"Development Sprint\",\n description: \"Backend development.\",\n },\n {\n id: 4,\n date: \"Apr 19, 2024\",\n title: \"Testing & Deployment\",\n description: \"Performance optimization.\",\n },\n]\n\nexport default function Component() {\n return (\n <Timeline defaultValue={3} orientation=\"horizontal\">\n {items.map((item) => (\n <TimelineItem\n key={item.id}\n step={item.id}\n className=\"group-data-[orientation=horizontal]/timeline:mt-0\"\n >\n <TimelineHeader>\n <TimelineSeparator className=\"group-data-[orientation=horizontal]/timeline:top-8\" />\n <TimelineDate className=\"mb-10\">{item.date}</TimelineDate>\n <TimelineTitle>{item.title}</TimelineTitle>\n <TimelineIndicator className=\"group-data-[orientation=horizontal]/timeline:top-8\" />\n </TimelineHeader>\n <TimelineContent>{item.description}</TimelineContent>\n </TimelineItem>\n ))}\n </Timeline>\n )\n}\n",
|
|
12
|
-
"type": "registry:component"
|
|
13
|
-
}
|
|
14
|
-
],
|
|
15
|
-
"meta": {
|
|
16
|
-
"tags": [
|
|
17
|
-
"timeline"
|
|
18
|
-
],
|
|
19
|
-
"colSpan": 3
|
|
20
|
-
}
|
|
21
|
-
}
|
package/public/r/comp-542.json
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
-
"name": "comp-542",
|
|
4
|
-
"type": "registry:component",
|
|
5
|
-
"dependencies": [
|
|
6
|
-
"date-fns",
|
|
7
|
-
"@dnd-kit/core",
|
|
8
|
-
"@dnd-kit/modifiers",
|
|
9
|
-
"@dnd-kit/utilities",
|
|
10
|
-
"@remixicon/react"
|
|
11
|
-
],
|
|
12
|
-
"registryDependencies": [
|
|
13
|
-
"https://loveui.dev/building-blocks/r/button.json",
|
|
14
|
-
"https://loveui.dev/building-blocks/r/calendar.json",
|
|
15
|
-
"https://loveui.dev/building-blocks/r/checkbox.json",
|
|
16
|
-
"https://loveui.dev/building-blocks/r/dropdown-menu.json",
|
|
17
|
-
"https://loveui.dev/building-blocks/r/dialog.json",
|
|
18
|
-
"https://loveui.dev/building-blocks/r/input.json",
|
|
19
|
-
"https://loveui.dev/building-blocks/r/textarea.json",
|
|
20
|
-
"https://loveui.dev/building-blocks/r/label.json",
|
|
21
|
-
"https://loveui.dev/building-blocks/r/popover.json",
|
|
22
|
-
"https://loveui.dev/building-blocks/r/radio-group.json",
|
|
23
|
-
"https://loveui.dev/building-blocks/r/select.json",
|
|
24
|
-
"https://loveui.dev/building-blocks/r/sonner.json"
|
|
25
|
-
],
|
|
26
|
-
"files": [
|
|
27
|
-
{
|
|
28
|
-
"path": "registry/default/components/comp-542.tsx",
|
|
29
|
-
"content": "\"use client\"\n\nimport { useState } from \"react\"\nimport { addDays, setHours, setMinutes, subDays } from \"date-fns\"\n\nimport {\n EventCalendar,\n type CalendarEvent,\n} from \"@/registry/building-blocks/default/components/event-calendar\"\n\n// Sample events data with hardcoded times\nconst sampleEvents: CalendarEvent[] = [\n {\n id: \"1\",\n title: \"Annual Planning\",\n description: \"Strategic planning for next year\",\n start: subDays(new Date(), 24), // 24 days before today\n end: subDays(new Date(), 23), // 23 days before today\n allDay: true,\n color: \"sky\",\n location: \"Main Conference Hall\",\n },\n {\n id: \"2\",\n title: \"Project Deadline\",\n description: \"Submit final deliverables\",\n start: setMinutes(setHours(subDays(new Date(), 9), 13), 0), // 1:00 PM, 9 days before\n end: setMinutes(setHours(subDays(new Date(), 9), 15), 30), // 3:30 PM, 9 days before\n color: \"amber\",\n location: \"Office\",\n },\n {\n id: \"3\",\n title: \"Quarterly Budget Review\",\n description: \"Strategic planning for next year\",\n start: subDays(new Date(), 13), // 13 days before today\n end: subDays(new Date(), 13), // 13 days before today\n allDay: true,\n color: \"orange\",\n location: \"Main Conference Hall\",\n },\n {\n id: \"4\",\n title: \"Team Meeting\",\n description: \"Weekly team sync\",\n start: setMinutes(setHours(new Date(), 10), 0), // 10:00 AM today\n end: setMinutes(setHours(new Date(), 11), 0), // 11:00 AM today\n color: \"sky\",\n location: \"Conference Room A\",\n },\n {\n id: \"5\",\n title: \"Lunch with Client\",\n description: \"Discuss new project requirements\",\n start: setMinutes(setHours(addDays(new Date(), 1), 12), 0), // 12:00 PM, 1 day from now\n end: setMinutes(setHours(addDays(new Date(), 1), 13), 15), // 1:15 PM, 1 day from now\n color: \"emerald\",\n location: \"Downtown Cafe\",\n },\n {\n id: \"6\",\n title: \"Product Launch\",\n description: \"New product release\",\n start: addDays(new Date(), 3), // 3 days from now\n end: addDays(new Date(), 6), // 6 days from now\n allDay: true,\n color: \"violet\",\n },\n {\n id: \"7\",\n title: \"Sales Conference\",\n description: \"Discuss about new clients\",\n start: setMinutes(setHours(addDays(new Date(), 4), 14), 30), // 2:30 PM, 4 days from now\n end: setMinutes(setHours(addDays(new Date(), 5), 14), 45), // 2:45 PM, 5 days from now\n color: \"rose\",\n location: \"Downtown Cafe\",\n },\n {\n id: \"8\",\n title: \"Team Meeting\",\n description: \"Weekly team sync\",\n start: setMinutes(setHours(addDays(new Date(), 5), 9), 0), // 9:00 AM, 5 days from now\n end: setMinutes(setHours(addDays(new Date(), 5), 10), 30), // 10:30 AM, 5 days from now\n color: \"orange\",\n location: \"Conference Room A\",\n },\n {\n id: \"9\",\n title: \"Review contracts\",\n description: \"Weekly team sync\",\n start: setMinutes(setHours(addDays(new Date(), 5), 14), 0), // 2:00 PM, 5 days from now\n end: setMinutes(setHours(addDays(new Date(), 5), 15), 30), // 3:30 PM, 5 days from now\n color: \"sky\",\n location: \"Conference Room A\",\n },\n {\n id: \"10\",\n title: \"Team Meeting\",\n description: \"Weekly team sync\",\n start: setMinutes(setHours(addDays(new Date(), 5), 9), 45), // 9:45 AM, 5 days from now\n end: setMinutes(setHours(addDays(new Date(), 5), 11), 0), // 11:00 AM, 5 days from now\n color: \"amber\",\n location: \"Conference Room A\",\n },\n {\n id: \"11\",\n title: \"Marketing Strategy Session\",\n description: \"Quarterly marketing planning\",\n start: setMinutes(setHours(addDays(new Date(), 9), 10), 0), // 10:00 AM, 9 days from now\n end: setMinutes(setHours(addDays(new Date(), 9), 15), 30), // 3:30 PM, 9 days from now\n color: \"emerald\",\n location: \"Marketing Department\",\n },\n {\n id: \"12\",\n title: \"Annual Shareholders Meeting\",\n description: \"Presentation of yearly results\",\n start: addDays(new Date(), 17), // 17 days from now\n end: addDays(new Date(), 17), // 17 days from now\n allDay: true,\n color: \"sky\",\n location: \"Grand Conference Center\",\n },\n {\n id: \"13\",\n title: \"Product Development Workshop\",\n description: \"Brainstorming for new features\",\n start: setMinutes(setHours(addDays(new Date(), 26), 9), 0), // 9:00 AM, 26 days from now\n end: setMinutes(setHours(addDays(new Date(), 27), 17), 0), // 5:00 PM, 27 days from now\n color: \"rose\",\n location: \"Innovation Lab\",\n },\n]\n\nexport default function Component() {\n const [events, setEvents] = useState<CalendarEvent[]>(sampleEvents)\n\n const handleEventAdd = (event: CalendarEvent) => {\n setEvents([...events, event])\n }\n\n const handleEventUpdate = (updatedEvent: CalendarEvent) => {\n setEvents(\n events.map((event) =>\n event.id === updatedEvent.id ? updatedEvent : event\n )\n )\n }\n\n const handleEventDelete = (eventId: string) => {\n setEvents(events.filter((event) => event.id !== eventId))\n }\n\n return (\n <EventCalendar\n events={events}\n onEventAdd={handleEventAdd}\n onEventUpdate={handleEventUpdate}\n onEventDelete={handleEventDelete}\n />\n )\n}\n",
|
|
30
|
-
"type": "registry:component"
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"path": "registry/default/components/event-calendar/agenda-view.tsx",
|
|
34
|
-
"content": "\"use client\"\n\nimport { useMemo } from \"react\"\nimport { RiCalendarEventLine } from \"@remixicon/react\"\nimport { addDays, format, isToday } from \"date-fns\"\n\nimport {\n AgendaDaysToShow,\n CalendarEvent,\n EventItem,\n getAgendaEventsForDay,\n} from \"@/registry/building-blocks/default/components/event-calendar\"\n\ninterface AgendaViewProps {\n currentDate: Date\n events: CalendarEvent[]\n onEventSelect: (event: CalendarEvent) => void\n}\n\nexport function AgendaView({\n currentDate,\n events,\n onEventSelect,\n}: AgendaViewProps) {\n // Show events for the next days based on constant\n const days = useMemo(() => {\n console.log(\"Agenda view updating with date:\", currentDate.toISOString())\n return Array.from({ length: AgendaDaysToShow }, (_, i) =>\n addDays(new Date(currentDate), i)\n )\n }, [currentDate])\n\n const handleEventClick = (event: CalendarEvent, e: React.MouseEvent) => {\n e.stopPropagation()\n console.log(\"Agenda view event clicked:\", event)\n onEventSelect(event)\n }\n\n // Check if there are any days with events\n const hasEvents = days.some(\n (day) => getAgendaEventsForDay(events, day).length > 0\n )\n\n return (\n <div className=\"border-t border-border/70 px-4\">\n {!hasEvents ? (\n <div className=\"flex min-h-[70svh] flex-col items-center justify-center py-16 text-center\">\n <RiCalendarEventLine\n size={32}\n className=\"mb-2 text-muted-foreground/50\"\n />\n <h3 className=\"text-lg font-medium\">No events found</h3>\n <p className=\"text-muted-foreground\">\n There are no events scheduled for this time period.\n </p>\n </div>\n ) : (\n days.map((day) => {\n const dayEvents = getAgendaEventsForDay(events, day)\n\n if (dayEvents.length === 0) return null\n\n return (\n <div\n key={day.toString()}\n className=\"relative my-12 border-t border-border/70\"\n >\n <span\n className=\"absolute -top-3 left-0 flex h-6 items-center bg-background pe-4 text-[10px] uppercase data-today:font-medium sm:pe-4 sm:text-xs\"\n data-today={isToday(day) || undefined}\n >\n {format(day, \"d MMM, EEEE\")}\n </span>\n <div className=\"mt-6 space-y-2\">\n {dayEvents.map((event) => (\n <EventItem\n key={event.id}\n event={event}\n view=\"agenda\"\n onClick={(e) => handleEventClick(event, e)}\n />\n ))}\n </div>\n </div>\n )\n })\n )}\n </div>\n )\n}\n",
|
|
35
|
-
"type": "registry:component"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"path": "registry/default/components/event-calendar/calendar-dnd-context.tsx",
|
|
39
|
-
"content": "\"use client\"\n\nimport {\n createContext,\n useContext,\n useId,\n useRef,\n useState,\n type ReactNode,\n} from \"react\"\nimport {\n DndContext,\n DragOverlay,\n MouseSensor,\n PointerSensor,\n TouchSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n type DragOverEvent,\n type DragStartEvent,\n type UniqueIdentifier,\n} from \"@dnd-kit/core\"\nimport { addMinutes, differenceInMinutes } from \"date-fns\"\n\nimport {\n EventItem,\n type CalendarEvent,\n} from \"@/registry/building-blocks/default/components/event-calendar\"\n\n// Define the context type\ntype CalendarDndContextType = {\n activeEvent: CalendarEvent | null\n activeId: UniqueIdentifier | null\n activeView: \"month\" | \"week\" | \"day\" | null\n currentTime: Date | null\n eventHeight: number | null\n isMultiDay: boolean\n multiDayWidth: number | null\n dragHandlePosition: {\n x?: number\n y?: number\n data?: {\n isFirstDay?: boolean\n isLastDay?: boolean\n }\n } | null\n}\n\n// Create the context\nconst CalendarDndContext = createContext<CalendarDndContextType>({\n activeEvent: null,\n activeId: null,\n activeView: null,\n currentTime: null,\n eventHeight: null,\n isMultiDay: false,\n multiDayWidth: null,\n dragHandlePosition: null,\n})\n\n// Hook to use the context\nexport const useCalendarDnd = () => useContext(CalendarDndContext)\n\n// Props for the provider\ninterface CalendarDndProviderProps {\n children: ReactNode\n onEventUpdate: (event: CalendarEvent) => void\n}\n\nexport function CalendarDndProvider({\n children,\n onEventUpdate,\n}: CalendarDndProviderProps) {\n const [activeEvent, setActiveEvent] = useState<CalendarEvent | null>(null)\n const [activeId, setActiveId] = useState<UniqueIdentifier | null>(null)\n const [activeView, setActiveView] = useState<\"month\" | \"week\" | \"day\" | null>(\n null\n )\n const [currentTime, setCurrentTime] = useState<Date | null>(null)\n const [eventHeight, setEventHeight] = useState<number | null>(null)\n const [isMultiDay, setIsMultiDay] = useState(false)\n const [multiDayWidth, setMultiDayWidth] = useState<number | null>(null)\n const [dragHandlePosition, setDragHandlePosition] = useState<{\n x?: number\n y?: number\n data?: {\n isFirstDay?: boolean\n isLastDay?: boolean\n }\n } | null>(null)\n\n // Store original event dimensions\n const eventDimensions = useRef<{ height: number }>({ height: 0 })\n\n // Configure sensors for better drag detection\n const sensors = useSensors(\n useSensor(MouseSensor, {\n // Require the mouse to move by 5px before activating\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(TouchSensor, {\n // Press delay of 250ms, with tolerance of 5px of movement\n activationConstraint: {\n delay: 250,\n tolerance: 5,\n },\n }),\n useSensor(PointerSensor, {\n // Require the pointer to move by 5px before activating\n activationConstraint: {\n distance: 5,\n },\n })\n )\n\n // Generate a stable ID for the DndContext\n const dndContextId = useId()\n\n const handleDragStart = (event: DragStartEvent) => {\n const { active } = event\n\n // Add safety check for data.current\n if (!active.data.current) {\n console.error(\"Missing data in drag start event\", event)\n return\n }\n\n const {\n event: calendarEvent,\n view,\n height,\n isMultiDay: eventIsMultiDay,\n multiDayWidth: eventMultiDayWidth,\n dragHandlePosition: eventDragHandlePosition,\n } = active.data.current as {\n event: CalendarEvent\n view: \"month\" | \"week\" | \"day\"\n height?: number\n isMultiDay?: boolean\n multiDayWidth?: number\n dragHandlePosition?: {\n x?: number\n y?: number\n data?: {\n isFirstDay?: boolean\n isLastDay?: boolean\n }\n }\n }\n\n setActiveEvent(calendarEvent)\n setActiveId(active.id)\n setActiveView(view)\n setCurrentTime(new Date(calendarEvent.start))\n setIsMultiDay(eventIsMultiDay || false)\n setMultiDayWidth(eventMultiDayWidth || null)\n setDragHandlePosition(eventDragHandlePosition || null)\n\n // Store event height if provided\n if (height) {\n eventDimensions.current.height = height\n setEventHeight(height)\n }\n }\n\n const handleDragOver = (event: DragOverEvent) => {\n const { over } = event\n\n if (over && activeEvent && over.data.current) {\n const { date, time } = over.data.current as { date: Date; time?: number }\n\n // Update time for week/day views\n if (time !== undefined && activeView !== \"month\") {\n const newTime = new Date(date)\n\n // Calculate hours and minutes with 15-minute precision\n const hours = Math.floor(time)\n const fractionalHour = time - hours\n\n // Map to nearest 15 minute interval (0, 0.25, 0.5, 0.75)\n let minutes = 0\n if (fractionalHour < 0.125) minutes = 0\n else if (fractionalHour < 0.375) minutes = 15\n else if (fractionalHour < 0.625) minutes = 30\n else minutes = 45\n\n newTime.setHours(hours, minutes, 0, 0)\n\n // Only update if time has changed\n if (\n !currentTime ||\n newTime.getHours() !== currentTime.getHours() ||\n newTime.getMinutes() !== currentTime.getMinutes() ||\n newTime.getDate() !== currentTime.getDate() ||\n newTime.getMonth() !== currentTime.getMonth() ||\n newTime.getFullYear() !== currentTime.getFullYear()\n ) {\n setCurrentTime(newTime)\n }\n } else if (activeView === \"month\") {\n // For month view, just update the date but preserve time\n const newTime = new Date(date)\n if (currentTime) {\n newTime.setHours(\n currentTime.getHours(),\n currentTime.getMinutes(),\n currentTime.getSeconds(),\n currentTime.getMilliseconds()\n )\n }\n\n // Only update if date has changed\n if (\n !currentTime ||\n newTime.getDate() !== currentTime.getDate() ||\n newTime.getMonth() !== currentTime.getMonth() ||\n newTime.getFullYear() !== currentTime.getFullYear()\n ) {\n setCurrentTime(newTime)\n }\n }\n }\n }\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n\n // Add robust error checking\n if (!over || !activeEvent || !currentTime) {\n // Reset state and exit early\n setActiveEvent(null)\n setActiveId(null)\n setActiveView(null)\n setCurrentTime(null)\n setEventHeight(null)\n setIsMultiDay(false)\n setMultiDayWidth(null)\n setDragHandlePosition(null)\n return\n }\n\n try {\n // Safely access data with checks\n if (!active.data.current || !over.data.current) {\n throw new Error(\"Missing data in drag event\")\n }\n\n const activeData = active.data.current as {\n event?: CalendarEvent\n view?: string\n }\n const overData = over.data.current as { date?: Date; time?: number }\n\n // Verify we have all required data\n if (!activeData.event || !overData.date) {\n throw new Error(\"Missing required event data\")\n }\n\n const calendarEvent = activeData.event\n const date = overData.date\n const time = overData.time\n\n // Calculate new start time\n const newStart = new Date(date)\n\n // If time is provided (for week/day views), set the hours and minutes\n if (time !== undefined) {\n const hours = Math.floor(time)\n const fractionalHour = time - hours\n\n // Map to nearest 15 minute interval (0, 0.25, 0.5, 0.75)\n let minutes = 0\n if (fractionalHour < 0.125) minutes = 0\n else if (fractionalHour < 0.375) minutes = 15\n else if (fractionalHour < 0.625) minutes = 30\n else minutes = 45\n\n newStart.setHours(hours, minutes, 0, 0)\n } else {\n // For month view, preserve the original time from currentTime\n newStart.setHours(\n currentTime.getHours(),\n currentTime.getMinutes(),\n currentTime.getSeconds(),\n currentTime.getMilliseconds()\n )\n }\n\n // Calculate new end time based on the original duration\n const originalStart = new Date(calendarEvent.start)\n const originalEnd = new Date(calendarEvent.end)\n const durationMinutes = differenceInMinutes(originalEnd, originalStart)\n const newEnd = addMinutes(newStart, durationMinutes)\n\n // Only update if the start time has actually changed\n const hasStartTimeChanged =\n originalStart.getFullYear() !== newStart.getFullYear() ||\n originalStart.getMonth() !== newStart.getMonth() ||\n originalStart.getDate() !== newStart.getDate() ||\n originalStart.getHours() !== newStart.getHours() ||\n originalStart.getMinutes() !== newStart.getMinutes()\n\n if (hasStartTimeChanged) {\n // Update the event only if the time has changed\n onEventUpdate({\n ...calendarEvent,\n start: newStart,\n end: newEnd,\n })\n }\n } catch (error) {\n console.error(\"Error in drag end handler:\", error)\n } finally {\n // Always reset state\n setActiveEvent(null)\n setActiveId(null)\n setActiveView(null)\n setCurrentTime(null)\n setEventHeight(null)\n setIsMultiDay(false)\n setMultiDayWidth(null)\n setDragHandlePosition(null)\n }\n }\n\n return (\n <DndContext\n id={dndContextId}\n sensors={sensors}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n >\n <CalendarDndContext.Provider\n value={{\n activeEvent,\n activeId,\n activeView,\n currentTime,\n eventHeight,\n isMultiDay,\n multiDayWidth,\n dragHandlePosition,\n }}\n >\n {children}\n\n <DragOverlay adjustScale={false} dropAnimation={null}>\n {activeEvent && activeView && (\n <div\n style={{\n height: eventHeight ? `${eventHeight}px` : \"auto\",\n width:\n isMultiDay && multiDayWidth ? `${multiDayWidth}%` : \"100%\",\n // Remove the transform that was causing the shift\n }}\n >\n <EventItem\n event={activeEvent}\n view={activeView}\n isDragging={true}\n showTime={activeView !== \"month\"}\n currentTime={currentTime || undefined}\n isFirstDay={dragHandlePosition?.data?.isFirstDay !== false}\n isLastDay={dragHandlePosition?.data?.isLastDay !== false}\n />\n </div>\n )}\n </DragOverlay>\n </CalendarDndContext.Provider>\n </DndContext>\n )\n}\n",
|
|
40
|
-
"type": "registry:component"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"path": "registry/default/components/event-calendar/constants.ts",
|
|
44
|
-
"content": "// Height of calendar events in pixels - used in month, week and day views\nexport const EventHeight = 24\n\n// Vertical gap between events in pixels - controls spacing in month view\nexport const EventGap = 4\n\n// Height of hour cells in week and day views - controls the scale of time display\nexport const WeekCellsHeight = 64\n\n// Number of days to show in the agenda view\nexport const AgendaDaysToShow = 30\n\n// Start and end hours for the week and day views\nexport const StartHour = 0\nexport const EndHour = 24\n\n// Default start and end times\nexport const DefaultStartHour = 9 // 9 AM\nexport const DefaultEndHour = 10 // 10 AM\n",
|
|
45
|
-
"type": "registry:component"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"path": "registry/default/components/event-calendar/day-view.tsx",
|
|
49
|
-
"content": "\"use client\"\n\nimport React, { useMemo } from \"react\"\nimport {\n addHours,\n areIntervalsOverlapping,\n differenceInMinutes,\n eachHourOfInterval,\n format,\n getHours,\n getMinutes,\n isSameDay,\n startOfDay,\n} from \"date-fns\"\n\nimport {\n DraggableEvent,\n DroppableCell,\n EventItem,\n isMultiDayEvent,\n useCurrentTimeIndicator,\n WeekCellsHeight,\n type CalendarEvent,\n} from \"@/registry/building-blocks/default/components/event-calendar\"\nimport {\n EndHour,\n StartHour,\n} from \"@/registry/building-blocks/default/components/event-calendar/constants\"\nimport { cn } from \"@/registry/building-blocks/default/lib/utils\"\n\ninterface DayViewProps {\n currentDate: Date\n events: CalendarEvent[]\n onEventSelect: (event: CalendarEvent) => void\n onEventCreate: (startTime: Date) => void\n}\n\ninterface PositionedEvent {\n event: CalendarEvent\n top: number\n height: number\n left: number\n width: number\n zIndex: number\n}\n\nexport function DayView({\n currentDate,\n events,\n onEventSelect,\n onEventCreate,\n}: DayViewProps) {\n const hours = useMemo(() => {\n const dayStart = startOfDay(currentDate)\n return eachHourOfInterval({\n start: addHours(dayStart, StartHour),\n end: addHours(dayStart, EndHour - 1),\n })\n }, [currentDate])\n\n const dayEvents = useMemo(() => {\n return events\n .filter((event) => {\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n return (\n isSameDay(currentDate, eventStart) ||\n isSameDay(currentDate, eventEnd) ||\n (currentDate > eventStart && currentDate < eventEnd)\n )\n })\n .sort((a, b) => new Date(a.start).getTime() - new Date(b.start).getTime())\n }, [currentDate, events])\n\n // Filter all-day events\n const allDayEvents = useMemo(() => {\n return dayEvents.filter((event) => {\n // Include explicitly marked all-day events or multi-day events\n return event.allDay || isMultiDayEvent(event)\n })\n }, [dayEvents])\n\n // Get only single-day time-based events\n const timeEvents = useMemo(() => {\n return dayEvents.filter((event) => {\n // Exclude all-day events and multi-day events\n return !event.allDay && !isMultiDayEvent(event)\n })\n }, [dayEvents])\n\n // Process events to calculate positions\n const positionedEvents = useMemo(() => {\n const result: PositionedEvent[] = []\n const dayStart = startOfDay(currentDate)\n\n // Sort events by start time and duration\n const sortedEvents = [...timeEvents].sort((a, b) => {\n const aStart = new Date(a.start)\n const bStart = new Date(b.start)\n const aEnd = new Date(a.end)\n const bEnd = new Date(b.end)\n\n // First sort by start time\n if (aStart < bStart) return -1\n if (aStart > bStart) return 1\n\n // If start times are equal, sort by duration (longer events first)\n const aDuration = differenceInMinutes(aEnd, aStart)\n const bDuration = differenceInMinutes(bEnd, bStart)\n return bDuration - aDuration\n })\n\n // Track columns for overlapping events\n const columns: { event: CalendarEvent; end: Date }[][] = []\n\n sortedEvents.forEach((event) => {\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n\n // Adjust start and end times if they're outside this day\n const adjustedStart = isSameDay(currentDate, eventStart)\n ? eventStart\n : dayStart\n const adjustedEnd = isSameDay(currentDate, eventEnd)\n ? eventEnd\n : addHours(dayStart, 24)\n\n // Calculate top position and height\n const startHour = getHours(adjustedStart) + getMinutes(adjustedStart) / 60\n const endHour = getHours(adjustedEnd) + getMinutes(adjustedEnd) / 60\n const top = (startHour - StartHour) * WeekCellsHeight\n const height = (endHour - startHour) * WeekCellsHeight\n\n // Find a column for this event\n let columnIndex = 0\n let placed = false\n\n while (!placed) {\n const col = columns[columnIndex] || []\n if (col.length === 0) {\n columns[columnIndex] = col\n placed = true\n } else {\n const overlaps = col.some((c) =>\n areIntervalsOverlapping(\n { start: adjustedStart, end: adjustedEnd },\n { start: new Date(c.event.start), end: new Date(c.event.end) }\n )\n )\n if (!overlaps) {\n placed = true\n } else {\n columnIndex++\n }\n }\n }\n\n // Ensure column is initialized before pushing\n const currentColumn = columns[columnIndex] || []\n columns[columnIndex] = currentColumn\n currentColumn.push({ event, end: adjustedEnd })\n\n // First column takes full width, others are indented by 10% and take 90% width\n const width = columnIndex === 0 ? 1 : 0.9\n const left = columnIndex === 0 ? 0 : columnIndex * 0.1\n\n result.push({\n event,\n top,\n height,\n left,\n width,\n zIndex: 10 + columnIndex, // Higher columns get higher z-index\n })\n })\n\n return result\n }, [currentDate, timeEvents])\n\n const handleEventClick = (event: CalendarEvent, e: React.MouseEvent) => {\n e.stopPropagation()\n onEventSelect(event)\n }\n\n const showAllDaySection = allDayEvents.length > 0\n const { currentTimePosition, currentTimeVisible } = useCurrentTimeIndicator(\n currentDate,\n \"day\"\n )\n\n return (\n <div data-slot=\"day-view\" className=\"contents\">\n {showAllDaySection && (\n <div className=\"border-t border-border/70 bg-muted/50\">\n <div className=\"grid grid-cols-[3rem_1fr] sm:grid-cols-[4rem_1fr]\">\n <div className=\"relative\">\n <span className=\"absolute bottom-0 left-0 h-6 w-16 max-w-full pe-2 text-right text-[10px] text-muted-foreground/70 sm:pe-4 sm:text-xs\">\n All day\n </span>\n </div>\n <div className=\"relative border-r border-border/70 p-1 last:border-r-0\">\n {allDayEvents.map((event) => {\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n const isFirstDay = isSameDay(currentDate, eventStart)\n const isLastDay = isSameDay(currentDate, eventEnd)\n\n return (\n <EventItem\n key={`spanning-${event.id}`}\n onClick={(e) => handleEventClick(event, e)}\n event={event}\n view=\"month\"\n isFirstDay={isFirstDay}\n isLastDay={isLastDay}\n >\n {/* Always show the title in day view for better usability */}\n <div>{event.title}</div>\n </EventItem>\n )\n })}\n </div>\n </div>\n </div>\n )}\n\n <div className=\"grid flex-1 grid-cols-[3rem_1fr] overflow-hidden border-t border-border/70 sm:grid-cols-[4rem_1fr]\">\n <div>\n {hours.map((hour, index) => (\n <div\n key={hour.toString()}\n className=\"relative h-[var(--week-cells-height)] border-b border-border/70 last:border-b-0\"\n >\n {index > 0 && (\n <span className=\"absolute -top-3 left-0 flex h-6 w-16 max-w-full items-center justify-end bg-background pe-2 text-[10px] text-muted-foreground/70 sm:pe-4 sm:text-xs\">\n {format(hour, \"h a\")}\n </span>\n )}\n </div>\n ))}\n </div>\n\n <div className=\"relative\">\n {/* Positioned events */}\n {positionedEvents.map((positionedEvent) => (\n <div\n key={positionedEvent.event.id}\n className=\"absolute z-10 px-0.5\"\n style={{\n top: `${positionedEvent.top}px`,\n height: `${positionedEvent.height}px`,\n left: `${positionedEvent.left * 100}%`,\n width: `${positionedEvent.width * 100}%`,\n zIndex: positionedEvent.zIndex,\n }}\n >\n <div className=\"size-full\">\n <DraggableEvent\n event={positionedEvent.event}\n view=\"day\"\n onClick={(e) => handleEventClick(positionedEvent.event, e)}\n showTime\n height={positionedEvent.height}\n />\n </div>\n </div>\n ))}\n\n {/* Current time indicator */}\n {currentTimeVisible && (\n <div\n className=\"pointer-events-none absolute right-0 left-0 z-20\"\n style={{ top: `${currentTimePosition}%` }}\n >\n <div className=\"relative flex items-center\">\n <div className=\"absolute -left-1 h-2 w-2 rounded-full bg-primary\"></div>\n <div className=\"h-[2px] w-full bg-primary\"></div>\n </div>\n </div>\n )}\n\n {/* Time grid */}\n {hours.map((hour) => {\n const hourValue = getHours(hour)\n return (\n <div\n key={hour.toString()}\n className=\"relative h-[var(--week-cells-height)] border-b border-border/70 last:border-b-0\"\n >\n {/* Quarter-hour intervals */}\n {[0, 1, 2, 3].map((quarter) => {\n const quarterHourTime = hourValue + quarter * 0.25\n return (\n <DroppableCell\n key={`${hour.toString()}-${quarter}`}\n id={`day-cell-${currentDate.toISOString()}-${quarterHourTime}`}\n date={currentDate}\n time={quarterHourTime}\n className={cn(\n \"absolute h-[calc(var(--week-cells-height)/4)] w-full\",\n quarter === 0 && \"top-0\",\n quarter === 1 &&\n \"top-[calc(var(--week-cells-height)/4)]\",\n quarter === 2 &&\n \"top-[calc(var(--week-cells-height)/4*2)]\",\n quarter === 3 &&\n \"top-[calc(var(--week-cells-height)/4*3)]\"\n )}\n onClick={() => {\n const startTime = new Date(currentDate)\n startTime.setHours(hourValue)\n startTime.setMinutes(quarter * 15)\n onEventCreate(startTime)\n }}\n />\n )\n })}\n </div>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n",
|
|
50
|
-
"type": "registry:component"
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
"path": "registry/default/components/event-calendar/draggable-event.tsx",
|
|
54
|
-
"content": "\"use client\"\n\nimport { useRef, useState } from \"react\"\nimport { useDraggable } from \"@dnd-kit/core\"\nimport { CSS } from \"@dnd-kit/utilities\"\nimport { differenceInDays } from \"date-fns\"\n\nimport {\n CalendarEvent,\n EventItem,\n useCalendarDnd,\n} from \"@/registry/building-blocks/default/components/event-calendar\"\n\ninterface DraggableEventProps {\n event: CalendarEvent\n view: \"month\" | \"week\" | \"day\"\n showTime?: boolean\n onClick?: (e: React.MouseEvent) => void\n height?: number\n isMultiDay?: boolean\n multiDayWidth?: number\n isFirstDay?: boolean\n isLastDay?: boolean\n \"aria-hidden\"?: boolean | \"true\" | \"false\"\n}\n\nexport function DraggableEvent({\n event,\n view,\n showTime,\n onClick,\n height,\n isMultiDay,\n multiDayWidth,\n isFirstDay = true,\n isLastDay = true,\n \"aria-hidden\": ariaHidden,\n}: DraggableEventProps) {\n const { activeId } = useCalendarDnd()\n const elementRef = useRef<HTMLDivElement>(null)\n const [dragHandlePosition, setDragHandlePosition] = useState<{\n x: number\n y: number\n } | null>(null)\n\n // Check if this is a multi-day event\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n const isMultiDayEvent =\n isMultiDay || event.allDay || differenceInDays(eventEnd, eventStart) >= 1\n\n const { attributes, listeners, setNodeRef, transform, isDragging } =\n useDraggable({\n id: `${event.id}-${view}`,\n data: {\n event,\n view,\n height: height || elementRef.current?.offsetHeight || null,\n isMultiDay: isMultiDayEvent,\n multiDayWidth: multiDayWidth,\n dragHandlePosition,\n isFirstDay,\n isLastDay,\n },\n })\n\n // Handle mouse down to track where on the event the user clicked\n const handleMouseDown = (e: React.MouseEvent) => {\n if (elementRef.current) {\n const rect = elementRef.current.getBoundingClientRect()\n setDragHandlePosition({\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n })\n }\n }\n\n // Don't render if this event is being dragged\n if (isDragging || activeId === `${event.id}-${view}`) {\n return (\n <div\n ref={setNodeRef}\n className=\"opacity-0\"\n style={{ height: height || \"auto\" }}\n />\n )\n }\n\n const style = transform\n ? {\n transform: CSS.Translate.toString(transform),\n height: height || \"auto\",\n width:\n isMultiDayEvent && multiDayWidth ? `${multiDayWidth}%` : undefined,\n }\n : {\n height: height || \"auto\",\n width:\n isMultiDayEvent && multiDayWidth ? `${multiDayWidth}%` : undefined,\n }\n\n // Handle touch start to track where on the event the user touched\n const handleTouchStart = (e: React.TouchEvent) => {\n if (elementRef.current) {\n const rect = elementRef.current.getBoundingClientRect()\n const touch = e.touches[0]\n if (touch) {\n setDragHandlePosition({\n x: touch.clientX - rect.left,\n y: touch.clientY - rect.top,\n })\n }\n }\n }\n\n return (\n <div\n ref={(node) => {\n setNodeRef(node)\n if (elementRef) elementRef.current = node\n }}\n style={style}\n className=\"touch-none\"\n >\n <EventItem\n event={event}\n view={view}\n showTime={showTime}\n isFirstDay={isFirstDay}\n isLastDay={isLastDay}\n isDragging={isDragging}\n onClick={onClick}\n onMouseDown={handleMouseDown}\n onTouchStart={handleTouchStart}\n dndListeners={listeners}\n dndAttributes={attributes}\n aria-hidden={ariaHidden}\n />\n </div>\n )\n}\n",
|
|
55
|
-
"type": "registry:component"
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
"path": "registry/default/components/event-calendar/droppable-cell.tsx",
|
|
59
|
-
"content": "\"use client\"\n\nimport { useDroppable } from \"@dnd-kit/core\"\n\nimport { useCalendarDnd } from \"@/registry/building-blocks/default/components/event-calendar\"\nimport { cn } from \"@/registry/building-blocks/default/lib/utils\"\n\ninterface DroppableCellProps {\n id: string\n date: Date\n time?: number // For week/day views, represents hours (e.g., 9.25 for 9:15)\n children?: React.ReactNode\n className?: string\n onClick?: () => void\n}\n\nexport function DroppableCell({\n id,\n date,\n time,\n children,\n className,\n onClick,\n}: DroppableCellProps) {\n const { activeEvent } = useCalendarDnd()\n\n const { setNodeRef, isOver } = useDroppable({\n id,\n data: {\n date,\n time,\n },\n })\n\n // Format time for display in tooltip (only for debugging)\n const formattedTime =\n time !== undefined\n ? `${Math.floor(time)}:${Math.round((time - Math.floor(time)) * 60)\n .toString()\n .padStart(2, \"0\")}`\n : null\n\n return (\n <div\n ref={setNodeRef}\n onClick={onClick}\n className={cn(\n \"flex h-full flex-col overflow-hidden px-0.5 py-1 data-dragging:bg-accent sm:px-1\",\n className\n )}\n title={formattedTime ? `${formattedTime}` : undefined}\n data-dragging={isOver && activeEvent ? true : undefined}\n >\n {children}\n </div>\n )\n}\n",
|
|
60
|
-
"type": "registry:component"
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
"path": "registry/default/components/event-calendar/event-dialog.tsx",
|
|
64
|
-
"content": "\"use client\"\n\nimport { useEffect, useMemo, useState } from \"react\"\nimport { RiCalendarLine, RiDeleteBinLine } from \"@remixicon/react\"\nimport { format, isBefore } from \"date-fns\"\n\nimport type {\n CalendarEvent,\n EventColor,\n} from \"@/registry/building-blocks/default/components/event-calendar\"\nimport {\n DefaultEndHour,\n DefaultStartHour,\n EndHour,\n StartHour,\n} from \"@/registry/building-blocks/default/components/event-calendar/constants\"\nimport { cn } from \"@/registry/building-blocks/default/lib/utils\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport { Calendar } from \"@/registry/building-blocks/default/ui/calendar\"\nimport { Checkbox } from \"@/registry/building-blocks/default/ui/checkbox\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"@/registry/building-blocks/default/ui/dialog\"\nimport { Input } from \"@/registry/building-blocks/default/ui/input\"\nimport { Label } from \"@/registry/building-blocks/default/ui/label\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/building-blocks/default/ui/popover\"\nimport { RadioGroup, RadioGroupItem } from \"@/registry/building-blocks/default/ui/radio-group\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/building-blocks/default/ui/select\"\nimport { Textarea } from \"@/registry/building-blocks/default/ui/textarea\"\n\ninterface EventDialogProps {\n event: CalendarEvent | null\n isOpen: boolean\n onClose: () => void\n onSave: (event: CalendarEvent) => void\n onDelete: (eventId: string) => void\n}\n\nexport function EventDialog({\n event,\n isOpen,\n onClose,\n onSave,\n onDelete,\n}: EventDialogProps) {\n const [title, setTitle] = useState(\"\")\n const [description, setDescription] = useState(\"\")\n const [startDate, setStartDate] = useState<Date>(new Date())\n const [endDate, setEndDate] = useState<Date>(new Date())\n const [startTime, setStartTime] = useState(`${DefaultStartHour}:00`)\n const [endTime, setEndTime] = useState(`${DefaultEndHour}:00`)\n const [allDay, setAllDay] = useState(false)\n const [location, setLocation] = useState(\"\")\n const [color, setColor] = useState<EventColor>(\"sky\")\n const [error, setError] = useState<string | null>(null)\n const [startDateOpen, setStartDateOpen] = useState(false)\n const [endDateOpen, setEndDateOpen] = useState(false)\n\n // Debug log to check what event is being passed\n useEffect(() => {\n console.log(\"EventDialog received event:\", event)\n }, [event])\n\n useEffect(() => {\n if (event) {\n setTitle(event.title || \"\")\n setDescription(event.description || \"\")\n\n const start = new Date(event.start)\n const end = new Date(event.end)\n\n setStartDate(start)\n setEndDate(end)\n setStartTime(formatTimeForInput(start))\n setEndTime(formatTimeForInput(end))\n setAllDay(event.allDay || false)\n setLocation(event.location || \"\")\n setColor((event.color as EventColor) || \"sky\")\n setError(null) // Reset error when opening dialog\n } else {\n resetForm()\n }\n }, [event])\n\n const resetForm = () => {\n setTitle(\"\")\n setDescription(\"\")\n setStartDate(new Date())\n setEndDate(new Date())\n setStartTime(`${DefaultStartHour}:00`)\n setEndTime(`${DefaultEndHour}:00`)\n setAllDay(false)\n setLocation(\"\")\n setColor(\"sky\")\n setError(null)\n }\n\n const formatTimeForInput = (date: Date) => {\n const hours = date.getHours().toString().padStart(2, \"0\")\n const minutes = Math.floor(date.getMinutes() / 15) * 15\n return `${hours}:${minutes.toString().padStart(2, \"0\")}`\n }\n\n // Memoize time options so they're only calculated once\n const timeOptions = useMemo(() => {\n const options = []\n for (let hour = StartHour; hour <= EndHour; hour++) {\n for (let minute = 0; minute < 60; minute += 15) {\n const formattedHour = hour.toString().padStart(2, \"0\")\n const formattedMinute = minute.toString().padStart(2, \"0\")\n const value = `${formattedHour}:${formattedMinute}`\n // Use a fixed date to avoid unnecessary date object creations\n const date = new Date(2000, 0, 1, hour, minute)\n const label = format(date, \"h:mm a\")\n options.push({ value, label })\n }\n }\n return options\n }, []) // Empty dependency array ensures this only runs once\n\n const handleSave = () => {\n const start = new Date(startDate)\n const end = new Date(endDate)\n\n if (!allDay) {\n const [startHours = 0, startMinutes = 0] = startTime\n .split(\":\")\n .map(Number)\n const [endHours = 0, endMinutes = 0] = endTime.split(\":\").map(Number)\n\n if (\n startHours < StartHour ||\n startHours > EndHour ||\n endHours < StartHour ||\n endHours > EndHour\n ) {\n setError(\n `Selected time must be between ${StartHour}:00 and ${EndHour}:00`\n )\n return\n }\n\n start.setHours(startHours, startMinutes, 0)\n end.setHours(endHours, endMinutes, 0)\n } else {\n start.setHours(0, 0, 0, 0)\n end.setHours(23, 59, 59, 999)\n }\n\n // Validate that end date is not before start date\n if (isBefore(end, start)) {\n setError(\"End date cannot be before start date\")\n return\n }\n\n // Use generic title if empty\n const eventTitle = title.trim() ? title : \"(no title)\"\n\n onSave({\n id: event?.id || \"\",\n title: eventTitle,\n description,\n start,\n end,\n allDay,\n location,\n color,\n })\n }\n\n const handleDelete = () => {\n if (event?.id) {\n onDelete(event.id)\n }\n }\n\n // Updated color options to match types.ts\n const colorOptions: Array<{\n value: EventColor\n label: string\n bgClass: string\n borderClass: string\n }> = [\n {\n value: \"sky\",\n label: \"Sky\",\n bgClass: \"bg-sky-400 data-[state=checked]:bg-sky-400\",\n borderClass: \"border-sky-400 data-[state=checked]:border-sky-400\",\n },\n {\n value: \"amber\",\n label: \"Amber\",\n bgClass: \"bg-amber-400 data-[state=checked]:bg-amber-400\",\n borderClass: \"border-amber-400 data-[state=checked]:border-amber-400\",\n },\n {\n value: \"violet\",\n label: \"Violet\",\n bgClass: \"bg-violet-400 data-[state=checked]:bg-violet-400\",\n borderClass: \"border-violet-400 data-[state=checked]:border-violet-400\",\n },\n {\n value: \"rose\",\n label: \"Rose\",\n bgClass: \"bg-rose-400 data-[state=checked]:bg-rose-400\",\n borderClass: \"border-rose-400 data-[state=checked]:border-rose-400\",\n },\n {\n value: \"emerald\",\n label: \"Emerald\",\n bgClass: \"bg-emerald-400 data-[state=checked]:bg-emerald-400\",\n borderClass: \"border-emerald-400 data-[state=checked]:border-emerald-400\",\n },\n {\n value: \"orange\",\n label: \"Orange\",\n bgClass: \"bg-orange-400 data-[state=checked]:bg-orange-400\",\n borderClass: \"border-orange-400 data-[state=checked]:border-orange-400\",\n },\n ]\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContent className=\"sm:max-w-[425px]\">\n <DialogHeader>\n <DialogTitle>{event?.id ? \"Edit Event\" : \"Create Event\"}</DialogTitle>\n <DialogDescription className=\"sr-only\">\n {event?.id\n ? \"Edit the details of this event\"\n : \"Add a new event to your calendar\"}\n </DialogDescription>\n </DialogHeader>\n {error && (\n <div className=\"rounded-md bg-destructive/15 px-3 py-2 text-sm text-destructive\">\n {error}\n </div>\n )}\n <div className=\"grid gap-4 py-4\">\n <div className=\"*:not-first:mt-1.5\">\n <Label htmlFor=\"title\">Title</Label>\n <Input\n id=\"title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n />\n </div>\n\n <div className=\"*:not-first:mt-1.5\">\n <Label htmlFor=\"description\">Description</Label>\n <Textarea\n id=\"description\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n rows={3}\n />\n </div>\n\n <div className=\"flex gap-4\">\n <div className=\"flex-1 *:not-first:mt-1.5\">\n <Label htmlFor=\"start-date\">Start Date</Label>\n <Popover open={startDateOpen} onOpenChange={setStartDateOpen}>\n <PopoverTrigger asChild>\n <Button\n id=\"start-date\"\n variant={\"outline\"}\n className={cn(\n \"group w-full justify-between border-input bg-background px-3 font-normal outline-offset-0 outline-none hover:bg-background focus-visible:outline-[3px]\",\n !startDate && \"text-muted-foreground\"\n )}\n >\n <span\n className={cn(\n \"truncate\",\n !startDate && \"text-muted-foreground\"\n )}\n >\n {startDate ? format(startDate, \"PPP\") : \"Pick a date\"}\n </span>\n <RiCalendarLine\n size={16}\n className=\"shrink-0 text-muted-foreground/80\"\n aria-hidden=\"true\"\n />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-2\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={startDate}\n defaultMonth={startDate}\n onSelect={(date) => {\n if (date) {\n setStartDate(date)\n // If end date is before the new start date, update it to match the start date\n if (isBefore(endDate, date)) {\n setEndDate(date)\n }\n setError(null)\n setStartDateOpen(false)\n }\n }}\n />\n </PopoverContent>\n </Popover>\n </div>\n\n {!allDay && (\n <div className=\"min-w-28 *:not-first:mt-1.5\">\n <Label htmlFor=\"start-time\">Start Time</Label>\n <Select value={startTime} onValueChange={setStartTime}>\n <SelectTrigger id=\"start-time\">\n <SelectValue placeholder=\"Select time\" />\n </SelectTrigger>\n <SelectContent>\n {timeOptions.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n </div>\n\n <div className=\"flex gap-4\">\n <div className=\"flex-1 *:not-first:mt-1.5\">\n <Label htmlFor=\"end-date\">End Date</Label>\n <Popover open={endDateOpen} onOpenChange={setEndDateOpen}>\n <PopoverTrigger asChild>\n <Button\n id=\"end-date\"\n variant={\"outline\"}\n className={cn(\n \"group w-full justify-between border-input bg-background px-3 font-normal outline-offset-0 outline-none hover:bg-background focus-visible:outline-[3px]\",\n !endDate && \"text-muted-foreground\"\n )}\n >\n <span\n className={cn(\n \"truncate\",\n !endDate && \"text-muted-foreground\"\n )}\n >\n {endDate ? format(endDate, \"PPP\") : \"Pick a date\"}\n </span>\n <RiCalendarLine\n size={16}\n className=\"shrink-0 text-muted-foreground/80\"\n aria-hidden=\"true\"\n />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-2\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={endDate}\n defaultMonth={endDate}\n disabled={{ before: startDate }}\n onSelect={(date) => {\n if (date) {\n setEndDate(date)\n setError(null)\n setEndDateOpen(false)\n }\n }}\n />\n </PopoverContent>\n </Popover>\n </div>\n\n {!allDay && (\n <div className=\"min-w-28 *:not-first:mt-1.5\">\n <Label htmlFor=\"end-time\">End Time</Label>\n <Select value={endTime} onValueChange={setEndTime}>\n <SelectTrigger id=\"end-time\">\n <SelectValue placeholder=\"Select time\" />\n </SelectTrigger>\n <SelectContent>\n {timeOptions.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n </div>\n\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"all-day\"\n checked={allDay}\n onCheckedChange={(checked) => setAllDay(checked === true)}\n />\n <Label htmlFor=\"all-day\">All day</Label>\n </div>\n\n <div className=\"*:not-first:mt-1.5\">\n <Label htmlFor=\"location\">Location</Label>\n <Input\n id=\"location\"\n value={location}\n onChange={(e) => setLocation(e.target.value)}\n />\n </div>\n <fieldset className=\"space-y-4\">\n <legend className=\"text-sm leading-none font-medium text-foreground\">\n Etiquette\n </legend>\n <RadioGroup\n className=\"flex gap-1.5\"\n defaultValue={colorOptions[0]?.value}\n value={color}\n onValueChange={(value: EventColor) => setColor(value)}\n >\n {colorOptions.map((colorOption) => (\n <RadioGroupItem\n key={colorOption.value}\n id={`color-${colorOption.value}`}\n value={colorOption.value}\n aria-label={colorOption.label}\n className={cn(\n \"size-6 shadow-none\",\n colorOption.bgClass,\n colorOption.borderClass\n )}\n />\n ))}\n </RadioGroup>\n </fieldset>\n </div>\n <DialogFooter className=\"flex-row sm:justify-between\">\n {event?.id && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={handleDelete}\n aria-label=\"Delete event\"\n >\n <RiDeleteBinLine size={16} aria-hidden=\"true\" />\n </Button>\n )}\n <div className=\"flex flex-1 justify-end gap-2\">\n <Button variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button onClick={handleSave}>Save</Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n",
|
|
65
|
-
"type": "registry:component"
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
"path": "registry/default/components/event-calendar/event-item.tsx",
|
|
69
|
-
"content": "\"use client\"\n\nimport { useMemo } from \"react\"\nimport type { DraggableAttributes } from \"@dnd-kit/core\"\nimport type { SyntheticListenerMap } from \"@dnd-kit/core/dist/hooks/utilities\"\nimport { differenceInMinutes, format, getMinutes, isPast } from \"date-fns\"\n\nimport {\n getBorderRadiusClasses,\n getEventColorClasses,\n type CalendarEvent,\n} from \"@/registry/building-blocks/default/components/event-calendar\"\nimport { cn } from \"@/registry/building-blocks/default/lib/utils\"\n\n// Using date-fns format with custom formatting:\n// 'h' - hours (1-12)\n// 'a' - am/pm\n// ':mm' - minutes with leading zero (only if the token 'mm' is present)\nconst formatTimeWithOptionalMinutes = (date: Date) => {\n return format(date, getMinutes(date) === 0 ? \"ha\" : \"h:mma\").toLowerCase()\n}\n\ninterface EventWrapperProps {\n event: CalendarEvent\n isFirstDay?: boolean\n isLastDay?: boolean\n isDragging?: boolean\n onClick?: (e: React.MouseEvent) => void\n className?: string\n children: React.ReactNode\n currentTime?: Date\n dndListeners?: SyntheticListenerMap\n dndAttributes?: DraggableAttributes\n onMouseDown?: (e: React.MouseEvent) => void\n onTouchStart?: (e: React.TouchEvent) => void\n}\n\n// Shared wrapper component for event styling\nfunction EventWrapper({\n event,\n isFirstDay = true,\n isLastDay = true,\n isDragging,\n onClick,\n className,\n children,\n currentTime,\n dndListeners,\n dndAttributes,\n onMouseDown,\n onTouchStart,\n}: EventWrapperProps) {\n // Always use the currentTime (if provided) to determine if the event is in the past\n const displayEnd = currentTime\n ? new Date(\n new Date(currentTime).getTime() +\n (new Date(event.end).getTime() - new Date(event.start).getTime())\n )\n : new Date(event.end)\n\n const isEventInPast = isPast(displayEnd)\n\n return (\n <button\n className={cn(\n \"flex size-full overflow-hidden px-1 text-left font-medium backdrop-blur-md transition outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 data-dragging:cursor-grabbing data-dragging:shadow-lg data-past-event:line-through sm:px-2\",\n getEventColorClasses(event.color),\n getBorderRadiusClasses(isFirstDay, isLastDay),\n className\n )}\n data-dragging={isDragging || undefined}\n data-past-event={isEventInPast || undefined}\n onClick={onClick}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n {...dndListeners}\n {...dndAttributes}\n >\n {children}\n </button>\n )\n}\n\ninterface EventItemProps {\n event: CalendarEvent\n view: \"month\" | \"week\" | \"day\" | \"agenda\"\n isDragging?: boolean\n onClick?: (e: React.MouseEvent) => void\n showTime?: boolean\n currentTime?: Date // For updating time during drag\n isFirstDay?: boolean\n isLastDay?: boolean\n children?: React.ReactNode\n className?: string\n dndListeners?: SyntheticListenerMap\n dndAttributes?: DraggableAttributes\n onMouseDown?: (e: React.MouseEvent) => void\n onTouchStart?: (e: React.TouchEvent) => void\n}\n\nexport function EventItem({\n event,\n view,\n isDragging,\n onClick,\n showTime,\n currentTime,\n isFirstDay = true,\n isLastDay = true,\n children,\n className,\n dndListeners,\n dndAttributes,\n onMouseDown,\n onTouchStart,\n}: EventItemProps) {\n const eventColor = event.color\n\n // Use the provided currentTime (for dragging) or the event's actual time\n const displayStart = useMemo(() => {\n return currentTime || new Date(event.start)\n }, [currentTime, event.start])\n\n const displayEnd = useMemo(() => {\n return currentTime\n ? new Date(\n new Date(currentTime).getTime() +\n (new Date(event.end).getTime() - new Date(event.start).getTime())\n )\n : new Date(event.end)\n }, [currentTime, event.start, event.end])\n\n // Calculate event duration in minutes\n const durationMinutes = useMemo(() => {\n return differenceInMinutes(displayEnd, displayStart)\n }, [displayStart, displayEnd])\n\n const getEventTime = () => {\n if (event.allDay) return \"All day\"\n\n // For short events (less than 45 minutes), only show start time\n if (durationMinutes < 45) {\n return formatTimeWithOptionalMinutes(displayStart)\n }\n\n // For longer events, show both start and end time\n return `${formatTimeWithOptionalMinutes(displayStart)} - ${formatTimeWithOptionalMinutes(displayEnd)}`\n }\n\n if (view === \"month\") {\n return (\n <EventWrapper\n event={event}\n isFirstDay={isFirstDay}\n isLastDay={isLastDay}\n isDragging={isDragging}\n onClick={onClick}\n className={cn(\n \"mt-[var(--event-gap)] h-[var(--event-height)] items-center text-[10px] sm:text-xs\",\n className\n )}\n currentTime={currentTime}\n dndListeners={dndListeners}\n dndAttributes={dndAttributes}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n >\n {children || (\n <span className=\"truncate\">\n {!event.allDay && (\n <span className=\"truncate font-normal opacity-70 sm:text-[11px]\">\n {formatTimeWithOptionalMinutes(displayStart)}{\" \"}\n </span>\n )}\n {event.title}\n </span>\n )}\n </EventWrapper>\n )\n }\n\n if (view === \"week\" || view === \"day\") {\n return (\n <EventWrapper\n event={event}\n isFirstDay={isFirstDay}\n isLastDay={isLastDay}\n isDragging={isDragging}\n onClick={onClick}\n className={cn(\n \"py-1\",\n durationMinutes < 45 ? \"items-center\" : \"flex-col\",\n view === \"week\" ? \"text-[10px] sm:text-xs\" : \"text-xs\",\n className\n )}\n currentTime={currentTime}\n dndListeners={dndListeners}\n dndAttributes={dndAttributes}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n >\n {durationMinutes < 45 ? (\n <div className=\"truncate\">\n {event.title}{\" \"}\n {showTime && (\n <span className=\"opacity-70\">\n {formatTimeWithOptionalMinutes(displayStart)}\n </span>\n )}\n </div>\n ) : (\n <>\n <div className=\"truncate font-medium\">{event.title}</div>\n {showTime && (\n <div className=\"truncate font-normal opacity-70 sm:text-[11px]\">\n {getEventTime()}\n </div>\n )}\n </>\n )}\n </EventWrapper>\n )\n }\n\n // Agenda view - kept separate since it's significantly different\n return (\n <button\n className={cn(\n \"flex w-full flex-col gap-1 rounded p-2 text-left transition outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 data-past-event:line-through data-past-event:opacity-90\",\n getEventColorClasses(eventColor),\n className\n )}\n data-past-event={isPast(new Date(event.end)) || undefined}\n onClick={onClick}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n {...dndListeners}\n {...dndAttributes}\n >\n <div className=\"text-sm font-medium\">{event.title}</div>\n <div className=\"text-xs opacity-70\">\n {event.allDay ? (\n <span>All day</span>\n ) : (\n <span className=\"uppercase\">\n {formatTimeWithOptionalMinutes(displayStart)} -{\" \"}\n {formatTimeWithOptionalMinutes(displayEnd)}\n </span>\n )}\n {event.location && (\n <>\n <span className=\"px-1 opacity-35\"> · </span>\n <span>{event.location}</span>\n </>\n )}\n </div>\n {event.description && (\n <div className=\"my-1 text-xs opacity-90\">{event.description}</div>\n )}\n </button>\n )\n}\n",
|
|
70
|
-
"type": "registry:component"
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"path": "registry/default/components/event-calendar/events-popup.tsx",
|
|
74
|
-
"content": "\"use client\"\n\nimport { useEffect, useMemo, useRef } from \"react\"\nimport { format, isSameDay } from \"date-fns\"\nimport { XIcon } from \"lucide-react\"\n\nimport {\n EventItem,\n type CalendarEvent,\n} from \"@/registry/building-blocks/default/components/event-calendar\"\n\ninterface EventsPopupProps {\n date: Date\n events: CalendarEvent[]\n position: { top: number; left: number }\n onClose: () => void\n onEventSelect: (event: CalendarEvent) => void\n}\n\nexport function EventsPopup({\n date,\n events,\n position,\n onClose,\n onEventSelect,\n}: EventsPopupProps) {\n const popupRef = useRef<HTMLDivElement>(null)\n\n // Handle click outside to close popup\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n popupRef.current &&\n !popupRef.current.contains(event.target as Node)\n ) {\n onClose()\n }\n }\n\n document.addEventListener(\"mousedown\", handleClickOutside)\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside)\n }\n }, [onClose])\n\n // Handle escape key to close popup\n useEffect(() => {\n const handleEscKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose()\n }\n }\n\n document.addEventListener(\"keydown\", handleEscKey)\n return () => {\n document.removeEventListener(\"keydown\", handleEscKey)\n }\n }, [onClose])\n\n const handleEventClick = (event: CalendarEvent) => {\n onEventSelect(event)\n onClose()\n }\n\n // Adjust position to ensure popup stays within viewport\n const adjustedPosition = useMemo(() => {\n const positionCopy = { ...position }\n\n // Check if we need to adjust the position to fit in the viewport\n if (popupRef.current) {\n const rect = popupRef.current.getBoundingClientRect()\n const viewportWidth = window.innerWidth\n const viewportHeight = window.innerHeight\n\n // Adjust horizontally if needed\n if (positionCopy.left + rect.width > viewportWidth) {\n positionCopy.left = Math.max(0, viewportWidth - rect.width)\n }\n\n // Adjust vertically if needed\n if (positionCopy.top + rect.height > viewportHeight) {\n positionCopy.top = Math.max(0, viewportHeight - rect.height)\n }\n }\n\n return positionCopy\n }, [position])\n\n return (\n <div\n ref={popupRef}\n className=\"absolute z-50 max-h-96 w-80 overflow-auto rounded-md border bg-background shadow-lg\"\n style={{\n top: `${adjustedPosition.top}px`,\n left: `${adjustedPosition.left}px`,\n }}\n >\n <div className=\"sticky top-0 flex items-center justify-between border-b bg-background p-3\">\n <h3 className=\"font-medium\">{format(date, \"d MMMM yyyy\")}</h3>\n <button\n onClick={onClose}\n className=\"rounded-full p-1 hover:bg-muted\"\n aria-label=\"Close\"\n >\n <XIcon className=\"h-4 w-4\" />\n </button>\n </div>\n\n <div className=\"space-y-2 p-3\">\n {events.length === 0 ? (\n <div className=\"py-2 text-sm text-muted-foreground\">No events</div>\n ) : (\n events.map((event) => {\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n const isFirstDay = isSameDay(date, eventStart)\n const isLastDay = isSameDay(date, eventEnd)\n\n return (\n <div\n key={event.id}\n className=\"cursor-pointer\"\n onClick={() => handleEventClick(event)}\n >\n <EventItem\n event={event}\n view=\"agenda\"\n isFirstDay={isFirstDay}\n isLastDay={isLastDay}\n />\n </div>\n )\n })\n )}\n </div>\n </div>\n )\n}\n",
|
|
75
|
-
"type": "registry:component"
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"path": "registry/default/components/event-calendar/event-calendar.tsx",
|
|
79
|
-
"content": "\"use client\"\n\nimport { useEffect, useMemo, useState } from \"react\"\nimport { RiCalendarCheckLine } from \"@remixicon/react\"\nimport {\n addDays,\n addMonths,\n addWeeks,\n endOfWeek,\n format,\n isSameMonth,\n startOfWeek,\n subMonths,\n subWeeks,\n} from \"date-fns\"\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n PlusIcon,\n} from \"lucide-react\"\nimport { toast } from \"sonner\"\n\nimport {\n addHoursToDate,\n AgendaDaysToShow,\n AgendaView,\n CalendarDndProvider,\n CalendarEvent,\n CalendarView,\n DayView,\n EventDialog,\n EventGap,\n EventHeight,\n MonthView,\n WeekCellsHeight,\n WeekView,\n} from \"@/registry/building-blocks/default/components/event-calendar\"\nimport { cn } from \"@/registry/building-blocks/default/lib/utils\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from \"@/registry/building-blocks/default/ui/dropdown-menu\"\n\nexport interface EventCalendarProps {\n events?: CalendarEvent[]\n onEventAdd?: (event: CalendarEvent) => void\n onEventUpdate?: (event: CalendarEvent) => void\n onEventDelete?: (eventId: string) => void\n className?: string\n initialView?: CalendarView\n}\n\nexport function EventCalendar({\n events = [],\n onEventAdd,\n onEventUpdate,\n onEventDelete,\n className,\n initialView = \"month\",\n}: EventCalendarProps) {\n const [currentDate, setCurrentDate] = useState(new Date())\n const [view, setView] = useState<CalendarView>(initialView)\n const [isEventDialogOpen, setIsEventDialogOpen] = useState(false)\n const [selectedEvent, setSelectedEvent] = useState<CalendarEvent | null>(null)\n\n // Add keyboard shortcuts for view switching\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n // Skip if user is typing in an input, textarea or contentEditable element\n // or if the event dialog is open\n if (\n isEventDialogOpen ||\n e.target instanceof HTMLInputElement ||\n e.target instanceof HTMLTextAreaElement ||\n (e.target instanceof HTMLElement && e.target.isContentEditable)\n ) {\n return\n }\n\n switch (e.key.toLowerCase()) {\n case \"m\":\n setView(\"month\")\n break\n case \"w\":\n setView(\"week\")\n break\n case \"d\":\n setView(\"day\")\n break\n case \"a\":\n setView(\"agenda\")\n break\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n\n return () => {\n window.removeEventListener(\"keydown\", handleKeyDown)\n }\n }, [isEventDialogOpen])\n\n const handlePrevious = () => {\n if (view === \"month\") {\n setCurrentDate(subMonths(currentDate, 1))\n } else if (view === \"week\") {\n setCurrentDate(subWeeks(currentDate, 1))\n } else if (view === \"day\") {\n setCurrentDate(addDays(currentDate, -1))\n } else if (view === \"agenda\") {\n // For agenda view, go back 30 days (a full month)\n setCurrentDate(addDays(currentDate, -AgendaDaysToShow))\n }\n }\n\n const handleNext = () => {\n if (view === \"month\") {\n setCurrentDate(addMonths(currentDate, 1))\n } else if (view === \"week\") {\n setCurrentDate(addWeeks(currentDate, 1))\n } else if (view === \"day\") {\n setCurrentDate(addDays(currentDate, 1))\n } else if (view === \"agenda\") {\n // For agenda view, go forward 30 days (a full month)\n setCurrentDate(addDays(currentDate, AgendaDaysToShow))\n }\n }\n\n const handleToday = () => {\n setCurrentDate(new Date())\n }\n\n const handleEventSelect = (event: CalendarEvent) => {\n console.log(\"Event selected:\", event) // Debug log\n setSelectedEvent(event)\n setIsEventDialogOpen(true)\n }\n\n const handleEventCreate = (startTime: Date) => {\n console.log(\"Creating new event at:\", startTime) // Debug log\n\n // Snap to 15-minute intervals\n const minutes = startTime.getMinutes()\n const remainder = minutes % 15\n if (remainder !== 0) {\n if (remainder < 7.5) {\n // Round down to nearest 15 min\n startTime.setMinutes(minutes - remainder)\n } else {\n // Round up to nearest 15 min\n startTime.setMinutes(minutes + (15 - remainder))\n }\n startTime.setSeconds(0)\n startTime.setMilliseconds(0)\n }\n\n const newEvent: CalendarEvent = {\n id: \"\",\n title: \"\",\n start: startTime,\n end: addHoursToDate(startTime, 1),\n allDay: false,\n }\n setSelectedEvent(newEvent)\n setIsEventDialogOpen(true)\n }\n\n const handleEventSave = (event: CalendarEvent) => {\n if (event.id) {\n onEventUpdate?.(event)\n // Show toast notification when an event is updated\n toast(`Event \"${event.title}\" updated`, {\n description: format(new Date(event.start), \"MMM d, yyyy\"),\n position: \"bottom-left\",\n })\n } else {\n onEventAdd?.({\n ...event,\n id: Math.random().toString(36).substring(2, 11),\n })\n // Show toast notification when an event is added\n toast(`Event \"${event.title}\" added`, {\n description: format(new Date(event.start), \"MMM d, yyyy\"),\n position: \"bottom-left\",\n })\n }\n setIsEventDialogOpen(false)\n setSelectedEvent(null)\n }\n\n const handleEventDelete = (eventId: string) => {\n const deletedEvent = events.find((e) => e.id === eventId)\n onEventDelete?.(eventId)\n setIsEventDialogOpen(false)\n setSelectedEvent(null)\n\n // Show toast notification when an event is deleted\n if (deletedEvent) {\n toast(`Event \"${deletedEvent.title}\" deleted`, {\n description: format(new Date(deletedEvent.start), \"MMM d, yyyy\"),\n position: \"bottom-left\",\n })\n }\n }\n\n const handleEventUpdate = (updatedEvent: CalendarEvent) => {\n onEventUpdate?.(updatedEvent)\n\n // Show toast notification when an event is updated via drag and drop\n toast(`Event \"${updatedEvent.title}\" moved`, {\n description: format(new Date(updatedEvent.start), \"MMM d, yyyy\"),\n position: \"bottom-left\",\n })\n }\n\n const viewTitle = useMemo(() => {\n if (view === \"month\") {\n return format(currentDate, \"MMMM yyyy\")\n } else if (view === \"week\") {\n const start = startOfWeek(currentDate, { weekStartsOn: 0 })\n const end = endOfWeek(currentDate, { weekStartsOn: 0 })\n if (isSameMonth(start, end)) {\n return format(start, \"MMMM yyyy\")\n } else {\n return `${format(start, \"MMM\")} - ${format(end, \"MMM yyyy\")}`\n }\n } else if (view === \"day\") {\n return (\n <>\n <span className=\"min-[480px]:hidden\" aria-hidden=\"true\">\n {format(currentDate, \"MMM d, yyyy\")}\n </span>\n <span className=\"max-[479px]:hidden min-md:hidden\" aria-hidden=\"true\">\n {format(currentDate, \"MMMM d, yyyy\")}\n </span>\n <span className=\"max-md:hidden\">\n {format(currentDate, \"EEE MMMM d, yyyy\")}\n </span>\n </>\n )\n } else if (view === \"agenda\") {\n // Show the month range for agenda view\n const start = currentDate\n const end = addDays(currentDate, AgendaDaysToShow - 1)\n\n if (isSameMonth(start, end)) {\n return format(start, \"MMMM yyyy\")\n } else {\n return `${format(start, \"MMM\")} - ${format(end, \"MMM yyyy\")}`\n }\n } else {\n return format(currentDate, \"MMMM yyyy\")\n }\n }, [currentDate, view])\n\n return (\n <div\n className=\"flex flex-col rounded-lg border has-data-[slot=month-view]:flex-1\"\n style={\n {\n \"--event-height\": `${EventHeight}px`,\n \"--event-gap\": `${EventGap}px`,\n \"--week-cells-height\": `${WeekCellsHeight}px`,\n } as React.CSSProperties\n }\n >\n <CalendarDndProvider onEventUpdate={handleEventUpdate}>\n <div\n className={cn(\n \"flex items-center justify-between p-2 sm:p-4\",\n className\n )}\n >\n <div className=\"flex items-center gap-1 sm:gap-4\">\n <Button\n variant=\"outline\"\n className=\"max-[479px]:aspect-square max-[479px]:p-0!\"\n onClick={handleToday}\n >\n <RiCalendarCheckLine\n className=\"min-[480px]:hidden\"\n size={16}\n aria-hidden=\"true\"\n />\n <span className=\"max-[479px]:sr-only\">Today</span>\n </Button>\n <div className=\"flex items-center sm:gap-2\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handlePrevious}\n aria-label=\"Previous\"\n >\n <ChevronLeftIcon size={16} aria-hidden=\"true\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleNext}\n aria-label=\"Next\"\n >\n <ChevronRightIcon size={16} aria-hidden=\"true\" />\n </Button>\n </div>\n <h2 className=\"text-sm font-semibold sm:text-lg md:text-xl\">\n {viewTitle}\n </h2>\n </div>\n <div className=\"flex items-center gap-2\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" className=\"gap-1.5 max-[479px]:h-8\">\n <span>\n <span className=\"min-[480px]:hidden\" aria-hidden=\"true\">\n {view.charAt(0).toUpperCase()}\n </span>\n <span className=\"max-[479px]:sr-only\">\n {view.charAt(0).toUpperCase() + view.slice(1)}\n </span>\n </span>\n <ChevronDownIcon\n className=\"-me-1 opacity-60\"\n size={16}\n aria-hidden=\"true\"\n />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"min-w-32\">\n <DropdownMenuItem onClick={() => setView(\"month\")}>\n Month <DropdownMenuShortcut>M</DropdownMenuShortcut>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => setView(\"week\")}>\n Week <DropdownMenuShortcut>W</DropdownMenuShortcut>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => setView(\"day\")}>\n Day <DropdownMenuShortcut>D</DropdownMenuShortcut>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => setView(\"agenda\")}>\n Agenda <DropdownMenuShortcut>A</DropdownMenuShortcut>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n <Button\n className=\"max-[479px]:aspect-square max-[479px]:p-0!\"\n size=\"sm\"\n onClick={() => {\n setSelectedEvent(null) // Ensure we're creating a new event\n setIsEventDialogOpen(true)\n }}\n >\n <PlusIcon\n className=\"opacity-60 sm:-ms-1\"\n size={16}\n aria-hidden=\"true\"\n />\n <span className=\"max-sm:sr-only\">New event</span>\n </Button>\n </div>\n </div>\n\n <div className=\"flex flex-1 flex-col\">\n {view === \"month\" && (\n <MonthView\n currentDate={currentDate}\n events={events}\n onEventSelect={handleEventSelect}\n onEventCreate={handleEventCreate}\n />\n )}\n {view === \"week\" && (\n <WeekView\n currentDate={currentDate}\n events={events}\n onEventSelect={handleEventSelect}\n onEventCreate={handleEventCreate}\n />\n )}\n {view === \"day\" && (\n <DayView\n currentDate={currentDate}\n events={events}\n onEventSelect={handleEventSelect}\n onEventCreate={handleEventCreate}\n />\n )}\n {view === \"agenda\" && (\n <AgendaView\n currentDate={currentDate}\n events={events}\n onEventSelect={handleEventSelect}\n />\n )}\n </div>\n\n <EventDialog\n event={selectedEvent}\n isOpen={isEventDialogOpen}\n onClose={() => {\n setIsEventDialogOpen(false)\n setSelectedEvent(null)\n }}\n onSave={handleEventSave}\n onDelete={handleEventDelete}\n />\n </CalendarDndProvider>\n </div>\n )\n}\n",
|
|
80
|
-
"type": "registry:component"
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
"path": "registry/default/components/event-calendar/index.ts",
|
|
84
|
-
"content": "\"use client\"\n\n// Component exports\nexport { AgendaView } from \"./agenda-view\"\nexport { DayView } from \"./day-view\"\nexport { DraggableEvent } from \"./draggable-event\"\nexport { DroppableCell } from \"./droppable-cell\"\nexport { EventDialog } from \"./event-dialog\"\nexport { EventItem } from \"./event-item\"\nexport { EventsPopup } from \"./events-popup\"\nexport { EventCalendar } from \"./event-calendar\"\nexport { MonthView } from \"./month-view\"\nexport { WeekView } from \"./week-view\"\nexport { CalendarDndProvider, useCalendarDnd } from \"./calendar-dnd-context\"\n\n// Constants and utility exports\nexport * from \"./constants\"\nexport * from \"./utils\"\n\n// Hook exports\nexport * from \"./hooks/use-current-time-indicator\"\nexport * from \"./hooks/use-event-visibility\"\n\n// Type exports\nexport type { CalendarEvent, CalendarView, EventColor } from \"./types\"\n",
|
|
85
|
-
"type": "registry:component"
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
"path": "registry/default/components/event-calendar/month-view.tsx",
|
|
89
|
-
"content": "\"use client\"\n\nimport React, { useEffect, useMemo, useState } from \"react\"\nimport {\n addDays,\n eachDayOfInterval,\n endOfMonth,\n endOfWeek,\n format,\n isSameDay,\n isSameMonth,\n isToday,\n startOfMonth,\n startOfWeek,\n} from \"date-fns\"\n\nimport {\n DraggableEvent,\n DroppableCell,\n EventGap,\n EventHeight,\n EventItem,\n getAllEventsForDay,\n getEventsForDay,\n getSpanningEventsForDay,\n sortEvents,\n useEventVisibility,\n type CalendarEvent,\n} from \"@/registry/building-blocks/default/components/event-calendar\"\nimport { DefaultStartHour } from \"@/registry/building-blocks/default/components/event-calendar/constants\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@/registry/building-blocks/default/ui/popover\"\n\ninterface MonthViewProps {\n currentDate: Date\n events: CalendarEvent[]\n onEventSelect: (event: CalendarEvent) => void\n onEventCreate: (startTime: Date) => void\n}\n\nexport function MonthView({\n currentDate,\n events,\n onEventSelect,\n onEventCreate,\n}: MonthViewProps) {\n const days = useMemo(() => {\n const monthStart = startOfMonth(currentDate)\n const monthEnd = endOfMonth(monthStart)\n const calendarStart = startOfWeek(monthStart, { weekStartsOn: 0 })\n const calendarEnd = endOfWeek(monthEnd, { weekStartsOn: 0 })\n\n return eachDayOfInterval({ start: calendarStart, end: calendarEnd })\n }, [currentDate])\n\n const weekdays = useMemo(() => {\n return Array.from({ length: 7 }).map((_, i) => {\n const date = addDays(startOfWeek(new Date()), i)\n return format(date, \"EEE\")\n })\n }, [])\n\n const weeks = useMemo(() => {\n const result = []\n let week = []\n\n for (let i = 0; i < days.length; i++) {\n week.push(days[i])\n if (week.length === 7 || i === days.length - 1) {\n result.push(week)\n week = []\n }\n }\n\n return result\n }, [days])\n\n const handleEventClick = (event: CalendarEvent, e: React.MouseEvent) => {\n e.stopPropagation()\n onEventSelect(event)\n }\n\n const [isMounted, setIsMounted] = useState(false)\n const { contentRef, getVisibleEventCount } = useEventVisibility({\n eventHeight: EventHeight,\n eventGap: EventGap,\n })\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n return (\n <div data-slot=\"month-view\" className=\"contents\">\n <div className=\"grid grid-cols-7 border-b border-border/70\">\n {weekdays.map((day) => (\n <div\n key={day}\n className=\"py-2 text-center text-sm text-muted-foreground/70\"\n >\n {day}\n </div>\n ))}\n </div>\n <div className=\"grid flex-1 auto-rows-fr\">\n {weeks.map((week, weekIndex) => (\n <div\n key={`week-${weekIndex}`}\n className=\"grid grid-cols-7 [&:last-child>*]:border-b-0\"\n >\n {week.map((day, dayIndex) => {\n if (!day) return null // Skip if day is undefined\n\n const dayEvents = getEventsForDay(events, day)\n const spanningEvents = getSpanningEventsForDay(events, day)\n const isCurrentMonth = isSameMonth(day, currentDate)\n const cellId = `month-cell-${day.toISOString()}`\n const allDayEvents = [...spanningEvents, ...dayEvents]\n const allEvents = getAllEventsForDay(events, day)\n\n const isReferenceCell = weekIndex === 0 && dayIndex === 0\n const visibleCount = isMounted\n ? getVisibleEventCount(allDayEvents.length)\n : undefined\n const hasMore =\n visibleCount !== undefined && allDayEvents.length > visibleCount\n const remainingCount = hasMore\n ? allDayEvents.length - visibleCount\n : 0\n\n return (\n <div\n key={day.toString()}\n className=\"group border-r border-b border-border/70 last:border-r-0 data-outside-cell:bg-muted/25 data-outside-cell:text-muted-foreground/70\"\n data-today={isToday(day) || undefined}\n data-outside-cell={!isCurrentMonth || undefined}\n >\n <DroppableCell\n id={cellId}\n date={day}\n onClick={() => {\n const startTime = new Date(day)\n startTime.setHours(DefaultStartHour, 0, 0)\n onEventCreate(startTime)\n }}\n >\n <div className=\"mt-1 inline-flex size-6 items-center justify-center rounded-full text-sm group-data-today:bg-primary group-data-today:text-primary-foreground\">\n {format(day, \"d\")}\n </div>\n <div\n ref={isReferenceCell ? contentRef : null}\n className=\"min-h-[calc((var(--event-height)+var(--event-gap))*2)] sm:min-h-[calc((var(--event-height)+var(--event-gap))*3)] lg:min-h-[calc((var(--event-height)+var(--event-gap))*4)]\"\n >\n {sortEvents(allDayEvents).map((event, index) => {\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n const isFirstDay = isSameDay(day, eventStart)\n const isLastDay = isSameDay(day, eventEnd)\n\n const isHidden =\n isMounted && visibleCount && index >= visibleCount\n\n if (!visibleCount) return null\n\n if (!isFirstDay) {\n return (\n <div\n key={`spanning-${event.id}-${day.toISOString().slice(0, 10)}`}\n className=\"aria-hidden:hidden\"\n aria-hidden={isHidden ? \"true\" : undefined}\n >\n <EventItem\n onClick={(e) => handleEventClick(event, e)}\n event={event}\n view=\"month\"\n isFirstDay={isFirstDay}\n isLastDay={isLastDay}\n >\n <div className=\"invisible\" aria-hidden={true}>\n {!event.allDay && (\n <span>\n {format(\n new Date(event.start),\n \"h:mm\"\n )}{\" \"}\n </span>\n )}\n {event.title}\n </div>\n </EventItem>\n </div>\n )\n }\n\n return (\n <div\n key={event.id}\n className=\"aria-hidden:hidden\"\n aria-hidden={isHidden ? \"true\" : undefined}\n >\n <DraggableEvent\n event={event}\n view=\"month\"\n onClick={(e) => handleEventClick(event, e)}\n isFirstDay={isFirstDay}\n isLastDay={isLastDay}\n />\n </div>\n )\n })}\n\n {hasMore && (\n <Popover modal>\n <PopoverTrigger asChild>\n <button\n className=\"mt-[var(--event-gap)] flex h-[var(--event-height)] w-full items-center overflow-hidden px-1 text-left text-[10px] text-muted-foreground backdrop-blur-md transition outline-none select-none hover:bg-muted/50 hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 sm:px-2 sm:text-xs\"\n onClick={(e) => e.stopPropagation()}\n >\n <span>\n + {remainingCount}{\" \"}\n <span className=\"max-sm:sr-only\">more</span>\n </span>\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"center\"\n className=\"max-w-52 p-3\"\n style={\n {\n \"--event-height\": `${EventHeight}px`,\n } as React.CSSProperties\n }\n >\n <div className=\"space-y-2\">\n <div className=\"text-sm font-medium\">\n {format(day, \"EEE d\")}\n </div>\n <div className=\"space-y-1\">\n {sortEvents(allEvents).map((event) => {\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n const isFirstDay = isSameDay(day, eventStart)\n const isLastDay = isSameDay(day, eventEnd)\n\n return (\n <EventItem\n key={event.id}\n onClick={(e) =>\n handleEventClick(event, e)\n }\n event={event}\n view=\"month\"\n isFirstDay={isFirstDay}\n isLastDay={isLastDay}\n />\n )\n })}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n )}\n </div>\n </DroppableCell>\n </div>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n )\n}\n",
|
|
90
|
-
"type": "registry:component"
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
"path": "registry/default/components/event-calendar/types.ts",
|
|
94
|
-
"content": "export type CalendarView = \"month\" | \"week\" | \"day\" | \"agenda\"\n\nexport interface CalendarEvent {\n id: string\n title: string\n description?: string\n start: Date\n end: Date\n allDay?: boolean\n color?: EventColor\n location?: string\n}\n\nexport type EventColor =\n | \"sky\"\n | \"amber\"\n | \"violet\"\n | \"rose\"\n | \"emerald\"\n | \"orange\"\n",
|
|
95
|
-
"type": "registry:component"
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
"path": "registry/default/components/event-calendar/utils.ts",
|
|
99
|
-
"content": "import { isSameDay } from \"date-fns\"\n\nimport type {\n CalendarEvent,\n EventColor,\n} from \"@/registry/default/components/event-calendar\"\n\n/**\n * Get CSS classes for event colors\n */\nexport function getEventColorClasses(color?: EventColor | string): string {\n const eventColor = color || \"sky\"\n\n switch (eventColor) {\n case \"sky\":\n return \"bg-sky-200/50 hover:bg-sky-200/40 text-sky-950/80 dark:bg-sky-400/25 dark:hover:bg-sky-400/20 dark:text-sky-200 shadow-sky-700/8\"\n case \"amber\":\n return \"bg-amber-200/50 hover:bg-amber-200/40 text-amber-950/80 dark:bg-amber-400/25 dark:hover:bg-amber-400/20 dark:text-amber-200 shadow-amber-700/8\"\n case \"violet\":\n return \"bg-violet-200/50 hover:bg-violet-200/40 text-violet-950/80 dark:bg-violet-400/25 dark:hover:bg-violet-400/20 dark:text-violet-200 shadow-violet-700/8\"\n case \"rose\":\n return \"bg-rose-200/50 hover:bg-rose-200/40 text-rose-950/80 dark:bg-rose-400/25 dark:hover:bg-rose-400/20 dark:text-rose-200 shadow-rose-700/8\"\n case \"emerald\":\n return \"bg-emerald-200/50 hover:bg-emerald-200/40 text-emerald-950/80 dark:bg-emerald-400/25 dark:hover:bg-emerald-400/20 dark:text-emerald-200 shadow-emerald-700/8\"\n case \"orange\":\n return \"bg-orange-200/50 hover:bg-orange-200/40 text-orange-950/80 dark:bg-orange-400/25 dark:hover:bg-orange-400/20 dark:text-orange-200 shadow-orange-700/8\"\n default:\n return \"bg-sky-200/50 hover:bg-sky-200/40 text-sky-950/80 dark:bg-sky-400/25 dark:hover:bg-sky-400/20 dark:text-sky-200 shadow-sky-700/8\"\n }\n}\n\n/**\n * Get CSS classes for border radius based on event position in multi-day events\n */\nexport function getBorderRadiusClasses(\n isFirstDay: boolean,\n isLastDay: boolean\n): string {\n if (isFirstDay && isLastDay) {\n return \"rounded\" // Both ends rounded\n } else if (isFirstDay) {\n return \"rounded-l rounded-r-none\" // Only left end rounded\n } else if (isLastDay) {\n return \"rounded-r rounded-l-none\" // Only right end rounded\n } else {\n return \"rounded-none\" // No rounded corners\n }\n}\n\n/**\n * Check if an event is a multi-day event\n */\nexport function isMultiDayEvent(event: CalendarEvent): boolean {\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n return event.allDay || eventStart.getDate() !== eventEnd.getDate()\n}\n\n/**\n * Filter events for a specific day\n */\nexport function getEventsForDay(\n events: CalendarEvent[],\n day: Date\n): CalendarEvent[] {\n return events\n .filter((event) => {\n const eventStart = new Date(event.start)\n return isSameDay(day, eventStart)\n })\n .sort((a, b) => new Date(a.start).getTime() - new Date(b.start).getTime())\n}\n\n/**\n * Sort events with multi-day events first, then by start time\n */\nexport function sortEvents(events: CalendarEvent[]): CalendarEvent[] {\n return [...events].sort((a, b) => {\n const aIsMultiDay = isMultiDayEvent(a)\n const bIsMultiDay = isMultiDayEvent(b)\n\n if (aIsMultiDay && !bIsMultiDay) return -1\n if (!aIsMultiDay && bIsMultiDay) return 1\n\n return new Date(a.start).getTime() - new Date(b.start).getTime()\n })\n}\n\n/**\n * Get multi-day events that span across a specific day (but don't start on that day)\n */\nexport function getSpanningEventsForDay(\n events: CalendarEvent[],\n day: Date\n): CalendarEvent[] {\n return events.filter((event) => {\n if (!isMultiDayEvent(event)) return false\n\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n\n // Only include if it's not the start day but is either the end day or a middle day\n return (\n !isSameDay(day, eventStart) &&\n (isSameDay(day, eventEnd) || (day > eventStart && day < eventEnd))\n )\n })\n}\n\n/**\n * Get all events visible on a specific day (starting, ending, or spanning)\n */\nexport function getAllEventsForDay(\n events: CalendarEvent[],\n day: Date\n): CalendarEvent[] {\n return events.filter((event) => {\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n return (\n isSameDay(day, eventStart) ||\n isSameDay(day, eventEnd) ||\n (day > eventStart && day < eventEnd)\n )\n })\n}\n\n/**\n * Get all events for a day (for agenda view)\n */\nexport function getAgendaEventsForDay(\n events: CalendarEvent[],\n day: Date\n): CalendarEvent[] {\n return events\n .filter((event) => {\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n return (\n isSameDay(day, eventStart) ||\n isSameDay(day, eventEnd) ||\n (day > eventStart && day < eventEnd)\n )\n })\n .sort((a, b) => new Date(a.start).getTime() - new Date(b.start).getTime())\n}\n\n/**\n * Add hours to a date\n */\nexport function addHoursToDate(date: Date, hours: number): Date {\n const result = new Date(date)\n result.setHours(result.getHours() + hours)\n return result\n}\n",
|
|
100
|
-
"type": "registry:component"
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
"path": "registry/default/components/event-calendar/week-view.tsx",
|
|
104
|
-
"content": "\"use client\"\n\nimport React, { useMemo } from \"react\"\nimport {\n addHours,\n areIntervalsOverlapping,\n differenceInMinutes,\n eachDayOfInterval,\n eachHourOfInterval,\n endOfWeek,\n format,\n getHours,\n getMinutes,\n isBefore,\n isSameDay,\n isToday,\n startOfDay,\n startOfWeek,\n} from \"date-fns\"\n\nimport {\n DraggableEvent,\n DroppableCell,\n EventItem,\n isMultiDayEvent,\n useCurrentTimeIndicator,\n WeekCellsHeight,\n type CalendarEvent,\n} from \"@/registry/building-blocks/default/components/event-calendar\"\nimport {\n EndHour,\n StartHour,\n} from \"@/registry/building-blocks/default/components/event-calendar/constants\"\nimport { cn } from \"@/registry/building-blocks/default/lib/utils\"\n\ninterface WeekViewProps {\n currentDate: Date\n events: CalendarEvent[]\n onEventSelect: (event: CalendarEvent) => void\n onEventCreate: (startTime: Date) => void\n}\n\ninterface PositionedEvent {\n event: CalendarEvent\n top: number\n height: number\n left: number\n width: number\n zIndex: number\n}\n\nexport function WeekView({\n currentDate,\n events,\n onEventSelect,\n onEventCreate,\n}: WeekViewProps) {\n const days = useMemo(() => {\n const weekStart = startOfWeek(currentDate, { weekStartsOn: 0 })\n const weekEnd = endOfWeek(currentDate, { weekStartsOn: 0 })\n return eachDayOfInterval({ start: weekStart, end: weekEnd })\n }, [currentDate])\n\n const weekStart = useMemo(\n () => startOfWeek(currentDate, { weekStartsOn: 0 }),\n [currentDate]\n )\n\n const hours = useMemo(() => {\n const dayStart = startOfDay(currentDate)\n return eachHourOfInterval({\n start: addHours(dayStart, StartHour),\n end: addHours(dayStart, EndHour - 1),\n })\n }, [currentDate])\n\n // Get all-day events and multi-day events for the week\n const allDayEvents = useMemo(() => {\n return events\n .filter((event) => {\n // Include explicitly marked all-day events or multi-day events\n return event.allDay || isMultiDayEvent(event)\n })\n .filter((event) => {\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n return days.some(\n (day) =>\n isSameDay(day, eventStart) ||\n isSameDay(day, eventEnd) ||\n (day > eventStart && day < eventEnd)\n )\n })\n }, [events, days])\n\n // Process events for each day to calculate positions\n const processedDayEvents = useMemo(() => {\n const result = days.map((day) => {\n // Get events for this day that are not all-day events or multi-day events\n const dayEvents = events.filter((event) => {\n // Skip all-day events and multi-day events\n if (event.allDay || isMultiDayEvent(event)) return false\n\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n\n // Check if event is on this day\n return (\n isSameDay(day, eventStart) ||\n isSameDay(day, eventEnd) ||\n (eventStart < day && eventEnd > day)\n )\n })\n\n // Sort events by start time and duration\n const sortedEvents = [...dayEvents].sort((a, b) => {\n const aStart = new Date(a.start)\n const bStart = new Date(b.start)\n const aEnd = new Date(a.end)\n const bEnd = new Date(b.end)\n\n // First sort by start time\n if (aStart < bStart) return -1\n if (aStart > bStart) return 1\n\n // If start times are equal, sort by duration (longer events first)\n const aDuration = differenceInMinutes(aEnd, aStart)\n const bDuration = differenceInMinutes(bEnd, bStart)\n return bDuration - aDuration\n })\n\n // Calculate positions for each event\n const positionedEvents: PositionedEvent[] = []\n const dayStart = startOfDay(day)\n\n // Track columns for overlapping events\n const columns: { event: CalendarEvent; end: Date }[][] = []\n\n sortedEvents.forEach((event) => {\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n\n // Adjust start and end times if they're outside this day\n const adjustedStart = isSameDay(day, eventStart) ? eventStart : dayStart\n const adjustedEnd = isSameDay(day, eventEnd)\n ? eventEnd\n : addHours(dayStart, 24)\n\n // Calculate top position and height\n const startHour =\n getHours(adjustedStart) + getMinutes(adjustedStart) / 60\n const endHour = getHours(adjustedEnd) + getMinutes(adjustedEnd) / 60\n\n // Adjust the top calculation to account for the new start time\n const top = (startHour - StartHour) * WeekCellsHeight\n const height = (endHour - startHour) * WeekCellsHeight\n\n // Find a column for this event\n let columnIndex = 0\n let placed = false\n\n while (!placed) {\n const col = columns[columnIndex] || []\n if (col.length === 0) {\n columns[columnIndex] = col\n placed = true\n } else {\n const overlaps = col.some((c) =>\n areIntervalsOverlapping(\n { start: adjustedStart, end: adjustedEnd },\n {\n start: new Date(c.event.start),\n end: new Date(c.event.end),\n }\n )\n )\n if (!overlaps) {\n placed = true\n } else {\n columnIndex++\n }\n }\n }\n\n // Ensure column is initialized before pushing\n const currentColumn = columns[columnIndex] || []\n columns[columnIndex] = currentColumn\n currentColumn.push({ event, end: adjustedEnd })\n\n // Calculate width and left position based on number of columns\n const width = columnIndex === 0 ? 1 : 0.9\n const left = columnIndex === 0 ? 0 : columnIndex * 0.1\n\n positionedEvents.push({\n event,\n top,\n height,\n left,\n width,\n zIndex: 10 + columnIndex, // Higher columns get higher z-index\n })\n })\n\n return positionedEvents\n })\n\n return result\n }, [days, events])\n\n const handleEventClick = (event: CalendarEvent, e: React.MouseEvent) => {\n e.stopPropagation()\n onEventSelect(event)\n }\n\n const showAllDaySection = allDayEvents.length > 0\n const { currentTimePosition, currentTimeVisible } = useCurrentTimeIndicator(\n currentDate,\n \"week\"\n )\n\n return (\n <div data-slot=\"week-view\" className=\"flex h-full flex-col\">\n <div className=\"sticky top-0 z-30 grid grid-cols-8 border-b border-border/70 bg-background/80 backdrop-blur-md\">\n <div className=\"py-2 text-center text-sm text-muted-foreground/70\">\n <span className=\"max-[479px]:sr-only\">{format(new Date(), \"O\")}</span>\n </div>\n {days.map((day) => (\n <div\n key={day.toString()}\n className=\"py-2 text-center text-sm text-muted-foreground/70 data-today:font-medium data-today:text-foreground\"\n data-today={isToday(day) || undefined}\n >\n <span className=\"sm:hidden\" aria-hidden=\"true\">\n {format(day, \"E\")[0]} {format(day, \"d\")}\n </span>\n <span className=\"max-sm:hidden\">{format(day, \"EEE dd\")}</span>\n </div>\n ))}\n </div>\n\n {showAllDaySection && (\n <div className=\"border-b border-border/70 bg-muted/50\">\n <div className=\"grid grid-cols-8\">\n <div className=\"relative border-r border-border/70\">\n <span className=\"absolute bottom-0 left-0 h-6 w-16 max-w-full pe-2 text-right text-[10px] text-muted-foreground/70 sm:pe-4 sm:text-xs\">\n All day\n </span>\n </div>\n {days.map((day, dayIndex) => {\n const dayAllDayEvents = allDayEvents.filter((event) => {\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n return (\n isSameDay(day, eventStart) ||\n (day > eventStart && day < eventEnd) ||\n isSameDay(day, eventEnd)\n )\n })\n\n return (\n <div\n key={day.toString()}\n className=\"relative border-r border-border/70 p-1 last:border-r-0\"\n data-today={isToday(day) || undefined}\n >\n {dayAllDayEvents.map((event) => {\n const eventStart = new Date(event.start)\n const eventEnd = new Date(event.end)\n const isFirstDay = isSameDay(day, eventStart)\n const isLastDay = isSameDay(day, eventEnd)\n\n // Check if this is the first day in the current week view\n const isFirstVisibleDay =\n dayIndex === 0 && isBefore(eventStart, weekStart)\n const shouldShowTitle = isFirstDay || isFirstVisibleDay\n\n return (\n <EventItem\n key={`spanning-${event.id}`}\n onClick={(e) => handleEventClick(event, e)}\n event={event}\n view=\"month\"\n isFirstDay={isFirstDay}\n isLastDay={isLastDay}\n >\n {/* Show title if it's the first day of the event or the first visible day in the week */}\n <div\n className={cn(\n \"truncate\",\n !shouldShowTitle && \"invisible\"\n )}\n aria-hidden={!shouldShowTitle}\n >\n {event.title}\n </div>\n </EventItem>\n )\n })}\n </div>\n )\n })}\n </div>\n </div>\n )}\n\n <div className=\"grid flex-1 grid-cols-8 overflow-hidden\">\n <div className=\"grid auto-cols-fr border-r border-border/70\">\n {hours.map((hour, index) => (\n <div\n key={hour.toString()}\n className=\"relative min-h-[var(--week-cells-height)] border-b border-border/70 last:border-b-0\"\n >\n {index > 0 && (\n <span className=\"absolute -top-3 left-0 flex h-6 w-16 max-w-full items-center justify-end bg-background pe-2 text-[10px] text-muted-foreground/70 sm:pe-4 sm:text-xs\">\n {format(hour, \"h a\")}\n </span>\n )}\n </div>\n ))}\n </div>\n\n {days.map((day, dayIndex) => (\n <div\n key={day.toString()}\n className=\"relative grid auto-cols-fr border-r border-border/70 last:border-r-0\"\n data-today={isToday(day) || undefined}\n >\n {/* Positioned events */}\n {(processedDayEvents[dayIndex] ?? []).map((positionedEvent) => (\n <div\n key={positionedEvent.event.id}\n className=\"absolute z-10 px-0.5\"\n style={{\n top: `${positionedEvent.top}px`,\n height: `${positionedEvent.height}px`,\n left: `${positionedEvent.left * 100}%`,\n width: `${positionedEvent.width * 100}%`,\n zIndex: positionedEvent.zIndex,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"size-full\">\n <DraggableEvent\n event={positionedEvent.event}\n view=\"week\"\n onClick={(e) => handleEventClick(positionedEvent.event, e)}\n showTime\n height={positionedEvent.height}\n />\n </div>\n </div>\n ))}\n\n {/* Current time indicator - only show for today's column */}\n {currentTimeVisible && isToday(day) && (\n <div\n className=\"pointer-events-none absolute right-0 left-0 z-20\"\n style={{ top: `${currentTimePosition}%` }}\n >\n <div className=\"relative flex items-center\">\n <div className=\"absolute -left-1 h-2 w-2 rounded-full bg-primary\"></div>\n <div className=\"h-[2px] w-full bg-primary\"></div>\n </div>\n </div>\n )}\n {hours.map((hour) => {\n const hourValue = getHours(hour)\n return (\n <div\n key={hour.toString()}\n className=\"relative min-h-[var(--week-cells-height)] border-b border-border/70 last:border-b-0\"\n >\n {/* Quarter-hour intervals */}\n {[0, 1, 2, 3].map((quarter) => {\n const quarterHourTime = hourValue + quarter * 0.25\n return (\n <DroppableCell\n key={`${hour.toString()}-${quarter}`}\n id={`week-cell-${day.toISOString()}-${quarterHourTime}`}\n date={day}\n time={quarterHourTime}\n className={cn(\n \"absolute h-[calc(var(--week-cells-height)/4)] w-full\",\n quarter === 0 && \"top-0\",\n quarter === 1 &&\n \"top-[calc(var(--week-cells-height)/4)]\",\n quarter === 2 &&\n \"top-[calc(var(--week-cells-height)/4*2)]\",\n quarter === 3 &&\n \"top-[calc(var(--week-cells-height)/4*3)]\"\n )}\n onClick={() => {\n const startTime = new Date(day)\n startTime.setHours(hourValue)\n startTime.setMinutes(quarter * 15)\n onEventCreate(startTime)\n }}\n />\n )\n })}\n </div>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n )\n}\n",
|
|
105
|
-
"type": "registry:component"
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
"path": "registry/default/components/event-calendar/hooks/use-current-time-indicator.ts",
|
|
109
|
-
"content": "\"use client\"\n\nimport { useEffect, useState } from \"react\"\nimport { endOfWeek, isSameDay, isWithinInterval, startOfWeek } from \"date-fns\"\n\nimport {\n EndHour,\n StartHour,\n} from \"@/registry/default/components/event-calendar/constants\"\n\nexport function useCurrentTimeIndicator(\n currentDate: Date,\n view: \"day\" | \"week\"\n) {\n const [currentTimePosition, setCurrentTimePosition] = useState<number>(0)\n const [currentTimeVisible, setCurrentTimeVisible] = useState<boolean>(false)\n\n useEffect(() => {\n const calculateTimePosition = () => {\n const now = new Date()\n const hours = now.getHours()\n const minutes = now.getMinutes()\n const totalMinutes = (hours - StartHour) * 60 + minutes\n const dayStartMinutes = 0 // 12am\n const dayEndMinutes = (EndHour - StartHour) * 60 // 12am next day\n\n // Calculate position as percentage of day\n const position =\n ((totalMinutes - dayStartMinutes) / (dayEndMinutes - dayStartMinutes)) *\n 100\n\n // Check if current day is in view based on the calendar view\n let isCurrentTimeVisible = false\n\n if (view === \"day\") {\n isCurrentTimeVisible = isSameDay(now, currentDate)\n } else if (view === \"week\") {\n const startOfWeekDate = startOfWeek(currentDate, { weekStartsOn: 0 })\n const endOfWeekDate = endOfWeek(currentDate, { weekStartsOn: 0 })\n isCurrentTimeVisible = isWithinInterval(now, {\n start: startOfWeekDate,\n end: endOfWeekDate,\n })\n }\n\n setCurrentTimePosition(position)\n setCurrentTimeVisible(isCurrentTimeVisible)\n }\n\n // Calculate immediately\n calculateTimePosition()\n\n // Update every minute\n const interval = setInterval(calculateTimePosition, 60000)\n\n return () => clearInterval(interval)\n }, [currentDate, view])\n\n return { currentTimePosition, currentTimeVisible }\n}\n",
|
|
110
|
-
"type": "registry:component"
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
"path": "registry/default/components/event-calendar/hooks/use-event-visibility.ts",
|
|
114
|
-
"content": "\"use client\"\n\nimport { useLayoutEffect, useMemo, useRef, useState } from \"react\"\n\ninterface EventVisibilityOptions {\n eventHeight: number\n eventGap: number\n}\n\ninterface EventVisibilityResult {\n contentRef: React.RefObject<HTMLDivElement>\n contentHeight: number | null\n getVisibleEventCount: (totalEvents: number) => number\n}\n\n/**\n * Hook for calculating event visibility based on container height\n * Uses ResizeObserver for efficient updates\n */\nexport function useEventVisibility({\n eventHeight,\n eventGap,\n}: EventVisibilityOptions): EventVisibilityResult {\n // Use the standard pattern for React refs\n const contentRef = useRef<HTMLDivElement>(null)\n const observerRef = useRef<ResizeObserver | null>(null)\n const [contentHeight, setContentHeight] = useState<number | null>(null)\n\n // Use layout effect for synchronous measurement before paint\n useLayoutEffect(() => {\n if (!contentRef.current) return\n\n // Function to update the content height\n const updateHeight = () => {\n if (contentRef.current) {\n setContentHeight(contentRef.current.clientHeight)\n }\n }\n\n // Initial measurement (synchronous)\n updateHeight()\n\n // Create observer only once and reuse it\n if (!observerRef.current) {\n observerRef.current = new ResizeObserver(() => {\n // Just call updateHeight when resize is detected\n updateHeight()\n })\n }\n\n // Start observing the content container\n observerRef.current.observe(contentRef.current)\n\n // Clean up function\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect()\n }\n }\n }, [])\n\n // Function to calculate visible events for a cell\n const getVisibleEventCount = useMemo(() => {\n return (totalEvents: number): number => {\n if (!contentHeight) return totalEvents\n\n // Calculate how many events can fit in the container\n const maxEvents = Math.floor(contentHeight / (eventHeight + eventGap))\n\n // If all events fit, show them all\n if (totalEvents <= maxEvents) {\n return totalEvents\n } else {\n // Otherwise, reserve space for \"more\" button by showing one less\n return maxEvents > 0 ? maxEvents - 1 : 0\n }\n }\n }, [contentHeight, eventHeight, eventGap])\n\n // Use type assertion to satisfy TypeScript\n return {\n contentRef,\n contentHeight,\n getVisibleEventCount,\n } as EventVisibilityResult\n}\n",
|
|
115
|
-
"type": "registry:component"
|
|
116
|
-
}
|
|
117
|
-
],
|
|
118
|
-
"meta": {
|
|
119
|
-
"tags": [
|
|
120
|
-
"calendar"
|
|
121
|
-
],
|
|
122
|
-
"colSpan": 3
|
|
123
|
-
}
|
|
124
|
-
}
|
package/public/r/comp-543.json
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
-
"name": "comp-543",
|
|
4
|
-
"type": "registry:component",
|
|
5
|
-
"registryDependencies": [
|
|
6
|
-
"https://loveui.dev/building-blocks/r/button.json"
|
|
7
|
-
],
|
|
8
|
-
"files": [
|
|
9
|
-
{
|
|
10
|
-
"path": "registry/default/components/comp-543.tsx",
|
|
11
|
-
"content": "\"use client\"\n\nimport { CircleUserRoundIcon, XIcon } from \"lucide-react\"\n\nimport { useFileUpload } from \"@/registry/building-blocks/default/hooks/use-file-upload\"\nimport { Button } from \"@/registry/building-blocks/default/ui/button\"\n\nexport default function Component() {\n const [\n { files, isDragging },\n {\n removeFile,\n openFileDialog,\n getInputProps,\n handleDragEnter,\n handleDragLeave,\n handleDragOver,\n handleDrop,\n },\n ] = useFileUpload({\n accept: \"image/*\",\n })\n\n const previewUrl = files[0]?.preview || null\n\n return (\n <div className=\"flex flex-col items-center gap-2\">\n <div className=\"relative inline-flex\">\n {/* Drop area */}\n <button\n className=\"relative flex size-16 items-center justify-center overflow-hidden rounded-full border border-dashed border-input transition-colors outline-none hover:bg-accent/50 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-disabled:pointer-events-none has-disabled:opacity-50 has-[img]:border-none data-[dragging=true]:bg-accent/50\"\n onClick={openFileDialog}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n data-dragging={isDragging || undefined}\n aria-label={previewUrl ? \"Change image\" : \"Upload image\"}\n >\n {previewUrl ? (\n <img\n className=\"size-full object-cover\"\n src={previewUrl}\n alt={files[0]?.file?.name || \"Uploaded image\"}\n width={64}\n height={64}\n style={{ objectFit: \"cover\" }}\n />\n ) : (\n <div aria-hidden=\"true\">\n <CircleUserRoundIcon className=\"size-4 opacity-60\" />\n </div>\n )}\n </button>\n {previewUrl && (\n <Button\n onClick={() => removeFile(files[0]?.id)}\n size=\"icon\"\n className=\"absolute -top-1 -right-1 size-6 rounded-full border-2 border-background shadow-none focus-visible:border-background\"\n aria-label=\"Remove image\"\n >\n <XIcon className=\"size-3.5\" />\n </Button>\n )}\n <input\n {...getInputProps()}\n className=\"sr-only\"\n aria-label=\"Upload image file\"\n tabIndex={-1}\n />\n </div>\n <p\n aria-live=\"polite\"\n role=\"region\"\n className=\"mt-2 text-xs text-muted-foreground\"\n >\n Avatar uploader with droppable area ∙{\" \"}\n <a\n href=\"https://github.com/loveui/blob/main/apps/origin/docs/use-file-upload.md\"\n className=\"underline hover:text-foreground\"\n >\n API\n </a>\n </p>\n </div>\n )\n}\n",
|
|
12
|
-
"type": "registry:component"
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"path": "registry/default/hooks/use-file-upload.ts",
|
|
16
|
-
"content": "\"use client\"\n\nimport type React from \"react\"\nimport {\n useCallback,\n useRef,\n useState,\n type ChangeEvent,\n type DragEvent,\n type InputHTMLAttributes,\n} from \"react\"\n\nexport type FileMetadata = {\n name: string\n size: number\n type: string\n url: string\n id: string\n}\n\nexport type FileWithPreview = {\n file: File | FileMetadata\n id: string\n preview?: string\n}\n\nexport type FileUploadOptions = {\n maxFiles?: number // Only used when multiple is true, defaults to Infinity\n maxSize?: number // in bytes\n accept?: string\n multiple?: boolean // Defaults to false\n initialFiles?: FileMetadata[]\n onFilesChange?: (files: FileWithPreview[]) => void // Callback when files change\n onFilesAdded?: (addedFiles: FileWithPreview[]) => void // Callback when new files are added\n}\n\nexport type FileUploadState = {\n files: FileWithPreview[]\n isDragging: boolean\n errors: string[]\n}\n\nexport type FileUploadActions = {\n addFiles: (files: FileList | File[]) => void\n removeFile: (id: string) => void\n clearFiles: () => void\n clearErrors: () => void\n handleDragEnter: (e: DragEvent<HTMLElement>) => void\n handleDragLeave: (e: DragEvent<HTMLElement>) => void\n handleDragOver: (e: DragEvent<HTMLElement>) => void\n handleDrop: (e: DragEvent<HTMLElement>) => void\n handleFileChange: (e: ChangeEvent<HTMLInputElement>) => void\n openFileDialog: () => void\n getInputProps: (\n props?: InputHTMLAttributes<HTMLInputElement>\n ) => InputHTMLAttributes<HTMLInputElement> & {\n // Use `any` here to avoid cross-React ref type conflicts across packages\n ref: any\n }\n}\n\nexport const useFileUpload = (\n options: FileUploadOptions = {}\n): [FileUploadState, FileUploadActions] => {\n const {\n maxFiles = Infinity,\n maxSize = Infinity,\n accept = \"*\",\n multiple = false,\n initialFiles = [],\n onFilesChange,\n onFilesAdded,\n } = options\n\n const [state, setState] = useState<FileUploadState>({\n files: initialFiles.map((file) => ({\n file,\n id: file.id,\n preview: file.url,\n })),\n isDragging: false,\n errors: [],\n })\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n const validateFile = useCallback(\n (file: File | FileMetadata): string | null => {\n if (file instanceof File) {\n if (file.size > maxSize) {\n return `File \"${file.name}\" exceeds the maximum size of ${formatBytes(maxSize)}.`\n }\n } else {\n if (file.size > maxSize) {\n return `File \"${file.name}\" exceeds the maximum size of ${formatBytes(maxSize)}.`\n }\n }\n\n if (accept !== \"*\") {\n const acceptedTypes = accept.split(\",\").map((type) => type.trim())\n const fileType = file instanceof File ? file.type || \"\" : file.type\n const fileExtension = `.${file instanceof File ? file.name.split(\".\").pop() : file.name.split(\".\").pop()}`\n\n const isAccepted = acceptedTypes.some((type) => {\n if (type.startsWith(\".\")) {\n return fileExtension.toLowerCase() === type.toLowerCase()\n }\n if (type.endsWith(\"/*\")) {\n const baseType = type.split(\"/\")[0]\n return fileType.startsWith(`${baseType}/`)\n }\n return fileType === type\n })\n\n if (!isAccepted) {\n return `File \"${file instanceof File ? file.name : file.name}\" is not an accepted file type.`\n }\n }\n\n return null\n },\n [accept, maxSize]\n )\n\n const createPreview = useCallback(\n (file: File | FileMetadata): string | undefined => {\n if (file instanceof File) {\n return URL.createObjectURL(file)\n }\n return file.url\n },\n []\n )\n\n const generateUniqueId = useCallback((file: File | FileMetadata): string => {\n if (file instanceof File) {\n return `${file.name}-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`\n }\n return file.id\n }, [])\n\n const clearFiles = useCallback(() => {\n setState((prev) => {\n // Clean up object URLs\n prev.files.forEach((file) => {\n if (\n file.preview &&\n file.file instanceof File &&\n file.file.type.startsWith(\"image/\")\n ) {\n URL.revokeObjectURL(file.preview)\n }\n })\n\n if (inputRef.current) {\n inputRef.current.value = \"\"\n }\n\n const newState = {\n ...prev,\n files: [],\n errors: [],\n }\n\n onFilesChange?.(newState.files)\n return newState\n })\n }, [onFilesChange])\n\n const addFiles = useCallback(\n (newFiles: FileList | File[]) => {\n if (!newFiles || newFiles.length === 0) return\n\n const newFilesArray = Array.from(newFiles)\n const errors: string[] = []\n\n // Clear existing errors when new files are uploaded\n setState((prev) => ({ ...prev, errors: [] }))\n\n // In single file mode, clear existing files first\n if (!multiple) {\n clearFiles()\n }\n\n // Check if adding these files would exceed maxFiles (only in multiple mode)\n if (\n multiple &&\n maxFiles !== Infinity &&\n state.files.length + newFilesArray.length > maxFiles\n ) {\n errors.push(`You can only upload a maximum of ${maxFiles} files.`)\n setState((prev) => ({ ...prev, errors }))\n return\n }\n\n const validFiles: FileWithPreview[] = []\n\n newFilesArray.forEach((file) => {\n // Only check for duplicates if multiple files are allowed\n if (multiple) {\n const isDuplicate = state.files.some(\n (existingFile) =>\n existingFile.file.name === file.name &&\n existingFile.file.size === file.size\n )\n\n // Skip duplicate files silently\n if (isDuplicate) {\n return\n }\n }\n\n // Check file size\n if (file.size > maxSize) {\n errors.push(\n multiple\n ? `Some files exceed the maximum size of ${formatBytes(maxSize)}.`\n : `File exceeds the maximum size of ${formatBytes(maxSize)}.`\n )\n return\n }\n\n const error = validateFile(file)\n if (error) {\n errors.push(error)\n } else {\n validFiles.push({\n file,\n id: generateUniqueId(file),\n preview: createPreview(file),\n })\n }\n })\n\n // Only update state if we have valid files to add\n if (validFiles.length > 0) {\n // Call the onFilesAdded callback with the newly added valid files\n onFilesAdded?.(validFiles)\n\n setState((prev) => {\n const newFiles = !multiple\n ? validFiles\n : [...prev.files, ...validFiles]\n onFilesChange?.(newFiles)\n return {\n ...prev,\n files: newFiles,\n errors,\n }\n })\n } else if (errors.length > 0) {\n setState((prev) => ({\n ...prev,\n errors,\n }))\n }\n\n // Reset input value after handling files\n if (inputRef.current) {\n inputRef.current.value = \"\"\n }\n },\n [\n state.files,\n maxFiles,\n multiple,\n maxSize,\n validateFile,\n createPreview,\n generateUniqueId,\n clearFiles,\n onFilesChange,\n onFilesAdded,\n ]\n )\n\n const removeFile = useCallback(\n (id: string) => {\n setState((prev) => {\n const fileToRemove = prev.files.find((file) => file.id === id)\n if (\n fileToRemove &&\n fileToRemove.preview &&\n fileToRemove.file instanceof File &&\n fileToRemove.file.type.startsWith(\"image/\")\n ) {\n URL.revokeObjectURL(fileToRemove.preview)\n }\n\n const newFiles = prev.files.filter((file) => file.id !== id)\n onFilesChange?.(newFiles)\n\n return {\n ...prev,\n files: newFiles,\n errors: [],\n }\n })\n },\n [onFilesChange]\n )\n\n const clearErrors = useCallback(() => {\n setState((prev) => ({\n ...prev,\n errors: [],\n }))\n }, [])\n\n const handleDragEnter = useCallback((e: DragEvent<HTMLElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setState((prev) => ({ ...prev, isDragging: true }))\n }, [])\n\n const handleDragLeave = useCallback((e: DragEvent<HTMLElement>) => {\n e.preventDefault()\n e.stopPropagation()\n\n if (e.currentTarget.contains(e.relatedTarget as Node)) {\n return\n }\n\n setState((prev) => ({ ...prev, isDragging: false }))\n }, [])\n\n const handleDragOver = useCallback((e: DragEvent<HTMLElement>) => {\n e.preventDefault()\n e.stopPropagation()\n }, [])\n\n const handleDrop = useCallback(\n (e: DragEvent<HTMLElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setState((prev) => ({ ...prev, isDragging: false }))\n\n // Don't process files if the input is disabled\n if (inputRef.current?.disabled) {\n return\n }\n\n if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n // In single file mode, only use the first file\n if (!multiple) {\n const file = e.dataTransfer.files[0]\n addFiles([file])\n } else {\n addFiles(e.dataTransfer.files)\n }\n }\n },\n [addFiles, multiple]\n )\n\n const handleFileChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.files && e.target.files.length > 0) {\n addFiles(e.target.files)\n }\n },\n [addFiles]\n )\n\n const openFileDialog = useCallback(() => {\n if (inputRef.current) {\n inputRef.current.click()\n }\n }, [])\n\n const getInputProps = useCallback(\n (props: InputHTMLAttributes<HTMLInputElement> = {}) => {\n return {\n ...props,\n type: \"file\" as const,\n onChange: handleFileChange,\n accept: props.accept || accept,\n multiple: props.multiple !== undefined ? props.multiple : multiple,\n // Cast to `any` to prevent mismatched React ref type errors across workspaces\n ref: inputRef as any,\n }\n },\n [accept, multiple, handleFileChange]\n )\n\n return [\n state,\n {\n addFiles,\n removeFile,\n clearFiles,\n clearErrors,\n handleDragEnter,\n handleDragLeave,\n handleDragOver,\n handleDrop,\n handleFileChange,\n openFileDialog,\n getInputProps,\n },\n ]\n}\n\n// Helper function to format bytes to human-readable format\nexport const formatBytes = (bytes: number, decimals = 2): string => {\n if (bytes === 0) return \"0 Bytes\"\n\n const k = 1024\n const dm = decimals < 0 ? 0 : decimals\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"]\n\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n\n return Number.parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + sizes[i]\n}\n",
|
|
17
|
-
"type": "registry:hook"
|
|
18
|
-
}
|
|
19
|
-
],
|
|
20
|
-
"meta": {
|
|
21
|
-
"tags": [
|
|
22
|
-
"upload",
|
|
23
|
-
"file",
|
|
24
|
-
"image",
|
|
25
|
-
"drag and drop",
|
|
26
|
-
"avatar"
|
|
27
|
-
]
|
|
28
|
-
}
|
|
29
|
-
}
|