@brumaombra/ui-vintage 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/AGENTS.md +1 -1
  2. package/COMPONENTS.md +1 -1
  3. package/README.md +3 -3
  4. package/package.json +4 -4
  5. package/src/components/blog/BlogFAQSection.vue +1 -1
  6. package/src/components/blog/BlogHeaderSection.vue +1 -1
  7. package/src/components/blog/BlogInfoSection.vue +3 -1
  8. package/src/components/blog/CategoryCard.vue +2 -1
  9. package/src/components/blog/HeaderCarousel.vue +2 -1
  10. package/src/components/blog/PostCard.vue +1 -1
  11. package/src/components/blog/SocialShareSidebar.vue +8 -1
  12. package/src/components/blog/TableOfContents.vue +3 -1
  13. package/src/components/card-grid/CardGrid.vue +1 -1
  14. package/src/components/chip/Chip.vue +1 -1
  15. package/src/components/confirm-dialog/ConfirmDialog.vue +1 -1
  16. package/src/components/content/BlogList.vue +2 -1
  17. package/src/components/content/CodeBlock.vue +3 -1
  18. package/src/components/content/ProseHr.vue +1 -1
  19. package/src/components/content/Terminal.vue +3 -1
  20. package/src/components/empty-state-card/EmptyStateCard.vue +1 -1
  21. package/src/components/error-page/ErrorPage.vue +1 -1
  22. package/src/components/landing/landing-footer/LandingFooter.vue +1 -1
  23. package/src/components/language-selector/LanguageSelector.vue +1 -1
  24. package/src/components/load-more-button/LoadMoreButton.vue +2 -1
  25. package/src/components/loading-state-card/LoadingStateCard.vue +1 -1
  26. package/src/components/message-dialog/MessageDialog.vue +3 -1
  27. package/src/components/message-toast/MessageToast.vue +4 -1
  28. package/src/components/single-value-card/SingleValueCard.vue +2 -1
  29. package/src/components/theme-selector/ThemeSelector.vue +4 -1
  30. package/src/components/ui/accordion/Accordion.vue +1 -1
  31. package/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +1 -1
  32. package/src/components/ui/calendar/CalendarNextButton.vue +1 -1
  33. package/src/components/ui/calendar/CalendarPrevButton.vue +1 -1
  34. package/src/components/ui/combobox/ComboboxItem.vue +1 -1
  35. package/src/components/ui/combobox/ComboboxSelect.vue +2 -1
  36. package/src/components/ui/combobox/ComboboxTrigger.vue +1 -1
  37. package/src/components/ui/command/CommandInput.vue +1 -1
  38. package/src/components/ui/data-table/DataTable.vue +2 -1
  39. package/src/components/ui/date-picker/DatePicker.vue +1 -1
  40. package/src/components/ui/dialog/DialogContent.vue +1 -1
  41. package/src/components/ui/dialog/DialogScrollContent.vue +1 -1
  42. package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +1 -1
  43. package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +1 -1
  44. package/src/components/ui/file-dropzone/FileDropzone.vue +10 -1
  45. package/src/components/ui/native-select/NativeSelect.vue +1 -1
  46. package/src/components/ui/number-field/NumberField.vue +2 -1
  47. package/src/components/ui/pagination/PaginationEllipsis.vue +1 -1
  48. package/src/components/ui/pagination/PaginationFirst.vue +1 -1
  49. package/src/components/ui/pagination/PaginationLast.vue +1 -1
  50. package/src/components/ui/pagination/PaginationNext.vue +1 -1
  51. package/src/components/ui/pagination/PaginationPrevious.vue +1 -1
  52. package/src/components/ui/select/SelectItem.vue +1 -1
  53. package/src/components/ui/select/SelectScrollDownButton.vue +1 -1
  54. package/src/components/ui/select/SelectScrollUpButton.vue +1 -1
  55. package/src/components/ui/select/SelectTrigger.vue +1 -1
  56. package/src/components/ui/sidebar/SidebarTrigger.vue +1 -1
  57. package/src/components/ui/stepper/SimpleStepper.vue +1 -1
  58. package/src/components/ui/stepper/StepperIndicator.vue +1 -1
  59. package/src/components/ui/tags-input/TagsInputItemDelete.vue +1 -1
  60. package/src/lib/color-tokens.ts +1 -1
package/AGENTS.md CHANGED
@@ -30,7 +30,7 @@ Only build something new when no entry point fits, and compose it from library p
30
30
  - Customize components through their props and the `class` prop (merged with tailwind-merge) rather than wrapping them in extra styled elements.
31
31
  - Keep corners at `rounded` (the library's square look) and use `shadow-elevated-sm|md|lg|xl` for elevation, without glows or gradients.
32
32
  - For motion, reuse the library utilities (`ease-spring`, `ease-out-expo`, `animate-uv-fade-up`, `animate-uv-pop`, `uv-floating-motion`). In custom transitions, name `scale`, `rotate`, and `translate` explicitly; Tailwind v4 doesn't animate them through `transform`.
33
- - Icons are Hugeicons definitions: import them from `@hugeicons/core-free-icons` and pass them to `:icon` props, or render them with `HugeiconsIcon` from `@hugeicons/vue`. Both packages are peer dependencies, so the app must list them in its own `package.json`.
33
+ - Icons are Hugeicons definitions: import each one from its own module (`import Rocket01Icon from '@hugeicons/core-free-icons/Rocket01Icon'`, never the `@hugeicons/core-free-icons` barrel, which makes the build parse the whole icon set) and pass them to `:icon` props, or render them with `HugeiconsIcon` from `@hugeicons/vue`. Both packages are peer dependencies, so the app must list them in its own `package.json`.
34
34
  - Form controls use `v-model`. Mark invalid fields with `aria-invalid` and show messages with `FieldError`.
35
35
  - Library strings are translated through vue-i18n (`uiVintage.*` keys). App copy belongs in the app's own locale files.
36
36
 
package/COMPONENTS.md CHANGED
@@ -10,7 +10,7 @@ This file lists every public entry point of the package with its components, pro
10
10
  - Import from explicit subpaths only (for example `@brumaombra/ui-vintage/button`). There is no root barrel, and `src/` paths are internal.
11
11
  - Style with the semantic Tailwind tokens: `bg-background`, `bg-card`, `bg-surface`, `bg-accent`, `bg-primary`, `hover:bg-primary-hover`, `text-foreground`, `text-muted-foreground`, `border-border`, `border-border-strong`, `text-destructive`, `text-success`, `text-warning`, `text-info`. They switch automatically in dark mode, so do not add `dark:` color overrides.
12
12
  - Reuse the motion utilities from the stylesheet instead of custom animations: `ease-spring`, `ease-bounce`, `ease-out-expo`, `ease-snappy`, `uv-floating-motion`, `uv-modal-motion`, `uv-overlay-motion`, `uv-collapsible-motion`, `uv-field`, `animate-uv-pop`, `animate-uv-fade-up`, `animate-uv-shake`, `animate-uv-shimmer`, `animate-uv-float`, `animate-uv-ping-soft`, and elevation via `shadow-elevated-sm|md|lg|xl`. Tailwind v4 animates `scale`, `rotate`, and `translate` as separate properties, so name them (not `transform`) in custom transitions.
13
- - Icons are Hugeicons definitions passed as values: `import { Rocket01Icon } from '@hugeicons/core-free-icons'` then `:icon="Rocket01Icon"`, or render one with `<HugeiconsIcon :icon="Rocket01Icon" />` from `@hugeicons/vue`.
13
+ - Icons are Hugeicons definitions passed as values, each imported from its own module: `import Rocket01Icon from '@hugeicons/core-free-icons/Rocket01Icon'` then `:icon="Rocket01Icon"`, or render one with `<HugeiconsIcon :icon="Rocket01Icon" />` from `@hugeicons/vue`.
14
14
  - Every component accepts `class`, merged with `tailwind-merge`, so utility overrides win over the defaults.
15
15
 
16
16
  ## Contents
package/README.md CHANGED
@@ -101,7 +101,7 @@ Import components from their public subpath:
101
101
  <script setup>
102
102
  import { Button } from '@brumaombra/ui-vintage/button';
103
103
  import { SingleValueCard } from '@brumaombra/ui-vintage/single-value-card';
104
- import { Money03Icon } from '@hugeicons/core-free-icons';
104
+ import Money03Icon from '@hugeicons/core-free-icons/Money03Icon';
105
105
  </script>
106
106
 
107
107
  <template>
@@ -364,7 +364,7 @@ demo-app/ Private showcase app (not published)
364
364
 
365
365
  `demo-app/` is a documentation-style Nuxt 4 app that shows every component with a live preview and a copyable code tab, a live mini-app on the overview page, a complete blog built with Nuxt Content, and a command palette (`Ctrl/⌘ + K`) to jump to any section. It imports the package through `file:..`, so it runs the same source that is published to npm.
366
366
 
367
- It needs Node.js 22.19 or newer, because Nuxt Content uses the built-in `node:sqlite` module instead of a native SQLite build.
367
+ It needs Node.js 24.21 or newer. Nuxt Content uses the built-in `node:sqlite` module instead of a native SQLite build.
368
368
 
369
369
  ```bash
370
370
  # Install and start the demo
@@ -401,7 +401,7 @@ New entry points need an export in `package.json` and a description and category
401
401
 
402
402
  - Nuxt 4 and Vue 3.5 or newer.
403
403
  - Tailwind CSS v4 with `@tailwindcss/vite` registered in `vite.plugins`.
404
- - `@hugeicons/core-free-icons` 4 and `@hugeicons/vue` 1 (the icons you pass to `:icon` props, and the ones the components render).
404
+ - `@hugeicons/core-free-icons` 4.3 or newer and `@hugeicons/vue` 1 (the icons you pass to `:icon` props, and the ones the components render). Import each icon from its own module, as in the example above: the package barrel makes the build parse the whole icon set.
405
405
  - `vue-i18n` 9, 10, or 11 with an i18n setup, such as `@nuxtjs/i18n` (the components call `useI18n()`).
406
406
  - `@nuxt/image` 2 for image components (the module installs it when needed).
407
407
  - `@nuxt/content` 3, only for the `blog` and `content` components.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brumaombra/ui-vintage",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "Source-published Nuxt UI runtime with shared theme tokens and built-in Nuxt integrations.",
5
5
  "private": false,
6
6
  "author": "Mauro Brambilla",
@@ -134,7 +134,7 @@
134
134
  "test": "npm --prefix demo-app run test"
135
135
  },
136
136
  "peerDependencies": {
137
- "@hugeicons/core-free-icons": "^4.1.0",
137
+ "@hugeicons/core-free-icons": "^4.3.0",
138
138
  "@hugeicons/vue": "^1.0.0",
139
139
  "@nuxt/content": "^3.0.0",
140
140
  "@nuxt/image": "^2.0.0",
@@ -159,8 +159,8 @@
159
159
  "tailwind-merge": "3.5.0"
160
160
  },
161
161
  "devDependencies": {
162
- "@hugeicons/core-free-icons": "4.1.1",
163
- "@hugeicons/vue": "1.0.5",
162
+ "@hugeicons/core-free-icons": "4.3.5",
163
+ "@hugeicons/vue": "1.0.8",
164
164
  "nuxt": "4.5.2",
165
165
  "tailwindcss": "4.2.4",
166
166
  "typescript": "5.9.3",
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { computed } from 'vue';
3
3
  import { useI18n } from 'vue-i18n';
4
- import { HelpCircleIcon } from '@hugeicons/core-free-icons';
4
+ import HelpCircleIcon from '@hugeicons/core-free-icons/HelpCircleIcon';
5
5
  import { Accordion } from '../ui/accordion';
6
6
  import BlogSectionTitle from './BlogSectionTitle.vue';
7
7
 
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { computed } from 'vue';
3
3
  import { useI18n } from 'vue-i18n';
4
- import { ArrowRight01Icon } from '@hugeicons/core-free-icons';
4
+ import ArrowRight01Icon from '@hugeicons/core-free-icons/ArrowRight01Icon';
5
5
  import { HugeiconsIcon } from '@hugeicons/vue';
6
6
  import type { HugeiconsIconDefinition } from '../../lib/common-types';
7
7
  import type { ToneColor } from '../../lib/color-tokens';
@@ -2,7 +2,9 @@
2
2
  import { NuxtImg } from '#components';
3
3
  import { computed } from 'vue';
4
4
  import { useI18n } from 'vue-i18n';
5
- import { ArrowUpRight01Icon, Calendar03Icon, RefreshIcon } from '@hugeicons/core-free-icons';
5
+ import ArrowUpRight01Icon from '@hugeicons/core-free-icons/ArrowUpRight01Icon';
6
+ import Calendar03Icon from '@hugeicons/core-free-icons/Calendar03Icon';
7
+ import RefreshIcon from '@hugeicons/core-free-icons/RefreshIcon';
6
8
  import { HugeiconsIcon } from '@hugeicons/vue';
7
9
  import { Card } from '../ui/card';
8
10
  import { formatDateLongItalyTimezone } from '../../lib/utils';
@@ -1,6 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { NuxtImg } from '#components';
3
- import { ArrowRight01Icon, Folder01Icon } from '@hugeicons/core-free-icons';
3
+ import ArrowRight01Icon from '@hugeicons/core-free-icons/ArrowRight01Icon';
4
+ import Folder01Icon from '@hugeicons/core-free-icons/Folder01Icon';
4
5
  import { HugeiconsIcon } from '@hugeicons/vue';
5
6
  import { Card } from '../ui/card';
6
7
 
@@ -2,7 +2,8 @@
2
2
  import { NuxtImg } from '#components';
3
3
  import { computed, onMounted, onUnmounted, ref, useId, watch } from 'vue';
4
4
  import { useI18n } from 'vue-i18n';
5
- import { ArrowLeft01Icon, ArrowRight01Icon } from '@hugeicons/core-free-icons';
5
+ import ArrowLeft01Icon from '@hugeicons/core-free-icons/ArrowLeft01Icon';
6
+ import ArrowRight01Icon from '@hugeicons/core-free-icons/ArrowRight01Icon';
6
7
  import { HugeiconsIcon } from '@hugeicons/vue';
7
8
  import { Badge } from '../ui/badge';
8
9
  import { Button } from '../ui/button';
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { NuxtImg } from '#components';
3
3
  import { useI18n } from 'vue-i18n';
4
- import { ArrowRight01Icon } from '@hugeicons/core-free-icons';
4
+ import ArrowRight01Icon from '@hugeicons/core-free-icons/ArrowRight01Icon';
5
5
  import { HugeiconsIcon } from '@hugeicons/vue';
6
6
  import { Card } from '../ui/card';
7
7
 
@@ -1,7 +1,14 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, ref } from 'vue';
3
3
  import { useI18n } from 'vue-i18n';
4
- import { Facebook01Icon, Link01Icon, Linkedin01Icon, NewTwitterIcon, Share08Icon, TelegramIcon, Tick02Icon, WhatsappIcon } from '@hugeicons/core-free-icons';
4
+ import Facebook01Icon from '@hugeicons/core-free-icons/Facebook01Icon';
5
+ import Link01Icon from '@hugeicons/core-free-icons/Link01Icon';
6
+ import Linkedin01Icon from '@hugeicons/core-free-icons/Linkedin01Icon';
7
+ import NewTwitterIcon from '@hugeicons/core-free-icons/NewTwitterIcon';
8
+ import Share08Icon from '@hugeicons/core-free-icons/Share08Icon';
9
+ import TelegramIcon from '@hugeicons/core-free-icons/TelegramIcon';
10
+ import Tick02Icon from '@hugeicons/core-free-icons/Tick02Icon';
11
+ import WhatsappIcon from '@hugeicons/core-free-icons/WhatsappIcon';
5
12
  import { HugeiconsIcon } from '@hugeicons/vue';
6
13
 
7
14
  // Props
@@ -1,7 +1,9 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue';
3
3
  import { useI18n } from 'vue-i18n';
4
- import { ArrowRight01Icon, Bookmark01Icon, Cancel01Icon } from '@hugeicons/core-free-icons';
4
+ import ArrowRight01Icon from '@hugeicons/core-free-icons/ArrowRight01Icon';
5
+ import Bookmark01Icon from '@hugeicons/core-free-icons/Bookmark01Icon';
6
+ import Cancel01Icon from '@hugeicons/core-free-icons/Cancel01Icon';
5
7
  import { HugeiconsIcon } from '@hugeicons/vue';
6
8
  import { Accordion } from '../ui/accordion';
7
9
  import { Button } from '../ui/button';
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts" generic="T extends { id: PropertyKey }">
2
- import { PackageIcon } from '@hugeicons/core-free-icons';
2
+ import PackageIcon from '@hugeicons/core-free-icons/PackageIcon';
3
3
  import { EmptyStateCard } from '../empty-state-card';
4
4
  import { LoadMoreButton } from '../load-more-button';
5
5
  import { LoadingStateCard } from '../loading-state-card';
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { Cancel01Icon } from '@hugeicons/core-free-icons';
2
+ import Cancel01Icon from '@hugeicons/core-free-icons/Cancel01Icon';
3
3
  import { HugeiconsIcon } from '@hugeicons/vue';
4
4
  import { computed } from 'vue';
5
5
  import type { HTMLAttributes } from 'vue';
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { HugeiconsIcon } from '@hugeicons/vue';
3
3
  import { computed, ref } from 'vue';
4
- import { InformationCircleIcon } from '@hugeicons/core-free-icons';
4
+ import InformationCircleIcon from '@hugeicons/core-free-icons/InformationCircleIcon';
5
5
  import { AlertDialog, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from '../ui/alert-dialog';
6
6
  import { Button } from '../ui/button';
7
7
  import { cancelActiveConfirmDialog, closeConfirmDialog, confirmActiveDialog, confirmDialogState } from './confirm-dialog-state';
@@ -1,5 +1,6 @@
1
1
  <script setup lang="ts">
2
- import { Cancel01Icon, Tick02Icon } from '@hugeicons/core-free-icons';
2
+ import Cancel01Icon from '@hugeicons/core-free-icons/Cancel01Icon';
3
+ import Tick02Icon from '@hugeicons/core-free-icons/Tick02Icon';
3
4
  import { HugeiconsIcon } from '@hugeicons/vue';
4
5
  import { Card } from '../ui/card';
5
6
 
@@ -1,5 +1,7 @@
1
1
  <script setup lang="ts">
2
- import { CheckmarkCircle02Icon, Copy01Icon, CodeIcon } from '@hugeicons/core-free-icons';
2
+ import CheckmarkCircle02Icon from '@hugeicons/core-free-icons/CheckmarkCircle02Icon';
3
+ import CodeIcon from '@hugeicons/core-free-icons/CodeIcon';
4
+ import Copy01Icon from '@hugeicons/core-free-icons/Copy01Icon';
3
5
  import { HugeiconsIcon } from '@hugeicons/vue';
4
6
  import { computed, ref, watch } from 'vue';
5
7
  import { useI18n } from 'vue-i18n';
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { ChartLineData02Icon } from '@hugeicons/core-free-icons';
2
+ import ChartLineData02Icon from '@hugeicons/core-free-icons/ChartLineData02Icon';
3
3
  import { HugeiconsIcon } from '@hugeicons/vue';
4
4
  import type { HugeiconsIconDefinition } from '../../lib/common-types';
5
5
 
@@ -1,5 +1,7 @@
1
1
  <script setup lang="ts">
2
- import { CheckmarkCircle02Icon, Copy01Icon, TerminalIcon } from '@hugeicons/core-free-icons';
2
+ import CheckmarkCircle02Icon from '@hugeicons/core-free-icons/CheckmarkCircle02Icon';
3
+ import Copy01Icon from '@hugeicons/core-free-icons/Copy01Icon';
4
+ import TerminalIcon from '@hugeicons/core-free-icons/TerminalIcon';
3
5
  import { HugeiconsIcon } from '@hugeicons/vue';
4
6
  import { computed, ref } from 'vue';
5
7
  import { useI18n } from 'vue-i18n';
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { computed } from 'vue';
3
3
  import { useI18n } from 'vue-i18n';
4
- import { PackageIcon } from '@hugeicons/core-free-icons';
4
+ import PackageIcon from '@hugeicons/core-free-icons/PackageIcon';
5
5
  import { HugeiconsIcon } from '@hugeicons/vue';
6
6
  import { Card, CardContent } from '../ui/card';
7
7
  import type { HeadingLevel, HugeiconsIconDefinition } from '../../lib/common-types';
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { ArrowLeft01Icon } from '@hugeicons/core-free-icons';
2
+ import ArrowLeft01Icon from '@hugeicons/core-free-icons/ArrowLeft01Icon';
3
3
  import { HugeiconsIcon } from '@hugeicons/vue';
4
4
  import { computed, type HTMLAttributes } from 'vue';
5
5
  import { useI18n } from 'vue-i18n';
@@ -1,6 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  import { NuxtImg } from '#components';
3
- import { FavouriteIcon } from '@hugeicons/core-free-icons';
3
+ import FavouriteIcon from '@hugeicons/core-free-icons/FavouriteIcon';
4
4
  import { HugeiconsIcon } from '@hugeicons/vue';
5
5
  import { computed, type Component, type HTMLAttributes } from 'vue';
6
6
  import { useI18n } from 'vue-i18n';
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, defineAsyncComponent, ref, type Component } from 'vue';
3
3
  import { useI18n } from 'vue-i18n';
4
- import { Tick02Icon } from '@hugeicons/core-free-icons';
4
+ import Tick02Icon from '@hugeicons/core-free-icons/Tick02Icon';
5
5
  import { HugeiconsIcon } from '@hugeicons/vue';
6
6
  import { Button } from '../ui/button';
7
7
  import { Command, CommandGroup, CommandItem, CommandList } from '../ui/command';
@@ -1,7 +1,8 @@
1
1
  <script setup lang="ts">
2
2
  import { computed } from 'vue';
3
3
  import { useI18n } from 'vue-i18n';
4
- import { ArrowDown01Icon, RefreshIcon } from '@hugeicons/core-free-icons';
4
+ import ArrowDown01Icon from '@hugeicons/core-free-icons/ArrowDown01Icon';
5
+ import RefreshIcon from '@hugeicons/core-free-icons/RefreshIcon';
5
6
  import { HugeiconsIcon } from '@hugeicons/vue';
6
7
  import { Button } from '../ui/button';
7
8
 
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { computed } from 'vue';
3
3
  import { useI18n } from 'vue-i18n';
4
- import { Loading03Icon } from '@hugeicons/core-free-icons';
4
+ import Loading03Icon from '@hugeicons/core-free-icons/Loading03Icon';
5
5
  import { HugeiconsIcon } from '@hugeicons/vue';
6
6
  import { Card, CardContent } from '../ui/card';
7
7
  import type { HeadingLevel, HugeiconsIconDefinition } from '../../lib/common-types';
@@ -1,7 +1,9 @@
1
1
  <script setup lang="ts">
2
2
  import { HugeiconsIcon } from '@hugeicons/vue';
3
3
  import { computed } from 'vue';
4
- import { AlertCircleIcon, InformationCircleIcon, Tick02Icon } from '@hugeicons/core-free-icons';
4
+ import AlertCircleIcon from '@hugeicons/core-free-icons/AlertCircleIcon';
5
+ import InformationCircleIcon from '@hugeicons/core-free-icons/InformationCircleIcon';
6
+ import Tick02Icon from '@hugeicons/core-free-icons/Tick02Icon';
5
7
  import { AlertDialog, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from '../ui/alert-dialog';
6
8
  import { Button } from '../ui/button';
7
9
  import { getUiVintageRuntimeMessage } from '../../lib/i18n';
@@ -1,5 +1,8 @@
1
1
  <script setup lang="ts">
2
- import { AlertCircleIcon, Cancel01Icon, CheckmarkCircle02Icon, InformationCircleIcon } from '@hugeicons/core-free-icons';
2
+ import AlertCircleIcon from '@hugeicons/core-free-icons/AlertCircleIcon';
3
+ import Cancel01Icon from '@hugeicons/core-free-icons/Cancel01Icon';
4
+ import CheckmarkCircle02Icon from '@hugeicons/core-free-icons/CheckmarkCircle02Icon';
5
+ import InformationCircleIcon from '@hugeicons/core-free-icons/InformationCircleIcon';
3
6
  import { HugeiconsIcon } from '@hugeicons/vue';
4
7
  import { computed, onBeforeUnmount, reactive, ref, watch } from 'vue';
5
8
  import { getUiVintageRuntimeMessage } from '../../lib/i18n';
@@ -1,7 +1,8 @@
1
1
  <script setup lang="ts">
2
2
  import { computed } from 'vue';
3
3
  import type { HTMLAttributes } from 'vue';
4
- import { ArrowDownRight01Icon, ArrowUpRight01Icon } from '@hugeicons/core-free-icons';
4
+ import ArrowDownRight01Icon from '@hugeicons/core-free-icons/ArrowDownRight01Icon';
5
+ import ArrowUpRight01Icon from '@hugeicons/core-free-icons/ArrowUpRight01Icon';
5
6
  import { HugeiconsIcon } from '@hugeicons/vue';
6
7
  import { AnimatedNumber } from '../ui/animated-number';
7
8
  import { Card } from '../ui/card';
@@ -1,7 +1,10 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, nextTick, onMounted, onUnmounted, ref } from 'vue';
3
3
  import { useI18n } from 'vue-i18n';
4
- import { LaptopIcon, Moon01Icon, Sun01Icon, Tick02Icon } from '@hugeicons/core-free-icons';
4
+ import LaptopIcon from '@hugeicons/core-free-icons/LaptopIcon';
5
+ import Moon01Icon from '@hugeicons/core-free-icons/Moon01Icon';
6
+ import Sun01Icon from '@hugeicons/core-free-icons/Sun01Icon';
7
+ import Tick02Icon from '@hugeicons/core-free-icons/Tick02Icon';
5
8
  import { HugeiconsIcon } from '@hugeicons/vue';
6
9
  import { Button } from '../ui/button';
7
10
  import { Command, CommandGroup, CommandItem, CommandList } from '../ui/command';
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import type { HTMLAttributes } from 'vue';
3
3
  import { computed, ref, useId } from 'vue';
4
- import { ArrowDown01Icon } from '@hugeicons/core-free-icons';
4
+ import ArrowDown01Icon from '@hugeicons/core-free-icons/ArrowDown01Icon';
5
5
  import { HugeiconsIcon } from '@hugeicons/vue';
6
6
  import { Card } from '../card';
7
7
  import { cn } from '../../../lib/utils';
@@ -1,6 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  import type { HTMLAttributes } from 'vue';
3
- import { MoreHorizontalIcon } from '@hugeicons/core-free-icons';
3
+ import MoreHorizontalIcon from '@hugeicons/core-free-icons/MoreHorizontalIcon';
4
4
  import { HugeiconsIcon } from '@hugeicons/vue';
5
5
  import { useI18n } from 'vue-i18n';
6
6
  import { cn } from '../../../lib/utils';
@@ -2,7 +2,7 @@
2
2
  import type { CalendarNextProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit } from '@vueuse/core';
5
- import { ArrowRight01Icon } from '@hugeicons/core-free-icons';
5
+ import ArrowRight01Icon from '@hugeicons/core-free-icons/ArrowRight01Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { CalendarNext, useForwardProps } from 'reka-ui';
8
8
  import { cn } from '../../../lib/utils';
@@ -2,7 +2,7 @@
2
2
  import type { CalendarPrevProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit } from '@vueuse/core';
5
- import { ArrowLeft01Icon } from '@hugeicons/core-free-icons';
5
+ import ArrowLeft01Icon from '@hugeicons/core-free-icons/ArrowLeft01Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { CalendarPrev, useForwardProps } from 'reka-ui';
8
8
  import { cn } from '../../../lib/utils';
@@ -2,7 +2,7 @@
2
2
  import type { ComboboxItemEmits, ComboboxItemProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit } from '@vueuse/core';
5
- import { Tick02Icon } from '@hugeicons/core-free-icons';
5
+ import Tick02Icon from '@hugeicons/core-free-icons/Tick02Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { ComboboxItem, ComboboxItemIndicator, useForwardPropsEmits } from 'reka-ui';
8
8
  import { cn } from '../../../lib/utils';
@@ -2,7 +2,8 @@
2
2
  import type { HTMLAttributes } from 'vue';
3
3
  import type { AcceptableValue } from 'reka-ui';
4
4
  import { computed, ref } from 'vue';
5
- import { Cancel01Icon, Search01Icon } from '@hugeicons/core-free-icons';
5
+ import Cancel01Icon from '@hugeicons/core-free-icons/Cancel01Icon';
6
+ import Search01Icon from '@hugeicons/core-free-icons/Search01Icon';
6
7
  import { HugeiconsIcon } from '@hugeicons/vue';
7
8
  import { useI18n } from 'vue-i18n';
8
9
  import { cn } from '../../../lib/utils';
@@ -2,7 +2,7 @@
2
2
  import type { ComboboxTriggerProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit } from '@vueuse/core';
5
- import { ArrowDown01Icon } from '@hugeicons/core-free-icons';
5
+ import ArrowDown01Icon from '@hugeicons/core-free-icons/ArrowDown01Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { ComboboxTrigger, useForwardProps } from 'reka-ui';
8
8
  import { cn } from '../../../lib/utils';
@@ -2,7 +2,7 @@
2
2
  import type { ListboxFilterProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit } from '@vueuse/core';
5
- import { Search01Icon } from '@hugeicons/core-free-icons';
5
+ import Search01Icon from '@hugeicons/core-free-icons/Search01Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { ListboxFilter, useForwardProps } from 'reka-ui';
8
8
  import { cn } from '../../../lib/utils';
@@ -2,7 +2,8 @@
2
2
  import type { HTMLAttributes } from 'vue';
3
3
  import { computed } from 'vue';
4
4
  import { useI18n } from 'vue-i18n';
5
- import { ArrowUp01Icon, PackageIcon } from '@hugeicons/core-free-icons';
5
+ import ArrowUp01Icon from '@hugeicons/core-free-icons/ArrowUp01Icon';
6
+ import PackageIcon from '@hugeicons/core-free-icons/PackageIcon';
6
7
  import { HugeiconsIcon } from '@hugeicons/vue';
7
8
  import { cn } from '../../../lib/utils';
8
9
  import { Checkbox } from '../checkbox';
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import type { HTMLAttributes } from 'vue';
3
3
  import { DateFormatter, getLocalTimeZone, today, } from '@internationalized/date';
4
- import { Calendar03Icon } from '@hugeicons/core-free-icons';
4
+ import Calendar03Icon from '@hugeicons/core-free-icons/Calendar03Icon';
5
5
  import { HugeiconsIcon } from '@hugeicons/vue';
6
6
  import type { DateValue } from 'reka-ui';
7
7
  import { computed, ref } from 'vue';
@@ -3,7 +3,7 @@ import type { DialogContentEmits, DialogContentProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit } from '@vueuse/core';
5
5
  import { DialogClose, DialogContent, DialogPortal, useForwardPropsEmits } from 'reka-ui';
6
- import { Cancel01Icon } from '@hugeicons/core-free-icons';
6
+ import Cancel01Icon from '@hugeicons/core-free-icons/Cancel01Icon';
7
7
  import { HugeiconsIcon } from '@hugeicons/vue';
8
8
  import { useI18n } from 'vue-i18n';
9
9
  import { cn } from '../../../lib/utils';
@@ -3,7 +3,7 @@ import type { DialogContentEmits, DialogContentProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit } from '@vueuse/core';
5
5
  import { DialogClose, DialogContent, DialogOverlay, DialogPortal, useForwardPropsEmits } from 'reka-ui';
6
- import { Cancel01Icon } from '@hugeicons/core-free-icons';
6
+ import Cancel01Icon from '@hugeicons/core-free-icons/Cancel01Icon';
7
7
  import { HugeiconsIcon } from '@hugeicons/vue';
8
8
  import { useI18n } from 'vue-i18n';
9
9
  import { cn } from '../../../lib/utils';
@@ -2,7 +2,7 @@
2
2
  import type { DropdownMenuCheckboxItemEmits, DropdownMenuCheckboxItemProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit } from '@vueuse/core';
5
- import { Tick02Icon } from '@hugeicons/core-free-icons';
5
+ import Tick02Icon from '@hugeicons/core-free-icons/Tick02Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { DropdownMenuCheckboxItem, DropdownMenuItemIndicator, useForwardPropsEmits } from 'reka-ui';
8
8
  import { cn } from '../../../lib/utils';
@@ -2,7 +2,7 @@
2
2
  import type { DropdownMenuSubTriggerProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit } from '@vueuse/core';
5
- import { ArrowRight01Icon } from '@hugeicons/core-free-icons';
5
+ import ArrowRight01Icon from '@hugeicons/core-free-icons/ArrowRight01Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { DropdownMenuSubTrigger, useForwardProps } from 'reka-ui';
8
8
  import { cn } from '../../../lib/utils';
@@ -2,7 +2,16 @@
2
2
  import type { HTMLAttributes } from 'vue';
3
3
  import type { HugeiconsIconDefinition } from '../../../lib/common-types';
4
4
  import type { FileRejection } from '.';
5
- import { Cancel01Icon, CloudUploadIcon, Doc01Icon, File01Icon, FileZipIcon, Image01Icon, MusicNote01Icon, Pdf01Icon, Video01Icon, Xls01Icon } from '@hugeicons/core-free-icons';
5
+ import Cancel01Icon from '@hugeicons/core-free-icons/Cancel01Icon';
6
+ import CloudUploadIcon from '@hugeicons/core-free-icons/CloudUploadIcon';
7
+ import Doc01Icon from '@hugeicons/core-free-icons/Doc01Icon';
8
+ import File01Icon from '@hugeicons/core-free-icons/File01Icon';
9
+ import FileZipIcon from '@hugeicons/core-free-icons/FileZipIcon';
10
+ import Image01Icon from '@hugeicons/core-free-icons/Image01Icon';
11
+ import MusicNote01Icon from '@hugeicons/core-free-icons/MusicNote01Icon';
12
+ import Pdf01Icon from '@hugeicons/core-free-icons/Pdf01Icon';
13
+ import Video01Icon from '@hugeicons/core-free-icons/Video01Icon';
14
+ import Xls01Icon from '@hugeicons/core-free-icons/Xls01Icon';
6
15
  import { HugeiconsIcon } from '@hugeicons/vue';
7
16
  import { computed, onBeforeUnmount, ref } from 'vue';
8
17
  import { useI18n } from 'vue-i18n';
@@ -2,7 +2,7 @@
2
2
  import type { AcceptableValue } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit, useVModel } from '@vueuse/core';
5
- import { ArrowDown01Icon } from '@hugeicons/core-free-icons';
5
+ import ArrowDown01Icon from '@hugeicons/core-free-icons/ArrowDown01Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { cn } from '../../../lib/utils';
8
8
  import { useFieldControlId } from '../field/field-context';
@@ -3,7 +3,8 @@ import type { NumberFieldRootEmits, NumberFieldRootProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { computed, nextTick, ref, watch } from 'vue';
5
5
  import { reactiveOmit } from '@vueuse/core';
6
- import { MinusSignIcon, PlusSignIcon } from '@hugeicons/core-free-icons';
6
+ import MinusSignIcon from '@hugeicons/core-free-icons/MinusSignIcon';
7
+ import PlusSignIcon from '@hugeicons/core-free-icons/PlusSignIcon';
7
8
  import { HugeiconsIcon } from '@hugeicons/vue';
8
9
  import { NumberFieldDecrement, NumberFieldIncrement, NumberFieldInput, NumberFieldRoot, useForwardPropsEmits } from 'reka-ui';
9
10
  import { useI18n } from 'vue-i18n';
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import type { PaginationEllipsisProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
- import { MoreHorizontalIcon } from '@hugeicons/core-free-icons';
4
+ import MoreHorizontalIcon from '@hugeicons/core-free-icons/MoreHorizontalIcon';
5
5
  import { HugeiconsIcon } from '@hugeicons/vue';
6
6
  import { reactiveOmit } from '@vueuse/core';
7
7
  import { PaginationEllipsis } from 'reka-ui';
@@ -2,7 +2,7 @@
2
2
  import type { PaginationFirstProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import type { ButtonVariants } from '../button';
5
- import { ArrowLeftDoubleIcon } from '@hugeicons/core-free-icons';
5
+ import ArrowLeftDoubleIcon from '@hugeicons/core-free-icons/ArrowLeftDoubleIcon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { reactiveOmit } from '@vueuse/core';
8
8
  import { PaginationFirst } from 'reka-ui';
@@ -2,7 +2,7 @@
2
2
  import type { PaginationLastProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import type { ButtonVariants } from '../button';
5
- import { ArrowRightDoubleIcon } from '@hugeicons/core-free-icons';
5
+ import ArrowRightDoubleIcon from '@hugeicons/core-free-icons/ArrowRightDoubleIcon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { reactiveOmit } from '@vueuse/core';
8
8
  import { PaginationLast } from 'reka-ui';
@@ -2,7 +2,7 @@
2
2
  import type { PaginationNextProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import type { ButtonVariants } from '../button';
5
- import { ArrowRight01Icon } from '@hugeicons/core-free-icons';
5
+ import ArrowRight01Icon from '@hugeicons/core-free-icons/ArrowRight01Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { reactiveOmit } from '@vueuse/core';
8
8
  import { PaginationNext } from 'reka-ui';
@@ -2,7 +2,7 @@
2
2
  import type { PaginationPrevProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import type { ButtonVariants } from '../button';
5
- import { ArrowLeft01Icon } from '@hugeicons/core-free-icons';
5
+ import ArrowLeft01Icon from '@hugeicons/core-free-icons/ArrowLeft01Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { reactiveOmit } from '@vueuse/core';
8
8
  import { PaginationPrev } from 'reka-ui';
@@ -2,7 +2,7 @@
2
2
  import type { SelectItemProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit } from '@vueuse/core';
5
- import { Tick02Icon } from '@hugeicons/core-free-icons';
5
+ import Tick02Icon from '@hugeicons/core-free-icons/Tick02Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { SelectItem, SelectItemIndicator, SelectItemText, useForwardProps } from 'reka-ui';
8
8
  import { cn } from '../../../lib/utils';
@@ -2,7 +2,7 @@
2
2
  import type { SelectScrollDownButtonProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit } from '@vueuse/core';
5
- import { ArrowDown01Icon } from '@hugeicons/core-free-icons';
5
+ import ArrowDown01Icon from '@hugeicons/core-free-icons/ArrowDown01Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { SelectScrollDownButton, useForwardProps } from 'reka-ui';
8
8
  import { cn } from '../../../lib/utils';
@@ -2,7 +2,7 @@
2
2
  import type { SelectScrollUpButtonProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit } from '@vueuse/core';
5
- import { ArrowUp01Icon } from '@hugeicons/core-free-icons';
5
+ import ArrowUp01Icon from '@hugeicons/core-free-icons/ArrowUp01Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { SelectScrollUpButton, useForwardProps } from 'reka-ui';
8
8
  import { cn } from '../../../lib/utils';
@@ -2,7 +2,7 @@
2
2
  import type { SelectTriggerProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit } from '@vueuse/core';
5
- import { ArrowDown01Icon } from '@hugeicons/core-free-icons';
5
+ import ArrowDown01Icon from '@hugeicons/core-free-icons/ArrowDown01Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { SelectIcon, SelectTrigger, useForwardProps } from 'reka-ui';
8
8
  import { cn } from '../../../lib/utils';
@@ -1,6 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  import type { HTMLAttributes } from 'vue';
3
- import { PanelLeftIcon } from '@hugeicons/core-free-icons';
3
+ import PanelLeftIcon from '@hugeicons/core-free-icons/PanelLeftIcon';
4
4
  import { HugeiconsIcon } from '@hugeicons/vue';
5
5
  import { useI18n } from 'vue-i18n';
6
6
  import { cn } from '../../../lib/utils';
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import type { HTMLAttributes } from 'vue';
3
3
  import type { StepperStep } from '.';
4
- import { Tick02Icon } from '@hugeicons/core-free-icons';
4
+ import Tick02Icon from '@hugeicons/core-free-icons/Tick02Icon';
5
5
  import { HugeiconsIcon } from '@hugeicons/vue';
6
6
  import { computed } from 'vue';
7
7
  import { cn } from '../../../lib/utils';
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import type { StepperIndicatorProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
- import { Tick02Icon } from '@hugeicons/core-free-icons';
4
+ import Tick02Icon from '@hugeicons/core-free-icons/Tick02Icon';
5
5
  import { HugeiconsIcon } from '@hugeicons/vue';
6
6
  import { reactiveOmit } from '@vueuse/core';
7
7
  import { injectStepperItemContext, StepperIndicator } from 'reka-ui';
@@ -2,7 +2,7 @@
2
2
  import type { TagsInputItemDeleteProps } from 'reka-ui';
3
3
  import type { HTMLAttributes } from 'vue';
4
4
  import { reactiveOmit } from '@vueuse/core';
5
- import { Cancel01Icon } from '@hugeicons/core-free-icons';
5
+ import Cancel01Icon from '@hugeicons/core-free-icons/Cancel01Icon';
6
6
  import { HugeiconsIcon } from '@hugeicons/vue';
7
7
  import { TagsInputItemDelete, useForwardProps } from 'reka-ui';
8
8
  import { cn } from '../../../lib/utils';
@@ -32,7 +32,7 @@ export const getInteractiveSurfaceToneClasses = (color: ToneColor) => {
32
32
  // Return the list of classes for button variants
33
33
  export const buttonVariantClasses: Record<ButtonVariantName, string> = {
34
34
  // Custom button variants
35
- primary: "bg-primary text-primary-foreground shadow-elevated-sm hover:bg-primary-hover",
35
+ primary: "bg-primary text-primary-foreground shadow-elevated-sm hover:bg-primary-hover before:pointer-events-none before:absolute before:inset-0 before:-z-10 before:-translate-x-full before:bg-[linear-gradient(105deg,transparent_35%,rgb(255_255_255/0.38)_50%,transparent_65%)] before:transition-[translate] before:duration-700 before:ease-out-expo hover:before:translate-x-full motion-reduce:before:hidden",
36
36
  secondary: "border border-border bg-secondary text-foreground shadow-elevated-sm hover:border-border-strong hover:bg-accent",
37
37
  ghost: "text-muted-foreground hover:bg-accent hover:text-foreground",
38
38
  link: "text-primary underline-offset-4 decoration-2 hover:underline enabled:active:scale-100",