From ceed7456bec95ee148334eca9c8fa83609cf3231 Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Fri, 2 Oct 2026 22:55:25 +0200 Subject: [PATCH 1/3] feat: Add more ui components --- .nvmrc | 1 - apps/web/content/docs/dev/passkeys/index.mdx | 2 +- apps/web/content/docs/dev/passkeys/meta.json | 2 +- apps/web/content/docs/dev/performance.mdx | 4 +- apps/web/content/docs/ui/accordion.mdx | 1 + apps/web/content/docs/ui/alert-dialog.mdx | 7 +- apps/web/content/docs/ui/alert.mdx | 1 + apps/web/content/docs/ui/aspect-ratio.mdx | 67 ++ apps/web/content/docs/ui/attachment.mdx | 177 +++++ apps/web/content/docs/ui/auto-form.mdx | 1 + apps/web/content/docs/ui/avatar.mdx | 127 ++++ apps/web/content/docs/ui/badge.mdx | 1 + apps/web/content/docs/ui/bubble.mdx | 197 ++++++ apps/web/content/docs/ui/button-group.mdx | 230 ++++++ apps/web/content/docs/ui/button.mdx | 1 + apps/web/content/docs/ui/card.mdx | 76 +- apps/web/content/docs/ui/carousel.mdx | 226 ++++++ apps/web/content/docs/ui/cascader.mdx | 207 ++++++ apps/web/content/docs/ui/chart.mdx | 268 +++++++ apps/web/content/docs/ui/checkbox.mdx | 1 + apps/web/content/docs/ui/color.mdx | 1 + apps/web/content/docs/ui/colors.mdx | 1 + apps/web/content/docs/ui/combobox.mdx | 145 +++- apps/web/content/docs/ui/command.mdx | 303 ++++++++ apps/web/content/docs/ui/comparison.mdx | 102 +++ .../docs/ui/confirm-action-alert-dialog.mdx | 6 + apps/web/content/docs/ui/context-menu.mdx | 235 +++++++ apps/web/content/docs/ui/copy-button.mdx | 121 ++++ apps/web/content/docs/ui/counter.mdx | 129 ++++ apps/web/content/docs/ui/data-table.mdx | 587 ---------------- .../docs/ui/data-table/bulk-actions.mdx | 115 +++ .../docs/ui/data-table/draggable-rows.mdx | 273 ++++++++ .../docs/ui/data-table/expandable-rows.mdx | 73 ++ .../content/docs/ui/data-table/filters.mdx | 153 ++++ apps/web/content/docs/ui/data-table/index.mdx | 321 +++++++++ apps/web/content/docs/ui/data-table/meta.json | 13 + .../content/docs/ui/data-table/pagination.mdx | 31 + .../web/content/docs/ui/data-table/search.mdx | 42 ++ apps/web/content/docs/ui/dialog.mdx | 22 +- apps/web/content/docs/ui/drawer.mdx | 1 + apps/web/content/docs/ui/dropdown-menu.mdx | 1 + apps/web/content/docs/ui/editor.mdx | 1 + .../web/content/docs/ui/emoji-icon-picker.mdx | 1 + apps/web/content/docs/ui/empty.mdx | 186 +++++ apps/web/content/docs/ui/field.mdx | 294 ++++++++ .../docs/ui/hooks/use-before-unload.mdx | 1 + .../ui/hooks/use-intersection-observer.mdx | 98 +++ .../docs/ui/hooks/use-local-storage.mdx | 76 ++ apps/web/content/docs/ui/hooks/use-mobile.mdx | 1 + apps/web/content/docs/ui/hover-card.mdx | 1 + apps/web/content/docs/ui/image-zoom.mdx | 88 +++ apps/web/content/docs/ui/input-group.mdx | 1 + apps/web/content/docs/ui/input-otp.mdx | 220 ++++++ apps/web/content/docs/ui/input.mdx | 1 + apps/web/content/docs/ui/item.mdx | 212 ++++++ apps/web/content/docs/ui/kbd.mdx | 170 +++++ apps/web/content/docs/ui/label.mdx | 124 ++++ apps/web/content/docs/ui/marker.mdx | 170 +++++ apps/web/content/docs/ui/menubar.mdx | 246 +++++++ apps/web/content/docs/ui/message.mdx | 213 ++++++ apps/web/content/docs/ui/meta.json | 11 +- apps/web/content/docs/ui/nullable-number.mdx | 26 +- apps/web/content/docs/ui/number-field.mdx | 270 +++++++ apps/web/content/docs/ui/pagination.mdx | 215 ++++++ apps/web/content/docs/ui/popover.mdx | 1 + apps/web/content/docs/ui/progress.mdx | 1 + apps/web/content/docs/ui/radio-group.mdx | 1 + apps/web/content/docs/ui/resizable.mdx | 290 ++++++++ apps/web/content/docs/ui/roles.mdx | 1 + apps/web/content/docs/ui/scroll-area.mdx | 1 + apps/web/content/docs/ui/scroll-fade.mdx | 157 +++++ apps/web/content/docs/ui/select.mdx | 1 + apps/web/content/docs/ui/separator.mdx | 1 + apps/web/content/docs/ui/sheet.mdx | 1 + apps/web/content/docs/ui/shimmer.mdx | 157 +++++ apps/web/content/docs/ui/skeleton.mdx | 1 + apps/web/content/docs/ui/sonner.mdx | 44 -- apps/web/content/docs/ui/spinner.mdx | 129 ++++ apps/web/content/docs/ui/switch.mdx | 1 + apps/web/content/docs/ui/tabs.mdx | 1 + apps/web/content/docs/ui/textarea.mdx | 1 + apps/web/content/docs/ui/toast.mdx | 165 +++++ apps/web/content/docs/ui/toggle-group.mdx | 1 + apps/web/content/docs/ui/toggle.mdx | 1 + apps/web/content/docs/ui/tooltip.mdx | 44 ++ apps/web/content/docs/ui/user.mdx | 1 + apps/web/package.json | 1 + apps/web/src/docs/examples/alert-dialog.tsx | 8 +- apps/web/src/docs/examples/aspect-ratio.tsx | 33 + .../docs/examples/attachment-auto-form.tsx | 70 ++ apps/web/src/docs/examples/attachment.tsx | 86 +++ apps/web/src/docs/examples/avatar.tsx | 52 ++ apps/web/src/docs/examples/bubble.tsx | 74 ++ apps/web/src/docs/examples/button-group.tsx | 163 +++++ .../docs/examples/card-border-separation.tsx | 33 + .../src/docs/examples/card-header-border.tsx | 26 + .../src/docs/examples/card-header-footer.tsx | 29 + apps/web/src/docs/examples/card-link.tsx | 37 + apps/web/src/docs/examples/card.tsx | 19 +- apps/web/src/docs/examples/carousel.tsx | 125 ++++ .../src/docs/examples/cascader-auto-form.tsx | 51 ++ .../web/src/docs/examples/cascader-options.ts | 62 ++ apps/web/src/docs/examples/cascader.tsx | 27 + apps/web/src/docs/examples/chart-area.tsx | 115 +++ apps/web/src/docs/examples/chart-line.tsx | 80 +++ apps/web/src/docs/examples/chart.tsx | 79 +++ .../web/src/docs/examples/combobox-groups.tsx | 53 ++ .../src/docs/examples/combobox-multiple.tsx | 48 ++ apps/web/src/docs/examples/combobox.tsx | 1 + apps/web/src/docs/examples/command-dialog.tsx | 116 +++ apps/web/src/docs/examples/command.tsx | 61 ++ apps/web/src/docs/examples/comparison.tsx | 31 + .../examples/confirm-action-alert-dialog.tsx | 2 + apps/web/src/docs/examples/context-menu.tsx | 109 +++ apps/web/src/docs/examples/copy-button.tsx | 32 + .../docs/examples/counter-sliding-number.tsx | 40 ++ apps/web/src/docs/examples/counter.tsx | 27 + .../docs/examples/data-table-demo-users.ts | 55 ++ .../docs/examples/data-table-expandable.tsx | 182 +++++ .../src/docs/examples/data-table-filters.tsx | 61 ++ .../docs/examples/data-table-pagination.tsx | 24 + .../docs/examples/data-table-reorderable.tsx | 130 ++++ .../src/docs/examples/data-table-search.tsx | 35 + apps/web/src/docs/examples/dialog.tsx | 32 +- apps/web/src/docs/examples/empty-avatar.tsx | 37 + apps/web/src/docs/examples/empty-outline.tsx | 33 + apps/web/src/docs/examples/empty-search.tsx | 82 +++ apps/web/src/docs/examples/empty.tsx | 37 + .../src/docs/examples/field-choice-card.tsx | 62 ++ .../src/docs/examples/field-responsive.tsx | 45 ++ apps/web/src/docs/examples/field.tsx | 89 +++ apps/web/src/docs/examples/image-zoom.tsx | 30 + apps/web/src/docs/examples/input-otp.tsx | 50 ++ apps/web/src/docs/examples/item-group.tsx | 61 ++ apps/web/src/docs/examples/item-header.tsx | 38 + apps/web/src/docs/examples/item-link.tsx | 56 ++ apps/web/src/docs/examples/item-sizes.tsx | 32 + apps/web/src/docs/examples/item-variants.tsx | 46 ++ apps/web/src/docs/examples/item.tsx | 51 ++ apps/web/src/docs/examples/kbd.tsx | 107 +++ apps/web/src/docs/examples/label.tsx | 31 + apps/web/src/docs/examples/marker.tsx | 86 +++ apps/web/src/docs/examples/menubar.tsx | 142 ++++ apps/web/src/docs/examples/message.tsx | 147 ++++ .../web/src/docs/examples/nullable-number.tsx | 7 + .../docs/examples/number-field-auto-form.tsx | 51 ++ .../src/docs/examples/number-field-format.tsx | 50 ++ .../src/docs/examples/number-field-sizes.tsx | 25 + apps/web/src/docs/examples/number-field.tsx | 38 + apps/web/src/docs/examples/pagination.tsx | 125 ++++ .../docs/examples/resizable-collapsible.tsx | 38 + .../src/docs/examples/resizable-handle.tsx | 25 + .../src/docs/examples/resizable-persist.tsx | 86 +++ .../src/docs/examples/resizable-vertical.tsx | 28 + apps/web/src/docs/examples/resizable.tsx | 37 + .../docs/examples/scroll-fade-vertical.tsx | 41 ++ apps/web/src/docs/examples/scroll-fade.tsx | 78 +++ .../src/docs/examples/shimmer-variants.tsx | 65 ++ apps/web/src/docs/examples/shimmer.tsx | 21 + apps/web/src/docs/examples/sonner.tsx | 22 - .../web/src/docs/examples/spinner-buttons.tsx | 36 + apps/web/src/docs/examples/spinner-inline.tsx | 38 + apps/web/src/docs/examples/spinner-states.tsx | 37 + apps/web/src/docs/examples/spinner.tsx | 25 + apps/web/src/docs/examples/toast.tsx | 111 +++ apps/web/src/docs/examples/tooltip-group.tsx | 44 ++ apps/web/src/docs/local-table-data.ts | 77 ++ apps/web/src/docs/preview-data-table.tsx | 20 +- apps/web/src/docs/preview.tsx | 20 +- apps/web/src/locales/@vitnode/core/pl.json | 24 +- .../site/home/illustrations/hero-preview.tsx | 4 +- .../site/home/sections/showcase-carousel.tsx | 4 +- apps/web/src/site/home/sections/showcase.tsx | 4 +- apps/web/src/site/marketing/marketing.css | 5 +- apps/web/src/site/marketing/safari-frame.tsx | 85 +++ apps/web/src/site/marketing/screen-frame.tsx | 44 +- .../confirm-action-alert-dialog.test.tsx | 44 ++ .../confirm-action-alert-dialog.tsx | 41 +- .../src/components/form/fields/cascader.tsx | 52 ++ .../form/fields/combobox-groups.test.ts | 48 ++ .../components/form/fields/combobox-groups.ts | 29 + .../src/components/form/fields/combobox.tsx | 85 ++- .../components/form/fields/file-gallery.tsx | 2 +- .../src/components/form/fields/input-otp.tsx | 97 +++ .../form/fields/nullable-number.tsx | 82 +-- .../src/components/form/fields/number.tsx | 70 +- .../vitnode/src/components/table/content.tsx | 332 ++++++--- .../components/table/data-table-content.tsx | 4 + .../src/components/table/expansion.test.tsx | 159 +++++ .../src/components/table/expansion.tsx | 126 ++++ .../vitnode/src/components/table/filters.tsx | 7 +- .../src/components/table/order-table-head.tsx | 4 +- .../src/components/table/pagination.tsx | 2 + .../src/components/table/reorder-state.ts | 54 ++ .../src/components/table/reorder.test.tsx | 319 +++++++++ .../vitnode/src/components/table/reorder.tsx | 299 ++++++++ .../src/components/table/selection.tsx | 6 +- .../src/components/tiptap/tiptap-editor.tsx | 9 +- .../tiptap/toolbar/actions/audio-action.tsx | 10 +- .../tiptap/toolbar/actions/bold-action.tsx | 6 +- .../toolbar/actions/code-block-action.tsx | 6 +- .../tiptap/toolbar/actions/color-action.tsx | 6 +- .../tiptap/toolbar/actions/emoji-action.tsx | 13 +- .../tiptap/toolbar/actions/insert-action.tsx | 6 +- .../tiptap/toolbar/actions/italic-action.tsx | 6 +- .../tiptap/toolbar/actions/link-action.tsx | 6 +- .../tiptap/toolbar/actions/list-action.tsx | 14 +- .../text-format-more/text-format-more.tsx | 6 +- .../toolbar/actions/utils/toolbar-tooltip.tsx | 9 + .../tiptap/toolbar/tiptap-toolbar.tsx | 45 +- .../src/components/ui/alert-dialog.tsx | 20 +- .../vitnode/src/components/ui/attachment.tsx | 4 +- packages/vitnode/src/components/ui/avatar.tsx | 73 +- packages/vitnode/src/components/ui/bubble.tsx | 127 ++++ .../src/components/ui/button-client.tsx | 4 +- packages/vitnode/src/components/ui/card.tsx | 4 +- .../src/components/ui/cascader.test.tsx | 177 +++++ .../vitnode/src/components/ui/cascader.tsx | 661 ++++++++++++++++++ packages/vitnode/src/components/ui/chart.tsx | 2 +- .../vitnode/src/components/ui/checkbox.tsx | 2 +- .../src/components/ui/color-picker.tsx | 6 +- .../vitnode/src/components/ui/combobox.tsx | 130 +++- .../src/components/ui/comparison.test.ts | 36 + .../vitnode/src/components/ui/comparison.tsx | 209 ++++++ .../src/components/ui/context-menu.tsx | 10 +- .../src/components/ui/copy-button.test.tsx | 113 +++ .../vitnode/src/components/ui/copy-button.tsx | 180 +++++ .../src/components/ui/counter.test.tsx | 93 +++ .../vitnode/src/components/ui/counter.tsx | 90 +++ packages/vitnode/src/components/ui/dialog.tsx | 2 +- packages/vitnode/src/components/ui/editor.tsx | 17 +- .../src/components/ui/emoji-icon-picker.tsx | 6 +- packages/vitnode/src/components/ui/field.tsx | 2 +- .../src/components/ui/image-zoom.test.ts | 28 + .../vitnode/src/components/ui/image-zoom.tsx | 171 +++++ .../vitnode/src/components/ui/input-otp.tsx | 74 +- packages/vitnode/src/components/ui/label.tsx | 2 +- packages/vitnode/src/components/ui/loader.tsx | 20 - packages/vitnode/src/components/ui/marker.tsx | 73 ++ .../vitnode/src/components/ui/menubar.tsx | 16 +- .../vitnode/src/components/ui/message.tsx | 91 +++ .../src/components/ui/number-field.test.tsx | 136 ++++ .../src/components/ui/number-field.tsx | 160 +++++ .../src/components/ui/pagination.test.tsx | 89 +++ .../vitnode/src/components/ui/pagination.tsx | 39 +- .../vitnode/src/components/ui/radio-group.tsx | 2 +- .../vitnode/src/components/ui/sidebar.tsx | 32 +- .../src/components/ui/sliding-number.test.ts | 32 + .../src/components/ui/sliding-number.tsx | 120 ++++ packages/vitnode/src/components/ui/sonner.tsx | 148 +++- .../src/components/ui/spinner.test.tsx | 26 + .../vitnode/src/components/ui/spinner.tsx | 56 +- packages/vitnode/src/components/ui/switch.tsx | 15 +- .../vitnode/src/components/ui/tooltip.tsx | 102 +++ .../src/editor/properties/area-panel.tsx | 1 + .../vitnode/src/editor/properties/field.tsx | 4 +- .../vitnode/src/editor/sidebar/footer.tsx | 3 +- .../vitnode/src/editor/zones/area-frame.tsx | 1 + .../src/framework/vite/optimize-deps.test.ts | 46 ++ .../src/framework/vite/optimize-deps.ts | 28 +- .../hooks/use-intersection-observer.test.ts | 117 ++++ .../src/hooks/use-intersection-observer.ts | 45 ++ .../src/hooks/use-local-storage.test.ts | 108 +++ .../vitnode/src/hooks/use-local-storage.ts | 87 +++ .../vitnode/src/lib/helpers/auto-form.test.ts | 14 + packages/vitnode/src/lib/helpers/auto-form.ts | 3 + packages/vitnode/src/locales/en.json | 26 +- .../tanstack/admin/content/row-actions.tsx | 2 + .../vitnode/src/tanstack/auth/sso-screen.tsx | 6 +- .../views/content/actions/content-panel.tsx | 12 +- .../actions/delivery/delivery-panel.tsx | 9 +- .../actions/history/revision-history.tsx | 6 +- .../content/actions/history/revision-row.tsx | 5 +- .../views/content/actions/preview-action.tsx | 43 +- .../actions/schedule/schedule-panel.tsx | 9 +- .../admin/views/content/form/primitives.tsx | 1 + .../views/content/lib/field-component.tsx | 4 +- .../search/remove-documents-action.tsx | 1 + .../core/dashboard/grid/widget-properties.tsx | 10 +- .../debug/actions/clear-cache/clear-cache.tsx | 1 + .../debug/system-logs/actions/more/more.tsx | 10 +- .../navigation/navigation-create-dialog.tsx | 10 +- .../navigation/navigation-list-content.tsx | 15 +- .../core/staff/table/staff-table-content.tsx | 1 + .../system/files/actions/file-row-actions.tsx | 1 + .../files/actions/files-bulk-actions.tsx | 1 + .../send-test-email/send-test-email.tsx | 10 +- .../system/integrations/test-ai/test-ai.tsx | 10 +- .../test-storage/test-storage.tsx | 10 +- .../core/users/list/create-user-content.tsx | 10 +- .../core/users/roles/roles-table-content.tsx | 17 +- .../settings/devices/revoke-device-button.tsx | 1 + .../passkeys/delete-passkey-button.tsx | 1 + .../settings/sso/disconnect-sso-button.tsx | 1 + .../sso/callback/sso-callback-content.tsx | 6 +- .../views/files/actions/file-row-actions.tsx | 1 + .../files/actions/files-bulk-actions.tsx | 1 + .../vitnode/src/views/layouts/providers.tsx | 6 +- pnpm-lock.yaml | 5 +- 299 files changed, 17544 insertions(+), 1254 deletions(-) delete mode 100644 .nvmrc create mode 100644 apps/web/content/docs/ui/aspect-ratio.mdx create mode 100644 apps/web/content/docs/ui/attachment.mdx create mode 100644 apps/web/content/docs/ui/avatar.mdx create mode 100644 apps/web/content/docs/ui/bubble.mdx create mode 100644 apps/web/content/docs/ui/button-group.mdx create mode 100644 apps/web/content/docs/ui/carousel.mdx create mode 100644 apps/web/content/docs/ui/cascader.mdx create mode 100644 apps/web/content/docs/ui/chart.mdx create mode 100644 apps/web/content/docs/ui/command.mdx create mode 100644 apps/web/content/docs/ui/comparison.mdx create mode 100644 apps/web/content/docs/ui/context-menu.mdx create mode 100644 apps/web/content/docs/ui/copy-button.mdx create mode 100644 apps/web/content/docs/ui/counter.mdx delete mode 100644 apps/web/content/docs/ui/data-table.mdx create mode 100644 apps/web/content/docs/ui/data-table/bulk-actions.mdx create mode 100644 apps/web/content/docs/ui/data-table/draggable-rows.mdx create mode 100644 apps/web/content/docs/ui/data-table/expandable-rows.mdx create mode 100644 apps/web/content/docs/ui/data-table/filters.mdx create mode 100644 apps/web/content/docs/ui/data-table/index.mdx create mode 100644 apps/web/content/docs/ui/data-table/meta.json create mode 100644 apps/web/content/docs/ui/data-table/pagination.mdx create mode 100644 apps/web/content/docs/ui/data-table/search.mdx create mode 100644 apps/web/content/docs/ui/empty.mdx create mode 100644 apps/web/content/docs/ui/field.mdx create mode 100644 apps/web/content/docs/ui/hooks/use-intersection-observer.mdx create mode 100644 apps/web/content/docs/ui/hooks/use-local-storage.mdx create mode 100644 apps/web/content/docs/ui/image-zoom.mdx create mode 100644 apps/web/content/docs/ui/input-otp.mdx create mode 100644 apps/web/content/docs/ui/item.mdx create mode 100644 apps/web/content/docs/ui/kbd.mdx create mode 100644 apps/web/content/docs/ui/label.mdx create mode 100644 apps/web/content/docs/ui/marker.mdx create mode 100644 apps/web/content/docs/ui/menubar.mdx create mode 100644 apps/web/content/docs/ui/message.mdx create mode 100644 apps/web/content/docs/ui/number-field.mdx create mode 100644 apps/web/content/docs/ui/pagination.mdx create mode 100644 apps/web/content/docs/ui/resizable.mdx create mode 100644 apps/web/content/docs/ui/scroll-fade.mdx create mode 100644 apps/web/content/docs/ui/shimmer.mdx delete mode 100644 apps/web/content/docs/ui/sonner.mdx create mode 100644 apps/web/content/docs/ui/spinner.mdx create mode 100644 apps/web/content/docs/ui/toast.mdx create mode 100644 apps/web/src/docs/examples/aspect-ratio.tsx create mode 100644 apps/web/src/docs/examples/attachment-auto-form.tsx create mode 100644 apps/web/src/docs/examples/attachment.tsx create mode 100644 apps/web/src/docs/examples/avatar.tsx create mode 100644 apps/web/src/docs/examples/bubble.tsx create mode 100644 apps/web/src/docs/examples/button-group.tsx create mode 100644 apps/web/src/docs/examples/card-border-separation.tsx create mode 100644 apps/web/src/docs/examples/card-header-border.tsx create mode 100644 apps/web/src/docs/examples/card-header-footer.tsx create mode 100644 apps/web/src/docs/examples/card-link.tsx create mode 100644 apps/web/src/docs/examples/carousel.tsx create mode 100644 apps/web/src/docs/examples/cascader-auto-form.tsx create mode 100644 apps/web/src/docs/examples/cascader-options.ts create mode 100644 apps/web/src/docs/examples/cascader.tsx create mode 100644 apps/web/src/docs/examples/chart-area.tsx create mode 100644 apps/web/src/docs/examples/chart-line.tsx create mode 100644 apps/web/src/docs/examples/chart.tsx create mode 100644 apps/web/src/docs/examples/combobox-groups.tsx create mode 100644 apps/web/src/docs/examples/combobox-multiple.tsx create mode 100644 apps/web/src/docs/examples/command-dialog.tsx create mode 100644 apps/web/src/docs/examples/command.tsx create mode 100644 apps/web/src/docs/examples/comparison.tsx create mode 100644 apps/web/src/docs/examples/context-menu.tsx create mode 100644 apps/web/src/docs/examples/copy-button.tsx create mode 100644 apps/web/src/docs/examples/counter-sliding-number.tsx create mode 100644 apps/web/src/docs/examples/counter.tsx create mode 100644 apps/web/src/docs/examples/data-table-demo-users.ts create mode 100644 apps/web/src/docs/examples/data-table-expandable.tsx create mode 100644 apps/web/src/docs/examples/data-table-filters.tsx create mode 100644 apps/web/src/docs/examples/data-table-pagination.tsx create mode 100644 apps/web/src/docs/examples/data-table-reorderable.tsx create mode 100644 apps/web/src/docs/examples/data-table-search.tsx create mode 100644 apps/web/src/docs/examples/empty-avatar.tsx create mode 100644 apps/web/src/docs/examples/empty-outline.tsx create mode 100644 apps/web/src/docs/examples/empty-search.tsx create mode 100644 apps/web/src/docs/examples/empty.tsx create mode 100644 apps/web/src/docs/examples/field-choice-card.tsx create mode 100644 apps/web/src/docs/examples/field-responsive.tsx create mode 100644 apps/web/src/docs/examples/field.tsx create mode 100644 apps/web/src/docs/examples/image-zoom.tsx create mode 100644 apps/web/src/docs/examples/input-otp.tsx create mode 100644 apps/web/src/docs/examples/item-group.tsx create mode 100644 apps/web/src/docs/examples/item-header.tsx create mode 100644 apps/web/src/docs/examples/item-link.tsx create mode 100644 apps/web/src/docs/examples/item-sizes.tsx create mode 100644 apps/web/src/docs/examples/item-variants.tsx create mode 100644 apps/web/src/docs/examples/item.tsx create mode 100644 apps/web/src/docs/examples/kbd.tsx create mode 100644 apps/web/src/docs/examples/label.tsx create mode 100644 apps/web/src/docs/examples/marker.tsx create mode 100644 apps/web/src/docs/examples/menubar.tsx create mode 100644 apps/web/src/docs/examples/message.tsx create mode 100644 apps/web/src/docs/examples/number-field-auto-form.tsx create mode 100644 apps/web/src/docs/examples/number-field-format.tsx create mode 100644 apps/web/src/docs/examples/number-field-sizes.tsx create mode 100644 apps/web/src/docs/examples/number-field.tsx create mode 100644 apps/web/src/docs/examples/pagination.tsx create mode 100644 apps/web/src/docs/examples/resizable-collapsible.tsx create mode 100644 apps/web/src/docs/examples/resizable-handle.tsx create mode 100644 apps/web/src/docs/examples/resizable-persist.tsx create mode 100644 apps/web/src/docs/examples/resizable-vertical.tsx create mode 100644 apps/web/src/docs/examples/resizable.tsx create mode 100644 apps/web/src/docs/examples/scroll-fade-vertical.tsx create mode 100644 apps/web/src/docs/examples/scroll-fade.tsx create mode 100644 apps/web/src/docs/examples/shimmer-variants.tsx create mode 100644 apps/web/src/docs/examples/shimmer.tsx delete mode 100644 apps/web/src/docs/examples/sonner.tsx create mode 100644 apps/web/src/docs/examples/spinner-buttons.tsx create mode 100644 apps/web/src/docs/examples/spinner-inline.tsx create mode 100644 apps/web/src/docs/examples/spinner-states.tsx create mode 100644 apps/web/src/docs/examples/spinner.tsx create mode 100644 apps/web/src/docs/examples/toast.tsx create mode 100644 apps/web/src/docs/examples/tooltip-group.tsx create mode 100644 apps/web/src/docs/local-table-data.ts create mode 100644 apps/web/src/site/marketing/safari-frame.tsx create mode 100644 packages/vitnode/src/components/confirm-action/confirm-action-alert-dialog.test.tsx create mode 100644 packages/vitnode/src/components/form/fields/cascader.tsx create mode 100644 packages/vitnode/src/components/form/fields/combobox-groups.test.ts create mode 100644 packages/vitnode/src/components/form/fields/combobox-groups.ts create mode 100644 packages/vitnode/src/components/form/fields/input-otp.tsx create mode 100644 packages/vitnode/src/components/table/expansion.test.tsx create mode 100644 packages/vitnode/src/components/table/expansion.tsx create mode 100644 packages/vitnode/src/components/table/reorder-state.ts create mode 100644 packages/vitnode/src/components/table/reorder.test.tsx create mode 100644 packages/vitnode/src/components/table/reorder.tsx create mode 100644 packages/vitnode/src/components/tiptap/toolbar/actions/utils/toolbar-tooltip.tsx create mode 100644 packages/vitnode/src/components/ui/bubble.tsx create mode 100644 packages/vitnode/src/components/ui/cascader.test.tsx create mode 100644 packages/vitnode/src/components/ui/cascader.tsx create mode 100644 packages/vitnode/src/components/ui/comparison.test.ts create mode 100644 packages/vitnode/src/components/ui/comparison.tsx create mode 100644 packages/vitnode/src/components/ui/copy-button.test.tsx create mode 100644 packages/vitnode/src/components/ui/copy-button.tsx create mode 100644 packages/vitnode/src/components/ui/counter.test.tsx create mode 100644 packages/vitnode/src/components/ui/counter.tsx create mode 100644 packages/vitnode/src/components/ui/image-zoom.test.ts create mode 100644 packages/vitnode/src/components/ui/image-zoom.tsx delete mode 100644 packages/vitnode/src/components/ui/loader.tsx create mode 100644 packages/vitnode/src/components/ui/marker.tsx create mode 100644 packages/vitnode/src/components/ui/message.tsx create mode 100644 packages/vitnode/src/components/ui/number-field.test.tsx create mode 100644 packages/vitnode/src/components/ui/number-field.tsx create mode 100644 packages/vitnode/src/components/ui/pagination.test.tsx create mode 100644 packages/vitnode/src/components/ui/sliding-number.test.ts create mode 100644 packages/vitnode/src/components/ui/sliding-number.tsx create mode 100644 packages/vitnode/src/components/ui/spinner.test.tsx create mode 100644 packages/vitnode/src/framework/vite/optimize-deps.test.ts create mode 100644 packages/vitnode/src/hooks/use-intersection-observer.test.ts create mode 100644 packages/vitnode/src/hooks/use-intersection-observer.ts create mode 100644 packages/vitnode/src/hooks/use-local-storage.test.ts create mode 100644 packages/vitnode/src/hooks/use-local-storage.ts diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 8fdd954df..000000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -22 \ No newline at end of file diff --git a/apps/web/content/docs/dev/passkeys/index.mdx b/apps/web/content/docs/dev/passkeys/index.mdx index 4108bf0d9..547d133c3 100644 --- a/apps/web/content/docs/dev/passkeys/index.mdx +++ b/apps/web/content/docs/dev/passkeys/index.mdx @@ -1,7 +1,7 @@ --- title: Passkeys (WebAuthn) description: Let members sign in with Face ID, Touch ID, Windows Hello or a security key. Configure the RP ID and origins, run the migration, and learn how the WebAuthn ceremonies work in VitNode. -icon: Fingerprint +icon: FingerprintPattern --- import { Tab, Tabs } from "fumadocs-ui/components/tabs" diff --git a/apps/web/content/docs/dev/passkeys/meta.json b/apps/web/content/docs/dev/passkeys/meta.json index f6761fcec..f350bca0e 100644 --- a/apps/web/content/docs/dev/passkeys/meta.json +++ b/apps/web/content/docs/dev/passkeys/meta.json @@ -1,6 +1,6 @@ { "title": "Passkeys", "description": "Passwordless sign-in with WebAuthn passkeys - Face ID, Touch ID, Windows Hello or a security key", - "icon": "Fingerprint", + "icon": "FingerprintPattern", "pages": ["index", "using-passkeys", "admincp"] } diff --git a/apps/web/content/docs/dev/performance.mdx b/apps/web/content/docs/dev/performance.mdx index fdb65e648..92728897d 100644 --- a/apps/web/content/docs/dev/performance.mdx +++ b/apps/web/content/docs/dev/performance.mdx @@ -65,7 +65,7 @@ Heavy editors (like Tiptap) or complex modals should be lazy-loaded with `React. ```tsx title="plugins/blog/src/views/admin/article-editor.tsx" import React, { Suspense } from 'react' -import { Loader } from '@vitnode/core/components/ui/loader' +import { Spinner } from '@vitnode/core/components/ui/spinner' // [!code ++:6] const RichEditor = React.lazy(async () => @@ -75,7 +75,7 @@ const RichEditor = React.lazy(async () => ) export const ArticleEditor = (props) => ( - }> + }> ) diff --git a/apps/web/content/docs/ui/accordion.mdx b/apps/web/content/docs/ui/accordion.mdx index 75d60cf12..3050bf2e0 100644 --- a/apps/web/content/docs/ui/accordion.mdx +++ b/apps/web/content/docs/ui/accordion.mdx @@ -1,6 +1,7 @@ --- title: Accordion description: A component that allows users to expand and collapse sections of content. +icon: Rows3 --- ## Preview diff --git a/apps/web/content/docs/ui/alert-dialog.mdx b/apps/web/content/docs/ui/alert-dialog.mdx index 0b70f474d..69d6535ca 100644 --- a/apps/web/content/docs/ui/alert-dialog.mdx +++ b/apps/web/content/docs/ui/alert-dialog.mdx @@ -1,6 +1,7 @@ --- title: Alert Dialog description: Display important messages to users in a modal dialog. +icon: MessageSquareWarning --- A modal dialog that interrupts the user with important content and expects a @@ -30,10 +31,10 @@ import { Button } from '@vitnode/core/components/ui/button'; ```tsx - Show Dialog} /> + Delete account} /> - Are you absolutely sure? + Delete your account? This action cannot be undone. This will permanently delete your account and remove your data from our servers. @@ -41,7 +42,7 @@ import { Button } from '@vitnode/core/components/ui/button'; Cancel - Continue + Delete account diff --git a/apps/web/content/docs/ui/alert.mdx b/apps/web/content/docs/ui/alert.mdx index 9cf761fb7..7cd4b260c 100644 --- a/apps/web/content/docs/ui/alert.mdx +++ b/apps/web/content/docs/ui/alert.mdx @@ -1,6 +1,7 @@ --- title: Alert description: Display a short, important message to users. +icon: CircleAlert --- ## Preview diff --git a/apps/web/content/docs/ui/aspect-ratio.mdx b/apps/web/content/docs/ui/aspect-ratio.mdx new file mode 100644 index 000000000..d1a9f4ef9 --- /dev/null +++ b/apps/web/content/docs/ui/aspect-ratio.mdx @@ -0,0 +1,67 @@ +--- +title: Aspect Ratio +description: Keep images, videos and embeds at the right shape, whatever the width. +icon: Ratio +--- + +## Preview + + + +## Usage + +```ts +import { AspectRatio } from '@vitnode/core/components/ui/aspect-ratio' +``` + +```tsx + + A mountain at sunrise + +``` + +The box takes the full width it is given and works out its height from +`ratio`, so the page doesn't jump around while the image loads. Give the child +`size-full` and `object-cover` to fill the box without stretching. + +## Common ratios + +| Ratio | Good for | +| -------- | ------------------------------ | +| `16 / 9` | Videos, hero images, banners | +| `4 / 3` | Photos, product shots | +| `1` | Avatars, thumbnails, galleries | +| `9 / 16` | Phone screenshots, stories | + +## Video embed + +```tsx + +