@auronui/vue 1.0.19 → 1.0.21

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 (43) hide show
  1. package/dist/cjs/index.cjs +286 -110
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/components/alert-dialog/AlertDialogAction.js.map +1 -1
  4. package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js +25 -5
  5. package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js.map +1 -1
  6. package/dist/components/alert-dialog/AlertDialogCancel.js.map +1 -1
  7. package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js +25 -5
  8. package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  9. package/dist/components/avatar/AvatarGroup.js.map +1 -1
  10. package/dist/components/avatar/AvatarGroup.vue_vue_type_script_setup_true_lang.js +1 -0
  11. package/dist/components/avatar/AvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  12. package/dist/components/button/Button.js.map +1 -1
  13. package/dist/components/button/Button.vue_vue_type_script_setup_true_lang.js +4 -1
  14. package/dist/components/button/Button.vue_vue_type_script_setup_true_lang.js.map +1 -1
  15. package/dist/components/chip/Chip.js.map +1 -1
  16. package/dist/components/chip/Chip.vue_vue_type_script_setup_true_lang.js +6 -1
  17. package/dist/components/chip/Chip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  18. package/dist/components/drawer/Drawer.js.map +1 -1
  19. package/dist/components/drawer/Drawer.vue_vue_type_script_lang.js +42 -4
  20. package/dist/components/drawer/Drawer.vue_vue_type_script_lang.js.map +1 -1
  21. package/dist/components/drawer/DrawerClose.js.map +1 -1
  22. package/dist/components/drawer/DrawerClose.vue_vue_type_script_setup_true_lang.js +15 -3
  23. package/dist/components/drawer/DrawerClose.vue_vue_type_script_setup_true_lang.js.map +1 -1
  24. package/dist/components/drawer/DrawerContent.js.map +1 -1
  25. package/dist/components/drawer/DrawerContent.vue_vue_type_script_setup_true_lang.js +62 -10
  26. package/dist/components/drawer/DrawerContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  27. package/dist/components/drawer/DrawerMain.js +7 -0
  28. package/dist/components/drawer/DrawerMain.js.map +1 -0
  29. package/dist/components/drawer/DrawerMain.vue_vue_type_script_setup_true_lang.js +32 -0
  30. package/dist/components/drawer/DrawerMain.vue_vue_type_script_setup_true_lang.js.map +1 -0
  31. package/dist/components/drawer/DrawerTrigger.js.map +1 -1
  32. package/dist/components/drawer/DrawerTrigger.vue_vue_type_script_setup_true_lang.js +16 -3
  33. package/dist/components/drawer/DrawerTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  34. package/dist/components/drawer/drawer.context.js.map +1 -1
  35. package/dist/components/toolbar/ToolbarToggleGroup.js.map +1 -1
  36. package/dist/components/toolbar/ToolbarToggleGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  37. package/dist/index.d.ts +656 -573
  38. package/dist/index.js +2 -1
  39. package/dist/packages/styles/src/components/drawer/drawer.styles.js +13 -5
  40. package/dist/packages/styles/src/components/drawer/drawer.styles.js.map +1 -1
  41. package/dist/utils/warnDeprecated.js +6 -0
  42. package/dist/utils/warnDeprecated.js.map +1 -0
  43. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"AlertDialogAction.js","names":[],"sources":["../../../src/components/alert-dialog/AlertDialogAction.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AlertDialogAction } from 'reka-ui'\nimport { buttonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\n/**\n * AlertDialogAction — confirm button for destructive flows.\n *\n * Wraps reka-ui AlertDialogAction which renders <button type=\"button\"> by default\n * (confirmed: AlertDialogAction uses DialogClose which sets type=\"button\" when as=\"button\").\n *\n * D-04: Do NOT override the button type — reka-ui's default `type=\"button\"` is intentional\n * and prevents accidental form submission / Enter-key propagation.\n */\nconst props = withDefaults(defineProps<{\n variant?: 'danger' | 'danger-soft' | 'primary' | 'secondary' | 'ghost' | 'outline' | 'success' | 'success-soft' | 'warning' | 'warning-soft' | 'tertiary'\n size?: 'sm' | 'md' | 'lg'\n class?: ClassValue\n /** Override default classes for any slot. Keys correspond to slot names (e.g., base). */\n classNames?: Partial<{\n base: ClassValue\n }>\n asChild?: boolean\n}>(), {\n variant: 'danger',\n size: 'md',\n asChild: false,\n})\n\nconst slotFns = buttonVariants({ variant: props.variant, size: props.size })\n</script>\n\n<template>\n <AlertDialogAction\n :as-child=\"props.asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <slot />\n </AlertDialogAction>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AlertDialogAction.js","names":[],"sources":["../../../src/components/alert-dialog/AlertDialogAction.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AlertDialogAction } from 'reka-ui'\nimport { buttonVariants, type ButtonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { warnDeprecatedVariant } from '../../utils/warnDeprecated'\nimport { computed } from 'vue'\n\n/**\n * AlertDialogAction — confirm button for destructive flows.\n *\n * Wraps reka-ui AlertDialogAction which renders <button type=\"button\"> by default\n * (confirmed: AlertDialogAction uses DialogClose which sets type=\"button\" when as=\"button\").\n *\n * D-04: Do NOT override the button type — reka-ui's default `type=\"button\"` is intentional\n * and prevents accidental form submission / Enter-key propagation.\n */\nconst props = withDefaults(defineProps<{\n /** variant — use 'bordered' for the outline style; 'outline' is @deprecated */\n variant?: 'danger' | 'danger-soft' | 'primary' | 'secondary' | 'ghost' | 'bordered' | 'outline' | 'success' | 'success-soft' | 'warning' | 'warning-soft' | 'tertiary'\n size?: 'sm' | 'md' | 'lg'\n class?: ClassValue\n /** Override default classes for any slot. Keys correspond to slot names (e.g., base). */\n classNames?: Partial<{\n base: ClassValue\n }>\n asChild?: boolean\n}>(), {\n variant: 'danger',\n size: 'md',\n asChild: false,\n})\n\n// Map legacy variant names to buttonVariants-compatible variants\nconst LEGACY_VARIANTS: Record<string, ButtonVariants['variant']> = {\n primary: 'primary',\n secondary: 'secondary',\n tertiary: 'secondary',\n danger: 'danger',\n 'danger-soft': 'danger-soft',\n success: 'success',\n 'success-soft': 'success-soft',\n warning: 'warning',\n 'warning-soft': 'warning-soft',\n ghost: 'ghost',\n bordered: 'bordered',\n}\n\nconst resolvedVariant = computed(() => {\n const v = props.variant\n if (!v) return v\n if (v === 'outline') {\n warnDeprecatedVariant('AlertDialogAction', 'outline', 'bordered')\n return 'bordered' as ButtonVariants['variant']\n }\n return (LEGACY_VARIANTS[v] ?? v) as ButtonVariants['variant']\n})\n\nconst slotFns = computed(() => buttonVariants({ variant: resolvedVariant.value, size: props.size }))\n</script>\n\n<template>\n <AlertDialogAction\n :as-child=\"props.asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <slot />\n </AlertDialogAction>\n</template>\n"],"mappings":""}
@@ -1,5 +1,6 @@
1
1
  import { composeClassName } from "../../utils/composeClassName.js";
2
- import { createBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref, withCtx } from "vue";
2
+ import "../../utils/warnDeprecated.js";
3
+ import { computed, createBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref, withCtx } from "vue";
3
4
  import { buttonVariants } from "@auronui/styles";
4
5
  import { AlertDialogAction } from "reka-ui";
5
6
  //#region src/components/alert-dialog/AlertDialogAction.vue?vue&type=script&setup=true&lang.ts
@@ -32,14 +33,33 @@ var AlertDialogAction_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
32
33
  },
33
34
  setup(__props) {
34
35
  const props = __props;
35
- const slotFns = buttonVariants({
36
- variant: props.variant,
37
- size: props.size
36
+ const LEGACY_VARIANTS = {
37
+ primary: "primary",
38
+ secondary: "secondary",
39
+ tertiary: "secondary",
40
+ danger: "danger",
41
+ "danger-soft": "danger-soft",
42
+ success: "success",
43
+ "success-soft": "success-soft",
44
+ warning: "warning",
45
+ "warning-soft": "warning-soft",
46
+ ghost: "ghost",
47
+ bordered: "bordered"
48
+ };
49
+ const resolvedVariant = computed(() => {
50
+ const v = props.variant;
51
+ if (!v) return v;
52
+ if (v === "outline") return "bordered";
53
+ return LEGACY_VARIANTS[v] ?? v;
38
54
  });
55
+ const slotFns = computed(() => buttonVariants({
56
+ variant: resolvedVariant.value,
57
+ size: props.size
58
+ }));
39
59
  return (_ctx, _cache) => {
40
60
  return openBlock(), createBlock(unref(AlertDialogAction), {
41
61
  "as-child": props.asChild,
42
- class: normalizeClass(unref(composeClassName)(unref(slotFns).base(), props.class, props.classNames?.base))
62
+ class: normalizeClass(unref(composeClassName)(slotFns.value.base(), props.class, props.classNames?.base))
43
63
  }, {
44
64
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
45
65
  _: 3
@@ -1 +1 @@
1
- {"version":3,"file":"AlertDialogAction.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/alert-dialog/AlertDialogAction.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AlertDialogAction } from 'reka-ui'\nimport { buttonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\n/**\n * AlertDialogAction — confirm button for destructive flows.\n *\n * Wraps reka-ui AlertDialogAction which renders <button type=\"button\"> by default\n * (confirmed: AlertDialogAction uses DialogClose which sets type=\"button\" when as=\"button\").\n *\n * D-04: Do NOT override the button type — reka-ui's default `type=\"button\"` is intentional\n * and prevents accidental form submission / Enter-key propagation.\n */\nconst props = withDefaults(defineProps<{\n variant?: 'danger' | 'danger-soft' | 'primary' | 'secondary' | 'ghost' | 'outline' | 'success' | 'success-soft' | 'warning' | 'warning-soft' | 'tertiary'\n size?: 'sm' | 'md' | 'lg'\n class?: ClassValue\n /** Override default classes for any slot. Keys correspond to slot names (e.g., base). */\n classNames?: Partial<{\n base: ClassValue\n }>\n asChild?: boolean\n}>(), {\n variant: 'danger',\n size: 'md',\n asChild: false,\n})\n\nconst slotFns = buttonVariants({ variant: props.variant, size: props.size })\n</script>\n\n<template>\n <AlertDialogAction\n :as-child=\"props.asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <slot />\n </AlertDialogAction>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcA,MAAM,QAAQ;EAed,MAAM,UAAU,eAAe;GAAE,SAAS,MAAM;GAAS,MAAM,MAAM;GAAM,CAAA;;uBAIzE,YAKoB,MAAA,kBAAA,EAAA;IAJjB,YAAU,MAAM;IAChB,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,QAAO,CAAC,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;;2BAEpE,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"AlertDialogAction.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/alert-dialog/AlertDialogAction.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AlertDialogAction } from 'reka-ui'\nimport { buttonVariants, type ButtonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { warnDeprecatedVariant } from '../../utils/warnDeprecated'\nimport { computed } from 'vue'\n\n/**\n * AlertDialogAction — confirm button for destructive flows.\n *\n * Wraps reka-ui AlertDialogAction which renders <button type=\"button\"> by default\n * (confirmed: AlertDialogAction uses DialogClose which sets type=\"button\" when as=\"button\").\n *\n * D-04: Do NOT override the button type — reka-ui's default `type=\"button\"` is intentional\n * and prevents accidental form submission / Enter-key propagation.\n */\nconst props = withDefaults(defineProps<{\n /** variant — use 'bordered' for the outline style; 'outline' is @deprecated */\n variant?: 'danger' | 'danger-soft' | 'primary' | 'secondary' | 'ghost' | 'bordered' | 'outline' | 'success' | 'success-soft' | 'warning' | 'warning-soft' | 'tertiary'\n size?: 'sm' | 'md' | 'lg'\n class?: ClassValue\n /** Override default classes for any slot. Keys correspond to slot names (e.g., base). */\n classNames?: Partial<{\n base: ClassValue\n }>\n asChild?: boolean\n}>(), {\n variant: 'danger',\n size: 'md',\n asChild: false,\n})\n\n// Map legacy variant names to buttonVariants-compatible variants\nconst LEGACY_VARIANTS: Record<string, ButtonVariants['variant']> = {\n primary: 'primary',\n secondary: 'secondary',\n tertiary: 'secondary',\n danger: 'danger',\n 'danger-soft': 'danger-soft',\n success: 'success',\n 'success-soft': 'success-soft',\n warning: 'warning',\n 'warning-soft': 'warning-soft',\n ghost: 'ghost',\n bordered: 'bordered',\n}\n\nconst resolvedVariant = computed(() => {\n const v = props.variant\n if (!v) return v\n if (v === 'outline') {\n warnDeprecatedVariant('AlertDialogAction', 'outline', 'bordered')\n return 'bordered' as ButtonVariants['variant']\n }\n return (LEGACY_VARIANTS[v] ?? v) as ButtonVariants['variant']\n})\n\nconst slotFns = computed(() => buttonVariants({ variant: resolvedVariant.value, size: props.size }))\n</script>\n\n<template>\n <AlertDialogAction\n :as-child=\"props.asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <slot />\n </AlertDialogAction>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBA,MAAM,QAAQ;EAiBd,MAAM,kBAA6D;GACjE,SAAS;GACT,WAAW;GACX,UAAU;GACV,QAAQ;GACR,eAAe;GACf,SAAS;GACT,gBAAgB;GAChB,SAAS;GACT,gBAAgB;GAChB,OAAO;GACP,UAAU;GACZ;EAEA,MAAM,kBAAkB,eAAe;GACrC,MAAM,IAAI,MAAM;AAChB,OAAI,CAAC,EAAG,QAAO;AACf,OAAI,MAAM,UAER,QAAO;AAET,UAAQ,gBAAgB,MAAM;IAC/B;EAED,MAAM,UAAU,eAAe,eAAe;GAAE,SAAS,gBAAgB;GAAO,MAAM,MAAM;GAAM,CAAC,CAAA;;uBAIjG,YAKoB,MAAA,kBAAA,EAAA;IAJjB,YAAU,MAAM;IAChB,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;;2BAEpE,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"AlertDialogCancel.js","names":[],"sources":["../../../src/components/alert-dialog/AlertDialogCancel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AlertDialogCancel } from 'reka-ui'\nimport { buttonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\n/**\n * AlertDialogCancel — dismiss button for alert dialogs.\n * Wraps reka-ui AlertDialogCancel which renders <button type=\"button\"> by default.\n */\nconst props = withDefaults(defineProps<{\n variant?: 'danger' | 'danger-soft' | 'primary' | 'secondary' | 'ghost' | 'outline' | 'success' | 'success-soft' | 'warning' | 'warning-soft' | 'tertiary'\n size?: 'sm' | 'md' | 'lg'\n class?: ClassValue\n /** Per-slot class name overrides */\n classNames?: Partial<{ base: ClassValue }>\n asChild?: boolean\n}>(), {\n variant: 'secondary',\n size: 'md',\n asChild: false,\n})\n\nconst slotFns = buttonVariants({ variant: props.variant, size: props.size })\n</script>\n\n<template>\n <AlertDialogCancel\n :as-child=\"props.asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <slot />\n </AlertDialogCancel>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AlertDialogCancel.js","names":[],"sources":["../../../src/components/alert-dialog/AlertDialogCancel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AlertDialogCancel } from 'reka-ui'\nimport { buttonVariants, type ButtonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { warnDeprecatedVariant } from '../../utils/warnDeprecated'\nimport { computed } from 'vue'\n\n/**\n * AlertDialogCancel — dismiss button for alert dialogs.\n * Wraps reka-ui AlertDialogCancel which renders <button type=\"button\"> by default.\n */\nconst props = withDefaults(defineProps<{\n /** variant — use 'bordered' for the outline style; 'outline' is @deprecated */\n variant?: 'danger' | 'danger-soft' | 'primary' | 'secondary' | 'ghost' | 'bordered' | 'outline' | 'success' | 'success-soft' | 'warning' | 'warning-soft' | 'tertiary'\n size?: 'sm' | 'md' | 'lg'\n class?: ClassValue\n /** Per-slot class name overrides */\n classNames?: Partial<{ base: ClassValue }>\n asChild?: boolean\n}>(), {\n variant: 'secondary',\n size: 'md',\n asChild: false,\n})\n\n// Map legacy variant names to buttonVariants-compatible variants\nconst LEGACY_VARIANTS: Record<string, ButtonVariants['variant']> = {\n primary: 'primary',\n secondary: 'secondary',\n tertiary: 'secondary',\n danger: 'danger',\n 'danger-soft': 'danger-soft',\n success: 'success',\n 'success-soft': 'success-soft',\n warning: 'warning',\n 'warning-soft': 'warning-soft',\n ghost: 'ghost',\n bordered: 'bordered',\n}\n\nconst resolvedVariant = computed(() => {\n const v = props.variant\n if (!v) return v\n if (v === 'outline') {\n warnDeprecatedVariant('AlertDialogCancel', 'outline', 'bordered')\n return 'bordered' as ButtonVariants['variant']\n }\n return (LEGACY_VARIANTS[v] ?? v) as ButtonVariants['variant']\n})\n\nconst slotFns = computed(() => buttonVariants({ variant: resolvedVariant.value, size: props.size }))\n</script>\n\n<template>\n <AlertDialogCancel\n :as-child=\"props.asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <slot />\n </AlertDialogCancel>\n</template>\n"],"mappings":""}
@@ -1,5 +1,6 @@
1
1
  import { composeClassName } from "../../utils/composeClassName.js";
2
- import { createBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref, withCtx } from "vue";
2
+ import "../../utils/warnDeprecated.js";
3
+ import { computed, createBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref, withCtx } from "vue";
3
4
  import { buttonVariants } from "@auronui/styles";
4
5
  import { AlertDialogCancel } from "reka-ui";
5
6
  //#region src/components/alert-dialog/AlertDialogCancel.vue?vue&type=script&setup=true&lang.ts
@@ -27,14 +28,33 @@ var AlertDialogCancel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
27
28
  },
28
29
  setup(__props) {
29
30
  const props = __props;
30
- const slotFns = buttonVariants({
31
- variant: props.variant,
32
- size: props.size
31
+ const LEGACY_VARIANTS = {
32
+ primary: "primary",
33
+ secondary: "secondary",
34
+ tertiary: "secondary",
35
+ danger: "danger",
36
+ "danger-soft": "danger-soft",
37
+ success: "success",
38
+ "success-soft": "success-soft",
39
+ warning: "warning",
40
+ "warning-soft": "warning-soft",
41
+ ghost: "ghost",
42
+ bordered: "bordered"
43
+ };
44
+ const resolvedVariant = computed(() => {
45
+ const v = props.variant;
46
+ if (!v) return v;
47
+ if (v === "outline") return "bordered";
48
+ return LEGACY_VARIANTS[v] ?? v;
33
49
  });
50
+ const slotFns = computed(() => buttonVariants({
51
+ variant: resolvedVariant.value,
52
+ size: props.size
53
+ }));
34
54
  return (_ctx, _cache) => {
35
55
  return openBlock(), createBlock(unref(AlertDialogCancel), {
36
56
  "as-child": props.asChild,
37
- class: normalizeClass(unref(composeClassName)(unref(slotFns).base(), props.class, props.classNames?.base))
57
+ class: normalizeClass(unref(composeClassName)(slotFns.value.base(), props.class, props.classNames?.base))
38
58
  }, {
39
59
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
40
60
  _: 3
@@ -1 +1 @@
1
- {"version":3,"file":"AlertDialogCancel.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/alert-dialog/AlertDialogCancel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AlertDialogCancel } from 'reka-ui'\nimport { buttonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\n/**\n * AlertDialogCancel — dismiss button for alert dialogs.\n * Wraps reka-ui AlertDialogCancel which renders <button type=\"button\"> by default.\n */\nconst props = withDefaults(defineProps<{\n variant?: 'danger' | 'danger-soft' | 'primary' | 'secondary' | 'ghost' | 'outline' | 'success' | 'success-soft' | 'warning' | 'warning-soft' | 'tertiary'\n size?: 'sm' | 'md' | 'lg'\n class?: ClassValue\n /** Per-slot class name overrides */\n classNames?: Partial<{ base: ClassValue }>\n asChild?: boolean\n}>(), {\n variant: 'secondary',\n size: 'md',\n asChild: false,\n})\n\nconst slotFns = buttonVariants({ variant: props.variant, size: props.size })\n</script>\n\n<template>\n <AlertDialogCancel\n :as-child=\"props.asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <slot />\n </AlertDialogCancel>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;EASA,MAAM,QAAQ;EAad,MAAM,UAAU,eAAe;GAAE,SAAS,MAAM;GAAS,MAAM,MAAM;GAAM,CAAA;;uBAIzE,YAKoB,MAAA,kBAAA,EAAA;IAJjB,YAAU,MAAM;IAChB,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,QAAO,CAAC,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;;2BAEpE,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"AlertDialogCancel.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/alert-dialog/AlertDialogCancel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AlertDialogCancel } from 'reka-ui'\nimport { buttonVariants, type ButtonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { warnDeprecatedVariant } from '../../utils/warnDeprecated'\nimport { computed } from 'vue'\n\n/**\n * AlertDialogCancel — dismiss button for alert dialogs.\n * Wraps reka-ui AlertDialogCancel which renders <button type=\"button\"> by default.\n */\nconst props = withDefaults(defineProps<{\n /** variant — use 'bordered' for the outline style; 'outline' is @deprecated */\n variant?: 'danger' | 'danger-soft' | 'primary' | 'secondary' | 'ghost' | 'bordered' | 'outline' | 'success' | 'success-soft' | 'warning' | 'warning-soft' | 'tertiary'\n size?: 'sm' | 'md' | 'lg'\n class?: ClassValue\n /** Per-slot class name overrides */\n classNames?: Partial<{ base: ClassValue }>\n asChild?: boolean\n}>(), {\n variant: 'secondary',\n size: 'md',\n asChild: false,\n})\n\n// Map legacy variant names to buttonVariants-compatible variants\nconst LEGACY_VARIANTS: Record<string, ButtonVariants['variant']> = {\n primary: 'primary',\n secondary: 'secondary',\n tertiary: 'secondary',\n danger: 'danger',\n 'danger-soft': 'danger-soft',\n success: 'success',\n 'success-soft': 'success-soft',\n warning: 'warning',\n 'warning-soft': 'warning-soft',\n ghost: 'ghost',\n bordered: 'bordered',\n}\n\nconst resolvedVariant = computed(() => {\n const v = props.variant\n if (!v) return v\n if (v === 'outline') {\n warnDeprecatedVariant('AlertDialogCancel', 'outline', 'bordered')\n return 'bordered' as ButtonVariants['variant']\n }\n return (LEGACY_VARIANTS[v] ?? v) as ButtonVariants['variant']\n})\n\nconst slotFns = computed(() => buttonVariants({ variant: resolvedVariant.value, size: props.size }))\n</script>\n\n<template>\n <AlertDialogCancel\n :as-child=\"props.asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <slot />\n </AlertDialogCancel>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWA,MAAM,QAAQ;EAed,MAAM,kBAA6D;GACjE,SAAS;GACT,WAAW;GACX,UAAU;GACV,QAAQ;GACR,eAAe;GACf,SAAS;GACT,gBAAgB;GAChB,SAAS;GACT,gBAAgB;GAChB,OAAO;GACP,UAAU;GACZ;EAEA,MAAM,kBAAkB,eAAe;GACrC,MAAM,IAAI,MAAM;AAChB,OAAI,CAAC,EAAG,QAAO;AACf,OAAI,MAAM,UAER,QAAO;AAET,UAAQ,gBAAgB,MAAM;IAC/B;EAED,MAAM,UAAU,eAAe,eAAe;GAAE,SAAS,gBAAgB;GAAO,MAAM,MAAM;GAAM,CAAC,CAAA;;uBAIjG,YAKoB,MAAA,kBAAA,EAAA;IAJjB,YAAU,MAAM;IAChB,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;;2BAEpE,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarGroup.js","names":[],"sources":["../../../src/components/avatar/AvatarGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, toRef, ref, h, Fragment, type VNode } from 'vue'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useAvatarGroupProvide } from './avatar-group.context'\nimport Avatar from './Avatar.vue'\n\n\ntype AvatarShorthandItem = {\n src?: string\n alt?: string\n name?: string\n color?: string\n variant?: string\n isBordered?: boolean\n isDisabled?: boolean\n showFallback?: boolean\n}\n\nconst props = withDefaults(defineProps<{\n size?: 'sm' | 'md' | 'lg'\n isBordered?: boolean\n isDisabled?: boolean\n isGrid?: boolean\n max?: number\n total?: number\n renderCount?: (count: number) => string\n class?: string\n /** Shorthand API: render avatars from an array instead of the compound slot API */\n avatars?: AvatarShorthandItem[]\n}>(), {\n size: 'md',\n\n isBordered: false,\n isDisabled: false,\n isGrid: false,\n})\n\nconst slots = defineSlots<{\n default?(): VNode[];\n}>()\n\n// Provide context using toRef() for reactivity (canonical pattern from ButtonGroup)\nuseAvatarGroupProvide({\n size: toRef(props, 'size'),\n isBordered: toRef(props, 'isBordered'),\n isDisabled: toRef(props, 'isDisabled'),\n isGrid: toRef(props, 'isGrid'),\n isInGroup: ref(true),\n})\n\nconst containerClass = computed(() =>\n composeClassName('flex items-center flex-row', props.class)\n)\n\nconst visibleAvatars = computed(() => {\n if (!props.avatars) return []\n return props.max !== undefined ? props.avatars.slice(0, props.max) : props.avatars\n})\nconst avatarOverflowCount = computed(() => {\n if (!props.avatars || props.max === undefined) return 0\n const total = props.total ?? props.avatars.length\n return total - props.max\n})\nconst avatarOverflowLabel = computed(() => {\n if (avatarOverflowCount.value <= 0) return ''\n return props.renderCount ? props.renderCount(avatarOverflowCount.value) : `+${avatarOverflowCount.value}`\n})\n\n// Flatten slot vnodes (handles Fragments from v-for etc.)\nfunction flattenVNodes(vnodes: VNode[]): VNode[] {\n const result: VNode[] = []\n for (const vnode of vnodes) {\n if (vnode.type === Fragment && Array.isArray(vnode.children)) {\n result.push(...flattenVNodes(vnode.children as VNode[]))\n } else {\n result.push(vnode)\n }\n }\n return result\n}\n\n// Determine which vnodes to render when max is set\nfunction getSlicedNodes(): VNode[] {\n const defaultSlot = slots.default?.()\n if (!defaultSlot) return []\n\n const allNodes = flattenVNodes(defaultSlot)\n\n if (props.max === undefined) {\n return allNodes\n }\n\n const visibleNodes = allNodes.slice(0, props.max)\n const totalCount = props.total ?? allNodes.length\n const overflowCount = totalCount - props.max\n\n if (overflowCount <= 0) {\n return visibleNodes\n }\n\n const counterLabel = props.renderCount\n ? props.renderCount(overflowCount)\n : `+${overflowCount}`\n\n // Render counter avatar with a fallback slot so the full label string is shown\n const counterNode = h(Avatar, {}, {\n fallback: () => h('span', { class: 'avatar__name text-xs font-medium leading-none' }, counterLabel),\n })\n\n return [...visibleNodes, counterNode]\n}\n</script>\n\n<template>\n <div\n role=\"group\"\n :class=\"containerClass\"\n >\n <template v-if=\"props.avatars\">\n <Avatar\n v-for=\"(avatar, idx) in visibleAvatars\"\n :key=\"idx\"\n v-bind=\"avatar\"\n />\n <Avatar v-if=\"avatarOverflowCount > 0\">\n <template #fallback>\n <span class=\"avatar__name text-xs font-medium leading-none\">{{ avatarOverflowLabel }}</span>\n </template>\n </Avatar>\n </template>\n <template v-else-if=\"props.max !== undefined\">\n <!-- Use render function output for sliced vnodes -->\n <template\n v-for=\"(node, _i) in getSlicedNodes()\"\n :key=\"_i\"\n >\n <component :is=\"node\" />\n </template>\n </template>\n <template v-else>\n <slot />\n </template>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AvatarGroup.js","names":[],"sources":["../../../src/components/avatar/AvatarGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, toRef, ref, h, Fragment, type VNode } from 'vue'\nimport { type AvatarVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useAvatarGroupProvide } from './avatar-group.context'\nimport Avatar from './Avatar.vue'\n\ntype AvatarShorthandItem = {\n src?: string\n alt?: string\n name?: string\n color?: AvatarVariants['color']\n variant?: AvatarVariants['variant']\n isBordered?: boolean\n isDisabled?: boolean\n showFallback?: boolean\n}\n\nconst props = withDefaults(defineProps<{\n size?: 'sm' | 'md' | 'lg'\n isBordered?: boolean\n isDisabled?: boolean\n isGrid?: boolean\n max?: number\n total?: number\n renderCount?: (count: number) => string\n class?: string\n /** Shorthand API: render avatars from an array instead of the compound slot API */\n avatars?: AvatarShorthandItem[]\n}>(), {\n size: 'md',\n\n isBordered: false,\n isDisabled: false,\n isGrid: false,\n})\n\nconst slots = defineSlots<{\n default?(): VNode[];\n}>()\n\n// Provide context using toRef() for reactivity (canonical pattern from ButtonGroup)\nuseAvatarGroupProvide({\n size: toRef(props, 'size'),\n isBordered: toRef(props, 'isBordered'),\n isDisabled: toRef(props, 'isDisabled'),\n isGrid: toRef(props, 'isGrid'),\n isInGroup: ref(true),\n})\n\nconst containerClass = computed(() =>\n composeClassName('flex items-center flex-row', props.class)\n)\n\nconst visibleAvatars = computed(() => {\n if (!props.avatars) return []\n return props.max !== undefined ? props.avatars.slice(0, props.max) : props.avatars\n})\nconst avatarOverflowCount = computed(() => {\n if (!props.avatars || props.max === undefined) return 0\n const total = props.total ?? props.avatars.length\n return total - props.max\n})\nconst avatarOverflowLabel = computed(() => {\n if (avatarOverflowCount.value <= 0) return ''\n return props.renderCount ? props.renderCount(avatarOverflowCount.value) : `+${avatarOverflowCount.value}`\n})\n\n// Flatten slot vnodes (handles Fragments from v-for etc.)\nfunction flattenVNodes(vnodes: VNode[]): VNode[] {\n const result: VNode[] = []\n for (const vnode of vnodes) {\n if (vnode.type === Fragment && Array.isArray(vnode.children)) {\n result.push(...flattenVNodes(vnode.children as VNode[]))\n } else {\n result.push(vnode)\n }\n }\n return result\n}\n\n// Determine which vnodes to render when max is set\nfunction getSlicedNodes(): VNode[] {\n const defaultSlot = slots.default?.()\n if (!defaultSlot) return []\n\n const allNodes = flattenVNodes(defaultSlot)\n\n if (props.max === undefined) {\n return allNodes\n }\n\n const visibleNodes = allNodes.slice(0, props.max)\n const totalCount = props.total ?? allNodes.length\n const overflowCount = totalCount - props.max\n\n if (overflowCount <= 0) {\n return visibleNodes\n }\n\n const counterLabel = props.renderCount\n ? props.renderCount(overflowCount)\n : `+${overflowCount}`\n\n // Render counter avatar with a fallback slot so the full label string is shown\n const counterNode = h(Avatar, {}, {\n fallback: () => h('span', { class: 'avatar__name text-xs font-medium leading-none' }, counterLabel),\n })\n\n return [...visibleNodes, counterNode]\n}\n</script>\n\n<template>\n <div\n role=\"group\"\n :class=\"containerClass\"\n >\n <template v-if=\"props.avatars\">\n <Avatar\n v-for=\"(avatar, idx) in visibleAvatars\"\n :key=\"idx\"\n v-bind=\"avatar\"\n />\n <Avatar v-if=\"avatarOverflowCount > 0\">\n <template #fallback>\n <span class=\"avatar__name text-xs font-medium leading-none\">{{ avatarOverflowLabel }}</span>\n </template>\n </Avatar>\n </template>\n <template v-else-if=\"props.max !== undefined\">\n <!-- Use render function output for sliced vnodes -->\n <template\n v-for=\"(node, _i) in getSlicedNodes()\"\n :key=\"_i\"\n >\n <component :is=\"node\" />\n </template>\n </template>\n <template v-else>\n <slot />\n </template>\n </div>\n</template>\n"],"mappings":""}
@@ -2,6 +2,7 @@ import { composeClassName } from "../../utils/composeClassName.js";
2
2
  import { useAvatarGroupProvide } from "./avatar-group.context.js";
3
3
  import Avatar_default from "./Avatar.js";
4
4
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, h, mergeProps, normalizeClass, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, toRef, useSlots, withCtx } from "vue";
5
+ import "@auronui/styles";
5
6
  //#region src/components/avatar/AvatarGroup.vue?vue&type=script&setup=true&lang.ts
6
7
  var _hoisted_1 = { class: "avatar__name text-xs font-medium leading-none" };
7
8
  var AvatarGroup_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarGroup.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/avatar/AvatarGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, toRef, ref, h, Fragment, type VNode } from 'vue'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useAvatarGroupProvide } from './avatar-group.context'\nimport Avatar from './Avatar.vue'\n\n\ntype AvatarShorthandItem = {\n src?: string\n alt?: string\n name?: string\n color?: string\n variant?: string\n isBordered?: boolean\n isDisabled?: boolean\n showFallback?: boolean\n}\n\nconst props = withDefaults(defineProps<{\n size?: 'sm' | 'md' | 'lg'\n isBordered?: boolean\n isDisabled?: boolean\n isGrid?: boolean\n max?: number\n total?: number\n renderCount?: (count: number) => string\n class?: string\n /** Shorthand API: render avatars from an array instead of the compound slot API */\n avatars?: AvatarShorthandItem[]\n}>(), {\n size: 'md',\n\n isBordered: false,\n isDisabled: false,\n isGrid: false,\n})\n\nconst slots = defineSlots<{\n default?(): VNode[];\n}>()\n\n// Provide context using toRef() for reactivity (canonical pattern from ButtonGroup)\nuseAvatarGroupProvide({\n size: toRef(props, 'size'),\n isBordered: toRef(props, 'isBordered'),\n isDisabled: toRef(props, 'isDisabled'),\n isGrid: toRef(props, 'isGrid'),\n isInGroup: ref(true),\n})\n\nconst containerClass = computed(() =>\n composeClassName('flex items-center flex-row', props.class)\n)\n\nconst visibleAvatars = computed(() => {\n if (!props.avatars) return []\n return props.max !== undefined ? props.avatars.slice(0, props.max) : props.avatars\n})\nconst avatarOverflowCount = computed(() => {\n if (!props.avatars || props.max === undefined) return 0\n const total = props.total ?? props.avatars.length\n return total - props.max\n})\nconst avatarOverflowLabel = computed(() => {\n if (avatarOverflowCount.value <= 0) return ''\n return props.renderCount ? props.renderCount(avatarOverflowCount.value) : `+${avatarOverflowCount.value}`\n})\n\n// Flatten slot vnodes (handles Fragments from v-for etc.)\nfunction flattenVNodes(vnodes: VNode[]): VNode[] {\n const result: VNode[] = []\n for (const vnode of vnodes) {\n if (vnode.type === Fragment && Array.isArray(vnode.children)) {\n result.push(...flattenVNodes(vnode.children as VNode[]))\n } else {\n result.push(vnode)\n }\n }\n return result\n}\n\n// Determine which vnodes to render when max is set\nfunction getSlicedNodes(): VNode[] {\n const defaultSlot = slots.default?.()\n if (!defaultSlot) return []\n\n const allNodes = flattenVNodes(defaultSlot)\n\n if (props.max === undefined) {\n return allNodes\n }\n\n const visibleNodes = allNodes.slice(0, props.max)\n const totalCount = props.total ?? allNodes.length\n const overflowCount = totalCount - props.max\n\n if (overflowCount <= 0) {\n return visibleNodes\n }\n\n const counterLabel = props.renderCount\n ? props.renderCount(overflowCount)\n : `+${overflowCount}`\n\n // Render counter avatar with a fallback slot so the full label string is shown\n const counterNode = h(Avatar, {}, {\n fallback: () => h('span', { class: 'avatar__name text-xs font-medium leading-none' }, counterLabel),\n })\n\n return [...visibleNodes, counterNode]\n}\n</script>\n\n<template>\n <div\n role=\"group\"\n :class=\"containerClass\"\n >\n <template v-if=\"props.avatars\">\n <Avatar\n v-for=\"(avatar, idx) in visibleAvatars\"\n :key=\"idx\"\n v-bind=\"avatar\"\n />\n <Avatar v-if=\"avatarOverflowCount > 0\">\n <template #fallback>\n <span class=\"avatar__name text-xs font-medium leading-none\">{{ avatarOverflowLabel }}</span>\n </template>\n </Avatar>\n </template>\n <template v-else-if=\"props.max !== undefined\">\n <!-- Use render function output for sliced vnodes -->\n <template\n v-for=\"(node, _i) in getSlicedNodes()\"\n :key=\"_i\"\n >\n <component :is=\"node\" />\n </template>\n </template>\n <template v-else>\n <slot />\n </template>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBA,MAAM,QAAQ;EAmBd,MAAM,QAAQ,UAAA;AAKd,wBAAsB;GACpB,MAAM,MAAM,OAAO,OAAO;GAC1B,YAAY,MAAM,OAAO,aAAa;GACtC,YAAY,MAAM,OAAO,aAAa;GACtC,QAAQ,MAAM,OAAO,SAAS;GAC9B,WAAW,IAAI,KAAK;GACrB,CAAA;EAED,MAAM,iBAAiB,eACrB,iBAAiB,8BAA8B,MAAM,MAAK,CAC5D;EAEA,MAAM,iBAAiB,eAAe;AACpC,OAAI,CAAC,MAAM,QAAS,QAAO,EAAC;AAC5B,UAAO,MAAM,QAAQ,KAAA,IAAY,MAAM,QAAQ,MAAM,GAAG,MAAM,IAAI,GAAG,MAAM;IAC5E;EACD,MAAM,sBAAsB,eAAe;AACzC,OAAI,CAAC,MAAM,WAAW,MAAM,QAAQ,KAAA,EAAW,QAAO;AAEtD,WADc,MAAM,SAAS,MAAM,QAAQ,UAC5B,MAAM;IACtB;EACD,MAAM,sBAAsB,eAAe;AACzC,OAAI,oBAAoB,SAAS,EAAG,QAAO;AAC3C,UAAO,MAAM,cAAc,MAAM,YAAY,oBAAoB,MAAM,GAAG,IAAI,oBAAoB;IACnG;EAGD,SAAS,cAAc,QAA0B;GAC/C,MAAM,SAAkB,EAAC;AACzB,QAAK,MAAM,SAAS,OAClB,KAAI,MAAM,SAAS,YAAY,MAAM,QAAQ,MAAM,SAAS,CAC1D,QAAO,KAAK,GAAG,cAAc,MAAM,SAAoB,CAAA;OAEvD,QAAO,KAAK,MAAK;AAGrB,UAAO;;EAIT,SAAS,iBAA0B;GACjC,MAAM,cAAc,MAAM,WAAU;AACpC,OAAI,CAAC,YAAa,QAAO,EAAC;GAE1B,MAAM,WAAW,cAAc,YAAW;AAE1C,OAAI,MAAM,QAAQ,KAAA,EAChB,QAAO;GAGT,MAAM,eAAe,SAAS,MAAM,GAAG,MAAM,IAAG;GAEhD,MAAM,iBADa,MAAM,SAAS,SAAS,UACR,MAAM;AAEzC,OAAI,iBAAiB,EACnB,QAAO;GAGT,MAAM,eAAe,MAAM,cACvB,MAAM,YAAY,cAAa,GAC/B,IAAI;GAGR,MAAM,cAAc,EAAE,gBAAQ,EAAE,EAAE,EAChC,gBAAgB,EAAE,QAAQ,EAAE,OAAO,iDAAiD,EAAE,aAAa,EACpG,CAAA;AAED,UAAO,CAAC,GAAG,cAAc,YAAW;;;uBAKpC,mBA4BM,OAAA;IA3BJ,MAAK;IACJ,OAAK,eAAE,eAAA,MAAc;OAEN,MAAM,WAAA,WAAA,EAAtB,mBAWW,UAAA,EAAA,KAAA,GAAA,EAAA,EAAA,UAAA,KAAA,EAVT,mBAIE,UAAA,MAAA,WAHwB,eAAA,QAAhB,QAAQ,QAAG;wBADrB,YAIE,gBAJF,WAIE,EAFC,KAAK,KAAG,EAAA,EAAA,SAAA,MAAA,EACD,OAAM,EAAA,MAAA,GAAA;cAEF,oBAAA,QAAmB,KAAA,WAAA,EAAjC,YAIS,gBAAA,EAAA,KAAA,GAAA,EAAA;IAHI,UAAQ,cAC2E,CAA5F,mBAA4F,QAA5F,YAA4F,gBAA7B,oBAAA,MAAmB,EAAA,EAAA,CAAA,CAAA;;+CAInE,MAAM,QAAQ,KAAA,KAAA,UAAA,KAAA,EAEjC,mBAKW,UAAA,EAAA,KAAA,GAAA,EAAA,WAJY,gBAAc,GAA3B,MAAM,OAAE;wBAGhB,YAAwB,wBAAR,KAAI,EAAA,EAAA,KAFd,IAAE,CAAA;eAMV,WAAQ,KAAA,QAAA,WAAA,EAAA,KAAA,GAAA,CAAA,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"AvatarGroup.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/avatar/AvatarGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, toRef, ref, h, Fragment, type VNode } from 'vue'\nimport { type AvatarVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useAvatarGroupProvide } from './avatar-group.context'\nimport Avatar from './Avatar.vue'\n\ntype AvatarShorthandItem = {\n src?: string\n alt?: string\n name?: string\n color?: AvatarVariants['color']\n variant?: AvatarVariants['variant']\n isBordered?: boolean\n isDisabled?: boolean\n showFallback?: boolean\n}\n\nconst props = withDefaults(defineProps<{\n size?: 'sm' | 'md' | 'lg'\n isBordered?: boolean\n isDisabled?: boolean\n isGrid?: boolean\n max?: number\n total?: number\n renderCount?: (count: number) => string\n class?: string\n /** Shorthand API: render avatars from an array instead of the compound slot API */\n avatars?: AvatarShorthandItem[]\n}>(), {\n size: 'md',\n\n isBordered: false,\n isDisabled: false,\n isGrid: false,\n})\n\nconst slots = defineSlots<{\n default?(): VNode[];\n}>()\n\n// Provide context using toRef() for reactivity (canonical pattern from ButtonGroup)\nuseAvatarGroupProvide({\n size: toRef(props, 'size'),\n isBordered: toRef(props, 'isBordered'),\n isDisabled: toRef(props, 'isDisabled'),\n isGrid: toRef(props, 'isGrid'),\n isInGroup: ref(true),\n})\n\nconst containerClass = computed(() =>\n composeClassName('flex items-center flex-row', props.class)\n)\n\nconst visibleAvatars = computed(() => {\n if (!props.avatars) return []\n return props.max !== undefined ? props.avatars.slice(0, props.max) : props.avatars\n})\nconst avatarOverflowCount = computed(() => {\n if (!props.avatars || props.max === undefined) return 0\n const total = props.total ?? props.avatars.length\n return total - props.max\n})\nconst avatarOverflowLabel = computed(() => {\n if (avatarOverflowCount.value <= 0) return ''\n return props.renderCount ? props.renderCount(avatarOverflowCount.value) : `+${avatarOverflowCount.value}`\n})\n\n// Flatten slot vnodes (handles Fragments from v-for etc.)\nfunction flattenVNodes(vnodes: VNode[]): VNode[] {\n const result: VNode[] = []\n for (const vnode of vnodes) {\n if (vnode.type === Fragment && Array.isArray(vnode.children)) {\n result.push(...flattenVNodes(vnode.children as VNode[]))\n } else {\n result.push(vnode)\n }\n }\n return result\n}\n\n// Determine which vnodes to render when max is set\nfunction getSlicedNodes(): VNode[] {\n const defaultSlot = slots.default?.()\n if (!defaultSlot) return []\n\n const allNodes = flattenVNodes(defaultSlot)\n\n if (props.max === undefined) {\n return allNodes\n }\n\n const visibleNodes = allNodes.slice(0, props.max)\n const totalCount = props.total ?? allNodes.length\n const overflowCount = totalCount - props.max\n\n if (overflowCount <= 0) {\n return visibleNodes\n }\n\n const counterLabel = props.renderCount\n ? props.renderCount(overflowCount)\n : `+${overflowCount}`\n\n // Render counter avatar with a fallback slot so the full label string is shown\n const counterNode = h(Avatar, {}, {\n fallback: () => h('span', { class: 'avatar__name text-xs font-medium leading-none' }, counterLabel),\n })\n\n return [...visibleNodes, counterNode]\n}\n</script>\n\n<template>\n <div\n role=\"group\"\n :class=\"containerClass\"\n >\n <template v-if=\"props.avatars\">\n <Avatar\n v-for=\"(avatar, idx) in visibleAvatars\"\n :key=\"idx\"\n v-bind=\"avatar\"\n />\n <Avatar v-if=\"avatarOverflowCount > 0\">\n <template #fallback>\n <span class=\"avatar__name text-xs font-medium leading-none\">{{ avatarOverflowLabel }}</span>\n </template>\n </Avatar>\n </template>\n <template v-else-if=\"props.max !== undefined\">\n <!-- Use render function output for sliced vnodes -->\n <template\n v-for=\"(node, _i) in getSlicedNodes()\"\n :key=\"_i\"\n >\n <component :is=\"node\" />\n </template>\n </template>\n <template v-else>\n <slot />\n </template>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBA,MAAM,QAAQ;EAmBd,MAAM,QAAQ,UAAA;AAKd,wBAAsB;GACpB,MAAM,MAAM,OAAO,OAAO;GAC1B,YAAY,MAAM,OAAO,aAAa;GACtC,YAAY,MAAM,OAAO,aAAa;GACtC,QAAQ,MAAM,OAAO,SAAS;GAC9B,WAAW,IAAI,KAAK;GACrB,CAAA;EAED,MAAM,iBAAiB,eACrB,iBAAiB,8BAA8B,MAAM,MAAK,CAC5D;EAEA,MAAM,iBAAiB,eAAe;AACpC,OAAI,CAAC,MAAM,QAAS,QAAO,EAAC;AAC5B,UAAO,MAAM,QAAQ,KAAA,IAAY,MAAM,QAAQ,MAAM,GAAG,MAAM,IAAI,GAAG,MAAM;IAC5E;EACD,MAAM,sBAAsB,eAAe;AACzC,OAAI,CAAC,MAAM,WAAW,MAAM,QAAQ,KAAA,EAAW,QAAO;AAEtD,WADc,MAAM,SAAS,MAAM,QAAQ,UAC5B,MAAM;IACtB;EACD,MAAM,sBAAsB,eAAe;AACzC,OAAI,oBAAoB,SAAS,EAAG,QAAO;AAC3C,UAAO,MAAM,cAAc,MAAM,YAAY,oBAAoB,MAAM,GAAG,IAAI,oBAAoB;IACnG;EAGD,SAAS,cAAc,QAA0B;GAC/C,MAAM,SAAkB,EAAC;AACzB,QAAK,MAAM,SAAS,OAClB,KAAI,MAAM,SAAS,YAAY,MAAM,QAAQ,MAAM,SAAS,CAC1D,QAAO,KAAK,GAAG,cAAc,MAAM,SAAoB,CAAA;OAEvD,QAAO,KAAK,MAAK;AAGrB,UAAO;;EAIT,SAAS,iBAA0B;GACjC,MAAM,cAAc,MAAM,WAAU;AACpC,OAAI,CAAC,YAAa,QAAO,EAAC;GAE1B,MAAM,WAAW,cAAc,YAAW;AAE1C,OAAI,MAAM,QAAQ,KAAA,EAChB,QAAO;GAGT,MAAM,eAAe,SAAS,MAAM,GAAG,MAAM,IAAG;GAEhD,MAAM,iBADa,MAAM,SAAS,SAAS,UACR,MAAM;AAEzC,OAAI,iBAAiB,EACnB,QAAO;GAGT,MAAM,eAAe,MAAM,cACvB,MAAM,YAAY,cAAa,GAC/B,IAAI;GAGR,MAAM,cAAc,EAAE,gBAAQ,EAAE,EAAE,EAChC,gBAAgB,EAAE,QAAQ,EAAE,OAAO,iDAAiD,EAAE,aAAa,EACpG,CAAA;AAED,UAAO,CAAC,GAAG,cAAc,YAAW;;;uBAKpC,mBA4BM,OAAA;IA3BJ,MAAK;IACJ,OAAK,eAAE,eAAA,MAAc;OAEN,MAAM,WAAA,WAAA,EAAtB,mBAWW,UAAA,EAAA,KAAA,GAAA,EAAA,EAAA,UAAA,KAAA,EAVT,mBAIE,UAAA,MAAA,WAHwB,eAAA,QAAhB,QAAQ,QAAG;wBADrB,YAIE,gBAJF,WAIE,EAFC,KAAK,KAAG,EAAA,EAAA,SAAA,MAAA,EACD,OAAM,EAAA,MAAA,GAAA;cAEF,oBAAA,QAAmB,KAAA,WAAA,EAAjC,YAIS,gBAAA,EAAA,KAAA,GAAA,EAAA;IAHI,UAAQ,cAC2E,CAA5F,mBAA4F,QAA5F,YAA4F,gBAA7B,oBAAA,MAAmB,EAAA,EAAA,CAAA,CAAA;;+CAInE,MAAM,QAAQ,KAAA,KAAA,UAAA,KAAA,EAEjC,mBAKW,UAAA,EAAA,KAAA,GAAA,EAAA,WAJY,gBAAc,GAA3B,MAAM,OAAE;wBAGhB,YAAwB,wBAAR,KAAI,EAAA,EAAA,KAFd,IAAE,CAAA;eAMV,WAAQ,KAAA,QAAA,WAAA,EAAA,KAAA,GAAA,CAAA,CAAA,EAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","names":[],"sources":["../../../src/components/button/Button.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { Primitive } from 'reka-ui'\nimport { buttonVariants, type ButtonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useButtonGroupInject } from './button-group.context'\nimport Spinner from '../spinner/Spinner.vue'\n\nconst props = withDefaults(defineProps<{\n variant?: ButtonVariants['variant']\n color?: ButtonVariants['color']\n size?: ButtonVariants['size']\n radius?: ButtonVariants['radius']\n isIconOnly?: boolean\n fullWidth?: boolean\n disabled?: boolean\n isLoading?: boolean\n as?: string | object\n class?: ClassValue\n /** Override classes for individual slots (base, startContent, label, endContent, spinner) */\n classNames?: Partial<{\n base: ClassValue\n startContent: ClassValue\n label: ClassValue\n endContent: ClassValue\n spinner: ClassValue\n }>\n value?: string | number\n}>(), {\n variant: undefined,\n color: undefined,\n size: undefined,\n radius: undefined,\n isIconOnly: false,\n fullWidth: false,\n disabled: false,\n isLoading: false,\n as: 'button',\n value: undefined,\n})\n\n// Inject ButtonGroup context unconditionally with fallback defaults (D-12)\n// When no ButtonGroup is present, inject returns these fallback values (no-op)\nconst groupCtx = useButtonGroupInject({\n variant: ref('solid'),\n color: ref('primary'),\n size: ref('md'),\n disabled: ref(false),\n fullWidth: ref(false),\n orientation: ref('horizontal'),\n selectionMode: ref('single'),\n selectedValue: ref(null),\n isValueSelected: () => false,\n selectValue: () => {},\n})\n\nconst isSelected = computed(() => groupCtx.isValueSelected(props.value))\n\nfunction handleClick() {\n if (props.value !== undefined) groupCtx.selectValue(props.value)\n}\n\n// Prop precedence rules (D-13):\n// - group disabled ALWAYS wins over child prop\n// - all other props: child prop wins over group value (child ?? group)\nconst isDisabled = computed(() => groupCtx.disabled.value || props.disabled)\nconst finalVariant = computed(() => props.variant ?? groupCtx.variant.value)\nconst finalColor = computed(() => props.color ?? groupCtx.color.value)\nconst finalSize = computed(() => props.size ?? groupCtx.size.value)\nconst finalFullWidth = computed(() => props.fullWidth || groupCtx.fullWidth.value)\n\n// Map legacy variant names to new variant+color so old usage keeps working\nconst LEGACY_VARIANTS: Record<string, { variant: string; color: string }> = {\n primary: { variant: 'solid', color: 'primary' },\n secondary: { variant: 'default', color: 'default' },\n tertiary: { variant: 'default', color: 'default' },\n danger: { variant: 'solid', color: 'danger' },\n 'danger-soft': { variant: 'soft', color: 'danger' },\n success: { variant: 'solid', color: 'success' },\n 'success-soft':{ variant: 'soft', color: 'success' },\n warning: { variant: 'solid', color: 'warning' },\n 'warning-soft':{ variant: 'soft', color: 'warning' },\n}\n\nconst resolvedVariant = computed(() => {\n const v = finalVariant.value\n return (LEGACY_VARIANTS[v]?.variant ?? v) as ButtonVariants['variant']\n})\n\nconst resolvedColor = computed(() => {\n const v = finalVariant.value\n // If caller explicitly set color, respect it; otherwise infer from legacy variant\n if (props.color === undefined && LEGACY_VARIANTS[v]) return LEGACY_VARIANTS[v].color as ButtonVariants['color']\n return finalColor.value\n})\n\nconst slotFns = computed(() =>\n buttonVariants({\n variant: resolvedVariant.value,\n color: resolvedColor.value,\n size: finalSize.value,\n radius: props.radius,\n isIconOnly: props.isIconOnly,\n fullWidth: finalFullWidth.value,\n isLoading: props.isLoading,\n })\n)\n\n// Spinner size scales with button size\nconst spinnerSize = computed(() => {\n if (finalSize.value === 'xs' || finalSize.value === 'sm') return 'sm' as const\n if (finalSize.value === 'lg' || finalSize.value === 'xl') return 'lg' as const\n return 'md' as const\n})\n</script>\n\n<template>\n <Primitive\n :as=\"props.as\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :disabled=\"isDisabled || props.isLoading || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-loading=\"props.isLoading || undefined\"\n :data-orientation=\"groupCtx.orientation.value\"\n :data-selected=\"isSelected || undefined\"\n v-bind=\"$attrs\"\n @click=\"handleClick\"\n >\n <!-- startContent named slot -->\n <span\n v-if=\"$slots.startContent\"\n :class=\"composeClassName(slotFns.startContent(), props.classNames?.startContent)\"\n >\n <slot name=\"startContent\" />\n </span>\n\n <!-- default (label) slot -->\n <span :class=\"composeClassName(slotFns.label(), props.classNames?.label)\">\n <slot />\n </span>\n\n <!-- endContent named slot -->\n <span\n v-if=\"$slots.endContent\"\n :class=\"composeClassName(slotFns.endContent(), props.classNames?.endContent)\"\n >\n <slot name=\"endContent\" />\n </span>\n\n <!-- Loading spinner: absolute-centered, only rendered when isLoading=true (D-08, D-09) -->\n <!-- color=\"current\" inherits --button-fg so spinner contrasts with the button background -->\n <span\n v-if=\"props.isLoading\"\n :class=\"composeClassName(slotFns.spinner(), props.classNames?.spinner)\"\n aria-hidden=\"true\"\n data-slot=\"spinner\"\n >\n <Spinner\n :size=\"spinnerSize\"\n color=\"current\"\n />\n </span>\n </Primitive>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"Button.js","names":[],"sources":["../../../src/components/button/Button.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { Primitive } from 'reka-ui'\nimport { buttonVariants, type ButtonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useButtonGroupInject } from './button-group.context'\nimport Spinner from '../spinner/Spinner.vue'\nimport { warnDeprecatedVariant } from '../../utils/warnDeprecated'\n\nconst props = withDefaults(defineProps<{\n /**\n * Visual style of the button.\n * @deprecated 'outline' — use 'bordered' instead.\n */\n variant?: ButtonVariants['variant'] | 'outline'\n color?: ButtonVariants['color']\n size?: ButtonVariants['size']\n radius?: ButtonVariants['radius']\n isIconOnly?: boolean\n fullWidth?: boolean\n disabled?: boolean\n isLoading?: boolean\n as?: string | object\n class?: ClassValue\n /** Override classes for individual slots (base, startContent, label, endContent, spinner) */\n classNames?: Partial<{\n base: ClassValue\n startContent: ClassValue\n label: ClassValue\n endContent: ClassValue\n spinner: ClassValue\n }>\n value?: string | number\n}>(), {\n variant: undefined,\n color: undefined,\n size: undefined,\n radius: undefined,\n isIconOnly: false,\n fullWidth: false,\n disabled: false,\n isLoading: false,\n as: 'button',\n value: undefined,\n})\n\n// Inject ButtonGroup context unconditionally with fallback defaults (D-12)\n// When no ButtonGroup is present, inject returns these fallback values (no-op)\nconst groupCtx = useButtonGroupInject({\n variant: ref('solid'),\n color: ref('primary'),\n size: ref('md'),\n disabled: ref(false),\n fullWidth: ref(false),\n orientation: ref('horizontal'),\n selectionMode: ref('single'),\n selectedValue: ref(null),\n isValueSelected: () => false,\n selectValue: () => {},\n})\n\nconst isSelected = computed(() => groupCtx.isValueSelected(props.value))\n\nfunction handleClick() {\n if (props.value !== undefined) groupCtx.selectValue(props.value)\n}\n\n// Prop precedence rules (D-13):\n// - group disabled ALWAYS wins over child prop\n// - all other props: child prop wins over group value (child ?? group)\nconst isDisabled = computed(() => groupCtx.disabled.value || props.disabled)\nconst finalVariant = computed(() => props.variant ?? groupCtx.variant.value)\nconst finalColor = computed(() => props.color ?? groupCtx.color.value)\nconst finalSize = computed(() => props.size ?? groupCtx.size.value)\nconst finalFullWidth = computed(() => props.fullWidth || groupCtx.fullWidth.value)\n\n// Map legacy variant names to new variant+color so old usage keeps working\nconst LEGACY_VARIANTS: Record<string, { variant: string; color: string }> = {\n primary: { variant: 'solid', color: 'primary' },\n secondary: { variant: 'default', color: 'default' },\n tertiary: { variant: 'default', color: 'default' },\n danger: { variant: 'solid', color: 'danger' },\n 'danger-soft': { variant: 'soft', color: 'danger' },\n success: { variant: 'solid', color: 'success' },\n 'success-soft':{ variant: 'soft', color: 'success' },\n warning: { variant: 'solid', color: 'warning' },\n 'warning-soft':{ variant: 'soft', color: 'warning' },\n}\n\nconst resolvedVariant = computed(() => {\n const v = finalVariant.value\n if (!v) return v\n if (v === 'outline') {\n warnDeprecatedVariant('Button', 'outline', 'bordered')\n return 'bordered' as ButtonVariants['variant']\n }\n return (LEGACY_VARIANTS[v]?.variant ?? v) as ButtonVariants['variant']\n})\n\nconst resolvedColor = computed(() => {\n const v = finalVariant.value\n // If caller explicitly set color, respect it; otherwise infer from legacy variant\n if (props.color === undefined && v && LEGACY_VARIANTS[v]) return LEGACY_VARIANTS[v].color as ButtonVariants['color']\n return finalColor.value\n})\n\nconst slotFns = computed(() =>\n buttonVariants({\n variant: resolvedVariant.value,\n color: resolvedColor.value,\n size: finalSize.value,\n radius: props.radius,\n isIconOnly: props.isIconOnly,\n fullWidth: finalFullWidth.value,\n isLoading: props.isLoading,\n })\n)\n\n// Spinner size scales with button size\nconst spinnerSize = computed(() => {\n if (finalSize.value === 'xs' || finalSize.value === 'sm') return 'sm' as const\n if (finalSize.value === 'lg' || finalSize.value === 'xl') return 'lg' as const\n return 'md' as const\n})\n</script>\n\n<template>\n <Primitive\n :as=\"props.as\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :disabled=\"isDisabled || props.isLoading || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-loading=\"props.isLoading || undefined\"\n :data-orientation=\"groupCtx.orientation.value\"\n :data-selected=\"isSelected || undefined\"\n v-bind=\"$attrs\"\n @click=\"handleClick\"\n >\n <!-- startContent named slot -->\n <span\n v-if=\"$slots.startContent\"\n :class=\"composeClassName(slotFns.startContent(), props.classNames?.startContent)\"\n >\n <slot name=\"startContent\" />\n </span>\n\n <!-- default (label) slot -->\n <span :class=\"composeClassName(slotFns.label(), props.classNames?.label)\">\n <slot />\n </span>\n\n <!-- endContent named slot -->\n <span\n v-if=\"$slots.endContent\"\n :class=\"composeClassName(slotFns.endContent(), props.classNames?.endContent)\"\n >\n <slot name=\"endContent\" />\n </span>\n\n <!-- Loading spinner: absolute-centered, only rendered when isLoading=true (D-08, D-09) -->\n <!-- color=\"current\" inherits --button-fg so spinner contrasts with the button background -->\n <span\n v-if=\"props.isLoading\"\n :class=\"composeClassName(slotFns.spinner(), props.classNames?.spinner)\"\n aria-hidden=\"true\"\n data-slot=\"spinner\"\n >\n <Spinner\n :size=\"spinnerSize\"\n color=\"current\"\n />\n </span>\n </Primitive>\n</template>\n"],"mappings":""}
@@ -1,5 +1,6 @@
1
1
  import { composeClassName } from "../../utils/composeClassName.js";
2
2
  import Spinner_default from "../spinner/Spinner.js";
3
+ import "../../utils/warnDeprecated.js";
3
4
  import { useButtonGroupInject } from "./button-group.context.js";
4
5
  import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, normalizeClass, openBlock, ref, renderSlot, unref, withCtx } from "vue";
5
6
  import { buttonVariants } from "@auronui/styles";
@@ -102,11 +103,13 @@ var Button_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
102
103
  };
103
104
  const resolvedVariant = computed(() => {
104
105
  const v = finalVariant.value;
106
+ if (!v) return v;
107
+ if (v === "outline") return "bordered";
105
108
  return LEGACY_VARIANTS[v]?.variant ?? v;
106
109
  });
107
110
  const resolvedColor = computed(() => {
108
111
  const v = finalVariant.value;
109
- if (props.color === void 0 && LEGACY_VARIANTS[v]) return LEGACY_VARIANTS[v].color;
112
+ if (props.color === void 0 && v && LEGACY_VARIANTS[v]) return LEGACY_VARIANTS[v].color;
110
113
  return finalColor.value;
111
114
  });
112
115
  const slotFns = computed(() => buttonVariants({
@@ -1 +1 @@
1
- {"version":3,"file":"Button.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../src/components/button/Button.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { Primitive } from 'reka-ui'\nimport { buttonVariants, type ButtonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useButtonGroupInject } from './button-group.context'\nimport Spinner from '../spinner/Spinner.vue'\n\nconst props = withDefaults(defineProps<{\n variant?: ButtonVariants['variant']\n color?: ButtonVariants['color']\n size?: ButtonVariants['size']\n radius?: ButtonVariants['radius']\n isIconOnly?: boolean\n fullWidth?: boolean\n disabled?: boolean\n isLoading?: boolean\n as?: string | object\n class?: ClassValue\n /** Override classes for individual slots (base, startContent, label, endContent, spinner) */\n classNames?: Partial<{\n base: ClassValue\n startContent: ClassValue\n label: ClassValue\n endContent: ClassValue\n spinner: ClassValue\n }>\n value?: string | number\n}>(), {\n variant: undefined,\n color: undefined,\n size: undefined,\n radius: undefined,\n isIconOnly: false,\n fullWidth: false,\n disabled: false,\n isLoading: false,\n as: 'button',\n value: undefined,\n})\n\n// Inject ButtonGroup context unconditionally with fallback defaults (D-12)\n// When no ButtonGroup is present, inject returns these fallback values (no-op)\nconst groupCtx = useButtonGroupInject({\n variant: ref('solid'),\n color: ref('primary'),\n size: ref('md'),\n disabled: ref(false),\n fullWidth: ref(false),\n orientation: ref('horizontal'),\n selectionMode: ref('single'),\n selectedValue: ref(null),\n isValueSelected: () => false,\n selectValue: () => {},\n})\n\nconst isSelected = computed(() => groupCtx.isValueSelected(props.value))\n\nfunction handleClick() {\n if (props.value !== undefined) groupCtx.selectValue(props.value)\n}\n\n// Prop precedence rules (D-13):\n// - group disabled ALWAYS wins over child prop\n// - all other props: child prop wins over group value (child ?? group)\nconst isDisabled = computed(() => groupCtx.disabled.value || props.disabled)\nconst finalVariant = computed(() => props.variant ?? groupCtx.variant.value)\nconst finalColor = computed(() => props.color ?? groupCtx.color.value)\nconst finalSize = computed(() => props.size ?? groupCtx.size.value)\nconst finalFullWidth = computed(() => props.fullWidth || groupCtx.fullWidth.value)\n\n// Map legacy variant names to new variant+color so old usage keeps working\nconst LEGACY_VARIANTS: Record<string, { variant: string; color: string }> = {\n primary: { variant: 'solid', color: 'primary' },\n secondary: { variant: 'default', color: 'default' },\n tertiary: { variant: 'default', color: 'default' },\n danger: { variant: 'solid', color: 'danger' },\n 'danger-soft': { variant: 'soft', color: 'danger' },\n success: { variant: 'solid', color: 'success' },\n 'success-soft':{ variant: 'soft', color: 'success' },\n warning: { variant: 'solid', color: 'warning' },\n 'warning-soft':{ variant: 'soft', color: 'warning' },\n}\n\nconst resolvedVariant = computed(() => {\n const v = finalVariant.value\n return (LEGACY_VARIANTS[v]?.variant ?? v) as ButtonVariants['variant']\n})\n\nconst resolvedColor = computed(() => {\n const v = finalVariant.value\n // If caller explicitly set color, respect it; otherwise infer from legacy variant\n if (props.color === undefined && LEGACY_VARIANTS[v]) return LEGACY_VARIANTS[v].color as ButtonVariants['color']\n return finalColor.value\n})\n\nconst slotFns = computed(() =>\n buttonVariants({\n variant: resolvedVariant.value,\n color: resolvedColor.value,\n size: finalSize.value,\n radius: props.radius,\n isIconOnly: props.isIconOnly,\n fullWidth: finalFullWidth.value,\n isLoading: props.isLoading,\n })\n)\n\n// Spinner size scales with button size\nconst spinnerSize = computed(() => {\n if (finalSize.value === 'xs' || finalSize.value === 'sm') return 'sm' as const\n if (finalSize.value === 'lg' || finalSize.value === 'xl') return 'lg' as const\n return 'md' as const\n})\n</script>\n\n<template>\n <Primitive\n :as=\"props.as\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :disabled=\"isDisabled || props.isLoading || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-loading=\"props.isLoading || undefined\"\n :data-orientation=\"groupCtx.orientation.value\"\n :data-selected=\"isSelected || undefined\"\n v-bind=\"$attrs\"\n @click=\"handleClick\"\n >\n <!-- startContent named slot -->\n <span\n v-if=\"$slots.startContent\"\n :class=\"composeClassName(slotFns.startContent(), props.classNames?.startContent)\"\n >\n <slot name=\"startContent\" />\n </span>\n\n <!-- default (label) slot -->\n <span :class=\"composeClassName(slotFns.label(), props.classNames?.label)\">\n <slot />\n </span>\n\n <!-- endContent named slot -->\n <span\n v-if=\"$slots.endContent\"\n :class=\"composeClassName(slotFns.endContent(), props.classNames?.endContent)\"\n >\n <slot name=\"endContent\" />\n </span>\n\n <!-- Loading spinner: absolute-centered, only rendered when isLoading=true (D-08, D-09) -->\n <!-- color=\"current\" inherits --button-fg so spinner contrasts with the button background -->\n <span\n v-if=\"props.isLoading\"\n :class=\"composeClassName(slotFns.spinner(), props.classNames?.spinner)\"\n aria-hidden=\"true\"\n data-slot=\"spinner\"\n >\n <Spinner\n :size=\"spinnerSize\"\n color=\"current\"\n />\n </span>\n </Primitive>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQA,MAAM,QAAQ;EAmCd,MAAM,WAAW,qBAAqB;GACpC,SAAS,IAAI,QAAQ;GACrB,OAAO,IAAI,UAAU;GACrB,MAAM,IAAI,KAAK;GACf,UAAU,IAAI,MAAM;GACpB,WAAW,IAAI,MAAM;GACrB,aAAa,IAAI,aAAa;GAC9B,eAAe,IAAI,SAAS;GAC5B,eAAe,IAAI,KAAK;GACxB,uBAAuB;GACvB,mBAAmB;GACpB,CAAA;EAED,MAAM,aAAa,eAAe,SAAS,gBAAgB,MAAM,MAAM,CAAA;EAEvE,SAAS,cAAc;AACrB,OAAI,MAAM,UAAU,KAAA,EAAW,UAAS,YAAY,MAAM,MAAK;;EAMjE,MAAM,aAAa,eAAe,SAAS,SAAS,SAAS,MAAM,SAAQ;EAC3E,MAAM,eAAe,eAAe,MAAM,WAAW,SAAS,QAAQ,MAAK;EAC3E,MAAM,aAAa,eAAe,MAAM,SAAS,SAAS,MAAM,MAAK;EACrE,MAAM,YAAY,eAAe,MAAM,QAAQ,SAAS,KAAK,MAAK;EAClE,MAAM,iBAAiB,eAAe,MAAM,aAAa,SAAS,UAAU,MAAK;EAGjF,MAAM,kBAAsE;GAC1E,SAAe;IAAE,SAAS;IAAW,OAAO;IAAW;GACvD,WAAe;IAAE,SAAS;IAAW,OAAO;IAAW;GACvD,UAAe;IAAE,SAAS;IAAW,OAAO;IAAW;GACvD,QAAe;IAAE,SAAS;IAAW,OAAO;IAAU;GACtD,eAAe;IAAE,SAAS;IAAW,OAAO;IAAU;GACtD,SAAe;IAAE,SAAS;IAAW,OAAO;IAAW;GACvD,gBAAe;IAAE,SAAS;IAAW,OAAO;IAAW;GACvD,SAAe;IAAE,SAAS;IAAW,OAAO;IAAW;GACvD,gBAAe;IAAE,SAAS;IAAW,OAAO;IAAW;GACzD;EAEA,MAAM,kBAAkB,eAAe;GACrC,MAAM,IAAI,aAAa;AACvB,UAAQ,gBAAgB,IAAI,WAAW;IACxC;EAED,MAAM,gBAAgB,eAAe;GACnC,MAAM,IAAI,aAAa;AAEvB,OAAI,MAAM,UAAU,KAAA,KAAa,gBAAgB,GAAI,QAAO,gBAAgB,GAAG;AAC/E,UAAO,WAAW;IACnB;EAED,MAAM,UAAU,eACd,eAAe;GACb,SAAS,gBAAgB;GACzB,OAAO,cAAc;GACrB,MAAM,UAAU;GAChB,QAAQ,MAAM;GACd,YAAY,MAAM;GAClB,WAAW,eAAe;GAC1B,WAAW,MAAM;GAClB,CAAA,CACH;EAGA,MAAM,cAAc,eAAe;AACjC,OAAI,UAAU,UAAU,QAAQ,UAAU,UAAU,KAAM,QAAO;AACjE,OAAI,UAAU,UAAU,QAAQ,UAAU,UAAU,KAAM,QAAO;AACjE,UAAO;IACR;;uBAIC,YA6CY,MAAA,UAAA,EA7CZ,WA6CY;IA5CT,IAAI,MAAM;IACV,OAAO,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI;IAC3E,UAAU,WAAA,SAAc,MAAM,aAAa,KAAA;IAC3C,iBAAe,WAAA,SAAc,KAAA;IAC7B,gBAAc,MAAM,aAAa,KAAA;IACjC,oBAAkB,MAAA,SAAQ,CAAC,YAAY;IACvC,iBAAe,WAAA,SAAc,KAAA;MACtBA,KAAAA,QAAM,EACb,SAAO,aAAW,CAAA,EAAA;2BAQZ;KAJCC,KAAAA,OAAO,gBAAA,WAAA,EADf,mBAKO,QAAA;;MAHJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,cAAY,EAAI,MAAM,YAAY,aAAY,CAAA;SAE/E,WAA4B,KAAA,QAAA,eAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA;KAI9B,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,OAAK,EAAI,MAAM,YAAY,MAAK,CAAA,EAAA,EAAA,CACrE,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA;KAKFA,KAAAA,OAAO,cAAA,WAAA,EADf,mBAKO,QAAA;;MAHJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,YAAU,EAAI,MAAM,YAAY,WAAU,CAAA;SAE3E,WAA0B,KAAA,QAAA,aAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA;KAMpB,MAAM,aAAA,WAAA,EADd,mBAUO,QAAA;;MARJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,SAAO,EAAI,MAAM,YAAY,QAAO,CAAA;MACrE,eAAY;MACZ,aAAU;SAEV,YAGE,iBAAA;MAFC,MAAM,YAAA;MACP,OAAM"}
1
+ {"version":3,"file":"Button.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../src/components/button/Button.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { Primitive } from 'reka-ui'\nimport { buttonVariants, type ButtonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useButtonGroupInject } from './button-group.context'\nimport Spinner from '../spinner/Spinner.vue'\nimport { warnDeprecatedVariant } from '../../utils/warnDeprecated'\n\nconst props = withDefaults(defineProps<{\n /**\n * Visual style of the button.\n * @deprecated 'outline' — use 'bordered' instead.\n */\n variant?: ButtonVariants['variant'] | 'outline'\n color?: ButtonVariants['color']\n size?: ButtonVariants['size']\n radius?: ButtonVariants['radius']\n isIconOnly?: boolean\n fullWidth?: boolean\n disabled?: boolean\n isLoading?: boolean\n as?: string | object\n class?: ClassValue\n /** Override classes for individual slots (base, startContent, label, endContent, spinner) */\n classNames?: Partial<{\n base: ClassValue\n startContent: ClassValue\n label: ClassValue\n endContent: ClassValue\n spinner: ClassValue\n }>\n value?: string | number\n}>(), {\n variant: undefined,\n color: undefined,\n size: undefined,\n radius: undefined,\n isIconOnly: false,\n fullWidth: false,\n disabled: false,\n isLoading: false,\n as: 'button',\n value: undefined,\n})\n\n// Inject ButtonGroup context unconditionally with fallback defaults (D-12)\n// When no ButtonGroup is present, inject returns these fallback values (no-op)\nconst groupCtx = useButtonGroupInject({\n variant: ref('solid'),\n color: ref('primary'),\n size: ref('md'),\n disabled: ref(false),\n fullWidth: ref(false),\n orientation: ref('horizontal'),\n selectionMode: ref('single'),\n selectedValue: ref(null),\n isValueSelected: () => false,\n selectValue: () => {},\n})\n\nconst isSelected = computed(() => groupCtx.isValueSelected(props.value))\n\nfunction handleClick() {\n if (props.value !== undefined) groupCtx.selectValue(props.value)\n}\n\n// Prop precedence rules (D-13):\n// - group disabled ALWAYS wins over child prop\n// - all other props: child prop wins over group value (child ?? group)\nconst isDisabled = computed(() => groupCtx.disabled.value || props.disabled)\nconst finalVariant = computed(() => props.variant ?? groupCtx.variant.value)\nconst finalColor = computed(() => props.color ?? groupCtx.color.value)\nconst finalSize = computed(() => props.size ?? groupCtx.size.value)\nconst finalFullWidth = computed(() => props.fullWidth || groupCtx.fullWidth.value)\n\n// Map legacy variant names to new variant+color so old usage keeps working\nconst LEGACY_VARIANTS: Record<string, { variant: string; color: string }> = {\n primary: { variant: 'solid', color: 'primary' },\n secondary: { variant: 'default', color: 'default' },\n tertiary: { variant: 'default', color: 'default' },\n danger: { variant: 'solid', color: 'danger' },\n 'danger-soft': { variant: 'soft', color: 'danger' },\n success: { variant: 'solid', color: 'success' },\n 'success-soft':{ variant: 'soft', color: 'success' },\n warning: { variant: 'solid', color: 'warning' },\n 'warning-soft':{ variant: 'soft', color: 'warning' },\n}\n\nconst resolvedVariant = computed(() => {\n const v = finalVariant.value\n if (!v) return v\n if (v === 'outline') {\n warnDeprecatedVariant('Button', 'outline', 'bordered')\n return 'bordered' as ButtonVariants['variant']\n }\n return (LEGACY_VARIANTS[v]?.variant ?? v) as ButtonVariants['variant']\n})\n\nconst resolvedColor = computed(() => {\n const v = finalVariant.value\n // If caller explicitly set color, respect it; otherwise infer from legacy variant\n if (props.color === undefined && v && LEGACY_VARIANTS[v]) return LEGACY_VARIANTS[v].color as ButtonVariants['color']\n return finalColor.value\n})\n\nconst slotFns = computed(() =>\n buttonVariants({\n variant: resolvedVariant.value,\n color: resolvedColor.value,\n size: finalSize.value,\n radius: props.radius,\n isIconOnly: props.isIconOnly,\n fullWidth: finalFullWidth.value,\n isLoading: props.isLoading,\n })\n)\n\n// Spinner size scales with button size\nconst spinnerSize = computed(() => {\n if (finalSize.value === 'xs' || finalSize.value === 'sm') return 'sm' as const\n if (finalSize.value === 'lg' || finalSize.value === 'xl') return 'lg' as const\n return 'md' as const\n})\n</script>\n\n<template>\n <Primitive\n :as=\"props.as\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :disabled=\"isDisabled || props.isLoading || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-loading=\"props.isLoading || undefined\"\n :data-orientation=\"groupCtx.orientation.value\"\n :data-selected=\"isSelected || undefined\"\n v-bind=\"$attrs\"\n @click=\"handleClick\"\n >\n <!-- startContent named slot -->\n <span\n v-if=\"$slots.startContent\"\n :class=\"composeClassName(slotFns.startContent(), props.classNames?.startContent)\"\n >\n <slot name=\"startContent\" />\n </span>\n\n <!-- default (label) slot -->\n <span :class=\"composeClassName(slotFns.label(), props.classNames?.label)\">\n <slot />\n </span>\n\n <!-- endContent named slot -->\n <span\n v-if=\"$slots.endContent\"\n :class=\"composeClassName(slotFns.endContent(), props.classNames?.endContent)\"\n >\n <slot name=\"endContent\" />\n </span>\n\n <!-- Loading spinner: absolute-centered, only rendered when isLoading=true (D-08, D-09) -->\n <!-- color=\"current\" inherits --button-fg so spinner contrasts with the button background -->\n <span\n v-if=\"props.isLoading\"\n :class=\"composeClassName(slotFns.spinner(), props.classNames?.spinner)\"\n aria-hidden=\"true\"\n data-slot=\"spinner\"\n >\n <Spinner\n :size=\"spinnerSize\"\n color=\"current\"\n />\n </span>\n </Primitive>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Chip.js","names":[],"sources":["../../../src/components/chip/Chip.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { chipVariants, type ChipVariants } from \"@auronui/styles\";\nimport { composeClassName , type ClassValue} from \"../../utils/composeClassName\";\n\nconst props = withDefaults(\n defineProps<{\n color?: ChipVariants[\"color\"];\n size?: ChipVariants[\"size\"];\n variant?: ChipVariants[\"variant\"];\n /** Show a colored dot indicator before the label */\n dot?: boolean;\n /** Render a built-in close button that emits `close` */\n isClosable?: boolean;\n /** Aria-label for the close button */\n closeAriaLabel?: string;\n class?: ClassValue;\n /** Override classes for named slots */\n classNames?: Partial<{\n base: ClassValue;\n dot: ClassValue;\n startContent: ClassValue;\n label: ClassValue;\n endContent: ClassValue;\n closeButton: ClassValue;\n }>;\n }>(),\n {\n color: \"default\",\n variant: \"solid\",\n dot: false,\n isClosable: false,\n closeAriaLabel: \"Remove\",\n }\n);\n\nconst emit = defineEmits<{\n (e: \"close\"): void;\n}>();\n\nconst slotFns = computed(() =>\n chipVariants({\n color: props.color,\n size: props.size,\n variant: props.variant,\n })\n);\n</script>\n\n<template>\n <span :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\">\n <span\n v-if=\"dot\"\n :class=\"composeClassName(slotFns.dot(), props.classNames?.dot)\"\n aria-hidden=\"true\"\n />\n <span\n v-if=\"$slots.startContent\"\n :class=\"composeClassName(slotFns.startContent(), props.classNames?.startContent)\"\n aria-hidden=\"true\"\n >\n <slot name=\"startContent\" />\n </span>\n\n <span :class=\"composeClassName(slotFns.label(), props.classNames?.label)\">\n <slot />\n </span>\n\n <span\n v-if=\"$slots.endContent && !isClosable\"\n :class=\"composeClassName(slotFns.endContent(), props.classNames?.endContent)\"\n aria-hidden=\"true\"\n >\n <slot name=\"endContent\" />\n </span>\n\n <button\n v-if=\"isClosable\"\n type=\"button\"\n :class=\"composeClassName(slotFns.closeButton(), props.classNames?.closeButton)\"\n :aria-label=\"closeAriaLabel\"\n @click=\"emit('close')\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <line\n x1=\"18\"\n y1=\"6\"\n x2=\"6\"\n y2=\"18\"\n />\n <line\n x1=\"6\"\n y1=\"6\"\n x2=\"18\"\n y2=\"18\"\n />\n </svg>\n </button>\n </span>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"Chip.js","names":[],"sources":["../../../src/components/chip/Chip.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { chipVariants, type ChipVariants } from \"@auronui/styles\";\nimport { composeClassName , type ClassValue} from \"../../utils/composeClassName\";\nimport { warnDeprecatedVariant } from '../../utils/warnDeprecated';\n\nconst props = withDefaults(\n defineProps<{\n color?: ChipVariants[\"color\"];\n size?: ChipVariants[\"size\"];\n /**\n * Visual style of the chip.\n * @deprecated 'outlined' — use 'bordered' instead.\n */\n variant?: ChipVariants[\"variant\"] | 'outlined';\n /** Show a colored dot indicator before the label */\n dot?: boolean;\n /** Render a built-in close button that emits `close` */\n isClosable?: boolean;\n /** Aria-label for the close button */\n closeAriaLabel?: string;\n class?: ClassValue;\n /** Override classes for named slots */\n classNames?: Partial<{\n base: ClassValue;\n dot: ClassValue;\n startContent: ClassValue;\n label: ClassValue;\n endContent: ClassValue;\n closeButton: ClassValue;\n }>;\n }>(),\n {\n color: \"default\",\n variant: \"solid\",\n dot: false,\n isClosable: false,\n closeAriaLabel: \"Remove\",\n }\n);\n\nconst emit = defineEmits<{\n (e: \"close\"): void;\n}>();\n\nconst resolvedVariant = computed(() => {\n if (props.variant === 'outlined') {\n warnDeprecatedVariant('Chip', 'outlined', 'bordered')\n return 'bordered' as ChipVariants['variant']\n }\n return props.variant\n})\n\nconst slotFns = computed(() =>\n chipVariants({\n color: props.color,\n size: props.size,\n variant: resolvedVariant.value,\n })\n);\n</script>\n\n<template>\n <span :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\">\n <span\n v-if=\"dot\"\n :class=\"composeClassName(slotFns.dot(), props.classNames?.dot)\"\n aria-hidden=\"true\"\n />\n <span\n v-if=\"$slots.startContent\"\n :class=\"composeClassName(slotFns.startContent(), props.classNames?.startContent)\"\n aria-hidden=\"true\"\n >\n <slot name=\"startContent\" />\n </span>\n\n <span :class=\"composeClassName(slotFns.label(), props.classNames?.label)\">\n <slot />\n </span>\n\n <span\n v-if=\"$slots.endContent && !isClosable\"\n :class=\"composeClassName(slotFns.endContent(), props.classNames?.endContent)\"\n aria-hidden=\"true\"\n >\n <slot name=\"endContent\" />\n </span>\n\n <button\n v-if=\"isClosable\"\n type=\"button\"\n :class=\"composeClassName(slotFns.closeButton(), props.classNames?.closeButton)\"\n :aria-label=\"closeAriaLabel\"\n @click=\"emit('close')\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <line\n x1=\"18\"\n y1=\"6\"\n x2=\"6\"\n y2=\"18\"\n />\n <line\n x1=\"6\"\n y1=\"6\"\n x2=\"18\"\n y2=\"18\"\n />\n </svg>\n </button>\n </span>\n</template>\n"],"mappings":""}
@@ -1,4 +1,5 @@
1
1
  import { composeClassName } from "../../utils/composeClassName.js";
2
+ import "../../utils/warnDeprecated.js";
2
3
  import { computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, openBlock, renderSlot, unref } from "vue";
3
4
  import { chipVariants } from "@auronui/styles";
4
5
  //#region src/components/chip/Chip.vue?vue&type=script&setup=true&lang.ts
@@ -31,10 +32,14 @@ var Chip_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
31
32
  setup(__props, { emit: __emit }) {
32
33
  const props = __props;
33
34
  const emit = __emit;
35
+ const resolvedVariant = computed(() => {
36
+ if (props.variant === "outlined") return "bordered";
37
+ return props.variant;
38
+ });
34
39
  const slotFns = computed(() => chipVariants({
35
40
  color: props.color,
36
41
  size: props.size,
37
- variant: props.variant
42
+ variant: resolvedVariant.value
38
43
  }));
39
44
  return (_ctx, _cache) => {
40
45
  return openBlock(), createElementBlock("span", { class: normalizeClass(unref(composeClassName)(slotFns.value.base(), props.class, props.classNames?.base)) }, [
@@ -1 +1 @@
1
- {"version":3,"file":"Chip.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/components/chip/Chip.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { chipVariants, type ChipVariants } from \"@auronui/styles\";\nimport { composeClassName , type ClassValue} from \"../../utils/composeClassName\";\n\nconst props = withDefaults(\n defineProps<{\n color?: ChipVariants[\"color\"];\n size?: ChipVariants[\"size\"];\n variant?: ChipVariants[\"variant\"];\n /** Show a colored dot indicator before the label */\n dot?: boolean;\n /** Render a built-in close button that emits `close` */\n isClosable?: boolean;\n /** Aria-label for the close button */\n closeAriaLabel?: string;\n class?: ClassValue;\n /** Override classes for named slots */\n classNames?: Partial<{\n base: ClassValue;\n dot: ClassValue;\n startContent: ClassValue;\n label: ClassValue;\n endContent: ClassValue;\n closeButton: ClassValue;\n }>;\n }>(),\n {\n color: \"default\",\n variant: \"solid\",\n dot: false,\n isClosable: false,\n closeAriaLabel: \"Remove\",\n }\n);\n\nconst emit = defineEmits<{\n (e: \"close\"): void;\n}>();\n\nconst slotFns = computed(() =>\n chipVariants({\n color: props.color,\n size: props.size,\n variant: props.variant,\n })\n);\n</script>\n\n<template>\n <span :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\">\n <span\n v-if=\"dot\"\n :class=\"composeClassName(slotFns.dot(), props.classNames?.dot)\"\n aria-hidden=\"true\"\n />\n <span\n v-if=\"$slots.startContent\"\n :class=\"composeClassName(slotFns.startContent(), props.classNames?.startContent)\"\n aria-hidden=\"true\"\n >\n <slot name=\"startContent\" />\n </span>\n\n <span :class=\"composeClassName(slotFns.label(), props.classNames?.label)\">\n <slot />\n </span>\n\n <span\n v-if=\"$slots.endContent && !isClosable\"\n :class=\"composeClassName(slotFns.endContent(), props.classNames?.endContent)\"\n aria-hidden=\"true\"\n >\n <slot name=\"endContent\" />\n </span>\n\n <button\n v-if=\"isClosable\"\n type=\"button\"\n :class=\"composeClassName(slotFns.closeButton(), props.classNames?.closeButton)\"\n :aria-label=\"closeAriaLabel\"\n @click=\"emit('close')\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <line\n x1=\"18\"\n y1=\"6\"\n x2=\"6\"\n y2=\"18\"\n />\n <line\n x1=\"6\"\n y1=\"6\"\n x2=\"18\"\n y2=\"18\"\n />\n </svg>\n </button>\n </span>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKA,MAAM,QAAQ;EA+Bd,MAAM,OAAO;EAIb,MAAM,UAAU,eACd,aAAa;GACX,OAAO,MAAM;GACb,MAAM,MAAM;GACZ,SAAS,MAAM;GAChB,CAAA,CACF;;uBAIC,mBA0DO,QAAA,EA1DA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA,EAAA,EAAA;IAExE,QAAA,OAAA,WAAA,EADR,mBAIE,QAAA;;KAFC,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,KAAG,EAAI,MAAM,YAAY,IAAG,CAAA;KAC7D,eAAY;;IAGNA,KAAAA,OAAO,gBAAA,WAAA,EADf,mBAMO,QAAA;;KAJJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,cAAY,EAAI,MAAM,YAAY,aAAY,CAAA;KAC/E,eAAY;QAEZ,WAA4B,KAAA,QAAA,eAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA;IAG9B,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,OAAK,EAAI,MAAM,YAAY,MAAK,CAAA,EAAA,EAAA,CACrE,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA;IAIFA,KAAAA,OAAO,cAAU,CAAK,QAAA,cAAA,WAAA,EAD9B,mBAMO,QAAA;;KAJJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,YAAU,EAAI,MAAM,YAAY,WAAU,CAAA;KAC3E,eAAY;QAEZ,WAA0B,KAAA,QAAA,aAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA;IAIpB,QAAA,cAAA,WAAA,EADR,mBA+BS,UAAA;;KA7BP,MAAK;KACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,aAAW,EAAI,MAAM,YAAY,YAAW,CAAA;KAC5E,cAAY,QAAA;KACZ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,QAAA;sCAEZ,mBAuBM,OAAA;KAtBJ,OAAM;KACN,SAAQ;KACR,MAAK;KACL,QAAO;KACP,gBAAa;KACb,kBAAe;KACf,mBAAgB;KAChB,eAAY;KACZ,WAAU;QAEV,mBAKE,QAAA;KAJA,IAAG;KACH,IAAG;KACH,IAAG;KACH,IAAG;QAEL,mBAKE,QAAA;KAJA,IAAG;KACH,IAAG;KACH,IAAG;KACH,IAAG"}
1
+ {"version":3,"file":"Chip.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/components/chip/Chip.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { chipVariants, type ChipVariants } from \"@auronui/styles\";\nimport { composeClassName , type ClassValue} from \"../../utils/composeClassName\";\nimport { warnDeprecatedVariant } from '../../utils/warnDeprecated';\n\nconst props = withDefaults(\n defineProps<{\n color?: ChipVariants[\"color\"];\n size?: ChipVariants[\"size\"];\n /**\n * Visual style of the chip.\n * @deprecated 'outlined' — use 'bordered' instead.\n */\n variant?: ChipVariants[\"variant\"] | 'outlined';\n /** Show a colored dot indicator before the label */\n dot?: boolean;\n /** Render a built-in close button that emits `close` */\n isClosable?: boolean;\n /** Aria-label for the close button */\n closeAriaLabel?: string;\n class?: ClassValue;\n /** Override classes for named slots */\n classNames?: Partial<{\n base: ClassValue;\n dot: ClassValue;\n startContent: ClassValue;\n label: ClassValue;\n endContent: ClassValue;\n closeButton: ClassValue;\n }>;\n }>(),\n {\n color: \"default\",\n variant: \"solid\",\n dot: false,\n isClosable: false,\n closeAriaLabel: \"Remove\",\n }\n);\n\nconst emit = defineEmits<{\n (e: \"close\"): void;\n}>();\n\nconst resolvedVariant = computed(() => {\n if (props.variant === 'outlined') {\n warnDeprecatedVariant('Chip', 'outlined', 'bordered')\n return 'bordered' as ChipVariants['variant']\n }\n return props.variant\n})\n\nconst slotFns = computed(() =>\n chipVariants({\n color: props.color,\n size: props.size,\n variant: resolvedVariant.value,\n })\n);\n</script>\n\n<template>\n <span :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\">\n <span\n v-if=\"dot\"\n :class=\"composeClassName(slotFns.dot(), props.classNames?.dot)\"\n aria-hidden=\"true\"\n />\n <span\n v-if=\"$slots.startContent\"\n :class=\"composeClassName(slotFns.startContent(), props.classNames?.startContent)\"\n aria-hidden=\"true\"\n >\n <slot name=\"startContent\" />\n </span>\n\n <span :class=\"composeClassName(slotFns.label(), props.classNames?.label)\">\n <slot />\n </span>\n\n <span\n v-if=\"$slots.endContent && !isClosable\"\n :class=\"composeClassName(slotFns.endContent(), props.classNames?.endContent)\"\n aria-hidden=\"true\"\n >\n <slot name=\"endContent\" />\n </span>\n\n <button\n v-if=\"isClosable\"\n type=\"button\"\n :class=\"composeClassName(slotFns.closeButton(), props.classNames?.closeButton)\"\n :aria-label=\"closeAriaLabel\"\n @click=\"emit('close')\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <line\n x1=\"18\"\n y1=\"6\"\n x2=\"6\"\n y2=\"18\"\n />\n <line\n x1=\"6\"\n y1=\"6\"\n x2=\"18\"\n y2=\"18\"\n />\n </svg>\n </button>\n </span>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMA,MAAM,QAAQ;EAmCd,MAAM,OAAO;EAIb,MAAM,kBAAkB,eAAe;AACrC,OAAI,MAAM,YAAY,WAEpB,QAAO;AAET,UAAO,MAAM;IACd;EAED,MAAM,UAAU,eACd,aAAa;GACX,OAAO,MAAM;GACb,MAAM,MAAM;GACZ,SAAS,gBAAgB;GAC1B,CAAA,CACF;;uBAIC,mBA0DO,QAAA,EA1DA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA,EAAA,EAAA;IAExE,QAAA,OAAA,WAAA,EADR,mBAIE,QAAA;;KAFC,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,KAAG,EAAI,MAAM,YAAY,IAAG,CAAA;KAC7D,eAAY;;IAGNA,KAAAA,OAAO,gBAAA,WAAA,EADf,mBAMO,QAAA;;KAJJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,cAAY,EAAI,MAAM,YAAY,aAAY,CAAA;KAC/E,eAAY;QAEZ,WAA4B,KAAA,QAAA,eAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA;IAG9B,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,OAAK,EAAI,MAAM,YAAY,MAAK,CAAA,EAAA,EAAA,CACrE,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA;IAIFA,KAAAA,OAAO,cAAU,CAAK,QAAA,cAAA,WAAA,EAD9B,mBAMO,QAAA;;KAJJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,YAAU,EAAI,MAAM,YAAY,WAAU,CAAA;KAC3E,eAAY;QAEZ,WAA0B,KAAA,QAAA,aAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA;IAIpB,QAAA,cAAA,WAAA,EADR,mBA+BS,UAAA;;KA7BP,MAAK;KACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,aAAW,EAAI,MAAM,YAAY,YAAW,CAAA;KAC5E,cAAY,QAAA;KACZ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,QAAA;sCAEZ,mBAuBM,OAAA;KAtBJ,OAAM;KACN,SAAQ;KACR,MAAK;KACL,QAAO;KACP,gBAAa;KACb,kBAAe;KACf,mBAAgB;KAChB,eAAY;KACZ,WAAU;QAEV,mBAKE,QAAA;KAJA,IAAG;KACH,IAAG;KACH,IAAG;KACH,IAAG;QAEL,mBAKE,QAAA;KAJA,IAAG;KACH,IAAG;KACH,IAAG;KACH,IAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.js","names":[],"sources":["../../../src/components/drawer/Drawer.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent, computed, h, toRef } from 'vue'\nimport { DialogRoot } from 'reka-ui'\nimport { useDrawerProvide } from './drawer.context'\nimport type { DrawerPlacement, DrawerSize } from './drawer.context'\n\n/**\n * Drawer root component. Wraps Reka UI's DialogRoot.\n *\n * Uses Options API / render-function style to avoid Vue SFC compiled template\n * from forwarding `open: undefined` to DialogRoot — same pattern as Modal.vue.\n * Reka's `useVModel` checks `props.open === undefined` to choose uncontrolled\n * vs controlled mode.\n */\nexport default defineComponent({\n name: 'Drawer',\n props: {\n defaultOpen: { type: Boolean, default: false },\n open: { type: Boolean, default: undefined },\n modal: { type: Boolean, default: true },\n placement: {\n type: String as () => DrawerPlacement,\n default: 'right',\n },\n size: {\n type: String as () => DrawerSize,\n default: 'md',\n },\n },\n emits: ['update:open'],\n setup(props, { slots, emit }) {\n // Provide context to all Drawer sub-components\n useDrawerProvide({\n placement: toRef(props, 'placement'),\n size: toRef(props, 'size'),\n })\n\n const rootProps = computed(() => {\n const p: Record<string, unknown> = {\n defaultOpen: props.defaultOpen,\n modal: props.modal,\n 'onUpdate:open': (val: boolean) => emit('update:open', val),\n }\n // Only include `open` when explicitly controlled — omitting the key lets\n // Reka use `defaultOpen` for uncontrolled behavior.\n if (props.open !== undefined) {\n p.open = props.open\n }\n return p\n })\n\n return () => h(DialogRoot, rootProps.value, slots)\n },\n})\n</script>\n"],"mappings":""}
1
+ {"version":3,"file":"Drawer.js","names":[],"sources":["../../../src/components/drawer/Drawer.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent, computed, h, toRef, ref } from 'vue'\nimport { DialogRoot } from 'reka-ui'\nimport { drawerVariants } from '@auronui/styles/components/drawer'\nimport { useDrawerProvide } from './drawer.context'\nimport type { DrawerPlacement, DrawerSize } from './drawer.context'\n\n/**\n * Drawer root component. Wraps Reka UI's DialogRoot.\n *\n * Uses Options API / render-function style to avoid Vue SFC compiled template\n * from forwarding `open: undefined` to DialogRoot — same pattern as Modal.vue.\n * Reka's `useVModel` checks `props.open === undefined` to choose uncontrolled\n * vs controlled mode.\n *\n * When `dock=true` the component renders a flex container div and manages its\n * own open state without Reka, so the drawer panel shifts content in the DOM\n * rather than overlaying it.\n */\nexport default defineComponent({\n name: 'Drawer',\n props: {\n defaultOpen: { type: Boolean, default: false },\n open: { type: Boolean, default: undefined },\n modal: { type: Boolean, default: true },\n placement: {\n type: String as () => DrawerPlacement,\n default: 'right',\n },\n size: {\n type: String as () => DrawerSize,\n default: 'md',\n },\n inline: { type: Boolean, default: false },\n hideBackdrop: { type: Boolean, default: false },\n dock: { type: Boolean, default: false },\n },\n emits: ['update:open'],\n setup(props, { slots, emit }) {\n const styles = drawerVariants()\n\n // Dock mode: open state managed locally (no Reka dialog)\n const localPushOpen = ref(props.defaultOpen ?? false)\n const dockOpen = computed(() =>\n props.open !== undefined ? props.open : localPushOpen.value,\n )\n\n function toggleDock() {\n const next = !dockOpen.value\n if (props.open === undefined) localPushOpen.value = next\n emit('update:open', next)\n }\n\n function closeDock() {\n if (props.open === undefined) localPushOpen.value = false\n emit('update:open', false)\n }\n\n // Provide context to all Drawer sub-components\n useDrawerProvide({\n placement: toRef(props, 'placement'),\n size: toRef(props, 'size'),\n inline: toRef(props, 'inline'),\n hideBackdrop: toRef(props, 'hideBackdrop'),\n dock: toRef(props, 'dock'),\n dockOpen,\n toggleDock,\n closeDock,\n })\n\n const rootProps = computed(() => {\n const p: Record<string, unknown> = {\n defaultOpen: props.defaultOpen,\n // inline and hideBackdrop both require non-modal: no scroll lock, no focus trap\n modal: props.inline || props.hideBackdrop ? false : props.modal,\n 'onUpdate:open': (val: boolean) => emit('update:open', val),\n }\n // Only include `open` when explicitly controlled — omitting the key lets\n // Reka use `defaultOpen` for uncontrolled behavior.\n if (props.open !== undefined) {\n p.open = props.open\n }\n return p\n })\n\n return () => {\n // Dock mode: render a flex container that shifts content\n if (props.dock) {\n return h(\n 'div',\n { class: styles.dockContainer({ placement: props.placement }) },\n slots.default?.(),\n )\n }\n return h(DialogRoot, rootProps.value, slots)\n }\n },\n})\n</script>\n"],"mappings":""}
@@ -1,5 +1,6 @@
1
+ import { drawerVariants } from "../../packages/styles/src/components/drawer/drawer.styles.js";
1
2
  import { useDrawerProvide } from "./drawer.context.js";
2
- import { computed, defineComponent, h, toRef } from "vue";
3
+ import { computed, defineComponent, h, ref, toRef } from "vue";
3
4
  import { DialogRoot } from "reka-ui";
4
5
  //#region src/components/drawer/Drawer.vue?vue&type=script&lang.ts
5
6
  /**
@@ -9,6 +10,10 @@ import { DialogRoot } from "reka-ui";
9
10
  * from forwarding `open: undefined` to DialogRoot — same pattern as Modal.vue.
10
11
  * Reka's `useVModel` checks `props.open === undefined` to choose uncontrolled
11
12
  * vs controlled mode.
13
+ *
14
+ * When `dock=true` the component renders a flex container div and manages its
15
+ * own open state without Reka, so the drawer panel shifts content in the DOM
16
+ * rather than overlaying it.
12
17
  */
13
18
  var Drawer_vue_vue_type_script_lang_default = defineComponent({
14
19
  name: "Drawer",
@@ -32,24 +37,57 @@ var Drawer_vue_vue_type_script_lang_default = defineComponent({
32
37
  size: {
33
38
  type: String,
34
39
  default: "md"
40
+ },
41
+ inline: {
42
+ type: Boolean,
43
+ default: false
44
+ },
45
+ hideBackdrop: {
46
+ type: Boolean,
47
+ default: false
48
+ },
49
+ dock: {
50
+ type: Boolean,
51
+ default: false
35
52
  }
36
53
  },
37
54
  emits: ["update:open"],
38
55
  setup(props, { slots, emit }) {
56
+ const styles = drawerVariants();
57
+ const localPushOpen = ref(props.defaultOpen ?? false);
58
+ const dockOpen = computed(() => props.open !== void 0 ? props.open : localPushOpen.value);
59
+ function toggleDock() {
60
+ const next = !dockOpen.value;
61
+ if (props.open === void 0) localPushOpen.value = next;
62
+ emit("update:open", next);
63
+ }
64
+ function closeDock() {
65
+ if (props.open === void 0) localPushOpen.value = false;
66
+ emit("update:open", false);
67
+ }
39
68
  useDrawerProvide({
40
69
  placement: toRef(props, "placement"),
41
- size: toRef(props, "size")
70
+ size: toRef(props, "size"),
71
+ inline: toRef(props, "inline"),
72
+ hideBackdrop: toRef(props, "hideBackdrop"),
73
+ dock: toRef(props, "dock"),
74
+ dockOpen,
75
+ toggleDock,
76
+ closeDock
42
77
  });
43
78
  const rootProps = computed(() => {
44
79
  const p = {
45
80
  defaultOpen: props.defaultOpen,
46
- modal: props.modal,
81
+ modal: props.inline || props.hideBackdrop ? false : props.modal,
47
82
  "onUpdate:open": (val) => emit("update:open", val)
48
83
  };
49
84
  if (props.open !== void 0) p.open = props.open;
50
85
  return p;
51
86
  });
52
- return () => h(DialogRoot, rootProps.value, slots);
87
+ return () => {
88
+ if (props.dock) return h("div", { class: styles.dockContainer({ placement: props.placement }) }, slots.default?.());
89
+ return h(DialogRoot, rootProps.value, slots);
90
+ };
53
91
  }
54
92
  });
55
93
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.vue_vue_type_script_lang.js","names":[],"sources":["../../../src/components/drawer/Drawer.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent, computed, h, toRef } from 'vue'\nimport { DialogRoot } from 'reka-ui'\nimport { useDrawerProvide } from './drawer.context'\nimport type { DrawerPlacement, DrawerSize } from './drawer.context'\n\n/**\n * Drawer root component. Wraps Reka UI's DialogRoot.\n *\n * Uses Options API / render-function style to avoid Vue SFC compiled template\n * from forwarding `open: undefined` to DialogRoot — same pattern as Modal.vue.\n * Reka's `useVModel` checks `props.open === undefined` to choose uncontrolled\n * vs controlled mode.\n */\nexport default defineComponent({\n name: 'Drawer',\n props: {\n defaultOpen: { type: Boolean, default: false },\n open: { type: Boolean, default: undefined },\n modal: { type: Boolean, default: true },\n placement: {\n type: String as () => DrawerPlacement,\n default: 'right',\n },\n size: {\n type: String as () => DrawerSize,\n default: 'md',\n },\n },\n emits: ['update:open'],\n setup(props, { slots, emit }) {\n // Provide context to all Drawer sub-components\n useDrawerProvide({\n placement: toRef(props, 'placement'),\n size: toRef(props, 'size'),\n })\n\n const rootProps = computed(() => {\n const p: Record<string, unknown> = {\n defaultOpen: props.defaultOpen,\n modal: props.modal,\n 'onUpdate:open': (val: boolean) => emit('update:open', val),\n }\n // Only include `open` when explicitly controlled — omitting the key lets\n // Reka use `defaultOpen` for uncontrolled behavior.\n if (props.open !== undefined) {\n p.open = props.open\n }\n return p\n })\n\n return () => h(DialogRoot, rootProps.value, slots)\n },\n})\n</script>\n"],"mappings":";;;;;;;;;;;;AAcA,IAAA,0CAAe,gBAAgB;CAC7B,MAAM;CACN,OAAO;EACL,aAAa;GAAE,MAAM;GAAS,SAAS;GAAO;EAC9C,MAAM;GAAE,MAAM;GAAS,SAAS,KAAA;GAAW;EAC3C,OAAO;GAAE,MAAM;GAAS,SAAS;GAAM;EACvC,WAAW;GACT,MAAM;GACN,SAAS;GACV;EACD,MAAM;GACJ,MAAM;GACN,SAAS;GACV;EACF;CACD,OAAO,CAAC,cAAc;CACtB,MAAM,OAAO,EAAE,OAAO,QAAQ;AAE5B,mBAAiB;GACf,WAAW,MAAM,OAAO,YAAY;GACpC,MAAM,MAAM,OAAO,OAAO;GAC3B,CAAA;EAED,MAAM,YAAY,eAAe;GAC/B,MAAM,IAA6B;IACjC,aAAa,MAAM;IACnB,OAAO,MAAM;IACb,kBAAkB,QAAiB,KAAK,eAAe,IAAI;IAC7D;AAGA,OAAI,MAAM,SAAS,KAAA,EACjB,GAAE,OAAO,MAAM;AAEjB,UAAO;IACR;AAED,eAAa,EAAE,YAAY,UAAU,OAAO,MAAK;;CAEpD,CAAA"}
1
+ {"version":3,"file":"Drawer.vue_vue_type_script_lang.js","names":[],"sources":["../../../src/components/drawer/Drawer.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent, computed, h, toRef, ref } from 'vue'\nimport { DialogRoot } from 'reka-ui'\nimport { drawerVariants } from '@auronui/styles/components/drawer'\nimport { useDrawerProvide } from './drawer.context'\nimport type { DrawerPlacement, DrawerSize } from './drawer.context'\n\n/**\n * Drawer root component. Wraps Reka UI's DialogRoot.\n *\n * Uses Options API / render-function style to avoid Vue SFC compiled template\n * from forwarding `open: undefined` to DialogRoot — same pattern as Modal.vue.\n * Reka's `useVModel` checks `props.open === undefined` to choose uncontrolled\n * vs controlled mode.\n *\n * When `dock=true` the component renders a flex container div and manages its\n * own open state without Reka, so the drawer panel shifts content in the DOM\n * rather than overlaying it.\n */\nexport default defineComponent({\n name: 'Drawer',\n props: {\n defaultOpen: { type: Boolean, default: false },\n open: { type: Boolean, default: undefined },\n modal: { type: Boolean, default: true },\n placement: {\n type: String as () => DrawerPlacement,\n default: 'right',\n },\n size: {\n type: String as () => DrawerSize,\n default: 'md',\n },\n inline: { type: Boolean, default: false },\n hideBackdrop: { type: Boolean, default: false },\n dock: { type: Boolean, default: false },\n },\n emits: ['update:open'],\n setup(props, { slots, emit }) {\n const styles = drawerVariants()\n\n // Dock mode: open state managed locally (no Reka dialog)\n const localPushOpen = ref(props.defaultOpen ?? false)\n const dockOpen = computed(() =>\n props.open !== undefined ? props.open : localPushOpen.value,\n )\n\n function toggleDock() {\n const next = !dockOpen.value\n if (props.open === undefined) localPushOpen.value = next\n emit('update:open', next)\n }\n\n function closeDock() {\n if (props.open === undefined) localPushOpen.value = false\n emit('update:open', false)\n }\n\n // Provide context to all Drawer sub-components\n useDrawerProvide({\n placement: toRef(props, 'placement'),\n size: toRef(props, 'size'),\n inline: toRef(props, 'inline'),\n hideBackdrop: toRef(props, 'hideBackdrop'),\n dock: toRef(props, 'dock'),\n dockOpen,\n toggleDock,\n closeDock,\n })\n\n const rootProps = computed(() => {\n const p: Record<string, unknown> = {\n defaultOpen: props.defaultOpen,\n // inline and hideBackdrop both require non-modal: no scroll lock, no focus trap\n modal: props.inline || props.hideBackdrop ? false : props.modal,\n 'onUpdate:open': (val: boolean) => emit('update:open', val),\n }\n // Only include `open` when explicitly controlled — omitting the key lets\n // Reka use `defaultOpen` for uncontrolled behavior.\n if (props.open !== undefined) {\n p.open = props.open\n }\n return p\n })\n\n return () => {\n // Dock mode: render a flex container that shifts content\n if (props.dock) {\n return h(\n 'div',\n { class: styles.dockContainer({ placement: props.placement }) },\n slots.default?.(),\n )\n }\n return h(DialogRoot, rootProps.value, slots)\n }\n },\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,IAAA,0CAAe,gBAAgB;CAC7B,MAAM;CACN,OAAO;EACL,aAAa;GAAE,MAAM;GAAS,SAAS;GAAO;EAC9C,MAAM;GAAE,MAAM;GAAS,SAAS,KAAA;GAAW;EAC3C,OAAO;GAAE,MAAM;GAAS,SAAS;GAAM;EACvC,WAAW;GACT,MAAM;GACN,SAAS;GACV;EACD,MAAM;GACJ,MAAM;GACN,SAAS;GACV;EACD,QAAQ;GAAE,MAAM;GAAS,SAAS;GAAO;EACzC,cAAc;GAAE,MAAM;GAAS,SAAS;GAAO;EAC/C,MAAM;GAAE,MAAM;GAAS,SAAS;GAAO;EACxC;CACD,OAAO,CAAC,cAAc;CACtB,MAAM,OAAO,EAAE,OAAO,QAAQ;EAC5B,MAAM,SAAS,gBAAe;EAG9B,MAAM,gBAAgB,IAAI,MAAM,eAAe,MAAK;EACpD,MAAM,WAAW,eACf,MAAM,SAAS,KAAA,IAAY,MAAM,OAAO,cAAc,MACxD;EAEA,SAAS,aAAa;GACpB,MAAM,OAAO,CAAC,SAAS;AACvB,OAAI,MAAM,SAAS,KAAA,EAAW,eAAc,QAAQ;AACpD,QAAK,eAAe,KAAI;;EAG1B,SAAS,YAAY;AACnB,OAAI,MAAM,SAAS,KAAA,EAAW,eAAc,QAAQ;AACpD,QAAK,eAAe,MAAK;;AAI3B,mBAAiB;GACf,WAAW,MAAM,OAAO,YAAY;GACpC,MAAM,MAAM,OAAO,OAAO;GAC1B,QAAQ,MAAM,OAAO,SAAS;GAC9B,cAAc,MAAM,OAAO,eAAe;GAC1C,MAAM,MAAM,OAAO,OAAO;GAC1B;GACA;GACA;GACD,CAAA;EAED,MAAM,YAAY,eAAe;GAC/B,MAAM,IAA6B;IACjC,aAAa,MAAM;IAEnB,OAAO,MAAM,UAAU,MAAM,eAAe,QAAQ,MAAM;IAC1D,kBAAkB,QAAiB,KAAK,eAAe,IAAI;IAC7D;AAGA,OAAI,MAAM,SAAS,KAAA,EACjB,GAAE,OAAO,MAAM;AAEjB,UAAO;IACR;AAED,eAAa;AAEX,OAAI,MAAM,KACR,QAAO,EACL,OACA,EAAE,OAAO,OAAO,cAAc,EAAE,WAAW,MAAM,WAAW,CAAA,EAAG,EAC/D,MAAM,WAAW,CACnB;AAEF,UAAO,EAAE,YAAY,UAAU,OAAO,MAAK;;;CAGhD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerClose.js","names":[],"sources":["../../../src/components/drawer/DrawerClose.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { DialogClose } from 'reka-ui'\nimport { drawerVariants } from '@auronui/styles/components/drawer'\nimport { composeClassName } from '../../utils/composeClassName'\n\nconst props = withDefaults(defineProps<{\n asChild?: boolean\n class?: string\n}>(), {\n asChild: false,\n})\n\nconst styles = drawerVariants()\n</script>\n\n<template>\n <DialogClose\n :as-child=\"props.asChild\"\n :class=\"composeClassName(styles.closeTrigger(), props.class)\"\n >\n <slot />\n </DialogClose>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"DrawerClose.js","names":[],"sources":["../../../src/components/drawer/DrawerClose.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { DialogClose, Primitive } from 'reka-ui'\nimport { drawerVariants } from '@auronui/styles/components/drawer'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useDrawerInject } from './drawer.context'\n\nconst props = withDefaults(defineProps<{\n asChild?: boolean\n class?: string\n}>(), {\n asChild: false,\n})\n\nconst ctx = useDrawerInject()\nconst styles = drawerVariants()\n</script>\n\n<template>\n <!-- dock mode: close open state directly (no Reka dialog context) -->\n <Primitive\n v-if=\"ctx.dock.value\"\n :as-child=\"props.asChild\"\n as=\"button\"\n :class=\"composeClassName(styles.closeTrigger(), props.class)\"\n @click=\"ctx.closeDock()\"\n >\n <slot />\n </Primitive>\n\n <!-- default / inline / hideBackdrop modes: Reka manages close -->\n <DialogClose\n v-else\n :as-child=\"props.asChild\"\n :class=\"composeClassName(styles.closeTrigger(), props.class)\"\n >\n <slot />\n </DialogClose>\n</template>\n"],"mappings":""}
@@ -1,7 +1,8 @@
1
1
  import { composeClassName } from "../../utils/composeClassName.js";
2
2
  import { drawerVariants } from "../../packages/styles/src/components/drawer/drawer.styles.js";
3
+ import { useDrawerInject } from "./drawer.context.js";
3
4
  import { createBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref, withCtx } from "vue";
4
- import { DialogClose } from "reka-ui";
5
+ import { DialogClose, Primitive } from "reka-ui";
5
6
  //#region src/components/drawer/DrawerClose.vue?vue&type=script&setup=true&lang.ts
6
7
  var DrawerClose_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
7
8
  __name: "DrawerClose",
@@ -14,15 +15,26 @@ var DrawerClose_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
14
15
  },
15
16
  setup(__props) {
16
17
  const props = __props;
18
+ const ctx = useDrawerInject();
17
19
  const styles = drawerVariants();
18
20
  return (_ctx, _cache) => {
19
- return openBlock(), createBlock(unref(DialogClose), {
21
+ return unref(ctx).dock.value ? (openBlock(), createBlock(unref(Primitive), {
22
+ key: 0,
23
+ "as-child": props.asChild,
24
+ as: "button",
25
+ class: normalizeClass(unref(composeClassName)(unref(styles).closeTrigger(), props.class)),
26
+ onClick: _cache[0] || (_cache[0] = ($event) => unref(ctx).closeDock())
27
+ }, {
28
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
29
+ _: 3
30
+ }, 8, ["as-child", "class"])) : (openBlock(), createBlock(unref(DialogClose), {
31
+ key: 1,
20
32
  "as-child": props.asChild,
21
33
  class: normalizeClass(unref(composeClassName)(unref(styles).closeTrigger(), props.class))
22
34
  }, {
23
35
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
24
36
  _: 3
25
- }, 8, ["as-child", "class"]);
37
+ }, 8, ["as-child", "class"]));
26
38
  };
27
39
  }
28
40
  });
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerClose.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/drawer/DrawerClose.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { DialogClose } from 'reka-ui'\nimport { drawerVariants } from '@auronui/styles/components/drawer'\nimport { composeClassName } from '../../utils/composeClassName'\n\nconst props = withDefaults(defineProps<{\n asChild?: boolean\n class?: string\n}>(), {\n asChild: false,\n})\n\nconst styles = drawerVariants()\n</script>\n\n<template>\n <DialogClose\n :as-child=\"props.asChild\"\n :class=\"composeClassName(styles.closeTrigger(), props.class)\"\n >\n <slot />\n </DialogClose>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;EAKA,MAAM,QAAQ;EAOd,MAAM,SAAS,gBAAe;;uBAI5B,YAKc,MAAA,YAAA,EAAA;IAJX,YAAU,MAAM;IAChB,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,OAAM,CAAC,cAAY,EAAI,MAAM,MAAK,CAAA;;2BAEnD,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"DrawerClose.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/drawer/DrawerClose.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { DialogClose, Primitive } from 'reka-ui'\nimport { drawerVariants } from '@auronui/styles/components/drawer'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useDrawerInject } from './drawer.context'\n\nconst props = withDefaults(defineProps<{\n asChild?: boolean\n class?: string\n}>(), {\n asChild: false,\n})\n\nconst ctx = useDrawerInject()\nconst styles = drawerVariants()\n</script>\n\n<template>\n <!-- dock mode: close open state directly (no Reka dialog context) -->\n <Primitive\n v-if=\"ctx.dock.value\"\n :as-child=\"props.asChild\"\n as=\"button\"\n :class=\"composeClassName(styles.closeTrigger(), props.class)\"\n @click=\"ctx.closeDock()\"\n >\n <slot />\n </Primitive>\n\n <!-- default / inline / hideBackdrop modes: Reka manages close -->\n <DialogClose\n v-else\n :as-child=\"props.asChild\"\n :class=\"composeClassName(styles.closeTrigger(), props.class)\"\n >\n <slot />\n </DialogClose>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;EAMA,MAAM,QAAQ;EAOd,MAAM,MAAM,iBAAgB;EAC5B,MAAM,SAAS,gBAAe;;UAMpB,MAAA,IAAG,CAAC,KAAK,SAAA,WAAA,EADjB,YAQY,MAAA,UAAA,EAAA;;IANT,YAAU,MAAM;IACjB,IAAG;IACF,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,OAAM,CAAC,cAAY,EAAI,MAAM,MAAK,CAAA;IAC1D,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,IAAG,CAAC,WAAS;;2BAEb,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA;;iDAIV,YAMc,MAAA,YAAA,EAAA;;IAJX,YAAU,MAAM;IAChB,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,OAAM,CAAC,cAAY,EAAI,MAAM,MAAK,CAAA;;2BAEnD,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}