@byyuurin/ui 0.3.0 → 0.4.0

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 (82) hide show
  1. package/LICENSE +20 -20
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +2 -2
  4. package/dist/runtime/components/Accordion.vue +43 -43
  5. package/dist/runtime/components/Alert.vue +65 -64
  6. package/dist/runtime/components/App.vue +10 -10
  7. package/dist/runtime/components/Avatar.vue +31 -30
  8. package/dist/runtime/components/AvatarGroup.vue +6 -5
  9. package/dist/runtime/components/Badge.vue +36 -35
  10. package/dist/runtime/components/Breadcrumb.vue +51 -51
  11. package/dist/runtime/components/Button.vue +54 -55
  12. package/dist/runtime/components/Calendar.vue +76 -75
  13. package/dist/runtime/components/Card.vue +43 -42
  14. package/dist/runtime/components/Carousel.vue +68 -67
  15. package/dist/runtime/components/Checkbox.vue +50 -48
  16. package/dist/runtime/components/CheckboxGroup.vue +33 -32
  17. package/dist/runtime/components/Chip.vue +20 -16
  18. package/dist/runtime/components/Collapsible.vue +16 -15
  19. package/dist/runtime/components/Drawer.vue +78 -77
  20. package/dist/runtime/components/DropdownMenu.vue +29 -29
  21. package/dist/runtime/components/DropdownMenuContent.vue +152 -152
  22. package/dist/runtime/components/FieldGroup.vue +5 -4
  23. package/dist/runtime/components/FileUpload.vue +267 -0
  24. package/dist/runtime/components/FileUpload.vue.d.ts +178 -0
  25. package/dist/runtime/components/Form.vue +11 -10
  26. package/dist/runtime/components/FormField.vue +39 -38
  27. package/dist/runtime/components/Icon.vue +2 -2
  28. package/dist/runtime/components/Input.vue +52 -52
  29. package/dist/runtime/components/InputNumber.vue +50 -49
  30. package/dist/runtime/components/InputTags.vue +55 -55
  31. package/dist/runtime/components/Kbd.vue +5 -4
  32. package/dist/runtime/components/Link.vue +25 -24
  33. package/dist/runtime/components/LinkBase.vue +3 -3
  34. package/dist/runtime/components/Marquee.vue +7 -6
  35. package/dist/runtime/components/Modal.vue +76 -75
  36. package/dist/runtime/components/NavigationMenu.vue +230 -230
  37. package/dist/runtime/components/OverlayProvider.vue +9 -9
  38. package/dist/runtime/components/Pagination.vue +49 -48
  39. package/dist/runtime/components/PinInput.vue +25 -25
  40. package/dist/runtime/components/Popover.vue +23 -23
  41. package/dist/runtime/components/Progress.vue +27 -26
  42. package/dist/runtime/components/RadioGroup.vue +53 -53
  43. package/dist/runtime/components/ScrollArea.vue +34 -33
  44. package/dist/runtime/components/Select.vue +203 -203
  45. package/dist/runtime/components/Separator.vue +32 -31
  46. package/dist/runtime/components/Skeleton.vue +13 -12
  47. package/dist/runtime/components/Slider.vue +27 -26
  48. package/dist/runtime/components/Stepper.vue +53 -52
  49. package/dist/runtime/components/Stepper.vue.d.ts +2 -2
  50. package/dist/runtime/components/Switch.vue +33 -34
  51. package/dist/runtime/components/Table.vue +139 -138
  52. package/dist/runtime/components/Tabs.vue +76 -76
  53. package/dist/runtime/components/Textarea.vue +50 -50
  54. package/dist/runtime/components/Timeline.vue +49 -48
  55. package/dist/runtime/components/Toast.vue +95 -94
  56. package/dist/runtime/components/ToastProvider.vue +31 -31
  57. package/dist/runtime/components/Tooltip.vue +26 -25
  58. package/dist/runtime/components/Tree.vue +133 -133
  59. package/dist/runtime/composables/useFileUpload.d.ts +19 -0
  60. package/dist/runtime/composables/useFileUpload.js +79 -0
  61. package/dist/runtime/composables/useLocale.d.ts +6 -0
  62. package/dist/runtime/locale/en.d.ts +3 -0
  63. package/dist/runtime/locale/en.js +3 -0
  64. package/dist/runtime/locale/zh_tw.d.ts +3 -0
  65. package/dist/runtime/locale/zh_tw.js +3 -0
  66. package/dist/runtime/types/index.d.ts +1 -0
  67. package/dist/runtime/types/index.js +1 -0
  68. package/dist/runtime/types/locale.d.ts +3 -0
  69. package/dist/runtime/types/unocss.d.ts +4 -4
  70. package/dist/runtime/types/utils.d.ts +1 -1
  71. package/dist/runtime/vue/components/Icon.vue +2 -2
  72. package/dist/setup.d.mts +1 -1
  73. package/dist/shared/{ui.D8Bg1HWt.d.mts → ui.CGCKYv7g.d.mts} +4 -2
  74. package/dist/shared/{ui.9kQouwss.mjs → ui.DYMXCXO6.mjs} +4 -2
  75. package/dist/shared/{ui.DpkP12cX.mjs → ui.DcEKQd0n.mjs} +230 -5
  76. package/dist/unocss.mjs +1 -1
  77. package/dist/unplugin.d.mts +1 -1
  78. package/dist/unplugin.mjs +2 -2
  79. package/dist/vite.d.mts +1 -1
  80. package/dist/vite.mjs +2 -2
  81. package/package.json +10 -10
  82. package/vue-plugin.d.ts +5 -5
@@ -8,7 +8,7 @@ export type DeepPartial<T> = {
8
8
  [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P] | undefined;
9
9
  };
10
10
  type SlotProps<T> = T extends Record<string, any> ? {
11
- [P in keyof T & string]: T[P] extends undefined ? T[P] | undefined : T[P];
11
+ [P in keyof T]: T[P];
12
12
  } : Record<string, never>;
13
13
  export type StaticSlot<P extends Record<string, any> | undefined = undefined> = P extends Record<string, any> ? (props: SlotProps<P>) => any : (props?: SlotProps<undefined>) => any;
14
14
  export type DynamicSlotsKeys<Name extends string | undefined, Suffix extends string | undefined = undefined, Base extends boolean = true> = (Name extends string ? Suffix extends string ? Base extends true ? Name | `${Name}-${Suffix}` : `${Name}-${Suffix}` : Name : never);
@@ -10,6 +10,6 @@ const props = defineProps({
10
10
  </script>
11
11
 
12
12
  <template>
13
- <IconifyIcon v-if="typeof props.name === 'string'" :icon="props.name.replace(/^i-/, '')" />
14
- <component :is="props.name" v-else />
13
+ <IconifyIcon v-if="typeof props.name === 'string'" :icon="props.name.replace(/^i-/, '')" />
14
+ <component :is="props.name" v-else />
15
15
  </template>
package/dist/setup.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import '#build/ui';
2
2
  import './shared/ui.IulR-OYx.mjs';
3
3
  import '../dist/runtime/types/style.js';
4
- export { A as AppConfigIcons, a as AppConfigUI, s as setup } from './shared/ui.D8Bg1HWt.mjs';
4
+ export { A as AppConfigIcons, a as AppConfigUI, s as setup } from './shared/ui.CGCKYv7g.mjs';
5
5
  import './unocss.mjs';
6
6
  import '@nuxt/schema';
7
7
  import '@unocss/preset-wind4/colors';
@@ -17,11 +17,13 @@ declare const icons: {
17
17
  chevronDoubleLeft: string;
18
18
  chevronDoubleRight: string;
19
19
  ellipsis: string;
20
+ external: string;
21
+ file: string;
20
22
  folder: string;
21
23
  folderOpen: string;
22
- plus: string;
23
24
  minus: string;
24
- external: string;
25
+ plus: string;
26
+ upload: string;
25
27
  };
26
28
 
27
29
  type AppConfigIcons = Record<keyof typeof icons | (string & {}), string>;
@@ -11,11 +11,13 @@ const icons = {
11
11
  chevronDoubleLeft: "i-lucide-chevrons-left",
12
12
  chevronDoubleRight: "i-lucide-chevrons-right",
13
13
  ellipsis: "i-lucide-ellipsis",
14
+ external: "i-lucide-arrow-up-right",
15
+ file: "i-lucide-file",
14
16
  folder: "i-lucide-folder",
15
17
  folderOpen: "i-lucide-folder-open",
16
- plus: "i-lucide-plus",
17
18
  minus: "i-lucide-minus",
18
- external: "i-lucide-arrow-up-right"
19
+ plus: "i-lucide-plus",
20
+ upload: "i-lucide-upload"
19
21
  };
20
22
 
21
23
  function getDefaultUIConfig(colors) {
@@ -4,12 +4,12 @@ import { findPath, addTypeTemplate, addTemplate } from '@nuxt/kit';
4
4
  import { loadConfig } from '@unocss/config';
5
5
  import { genExport } from 'knitwork';
6
6
  import { kebabCase } from 'scule';
7
- import { n as neutralColors } from './ui.9kQouwss.mjs';
7
+ import { n as neutralColors } from './ui.DYMXCXO6.mjs';
8
8
  import { ct } from '@byyuurin/ui-kit';
9
9
  import { defu } from 'defu';
10
10
 
11
11
  const name = "@byyuurin/ui";
12
- const version = "0.3.0";
12
+ const version = "0.4.0";
13
13
 
14
14
  const accordion = ct({
15
15
  parts: {
@@ -970,9 +970,6 @@ const checkbox = (options) => ct({
970
970
  label: "cursor-not-allowed",
971
971
  description: "cursor-not-allowed"
972
972
  }
973
- },
974
- checked: {
975
- true: ""
976
973
  }
977
974
  },
978
975
  compoundVariants: [
@@ -1458,6 +1455,233 @@ const dropdownMenu = (options) => ct({
1458
1455
  }
1459
1456
  });
1460
1457
 
1458
+ const fileUpload = (options) => ct({
1459
+ parts: {
1460
+ root: "relative flex flex-col",
1461
+ base: [
1462
+ "w-full flex-1 bg-default border border-default flex flex-col gap-2 items-stretch justify-center rounded-lg cursor-pointer focus-visible:outline-2",
1463
+ options.theme.transitions && "transition-colors"
1464
+ ],
1465
+ wrapper: "flex flex-col items-center justify-center text-center",
1466
+ icon: "shrink-0",
1467
+ avatar: "shrink-0",
1468
+ label: "font-medium text-default mt-2",
1469
+ description: "text-muted mt-1",
1470
+ actions: "flex flex-wrap gap-1.5 shrink-0 mt-4",
1471
+ files: "",
1472
+ file: "relative",
1473
+ fileLeadingAvatar: "shrink-0",
1474
+ fileWrapper: "flex flex-col min-w-0",
1475
+ fileName: "text-default truncate",
1476
+ fileSize: "text-muted truncate",
1477
+ fileTrailingButton: ""
1478
+ },
1479
+ variants: {
1480
+ color: {
1481
+ ...Object.fromEntries((options.theme.colors || []).map((color) => [color, ""])),
1482
+ neutral: ""
1483
+ },
1484
+ variant: {
1485
+ area: {
1486
+ wrapper: "px-4 py-3",
1487
+ base: "p-4"
1488
+ },
1489
+ button: ""
1490
+ },
1491
+ size: {
1492
+ xs: {
1493
+ base: "text-xs",
1494
+ icon: "size-4",
1495
+ file: "text-xs px-2 py-1 gap-1",
1496
+ fileWrapper: "flex-row gap-1"
1497
+ },
1498
+ sm: {
1499
+ base: "text-xs",
1500
+ icon: "size-4",
1501
+ file: "text-xs px-2.5 py-1.5 gap-1.5",
1502
+ fileWrapper: "flex-row gap-1"
1503
+ },
1504
+ md: {
1505
+ base: "text-sm",
1506
+ icon: "size-5",
1507
+ file: "text-xs px-2.5 py-1.5 gap-1.5"
1508
+ },
1509
+ lg: {
1510
+ base: "text-sm",
1511
+ icon: "size-5",
1512
+ file: "text-sm px-3 py-2 gap-2",
1513
+ fileSize: "text-xs"
1514
+ },
1515
+ xl: {
1516
+ base: "text-base",
1517
+ icon: "size-6",
1518
+ file: "text-sm px-3 py-2 gap-2"
1519
+ }
1520
+ },
1521
+ layout: {
1522
+ list: {
1523
+ root: "gap-2 items-start",
1524
+ files: "flex flex-col w-full gap-2",
1525
+ file: "min-w-0 flex items-center border border-default rounded-md w-full",
1526
+ fileTrailingButton: "ms-auto"
1527
+ },
1528
+ grid: {
1529
+ fileWrapper: "hidden",
1530
+ fileLeadingAvatar: "size-full rounded-lg",
1531
+ fileTrailingButton: "absolute -top-1.5 -end-1.5 p-0 rounded-full border-2 border-bg"
1532
+ }
1533
+ },
1534
+ position: {
1535
+ inside: "",
1536
+ outside: ""
1537
+ },
1538
+ dropzone: {
1539
+ true: {
1540
+ base: "border-dashed data-[dragging=true]:bg-elevated/25"
1541
+ }
1542
+ },
1543
+ interactive: {
1544
+ true: ""
1545
+ },
1546
+ highlight: {
1547
+ true: ""
1548
+ },
1549
+ multiple: {
1550
+ true: ""
1551
+ },
1552
+ disabled: {
1553
+ true: {
1554
+ base: "cursor-not-allowed opacity-75"
1555
+ }
1556
+ }
1557
+ },
1558
+ compoundVariants: [
1559
+ ...(options.theme.colors || []).map((color) => ({
1560
+ color,
1561
+ class: {
1562
+ base: `focus-visible:outline-${color}`
1563
+ }
1564
+ })),
1565
+ {
1566
+ color: "neutral",
1567
+ class: {
1568
+ base: "focus-visible:outline-inverted"
1569
+ }
1570
+ },
1571
+ ...(options.theme.colors || []).map((color) => ({
1572
+ color,
1573
+ highlight: true,
1574
+ class: {
1575
+ base: `border-${color}`
1576
+ }
1577
+ })),
1578
+ {
1579
+ color: "neutral",
1580
+ highlight: true,
1581
+ class: {
1582
+ base: "border-inverted"
1583
+ }
1584
+ },
1585
+ {
1586
+ size: "xs",
1587
+ layout: "list",
1588
+ class: {
1589
+ fileTrailingButton: "-me-1"
1590
+ }
1591
+ },
1592
+ {
1593
+ size: "sm",
1594
+ layout: "list",
1595
+ class: {
1596
+ fileTrailingButton: "-me-1.5"
1597
+ }
1598
+ },
1599
+ {
1600
+ size: "md",
1601
+ layout: "list",
1602
+ class: {
1603
+ fileTrailingButton: "-me-1.5"
1604
+ }
1605
+ },
1606
+ {
1607
+ size: "lg",
1608
+ layout: "list",
1609
+ class: {
1610
+ fileTrailingButton: "-me-2"
1611
+ }
1612
+ },
1613
+ {
1614
+ size: "xl",
1615
+ layout: "list",
1616
+ class: {
1617
+ fileTrailingButton: "-me-2"
1618
+ }
1619
+ },
1620
+ {
1621
+ variant: "button",
1622
+ size: "xs",
1623
+ class: {
1624
+ base: "p-1"
1625
+ }
1626
+ },
1627
+ {
1628
+ variant: "button",
1629
+ size: "sm",
1630
+ class: {
1631
+ base: "p-1.5"
1632
+ }
1633
+ },
1634
+ {
1635
+ variant: "button",
1636
+ size: "md",
1637
+ class: {
1638
+ base: "p-1.5"
1639
+ }
1640
+ },
1641
+ {
1642
+ variant: "button",
1643
+ size: "lg",
1644
+ class: {
1645
+ base: "p-2"
1646
+ }
1647
+ },
1648
+ {
1649
+ variant: "button",
1650
+ size: "xl",
1651
+ class: {
1652
+ base: "p-2"
1653
+ }
1654
+ },
1655
+ {
1656
+ layout: "grid",
1657
+ multiple: true,
1658
+ class: {
1659
+ files: "grid grid-cols-2 md:grid-cols-3 gap-4 w-full",
1660
+ file: "p-0 aspect-square"
1661
+ }
1662
+ },
1663
+ {
1664
+ layout: "grid",
1665
+ multiple: false,
1666
+ class: {
1667
+ file: "absolute inset-0 p-0"
1668
+ }
1669
+ },
1670
+ {
1671
+ interactive: true,
1672
+ disabled: false,
1673
+ class: {
1674
+ base: "hover:bg-elevated/25"
1675
+ }
1676
+ }
1677
+ ],
1678
+ defaultVariants: {
1679
+ color: "primary",
1680
+ variant: "area",
1681
+ size: "md"
1682
+ }
1683
+ });
1684
+
1461
1685
  const form = ct({
1462
1686
  base: ""
1463
1687
  });
@@ -4290,6 +4514,7 @@ const theme = {
4290
4514
  drawer: drawer,
4291
4515
  dropdownMenu: dropdownMenu,
4292
4516
  fieldGroup: fieldGroup,
4517
+ fileUpload: fileUpload,
4293
4518
  form: form,
4294
4519
  formField: formField,
4295
4520
  input: inputTheme,
package/dist/unocss.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { colors } from '@unocss/preset-wind4/colors';
2
2
  import { parseColor } from '@unocss/preset-wind4/utils';
3
- import { r as resolveColors } from './shared/ui.9kQouwss.mjs';
3
+ import { r as resolveColors } from './shared/ui.DYMXCXO6.mjs';
4
4
  import '../dist/runtime/utils/index.js';
5
5
 
6
6
  function createUnoPreset(options = {}) {
@@ -2,7 +2,7 @@ import 'unplugin';
2
2
  import 'unplugin-auto-import/types';
3
3
  import 'unplugin-vue-components/types';
4
4
  import './shared/ui.IulR-OYx.mjs';
5
- export { U as UIOptions, r as runtimeDir, u as unplugin } from './shared/ui.D8Bg1HWt.mjs';
5
+ export { U as UIOptions, r as runtimeDir, u as unplugin } from './shared/ui.CGCKYv7g.mjs';
6
6
  import '@nuxt/schema';
7
7
  import '@unocss/preset-wind4/colors';
8
8
  import '../dist/runtime/types/index.js';
package/dist/unplugin.mjs CHANGED
@@ -2,8 +2,8 @@ import { fileURLToPath } from 'node:url';
2
2
  import { defu } from 'defu';
3
3
  import { join, normalize } from 'pathe';
4
4
  import { createUnplugin } from 'unplugin';
5
- import { g as getTemplates, n as name } from './shared/ui.DpkP12cX.mjs';
6
- import { d as defaultOptions, r as resolveColors, g as getDefaultUIConfig } from './shared/ui.9kQouwss.mjs';
5
+ import { g as getTemplates, n as name } from './shared/ui.DcEKQd0n.mjs';
6
+ import { d as defaultOptions, r as resolveColors, g as getDefaultUIConfig } from './shared/ui.DYMXCXO6.mjs';
7
7
  import AutoImport from 'unplugin-auto-import';
8
8
  import { globSync } from 'tinyglobby';
9
9
  import AutoImportComponents from 'unplugin-vue-components';
package/dist/vite.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as vite from 'vite';
2
- import { U as UIOptions } from './shared/ui.D8Bg1HWt.mjs';
2
+ import { U as UIOptions } from './shared/ui.CGCKYv7g.mjs';
3
3
  import 'unplugin';
4
4
  import 'unplugin-auto-import/types';
5
5
  import 'unplugin-vue-components/types';
package/dist/vite.mjs CHANGED
@@ -3,13 +3,13 @@ import 'node:url';
3
3
  import 'defu';
4
4
  import 'pathe';
5
5
  import 'unplugin';
6
- import './shared/ui.DpkP12cX.mjs';
6
+ import './shared/ui.DcEKQd0n.mjs';
7
7
  import 'node:process';
8
8
  import '@nuxt/kit';
9
9
  import '@unocss/config';
10
10
  import 'knitwork';
11
11
  import 'scule';
12
- import './shared/ui.9kQouwss.mjs';
12
+ import './shared/ui.DYMXCXO6.mjs';
13
13
  import '../dist/runtime/utils/index.js';
14
14
  import '@byyuurin/ui-kit';
15
15
  import 'unplugin-auto-import';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@byyuurin/ui",
3
3
  "type": "module",
4
- "version": "0.3.0",
4
+ "version": "0.4.0",
5
5
  "description": "",
6
6
  "author": "Yuurin <byyuurin@gmail.com>",
7
7
  "license": "MIT",
@@ -136,7 +136,7 @@
136
136
  "@nuxtjs/color-mode": "^3.5.2",
137
137
  "@standard-schema/spec": "^1.1.0",
138
138
  "@tanstack/vue-table": "^8.21.3",
139
- "@tanstack/vue-virtual": "^3.13.13",
139
+ "@tanstack/vue-virtual": "^3.13.18",
140
140
  "@unhead/vue": "^2.1.1",
141
141
  "@unocss/nuxt": "^66.5.10",
142
142
  "@vue/shared": "^3.5.26",
@@ -158,20 +158,20 @@
158
158
  "reka-ui": "^2.7.0",
159
159
  "scule": "^1.3.0",
160
160
  "tinyglobby": "^0.2.15",
161
- "ufo": "^1.6.1",
161
+ "ufo": "^1.6.2",
162
162
  "unplugin": "^2.3.11",
163
163
  "unplugin-auto-import": "^20.3.0",
164
164
  "unplugin-vue-components": "^30.0.0",
165
- "vue-component-type-helpers": "^3.2.1"
165
+ "vue-component-type-helpers": "^3.2.2"
166
166
  },
167
167
  "devDependencies": {
168
- "@byyuurin/eslint-config": "^1.9.0",
169
- "@iconify-json/lucide": "^1.2.82",
168
+ "@byyuurin/eslint-config": "^1.9.1",
169
+ "@iconify-json/lucide": "^1.2.83",
170
170
  "@nuxt/eslint-config": "^1.12.1",
171
171
  "@nuxt/module-builder": "^1.0.2",
172
172
  "@nuxt/schema": "^4.2.2",
173
- "@nuxt/test-utils": "^3.21.0",
174
- "@types/node": "^22.19.3",
173
+ "@nuxt/test-utils": "^3.23.0",
174
+ "@types/node": "^22.19.5",
175
175
  "@unocss/core": "^66.5.10",
176
176
  "@unocss/preset-wind4": "^66.5.10",
177
177
  "@unocss/reset": "^66.5.10",
@@ -186,11 +186,11 @@
186
186
  "superstruct": "^2.0.2",
187
187
  "typescript": "^5.9.3",
188
188
  "unocss": "^66.5.10",
189
- "vite": "^7.3.0",
189
+ "vite": "^7.3.1",
190
190
  "vite-plugin-inspect": "^11.3.3",
191
191
  "vitest": "^3.2.4",
192
192
  "vue": "^3.5.24",
193
- "vue-tsc": "^3.2.1",
193
+ "vue-tsc": "^3.2.2",
194
194
  "zod": "^3.25.76"
195
195
  },
196
196
  "resolutions": {
package/vue-plugin.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type { Plugin } from 'vue'
2
-
3
- declare const plugin: Plugin
4
-
5
- export default plugin
1
+ import type { Plugin } from 'vue'
2
+
3
+ declare const plugin: Plugin
4
+
5
+ export default plugin