@profitliga/ui 2.0.3 → 2.0.4

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 (115) hide show
  1. package/dist/components/AlertDialog/AlertDialogAction.vue.js +2 -3
  2. package/dist/components/AlertDialog/AlertDialogCancel.vue.js +8 -9
  3. package/dist/components/AlertDialog/AlertDialogTrigger.vue.js +7 -8
  4. package/dist/components/Button/Button.css +1 -1
  5. package/dist/components/Button/Button.vue.js +5 -52
  6. package/dist/components/Button/Button.vue2.js +52 -3
  7. package/dist/components/Calendar/CalendarNext.vue.js +3 -4
  8. package/dist/components/Calendar/CalendarPrev.vue.js +7 -8
  9. package/dist/components/ConfirmDialog/ConfirmDialog.vue2.js +11 -12
  10. package/dist/components/DatePicker/DatePickerNext.vue.js +1 -2
  11. package/dist/components/DatePicker/DatePickerPrev.vue.js +7 -8
  12. package/dist/components/DateRangePicker/DateRangePickerNext.vue.js +6 -7
  13. package/dist/components/DateRangePicker/DateRangePickerPrev.vue.js +7 -8
  14. package/dist/components/RangeCalendar/RangeCalendarNext.vue.js +3 -4
  15. package/dist/components/RangeCalendar/RangeCalendarPrev.vue.js +3 -4
  16. package/dist/components/Schedule/Schedule.vue2.js +38 -39
  17. package/dist/components/index.js +391 -392
  18. package/dist/components/v2/AlertDialog/AlertDialog.css +1 -1
  19. package/dist/components/v2/AlertDialog/AlertDialog.types.d.ts +2 -2
  20. package/dist/components/v2/AlertDialog/AlertDialog.vue.d.ts +2 -2
  21. package/dist/components/v2/AlertDialog/AlertDialog.vue.js +2 -2
  22. package/dist/components/v2/AlertDialog/AlertDialog.vue2.js +29 -29
  23. package/dist/components/v2/Checkbox/Checkbox.css +1 -1
  24. package/dist/components/v2/Checkbox/Checkbox.types.d.ts +11 -0
  25. package/dist/components/v2/Checkbox/Checkbox.vue.d.ts +2 -0
  26. package/dist/components/v2/Checkbox/Checkbox.vue.js +2 -2
  27. package/dist/components/v2/Checkbox/Checkbox.vue2.js +61 -49
  28. package/dist/components/v2/Combobox/Combobox.css +1 -1
  29. package/dist/components/v2/Combobox/Combobox.types.d.ts +14 -2
  30. package/dist/components/v2/Combobox/Combobox.vue.js +1 -1
  31. package/dist/components/v2/Combobox/Combobox.vue2.js +190 -181
  32. package/dist/components/v2/ConfirmDialog/ConfirmDialog.types.d.ts +2 -2
  33. package/dist/components/v2/ConfirmDialog/ConfirmDialog.vue.d.ts +2 -2
  34. package/dist/components/v2/ConfirmDialog/ConfirmDialog.vue.js +6 -6
  35. package/dist/components/v2/DatePicker/DatePicker.css +1 -1
  36. package/dist/components/v2/DatePicker/DatePicker.types.d.ts +2 -2
  37. package/dist/components/v2/DatePicker/DatePicker.vue.d.ts +2 -2
  38. package/dist/components/v2/DatePicker/DatePicker.vue.js +2 -2
  39. package/dist/components/v2/DatePicker/DatePicker.vue2.js +54 -54
  40. package/dist/components/v2/Divider/Divider.types.d.ts +8 -0
  41. package/dist/components/v2/DropdownMenu/DropdownMenu.types.d.ts +2 -2
  42. package/dist/components/v2/DropdownMenu/DropdownMenu.vue.d.ts +2 -2
  43. package/dist/components/v2/DropdownMenu/DropdownMenu.vue2.js +6 -6
  44. package/dist/components/v2/FileUpload/FileUpload.css +1 -1
  45. package/dist/components/v2/FileUpload/FileUpload.vue.js +2 -2
  46. package/dist/components/v2/FileUpload/FileUpload.vue2.js +16 -16
  47. package/dist/components/v2/FormField/FormField.css +1 -0
  48. package/dist/components/v2/FormField/FormField.types.d.ts +48 -0
  49. package/dist/components/v2/FormField/FormField.vue.d.ts +25 -0
  50. package/dist/components/v2/FormField/FormField.vue.js +8 -0
  51. package/dist/components/v2/FormField/FormField.vue2.js +54 -0
  52. package/dist/components/v2/FormField/index.d.ts +3 -0
  53. package/dist/components/v2/Image/Image.css +1 -0
  54. package/dist/components/v2/Image/Image.types.d.ts +26 -0
  55. package/dist/components/v2/Image/Image.vue.d.ts +16 -0
  56. package/dist/components/v2/Image/Image.vue.js +8 -0
  57. package/dist/components/v2/Image/Image.vue2.js +91 -0
  58. package/dist/components/v2/Image/ImageList.css +1 -0
  59. package/dist/components/v2/Image/ImageList.types.d.ts +28 -0
  60. package/dist/components/v2/Image/ImageList.vue.d.ts +15 -0
  61. package/dist/components/v2/Image/ImageList.vue.js +8 -0
  62. package/dist/components/v2/Image/ImageList.vue2.js +38 -0
  63. package/dist/components/v2/Image/index.d.ts +5 -0
  64. package/dist/components/v2/InputNumber/InputNumber.css +1 -1
  65. package/dist/components/v2/InputNumber/InputNumber.vue.js +2 -2
  66. package/dist/components/v2/InputNumber/InputNumber.vue2.js +22 -21
  67. package/dist/components/v2/InputSelect/InputSelect.types.d.ts +2 -2
  68. package/dist/components/v2/InputSelect/InputSelect.vue.d.ts +2 -2
  69. package/dist/components/v2/InputSelect/InputSelect.vue.js +14 -14
  70. package/dist/components/v2/InputSelect/InputSelectChip.css +1 -1
  71. package/dist/components/v2/InputSelect/InputSelectChip.vue.d.ts +3 -3
  72. package/dist/components/v2/InputSelect/InputSelectChip.vue.js +2 -2
  73. package/dist/components/v2/InputSelect/InputSelectChip.vue2.js +17 -17
  74. package/dist/components/v2/Popover/Popover.css +1 -1
  75. package/dist/components/v2/Popover/Popover.types.d.ts +2 -2
  76. package/dist/components/v2/Popover/Popover.vue.d.ts +2 -2
  77. package/dist/components/v2/Popover/Popover.vue.js +2 -2
  78. package/dist/components/v2/Popover/Popover.vue2.js +24 -24
  79. package/dist/components/v2/Radio/Radio.css +1 -1
  80. package/dist/components/v2/Radio/Radio.vue.d.ts +4 -0
  81. package/dist/components/v2/Radio/Radio.vue.js +1 -1
  82. package/dist/components/v2/Radio/Radio.vue2.js +57 -49
  83. package/dist/components/v2/Schedule/Schedule.css +1 -1
  84. package/dist/components/v2/Schedule/Schedule.types.d.ts +2 -2
  85. package/dist/components/v2/Schedule/Schedule.vue.d.ts +2 -2
  86. package/dist/components/v2/Schedule/Schedule.vue.js +3 -3
  87. package/dist/components/v2/Schedule/Schedule.vue2.js +55 -55
  88. package/dist/components/v2/Select/Select.css +1 -1
  89. package/dist/components/v2/Select/Select.types.d.ts +8 -2
  90. package/dist/components/v2/Select/Select.vue.js +3 -3
  91. package/dist/components/v2/Select/Select.vue2.js +102 -92
  92. package/dist/components/v2/Toast/Toast.types.d.ts +2 -2
  93. package/dist/components/v2/Toast/Toaster.css +1 -1
  94. package/dist/components/v2/Toast/Toaster.vue.d.ts +2 -2
  95. package/dist/components/v2/Toast/Toaster.vue.js +1 -1
  96. package/dist/components/v2/Toast/Toaster.vue2.js +17 -17
  97. package/dist/components/v2/Tooltip/Tooltip.css +1 -1
  98. package/dist/components/v2/Tooltip/Tooltip.types.d.ts +2 -2
  99. package/dist/components/v2/Tooltip/Tooltip.vue.d.ts +2 -2
  100. package/dist/components/v2/Tooltip/Tooltip.vue.js +1 -1
  101. package/dist/components/v2/Tooltip/Tooltip.vue2.js +39 -38
  102. package/dist/components/v2/Tooltip/TooltipContent.css +1 -1
  103. package/dist/components/v2/Tooltip/TooltipContent.vue.d.ts +2 -2
  104. package/dist/components/v2/Tooltip/TooltipContent.vue.js +2 -2
  105. package/dist/components/v2/Tooltip/TooltipContent.vue2.js +20 -20
  106. package/dist/components/v2/Tooltip/vTooltip.directive.js +40 -41
  107. package/dist/components/v2/index.d.ts +2 -0
  108. package/dist/components/v2/index.js +82 -76
  109. package/dist/components/v2/shared/isHtmlElement.util.d.ts +15 -0
  110. package/dist/components/v2/shared/isHtmlElement.util.js +10 -0
  111. package/dist/components/v2/shared/useIsMobile.util.d.ts +13 -0
  112. package/dist/components/v2/shared/useIsMobile.util.js +8 -0
  113. package/dist/components/v2/shared/useTriggerAria.util.js +4 -3
  114. package/dist/types/global.types.d.ts +10 -0
  115. package/package.json +3 -1
@@ -1 +1 @@
1
- .alert-dialog-trigger[data-v-143a5f3e]{display:contents}.alert-dialog-layer[data-v-143a5f3e]{position:relative}.alert-dialog-icon[data-v-143a5f3e]{--icon-bg:var(--color-primary-600);--icon-shadow:#008925b2;box-sizing:border-box;width:44px;height:44px;color:var(--color-neutral-0);background-color:var(--icon-bg);box-shadow:-1px 1px 10px 0px var(--icon-shadow);filter:opacity(.7);border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;padding:8px;display:flex}.alert-dialog-icon--success[data-v-143a5f3e]{--icon-bg:var(--color-primary-600);--icon-shadow:#008925b2}.alert-dialog-icon--warning[data-v-143a5f3e]{--icon-bg:var(--color-warn-600);--icon-shadow:#d47d16b2}.alert-dialog-icon--error[data-v-143a5f3e]{--icon-bg:var(--color-error-600);--icon-shadow:#bd2429b2}.alert-dialog-content[data-v-143a5f3e]{box-sizing:content-box;scrollbar-width:thin;scrollbar-color:var(--theme-neutral-icon-primary) var(--theme-neutral-surface-icon);width:90vw;max-height:85vh;overflow-y:auto}.alert-dialog-content[data-v-143a5f3e]::-webkit-scrollbar{width:8px;height:0}.alert-dialog-content[data-v-143a5f3e]::-webkit-scrollbar-thumb{background-color:var(--theme-neutral-icon-primary);background-clip:padding-box;border:1px solid #0000;border-radius:999px}.alert-dialog-content[data-v-143a5f3e]::-webkit-scrollbar-track{background:var(--theme-neutral-surface-icon);border-radius:4px}.alert-dialog-content[data-v-143a5f3e]::-webkit-scrollbar-corner{background:0 0}.alert-dialog-content[data-v-143a5f3e]{box-sizing:border-box;z-index:1001;background-color:#fff;border-radius:12px;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:24px;display:flex;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.alert-dialog-content[data-state=open][data-v-143a5f3e]{animation:fadeIn var(--animation-duration) ease-in-out}.alert-dialog-content[data-state=closed][data-v-143a5f3e]{animation:fadeOut var(--animation-duration) ease-in-out}.alert-dialog-content__header[data-v-143a5f3e]{justify-content:flex-start;align-items:center;gap:12px;width:100%;margin-bottom:20px;display:flex}.alert-dialog-content__header--divided[data-v-143a5f3e]{border-bottom:1px solid var(--color-secondary-250);margin-bottom:12px;padding-bottom:12px}.alert-dialog-content__title[data-v-143a5f3e]{width:100%;color:var(--theme-neutral-text-title);margin:0;font-size:1.25rem;font-weight:500;line-height:120%}.alert-dialog-content__title--with-icon[data-v-143a5f3e]{font-weight:700}.alert-dialog-content__description[data-v-143a5f3e]{width:100%;color:var(--theme-neutral-text-body);margin:0 0 12px;font-size:1rem;font-weight:400;line-height:160%}.alert-dialog-content__actions[data-v-143a5f3e]{justify-content:flex-end;align-items:center;gap:12px;width:100%;margin-top:20px;display:flex}.alert-dialog-mobile[data-v-143a5f3e]{box-sizing:border-box;flex-direction:column;gap:16px;width:100%;padding:16px;display:flex}.alert-dialog-mobile__header[data-v-143a5f3e]{justify-content:flex-start;align-items:center;gap:12px;display:flex}.alert-dialog-mobile__header--divided[data-v-143a5f3e]{border-bottom:1px solid var(--color-secondary-250);padding-bottom:12px}.alert-dialog-mobile__title[data-v-143a5f3e]{color:var(--theme-neutral-text-title);margin:0;font-size:1.125rem;font-weight:500;line-height:1.5}.alert-dialog-mobile__title--with-icon[data-v-143a5f3e]{font-weight:700}.alert-dialog-mobile__description[data-v-143a5f3e]{color:var(--theme-neutral-text-body);font-size:1rem;font-weight:400;line-height:160%}.alert-dialog-mobile__actions[data-v-143a5f3e]{flex-direction:column-reverse;gap:8px;width:100%;display:flex}.alert-dialog-mobile__actions[data-v-143a5f3e] button{width:100%}
1
+ .alert-dialog-trigger[data-v-4f6feced]{display:contents}.alert-dialog-layer[data-v-4f6feced]{position:relative}.alert-dialog-icon[data-v-4f6feced]{--icon-bg:var(--color-primary-600);--icon-shadow:#008925b2;box-sizing:border-box;width:44px;height:44px;color:var(--color-neutral-0);background-color:var(--icon-bg);box-shadow:-1px 1px 10px 0px var(--icon-shadow);filter:opacity(.7);border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;padding:8px;display:flex}.alert-dialog-icon--success[data-v-4f6feced]{--icon-bg:var(--color-primary-600);--icon-shadow:#008925b2}.alert-dialog-icon--warning[data-v-4f6feced]{--icon-bg:var(--color-warn-600);--icon-shadow:#d47d16b2}.alert-dialog-icon--error[data-v-4f6feced]{--icon-bg:var(--color-error-600);--icon-shadow:#bd2429b2}.alert-dialog-content[data-v-4f6feced]{box-sizing:content-box;scrollbar-width:thin;scrollbar-color:var(--theme-neutral-icon-primary) var(--theme-neutral-surface-icon);width:90vw;max-height:85vh;overflow-y:auto}.alert-dialog-content[data-v-4f6feced]::-webkit-scrollbar{width:8px;height:0}.alert-dialog-content[data-v-4f6feced]::-webkit-scrollbar-thumb{background-color:var(--theme-neutral-icon-primary);background-clip:padding-box;border:1px solid #0000;border-radius:999px}.alert-dialog-content[data-v-4f6feced]::-webkit-scrollbar-track{background:var(--theme-neutral-surface-icon);border-radius:4px}.alert-dialog-content[data-v-4f6feced]::-webkit-scrollbar-corner{background:0 0}.alert-dialog-content[data-v-4f6feced]{box-sizing:border-box;z-index:1001;background-color:#fff;border-radius:12px;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:24px;display:flex;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.alert-dialog-content[data-state=open][data-v-4f6feced]{animation:fadeIn var(--animation-duration) ease-in-out}.alert-dialog-content[data-state=closed][data-v-4f6feced]{animation:fadeOut var(--animation-duration) ease-in-out}.alert-dialog-content__header[data-v-4f6feced]{justify-content:flex-start;align-items:center;gap:12px;width:100%;margin-bottom:20px;display:flex}.alert-dialog-content__header--divided[data-v-4f6feced]{border-bottom:1px solid var(--color-secondary-250);margin-bottom:12px;padding-bottom:12px}.alert-dialog-content__title[data-v-4f6feced]{width:100%;color:var(--theme-neutral-text-title);margin:0;font-size:1.25rem;font-weight:500;line-height:120%}.alert-dialog-content__title--with-icon[data-v-4f6feced]{font-weight:700}.alert-dialog-content__description[data-v-4f6feced]{width:100%;color:var(--theme-neutral-text-body);margin:0 0 12px;font-size:1rem;font-weight:400;line-height:160%}.alert-dialog-content__actions[data-v-4f6feced]{justify-content:flex-end;align-items:center;gap:12px;width:100%;margin-top:20px;display:flex}.alert-dialog-mobile[data-v-4f6feced]{box-sizing:border-box;flex-direction:column;gap:16px;width:100%;padding:16px;display:flex}.alert-dialog-mobile__header[data-v-4f6feced]{justify-content:flex-start;align-items:center;gap:12px;display:flex}.alert-dialog-mobile__header--divided[data-v-4f6feced]{border-bottom:1px solid var(--color-secondary-250);padding-bottom:12px}.alert-dialog-mobile__title[data-v-4f6feced]{color:var(--theme-neutral-text-title);margin:0;font-size:1.125rem;font-weight:500;line-height:1.5}.alert-dialog-mobile__title--with-icon[data-v-4f6feced]{font-weight:700}.alert-dialog-mobile__description[data-v-4f6feced]{color:var(--theme-neutral-text-body);font-size:1rem;font-weight:400;line-height:160%}.alert-dialog-mobile__actions[data-v-4f6feced]{flex-direction:column-reverse;gap:8px;width:100%;display:flex}.alert-dialog-mobile__actions[data-v-4f6feced] button{width:100%}
@@ -1,8 +1,8 @@
1
- import { TBreakpoints } from '../../../types/global.types';
1
+ import { TBreakpointMobile } from '../../../types/global.types';
2
2
  export type AlertDialogVariant = 'success' | 'warning' | 'error';
3
3
  export interface AlertDialogProps {
4
4
  width?: number;
5
- breakpointMobile?: TBreakpoints;
5
+ breakpointMobile?: TBreakpointMobile;
6
6
  /**
7
7
  * Статус диалога. Добавляет в шапку цветную плашку с иконкой:
8
8
  * success — галочка, warning и error — восклицательный знак.
@@ -1,6 +1,6 @@
1
1
  import { AlertDialogProps, AlertDialogVariant } from './AlertDialog.types';
2
2
  import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
3
- import { TBreakpoints } from '../../../types/global.types';
3
+ import { TBreakpointMobile } from '../../../types/global.types';
4
4
  type __VLS_Props = AlertDialogProps;
5
5
  type __VLS_PublicProps = {
6
6
  'open'?: boolean;
@@ -40,7 +40,7 @@ declare const __VLS_component: DefineComponent<__VLS_PublicProps, {}, {}, {}, {}
40
40
  }>, {
41
41
  width: number;
42
42
  variant: AlertDialogVariant;
43
- breakpointMobile: TBreakpoints;
43
+ breakpointMobile: TBreakpointMobile;
44
44
  divider: boolean;
45
45
  testId: string;
46
46
  }, {}, {}, {}, string, ComponentProvideOptions, false, {
@@ -2,7 +2,7 @@ import './AlertDialog.css';
2
2
  import o from "./AlertDialog.vue2.js";
3
3
  /* empty css */
4
4
  import t from "../../../_virtual/_plugin-vue_export-helper.js";
5
- const f = /* @__PURE__ */ t(o, [["__scopeId", "data-v-143a5f3e"]]);
5
+ const a = /* @__PURE__ */ t(o, [["__scopeId", "data-v-4f6feced"]]);
6
6
  export {
7
- f as default
7
+ a as default
8
8
  };
@@ -1,12 +1,12 @@
1
1
  import { defineComponent as W, useModel as Z, useId as j, computed as m, useTemplateRef as R, onBeforeUnmount as G, openBlock as o, createElementBlock as n, Fragment as H, mergeProps as i, unref as t, renderSlot as s, createCommentVNode as d, createBlock as g, withCtx as A, createElementVNode as c, normalizeClass as T, resolveDynamicComponent as z, normalizeStyle as J, mergeModels as O } from "vue";
2
2
  import { CircleCheck as Q, CircleAlert as X } from "@lucide/vue";
3
- import { breakpoints as Y } from "../../../utils/breakpoints.util.js";
4
- import { useBodyScroll as x } from "../../../utils/useBodyScroll.util.js";
5
- import { useFocusTrap as ee } from "../../../utils/useFocusTrap.util.js";
6
- import te from "../BottomSheet/BottomSheet.vue.js";
3
+ import { useBodyScroll as Y } from "../../../utils/useBodyScroll.util.js";
4
+ import { useFocusTrap as x } from "../../../utils/useFocusTrap.util.js";
5
+ import ee from "../BottomSheet/BottomSheet.vue.js";
7
6
  import { ANIMATION_DURATION_MS as _ } from "../shared/animation.const.js";
8
- import oe from "../shared/Portal.vue.js";
9
- import { useDelayedVisibility as ae } from "../shared/useDelayedVisibility.util.js";
7
+ import te from "../shared/Portal.vue.js";
8
+ import { useDelayedVisibility as oe } from "../shared/useDelayedVisibility.util.js";
9
+ import { useIsMobile as ae } from "../shared/useIsMobile.util.js";
10
10
  import { useLayerZIndex as ie } from "../shared/useLayerZIndex.util.js";
11
11
  import { useTestId as le } from "../shared/useTestId.util.js";
12
12
  import { useTriggerAria as se } from "../shared/useTriggerAria.util.js";
@@ -15,7 +15,7 @@ const re = { class: "alert-dialog-mobile" }, ne = ["data-state"], de = ["aria-de
15
15
  __name: "AlertDialog",
16
16
  props: /* @__PURE__ */ O({
17
17
  width: { default: 500 },
18
- breakpointMobile: { default: "sm" },
18
+ breakpointMobile: { type: [String, Boolean], default: "sm" },
19
19
  variant: { default: void 0 },
20
20
  divider: { type: Boolean, default: void 0 },
21
21
  testId: { default: void 0 }
@@ -25,35 +25,35 @@ const re = { class: "alert-dialog-mobile" }, ne = ["data-state"], de = ["aria-de
25
25
  }),
26
26
  emits: /* @__PURE__ */ O(["escapeKeyDown"], ["update:open"]),
27
27
  setup(l, { emit: N }) {
28
- const u = l, I = Y.smaller(u.breakpointMobile), w = N, r = Z(l, "open"), y = j(), p = `alert-dialog-title-${y}`, C = `alert-dialog-description-${y}`, k = `alert-dialog-content-${y}`, K = m(() => `${u.width}px`), a = le(() => u.testId), L = m(() => ({
28
+ const u = l, I = ae(u.breakpointMobile), w = N, r = Z(l, "open"), y = j(), p = `alert-dialog-title-${y}`, C = `alert-dialog-description-${y}`, b = `alert-dialog-content-${y}`, K = m(() => `${u.width}px`), a = le(() => u.testId), L = m(() => ({
29
29
  "aria-haspopup": "dialog",
30
30
  "aria-expanded": r.value,
31
- "aria-controls": r.value ? k : void 0
32
- })), D = m(
31
+ "aria-controls": r.value ? b : void 0
32
+ })), S = m(
33
33
  () => u.variant === "success" ? Q : X
34
- ), S = m(() => u.divider ?? !!u.variant), B = R("triggerRef"), E = R("contentRef");
34
+ ), B = m(() => u.divider ?? !!u.variant), D = R("triggerRef"), M = R("contentRef");
35
35
  se({
36
- host: () => B.value,
36
+ host: () => D.value,
37
37
  isOpen: () => r.value,
38
- contentId: () => k,
38
+ contentId: () => b,
39
39
  hasPopup: () => "dialog"
40
40
  });
41
- const { lockScroll: P, unlockScroll: U } = x(), b = ee(() => E.value), $ = ie();
41
+ const { lockScroll: P, unlockScroll: U } = Y(), k = x(() => M.value), $ = ie();
42
42
  function V() {
43
43
  r.value = !1;
44
44
  }
45
45
  function h(e) {
46
46
  e.key === "Escape" && (w("escapeKeyDown", e), e.defaultPrevented || V());
47
47
  }
48
- const F = m(() => r.value && !I.value), { visible: q, dataState: M } = ae(
48
+ const F = m(() => r.value && !I.value), { visible: q, dataState: E } = oe(
49
49
  F,
50
50
  _,
51
51
  {
52
52
  onOpen: () => {
53
- $.acquire(), P(), b.activate({ focusDelayMs: _ }), document.addEventListener("keydown", h);
53
+ $.acquire(), P(), k.activate({ focusDelayMs: _ }), document.addEventListener("keydown", h);
54
54
  },
55
55
  onCloseStart: () => {
56
- b.deactivate(), document.removeEventListener("keydown", h);
56
+ k.deactivate(), document.removeEventListener("keydown", h);
57
57
  },
58
58
  onCloseEnd: () => {
59
59
  U(), $.release();
@@ -61,19 +61,19 @@ const re = { class: "alert-dialog-mobile" }, ne = ["data-state"], de = ["aria-de
61
61
  }
62
62
  );
63
63
  return G(() => {
64
- document.removeEventListener("keydown", h), b.deactivate();
64
+ document.removeEventListener("keydown", h), k.deactivate();
65
65
  }), (e, v) => (o(), n(H, null, [
66
66
  e.$slots.trigger ? (o(), n("span", i({
67
67
  key: 0,
68
68
  ref_key: "triggerRef",
69
- ref: B,
69
+ ref: D,
70
70
  class: "alert-dialog-trigger"
71
71
  }, t(a)("trigger"), {
72
72
  onClick: v[0] || (v[0] = (f) => r.value = !0)
73
73
  }), [
74
74
  s(e.$slots, "trigger", { props: L.value }, void 0, !0)
75
75
  ], 16)) : d("", !0),
76
- t(I) ? (o(), g(t(te), {
76
+ t(I) ? (o(), g(t(ee), {
77
77
  key: 1,
78
78
  open: r.value,
79
79
  "onUpdate:open": v[1] || (v[1] = (f) => r.value = f),
@@ -87,7 +87,7 @@ const re = { class: "alert-dialog-mobile" }, ne = ["data-state"], de = ["aria-de
87
87
  c("div", re, [
88
88
  c("div", {
89
89
  class: T(["alert-dialog-mobile__header", {
90
- "alert-dialog-mobile__header--divided": S.value
90
+ "alert-dialog-mobile__header--divided": B.value
91
91
  }])
92
92
  }, [
93
93
  l.variant ? (o(), n("span", i({
@@ -95,7 +95,7 @@ const re = { class: "alert-dialog-mobile" }, ne = ["data-state"], de = ["aria-de
95
95
  class: ["alert-dialog-icon", `alert-dialog-icon--${l.variant}`]
96
96
  }, t(a)("icon")), [
97
97
  s(e.$slots, "icon", {}, () => [
98
- (o(), g(z(D.value), { size: 28 }))
98
+ (o(), g(z(S.value), { size: 28 }))
99
99
  ], !0)
100
100
  ], 16)) : d("", !0),
101
101
  c("h2", i({
@@ -122,7 +122,7 @@ const re = { class: "alert-dialog-mobile" }, ne = ["data-state"], de = ["aria-de
122
122
  ])
123
123
  ]),
124
124
  _: 3
125
- }, 8, ["open", "test-id"])) : t(q) ? (o(), g(oe, { key: 2 }, {
125
+ }, 8, ["open", "test-id"])) : t(q) ? (o(), g(te, { key: 2 }, {
126
126
  default: A(() => [
127
127
  c("div", {
128
128
  class: "alert-dialog-layer",
@@ -130,23 +130,23 @@ const re = { class: "alert-dialog-mobile" }, ne = ["data-state"], de = ["aria-de
130
130
  }, [
131
131
  c("div", i({
132
132
  class: "overlay alert-dialog-overlay",
133
- "data-state": t(M)
133
+ "data-state": t(E)
134
134
  }, t(a)("overlay")), null, 16, ne),
135
135
  c("div", i({
136
- id: k,
136
+ id: b,
137
137
  ref_key: "contentRef",
138
- ref: E,
138
+ ref: M,
139
139
  role: "alertdialog",
140
140
  "aria-modal": "true",
141
141
  "aria-labelledby": p,
142
142
  "aria-describedby": e.$slots.default ? C : void 0,
143
- "data-state": t(M),
143
+ "data-state": t(E),
144
144
  class: "alert-dialog-content",
145
145
  style: { maxWidth: K.value }
146
146
  }, { ...e.$attrs, ...t(a)("content") }), [
147
147
  c("div", {
148
148
  class: T(["alert-dialog-content__header", {
149
- "alert-dialog-content__header--divided": S.value
149
+ "alert-dialog-content__header--divided": B.value
150
150
  }])
151
151
  }, [
152
152
  l.variant ? (o(), n("span", i({
@@ -154,7 +154,7 @@ const re = { class: "alert-dialog-mobile" }, ne = ["data-state"], de = ["aria-de
154
154
  class: ["alert-dialog-icon", `alert-dialog-icon--${l.variant}`]
155
155
  }, t(a)("icon")), [
156
156
  s(e.$slots, "icon", {}, () => [
157
- (o(), g(z(D.value), { size: 28 }))
157
+ (o(), g(z(S.value), { size: 28 }))
158
158
  ], !0)
159
159
  ], 16)) : d("", !0),
160
160
  c("h2", i({
@@ -1 +1 @@
1
- .checkbox-v2[data-v-b2ea32b4]{--checkbox-color:var(--theme-neutral-border-default);cursor:pointer;align-items:flex-start;gap:.5rem;display:inline-flex}.checkbox-v2__input[data-v-b2ea32b4]{clip-path:inset(50%);white-space:nowrap;border:0;width:.0625rem;height:.0625rem;margin:-.0625rem;padding:0;position:absolute;overflow:hidden}.checkbox-v2__box[data-v-b2ea32b4]{width:1.25rem;height:1.25rem;color:var(--theme-neutral-0);border:.0625rem solid var(--checkbox-color);transition:background-color var(--animation-duration-fast) ease, border-color var(--animation-duration-fast) ease, outline-color var(--animation-duration-fast) ease;border-radius:.3125rem;flex-shrink:0;justify-content:center;align-items:center;display:flex}.checkbox-v2__mark[data-v-b2ea32b4]{width:100%;height:100%}.checkbox-v2__text[data-v-b2ea32b4]{flex-direction:column;gap:.25rem;min-width:0;display:flex}.checkbox-v2__label[data-v-b2ea32b4]{color:var(--theme-neutral-text-title);overflow-wrap:break-word;font-size:.875rem;font-weight:400;line-height:1.25rem}.checkbox-v2__description[data-v-b2ea32b4]{color:var(--theme-neutral-text-caption);overflow-wrap:break-word;font-size:1rem;font-weight:400;line-height:1.25rem}.checkbox-v2[data-v-b2ea32b4]:not(:has(.checkbox-v2__description)){align-items:center}.checkbox-v2--icon-right[data-v-b2ea32b4]{flex-direction:row-reverse}.checkbox-v2--checked .checkbox-v2__box[data-v-b2ea32b4]{background-color:var(--checkbox-color)}.checkbox-v2--checked[data-v-b2ea32b4]{--checkbox-color:var(--theme-primary-500)}.checkbox-v2[data-v-b2ea32b4]:hover:not(.checkbox-v2--disabled){--checkbox-color:var(--theme-primary-300)}.checkbox-v2[data-v-b2ea32b4]:has(.checkbox-v2__input:focus-visible){--checkbox-color:var(--theme-primary-300)}.checkbox-v2:has(.checkbox-v2__input:focus-visible) .checkbox-v2__box[data-v-b2ea32b4]{outline:.0625rem solid var(--theme-primary-300);outline-offset:.125rem}.checkbox-v2[data-v-b2ea32b4]:active:not(.checkbox-v2--disabled){--checkbox-color:var(--theme-primary-700)}.checkbox-v2--disabled[data-v-b2ea32b4]{--checkbox-color:var(--theme-neutral-surface-disabled);cursor:not-allowed;opacity:.5}.checkbox-v2--disabled .checkbox-v2__label[data-v-b2ea32b4]{color:var(--theme-neutral-400)}.checkbox-v2--disabled.checkbox-v2--checked[data-v-b2ea32b4]{--checkbox-color:var(--theme-neutral-icon-disabled)}
1
+ .checkbox-v2[data-v-05f1e5a6]{--checkbox-color:var(--theme-neutral-border-default);cursor:pointer;align-items:flex-start;gap:.5rem;display:inline-flex}.checkbox-v2__input[data-v-05f1e5a6]{clip-path:inset(50%);white-space:nowrap;border:0;width:.0625rem;height:.0625rem;margin:-.0625rem;padding:0;position:absolute;overflow:hidden}.checkbox-v2__box[data-v-05f1e5a6]{width:1.25rem;height:1.25rem;color:var(--theme-neutral-0);border:.0625rem solid var(--checkbox-color);transition:background-color var(--animation-duration-fast) ease, border-color var(--animation-duration-fast) ease, outline-color var(--animation-duration-fast) ease;border-radius:.3125rem;flex-shrink:0;justify-content:center;align-items:center;display:flex}.checkbox-v2__mark[data-v-05f1e5a6]{width:100%;height:100%}.checkbox-v2__text[data-v-05f1e5a6]{flex-direction:column;gap:.25rem;min-width:0;display:flex}.checkbox-v2__label[data-v-05f1e5a6]{color:var(--theme-neutral-text-title);overflow-wrap:break-word;font-size:.875rem;font-weight:400;line-height:1.25rem}.checkbox-v2__description[data-v-05f1e5a6]{color:var(--theme-neutral-text-caption);overflow-wrap:break-word;font-size:1rem;font-weight:400;line-height:1.25rem}.checkbox-v2[data-v-05f1e5a6]:not(:has(.checkbox-v2__description)){align-items:center}.checkbox-v2--icon-right[data-v-05f1e5a6]{flex-direction:row-reverse}.checkbox-v2--checked .checkbox-v2__box[data-v-05f1e5a6]{background-color:var(--checkbox-color)}.checkbox-v2--checked[data-v-05f1e5a6]{--checkbox-color:var(--theme-primary-500)}.checkbox-v2[data-v-05f1e5a6]:hover:not(.checkbox-v2--disabled){--checkbox-color:var(--theme-primary-300)}.checkbox-v2[data-v-05f1e5a6]:has(.checkbox-v2__input:focus-visible){--checkbox-color:var(--theme-primary-300)}.checkbox-v2:has(.checkbox-v2__input:focus-visible) .checkbox-v2__box[data-v-05f1e5a6]{outline:.0625rem solid var(--theme-primary-300);outline-offset:.125rem}.checkbox-v2[data-v-05f1e5a6]:active:not(.checkbox-v2--disabled){--checkbox-color:var(--theme-primary-700)}.checkbox-v2--disabled[data-v-05f1e5a6]{--checkbox-color:var(--theme-neutral-surface-disabled);cursor:not-allowed;opacity:.5}.checkbox-v2--disabled .checkbox-v2__label[data-v-05f1e5a6]{color:var(--theme-neutral-400)}.checkbox-v2--disabled.checkbox-v2--checked[data-v-05f1e5a6]{--checkbox-color:var(--theme-neutral-icon-disabled)}.checkbox-v2--error[data-v-05f1e5a6]:not(.checkbox-v2--disabled){--checkbox-color:var(--theme-error-500)}.checkbox-v2--error:not(.checkbox-v2--disabled) .checkbox-v2__label[data-v-05f1e5a6]{color:var(--theme-error-500)}.checkbox-v2__error[data-v-05f1e5a6]{color:var(--theme-error-500);overflow-wrap:break-word;font-size:.875rem;font-weight:400;line-height:1.25rem}
@@ -5,6 +5,17 @@ export interface CheckboxProps {
5
5
  label?: string;
6
6
  /** Пояснение под подписью. Можно заменить слотом `description` */
7
7
  description?: string;
8
+ /**
9
+ * Состояние ошибки: квадрат и подпись краснеют, показывается
10
+ * `errorMessage`. Типовой случай — незаполненное согласие на обработку
11
+ * персональных данных при отправке формы.
12
+ */
13
+ error?: boolean;
14
+ /**
15
+ * Текст ошибки под флажком. Показывается только при `error: true`, поэтому
16
+ * проп можно держать заполненным постоянно — так же, как у `Input`.
17
+ */
18
+ errorMessage?: string;
8
19
  disabled?: boolean;
9
20
  iconPosition?: CheckboxIconPosition;
10
21
  /** Имя поля в форме */
@@ -31,8 +31,10 @@ declare const __VLS_component: DefineComponent<__VLS_PublicProps, {}, {}, {}, {}
31
31
  disabled: boolean;
32
32
  id: string;
33
33
  iconPosition: CheckboxIconPosition;
34
+ error: boolean;
34
35
  name: string;
35
36
  description: string;
37
+ errorMessage: string;
36
38
  ariaLabel: string;
37
39
  testId: string;
38
40
  ariaLabelledby: string;
@@ -2,7 +2,7 @@ import './Checkbox.css';
2
2
  import o from "./Checkbox.vue2.js";
3
3
  /* empty css */
4
4
  import t from "../../../_virtual/_plugin-vue_export-helper.js";
5
- const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-b2ea32b4"]]);
5
+ const f = /* @__PURE__ */ t(o, [["__scopeId", "data-v-05f1e5a6"]]);
6
6
  export {
7
- m as default
7
+ f as default
8
8
  };
@@ -1,26 +1,28 @@
1
- import { defineComponent as $, useModel as x, useSlots as R, useId as T, useTemplateRef as E, computed as n, watchEffect as N, openBlock as l, createElementBlock as o, mergeProps as d, unref as c, createElementVNode as v, createCommentVNode as f, renderSlot as y, createTextVNode as g, toDisplayString as w, mergeModels as L } from "vue";
2
- import { useTestId as P } from "../shared/useTestId.util.js";
3
- const S = ["for"], D = ["id", "name", "value", "checked", "disabled", "aria-label", "aria-labelledby"], A = {
1
+ import { defineComponent as R, useModel as y, useSlots as T, useId as _, useTemplateRef as N, computed as i, watchEffect as P, openBlock as l, createElementBlock as o, mergeProps as n, unref as d, createElementVNode as f, createCommentVNode as c, renderSlot as w, createTextVNode as B, toDisplayString as h, mergeModels as L } from "vue";
2
+ import { useTestId as S } from "../shared/useTestId.util.js";
3
+ const D = ["for"], A = ["id", "name", "value", "checked", "disabled", "aria-label", "aria-labelledby", "aria-invalid"], H = {
4
4
  key: 0,
5
5
  class: "checkbox-v2__mark",
6
6
  viewBox: "0 0 20 20",
7
7
  fill: "none",
8
8
  xmlns: "http://www.w3.org/2000/svg"
9
- }, H = {
9
+ }, Z = {
10
10
  key: 1,
11
11
  class: "checkbox-v2__mark",
12
12
  viewBox: "0 0 20 20",
13
13
  fill: "none",
14
14
  xmlns: "http://www.w3.org/2000/svg"
15
- }, Z = {
15
+ }, j = {
16
16
  key: 0,
17
17
  class: "checkbox-v2__text"
18
- }, z = /* @__PURE__ */ $({
18
+ }, F = /* @__PURE__ */ R({
19
19
  inheritAttrs: !1,
20
20
  __name: "Checkbox",
21
21
  props: /* @__PURE__ */ L({
22
22
  label: { default: void 0 },
23
23
  description: { default: void 0 },
24
+ error: { type: Boolean, default: !1 },
25
+ errorMessage: { default: void 0 },
24
26
  disabled: { type: Boolean, default: !1 },
25
27
  iconPosition: { default: "left" },
26
28
  name: { default: void 0 },
@@ -36,31 +38,36 @@ const S = ["for"], D = ["id", "name", "value", "checked", "disabled", "aria-labe
36
38
  indeterminateModifiers: {}
37
39
  }),
38
40
  emits: /* @__PURE__ */ L(["change"], ["update:modelValue", "update:indeterminate"]),
39
- setup(e, { emit: B }) {
40
- const t = e, C = B, u = x(e, "modelValue"), r = x(e, "indeterminate"), h = R(), i = P(() => t.testId), V = T(), b = E("inputRef"), m = n(() => t.id ?? `${V}-checkbox`), k = n(() => !!(t.label || h.default)), p = n(
41
- () => !!(t.description || h.description)
42
- ), I = n(() => k.value || p.value), M = n(() => [
41
+ setup(e, { emit: M }) {
42
+ const a = e, C = M, u = y(e, "modelValue"), v = y(e, "indeterminate"), m = T(), s = S(() => a.testId), V = _(), b = N("inputRef"), k = i(() => a.id ?? `${V}-checkbox`), x = i(() => !!(a.label || m.default)), p = i(
43
+ () => !!(a.description || m.description)
44
+ ), I = i(
45
+ () => x.value || p.value || g.value
46
+ ), $ = i(() => [
43
47
  "checkbox-v2",
44
- `checkbox-v2--icon-${t.iconPosition}`,
48
+ `checkbox-v2--icon-${a.iconPosition}`,
45
49
  {
46
- "checkbox-v2--checked": u.value || r.value,
47
- "checkbox-v2--disabled": t.disabled
50
+ "checkbox-v2--checked": u.value || v.value,
51
+ "checkbox-v2--disabled": a.disabled,
52
+ "checkbox-v2--error": a.error
48
53
  }
49
- ]);
50
- N(() => {
51
- b.value && (b.value.indeterminate = r.value);
54
+ ]), g = i(
55
+ () => !!(a.error && a.errorMessage)
56
+ );
57
+ P(() => {
58
+ b.value && (b.value.indeterminate = v.value);
52
59
  });
53
- function _(s) {
54
- if (t.disabled) return;
55
- const a = s.target.checked;
56
- r.value = !1, u.value = a, C("change", a);
60
+ function E(r) {
61
+ if (a.disabled) return;
62
+ const t = r.target.checked;
63
+ v.value = !1, u.value = t, C("change", t);
57
64
  }
58
- return (s, a) => (l(), o("label", d({
59
- class: M.value,
60
- for: m.value
61
- }, c(i)("root")), [
62
- v("input", d({
63
- id: m.value,
65
+ return (r, t) => (l(), o("label", n({
66
+ class: $.value,
67
+ for: k.value
68
+ }, d(s)("root")), [
69
+ f("input", n({
70
+ id: k.value,
64
71
  ref_key: "inputRef",
65
72
  ref: b,
66
73
  type: "checkbox",
@@ -70,46 +77,51 @@ const S = ["for"], D = ["id", "name", "value", "checked", "disabled", "aria-labe
70
77
  checked: u.value,
71
78
  disabled: e.disabled,
72
79
  "aria-label": e.ariaLabel,
73
- "aria-labelledby": e.ariaLabelledby
74
- }, { ...s.$attrs, ...c(i)("input") }, { onChange: _ }), null, 16, D),
75
- v("span", d({
80
+ "aria-labelledby": e.ariaLabelledby,
81
+ "aria-invalid": e.error || void 0
82
+ }, { ...r.$attrs, ...d(s)("input") }, { onChange: E }), null, 16, A),
83
+ f("span", n({
76
84
  class: "checkbox-v2__box",
77
85
  "aria-hidden": "true"
78
- }, c(i)("box")), [
79
- r.value ? (l(), o("svg", A, [...a[0] || (a[0] = [
80
- v("path", {
86
+ }, d(s)("box")), [
87
+ v.value ? (l(), o("svg", H, [...t[0] || (t[0] = [
88
+ f("path", {
81
89
  d: "M4 10H16",
82
90
  stroke: "currentColor",
83
91
  "stroke-width": "2"
84
92
  }, null, -1)
85
- ])])) : u.value ? (l(), o("svg", H, [...a[1] || (a[1] = [
86
- v("path", {
93
+ ])])) : u.value ? (l(), o("svg", Z, [...t[1] || (t[1] = [
94
+ f("path", {
87
95
  d: "M8.13636 13.70149L5.03409 10.25373L4 11.40299L8.13636 16L17 6.14925L15.9659 5L8.13636 13.70149Z",
88
96
  fill: "currentColor"
89
97
  }, null, -1)
90
- ])])) : f("", !0)
98
+ ])])) : c("", !0)
91
99
  ], 16),
92
- I.value ? (l(), o("span", Z, [
93
- k.value ? (l(), o("span", d({
100
+ I.value ? (l(), o("span", j, [
101
+ x.value ? (l(), o("span", n({
94
102
  key: 0,
95
103
  class: "checkbox-v2__label"
96
- }, c(i)("label")), [
97
- y(s.$slots, "default", {}, () => [
98
- g(w(e.label), 1)
104
+ }, d(s)("label")), [
105
+ w(r.$slots, "default", {}, () => [
106
+ B(h(e.label), 1)
99
107
  ], !0)
100
- ], 16)) : f("", !0),
101
- p.value ? (l(), o("span", d({
108
+ ], 16)) : c("", !0),
109
+ p.value ? (l(), o("span", n({
102
110
  key: 1,
103
111
  class: "checkbox-v2__description"
104
- }, c(i)("description")), [
105
- y(s.$slots, "description", {}, () => [
106
- g(w(e.description), 1)
112
+ }, d(s)("description")), [
113
+ w(r.$slots, "description", {}, () => [
114
+ B(h(e.description), 1)
107
115
  ], !0)
108
- ], 16)) : f("", !0)
109
- ])) : f("", !0)
110
- ], 16, S));
116
+ ], 16)) : c("", !0),
117
+ g.value ? (l(), o("span", n({
118
+ key: 2,
119
+ class: "checkbox-v2__error"
120
+ }, d(s)("error")), h(e.errorMessage), 17)) : c("", !0)
121
+ ])) : c("", !0)
122
+ ], 16, D));
111
123
  }
112
124
  });
113
125
  export {
114
- z as default
126
+ F as default
115
127
  };
@@ -1 +1 @@
1
- .combobox[data-v-a7d76bc3]{--combobox-field-height:2.5rem;--combobox-field-radius:.5rem;--combobox-font-size:.875rem;--combobox-line-height:1.25rem;--combobox-label-font-size:.875rem;--combobox-label-line-height:1rem;--combobox-border-color:var(--theme-neutral-border-default);flex-direction:column;display:flex}.combobox--small[data-v-a7d76bc3]{--combobox-field-height:2.25rem;--combobox-label-font-size:.75rem}.combobox--large[data-v-a7d76bc3]{--combobox-field-height:2.75rem;--combobox-field-radius:.75rem;--combobox-font-size:1rem;--combobox-line-height:1.5rem;--combobox-label-font-size:1rem;--combobox-label-line-height:1.25rem}.combobox__label[data-v-a7d76bc3]{font-weight:400;font-size:var(--combobox-label-font-size);line-height:var(--combobox-label-line-height);color:var(--theme-neutral-text-title);cursor:pointer;padding:.375rem .5rem}.combobox__field[data-v-a7d76bc3]{min-height:var(--combobox-field-height);background-color:var(--theme-neutral-0);border:.0625rem solid var(--combobox-border-color);border-radius:var(--combobox-field-radius);cursor:text;transition:border-color var(--animation-duration-fast) ease;align-items:center;gap:.25rem;padding:.25rem .5rem;display:flex}.combobox__content[data-v-a7d76bc3]{flex:auto;align-items:center;gap:.25rem;min-width:0;display:flex}.combobox__input[data-v-a7d76bc3]{min-width:2rem;font-family:inherit;font-weight:400;font-size:var(--combobox-font-size);line-height:var(--combobox-line-height);color:var(--theme-neutral-text-body);text-overflow:ellipsis;background:0 0;border:none;outline:none;flex:4rem;order:3;padding:0}@media (max-width:1009.98px){.combobox__input[data-v-a7d76bc3]{font-size:1rem}}.combobox__input[data-v-a7d76bc3]::placeholder{color:var(--theme-neutral-550)}.combobox__input[data-v-a7d76bc3]:disabled{color:var(--theme-neutral-text-disabled);cursor:not-allowed}.combobox__input[data-v-a7d76bc3]:disabled::placeholder{color:var(--theme-neutral-text-disabled)}.combobox__input[data-v-a7d76bc3]:read-only{cursor:pointer}.combobox__chips[data-v-a7d76bc3]{flex:0 auto;order:1;align-items:center;gap:.25rem;min-width:0;display:flex;overflow:hidden}.combobox__chip[data-v-a7d76bc3]{max-width:100%;height:1.125rem;color:var(--theme-neutral-text-subtitle);background-color:var(--theme-neutral-surface-icon);border-radius:.375rem;flex-shrink:0;align-items:center;gap:.5rem;padding:0 .375rem;font-size:.75rem;font-weight:400;line-height:1rem;display:flex}.combobox__chip-label[data-v-a7d76bc3]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.combobox__chip-remove[data-v-a7d76bc3]{color:var(--theme-neutral-icon-caption);cursor:pointer;transition:color var(--animation-duration-fast) ease;background:0 0;border:none;align-items:center;margin:0;padding:0;display:flex}.combobox__chip-remove[data-v-a7d76bc3]:hover:not(:disabled){color:var(--theme-neutral-text-body)}.combobox__chip-remove[data-v-a7d76bc3]:focus-visible{outline:.125rem solid var(--theme-primary-500);outline-offset:.125rem}.combobox__chip-remove[data-v-a7d76bc3]:disabled{cursor:not-allowed}.combobox__chip-icon[data-v-a7d76bc3],.combobox__chip-avatar[data-v-a7d76bc3]{flex-shrink:0;width:.75rem;height:.75rem}.combobox__chip-avatar[data-v-a7d76bc3]{object-fit:cover;border-radius:50%}.combobox__chip--measured[data-v-a7d76bc3]{visibility:hidden;pointer-events:none;position:absolute;top:0;left:-9999px}.combobox__chip--counter[data-v-a7d76bc3]{color:var(--theme-neutral-text-caption);flex-shrink:0;order:2}.combobox__clear-button[data-v-a7d76bc3]{color:var(--theme-neutral-icon-caption);cursor:pointer;transition:color var(--animation-duration-fast) ease;background:0 0;border:none;flex-shrink:0;align-items:center;margin:0;padding:0;display:flex}.combobox__clear-button[data-v-a7d76bc3]:hover{color:var(--theme-neutral-text-body)}.combobox__clear-button[data-v-a7d76bc3]:focus-visible{outline:2px solid var(--theme-primary-500);outline-offset:2px}.combobox__clear[data-v-a7d76bc3]{width:1rem;height:1rem}.combobox__arrow-button[data-v-a7d76bc3]{cursor:pointer;background:0 0;border:none;flex-shrink:0;align-items:center;margin:0;padding:0;display:flex}.combobox__arrow-button[data-v-a7d76bc3]:disabled{cursor:not-allowed}.combobox__arrow[data-v-a7d76bc3]{width:1.125rem;height:1.125rem;color:var(--theme-neutral-text-body);transition:transform var(--animation-duration-fast) ease}.combobox__message[data-v-a7d76bc3]{color:var(--theme-neutral-text-body);margin:0;padding:.25rem .5rem;font-size:.625rem;font-weight:400;line-height:1.2}.combobox[data-v-a7d76bc3]:hover:not(.combobox--disabled){--combobox-border-color:var(--theme-primary-300)}.combobox--open[data-v-a7d76bc3],.combobox--open[data-v-a7d76bc3]:hover{--combobox-border-color:var(--theme-primary-500)}.combobox--open .combobox__arrow[data-v-a7d76bc3]{transform:rotate(180deg)}.combobox--invalid[data-v-a7d76bc3]{--combobox-border-color:var(--theme-error-500)}.combobox--invalid .combobox__label[data-v-a7d76bc3],.combobox--invalid .combobox__message[data-v-a7d76bc3]{color:var(--theme-error-500)}.combobox--invalid[data-v-a7d76bc3]:hover:not(.combobox--disabled){--combobox-border-color:var(--theme-error-500)}.combobox--disabled[data-v-a7d76bc3]{--combobox-border-color:var(--theme-neutral-border-disabled)}.combobox--disabled .combobox__field[data-v-a7d76bc3]{cursor:not-allowed}.combobox--disabled .combobox__label[data-v-a7d76bc3],.combobox--disabled .combobox__message[data-v-a7d76bc3],.combobox--disabled .combobox__arrow[data-v-a7d76bc3]{color:var(--theme-neutral-text-disabled)}.combobox--disabled .combobox__label[data-v-a7d76bc3]{cursor:not-allowed}.combobox__field[data-v-a7d76bc3]:has(.combobox__input:focus-visible){outline:.125rem solid var(--theme-primary-500);outline-offset:.125rem}.combobox-list[data-v-a7d76bc3]{flex-direction:column;display:flex}.combobox-list__search[data-v-a7d76bc3]{padding:.5rem .5rem 0}.combobox-list__scroll[data-v-a7d76bc3]{max-height:15rem;overflow-y:auto}.combobox-list__options[data-v-a7d76bc3]{flex-direction:column;gap:.5rem;height:max-content;padding:.5rem;display:flex}.combobox-list__option[data-v-a7d76bc3]{width:100%;min-height:2rem;color:var(--theme-neutral-text-title);text-align:left;cursor:pointer;transition:background-color var(--animation-duration-fast) ease;background-color:#0000;border-radius:.5rem;align-items:flex-start;gap:.5rem;padding:.375rem .5rem;font-size:.875rem;font-weight:400;line-height:1.25rem;display:flex}.combobox-list__option[data-v-a7d76bc3]:hover:not(.combobox-list__option--disabled),.combobox-list__option--active[data-v-a7d76bc3]{background-color:var(--theme-secondary-50)}.combobox-list__option--disabled[data-v-a7d76bc3]{cursor:not-allowed;opacity:.5}.combobox-list__label[data-v-a7d76bc3]{white-space:nowrap;text-overflow:ellipsis;flex:auto;min-width:0;overflow:hidden}.combobox-list__status[data-v-a7d76bc3]{color:var(--theme-neutral-text-caption);margin:0;padding:.25rem .5rem;font-size:.875rem;line-height:1.25rem}
1
+ .combobox[data-v-cb477f62]{--combobox-field-height:2.5rem;--combobox-field-radius:.5rem;--combobox-font-size:.875rem;--combobox-line-height:1.25rem;--combobox-label-font-size:.875rem;--combobox-label-line-height:1rem;--combobox-border-color:var(--theme-neutral-border-default);flex-direction:column;display:flex}.combobox--small[data-v-cb477f62]{--combobox-field-height:2.25rem;--combobox-label-font-size:.75rem}.combobox--large[data-v-cb477f62]{--combobox-field-height:2.75rem;--combobox-field-radius:.75rem;--combobox-font-size:1rem;--combobox-line-height:1.5rem;--combobox-label-font-size:1rem;--combobox-label-line-height:1.25rem}.combobox__label[data-v-cb477f62]{font-weight:400;font-size:var(--combobox-label-font-size);line-height:var(--combobox-label-line-height);color:var(--theme-neutral-text-title);cursor:pointer;align-items:center;gap:.125rem;padding:.375rem .5rem;display:flex}.combobox__required[data-v-cb477f62]{color:var(--theme-error-500);flex-shrink:0}.combobox__field[data-v-cb477f62]{min-height:var(--combobox-field-height);background-color:var(--theme-neutral-0);border:.0625rem solid var(--combobox-border-color);border-radius:var(--combobox-field-radius);cursor:text;transition:border-color var(--animation-duration-fast) ease;align-items:center;gap:.25rem;padding:.25rem .5rem;display:flex}.combobox__content[data-v-cb477f62]{flex:auto;align-items:center;gap:.25rem;min-width:0;display:flex}.combobox__input[data-v-cb477f62]{min-width:2rem;font-family:inherit;font-weight:400;font-size:var(--combobox-font-size);line-height:var(--combobox-line-height);color:var(--theme-neutral-text-body);text-overflow:ellipsis;background:0 0;border:none;outline:none;flex:4rem;order:3;padding:0}@media (max-width:1009.98px){.combobox__input[data-v-cb477f62]{font-size:1rem}}.combobox__input[data-v-cb477f62]::placeholder{color:var(--theme-neutral-550)}.combobox__input[data-v-cb477f62]:disabled{color:var(--theme-neutral-text-disabled);cursor:not-allowed}.combobox__input[data-v-cb477f62]:disabled::placeholder{color:var(--theme-neutral-text-disabled)}.combobox__input[data-v-cb477f62]:read-only{cursor:pointer}.combobox__chips[data-v-cb477f62]{flex:0 auto;order:1;align-items:center;gap:.25rem;min-width:0;display:flex;overflow:hidden}.combobox__chip[data-v-cb477f62]{max-width:100%;height:1.125rem;color:var(--theme-neutral-text-subtitle);background-color:var(--theme-neutral-surface-icon);border-radius:.375rem;flex-shrink:0;align-items:center;gap:.5rem;padding:0 .375rem;font-size:.75rem;font-weight:400;line-height:1rem;display:flex}.combobox__chip-label[data-v-cb477f62]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.combobox__chip-remove[data-v-cb477f62]{color:var(--theme-neutral-icon-caption);cursor:pointer;transition:color var(--animation-duration-fast) ease;background:0 0;border:none;align-items:center;margin:0;padding:0;display:flex}.combobox__chip-remove[data-v-cb477f62]:hover:not(:disabled){color:var(--theme-neutral-text-body)}.combobox__chip-remove[data-v-cb477f62]:focus-visible{outline:.125rem solid var(--theme-primary-500);outline-offset:.125rem}.combobox__chip-remove[data-v-cb477f62]:disabled{cursor:not-allowed}.combobox__chip-icon[data-v-cb477f62],.combobox__chip-avatar[data-v-cb477f62]{flex-shrink:0;width:.75rem;height:.75rem}.combobox__chip-avatar[data-v-cb477f62]{object-fit:cover;border-radius:50%}.combobox__chip--measured[data-v-cb477f62]{visibility:hidden;pointer-events:none;position:absolute;top:0;left:-9999px}.combobox__chip--counter[data-v-cb477f62]{color:var(--theme-neutral-text-caption);flex-shrink:0;order:2}.combobox__clear-button[data-v-cb477f62]{color:var(--theme-neutral-icon-caption);cursor:pointer;transition:color var(--animation-duration-fast) ease;background:0 0;border:none;flex-shrink:0;align-items:center;margin:0;padding:0;display:flex}.combobox__clear-button[data-v-cb477f62]:hover{color:var(--theme-neutral-text-body)}.combobox__clear-button[data-v-cb477f62]:focus-visible{outline:2px solid var(--theme-primary-500);outline-offset:2px}.combobox__clear[data-v-cb477f62]{width:1rem;height:1rem}.combobox__arrow-button[data-v-cb477f62]{cursor:pointer;background:0 0;border:none;flex-shrink:0;align-items:center;margin:0;padding:0;display:flex}.combobox__arrow-button[data-v-cb477f62]:disabled{cursor:not-allowed}.combobox__arrow[data-v-cb477f62]{width:1.125rem;height:1.125rem;color:var(--theme-neutral-text-body);transition:transform var(--animation-duration-fast) ease}.combobox__message[data-v-cb477f62]{color:var(--theme-neutral-text-body);margin:0;padding:.25rem .5rem;font-size:.625rem;font-weight:400;line-height:1.2}.combobox[data-v-cb477f62]:hover:not(.combobox--disabled){--combobox-border-color:var(--theme-primary-300)}.combobox--open[data-v-cb477f62],.combobox--open[data-v-cb477f62]:hover{--combobox-border-color:var(--theme-primary-500)}.combobox--open .combobox__arrow[data-v-cb477f62]{transform:rotate(180deg)}.combobox--invalid[data-v-cb477f62]{--combobox-border-color:var(--theme-error-500)}.combobox--invalid .combobox__label[data-v-cb477f62],.combobox--invalid .combobox__message[data-v-cb477f62]{color:var(--theme-error-500)}.combobox--invalid[data-v-cb477f62]:hover:not(.combobox--disabled){--combobox-border-color:var(--theme-error-500)}.combobox--disabled[data-v-cb477f62]{--combobox-border-color:var(--theme-neutral-border-disabled)}.combobox--disabled .combobox__field[data-v-cb477f62]{cursor:not-allowed}.combobox--disabled .combobox__label[data-v-cb477f62],.combobox--disabled .combobox__message[data-v-cb477f62],.combobox--disabled .combobox__arrow[data-v-cb477f62]{color:var(--theme-neutral-text-disabled)}.combobox--disabled .combobox__label[data-v-cb477f62]{cursor:not-allowed}.combobox__field[data-v-cb477f62]:has(.combobox__input:focus-visible){outline:.125rem solid var(--theme-primary-500);outline-offset:.125rem}.combobox-list[data-v-cb477f62]{flex-direction:column;display:flex}.combobox-list__search[data-v-cb477f62]{padding:.5rem .5rem 0}.combobox-list__scroll[data-v-cb477f62]{max-height:15rem;overflow-y:auto}.combobox-list__options[data-v-cb477f62]{flex-direction:column;gap:.5rem;height:max-content;padding:.5rem;display:flex}.combobox-list__option[data-v-cb477f62]{width:100%;min-height:2rem;color:var(--theme-neutral-text-title);text-align:left;cursor:pointer;transition:background-color var(--animation-duration-fast) ease;background-color:#0000;border-radius:.5rem;align-items:flex-start;gap:.5rem;padding:.375rem .5rem;font-size:.875rem;font-weight:400;line-height:1.25rem;display:flex}.combobox-list__option[data-v-cb477f62]:hover:not(.combobox-list__option--disabled),.combobox-list__option--active[data-v-cb477f62]{background-color:var(--theme-secondary-50)}.combobox-list__option--disabled[data-v-cb477f62]{cursor:not-allowed;opacity:.5}.combobox-list__label[data-v-cb477f62]{white-space:nowrap;text-overflow:ellipsis;flex:auto;min-width:0;overflow:hidden}.combobox-list__status[data-v-cb477f62]{color:var(--theme-neutral-text-caption);margin:0;padding:.25rem .5rem;font-size:.875rem;line-height:1.25rem}
@@ -1,5 +1,5 @@
1
1
  import { Component, VNodeChild } from 'vue';
2
- import { TBreakpoints } from '../../../types/global.types';
2
+ import { TBreakpointMobile } from '../../../types/global.types';
3
3
  import { PopoverAlign, PopoverSide } from '../Popover';
4
4
  export type ComboboxSize = 'small' | 'default' | 'large';
5
5
  export type ComboboxValue = string | number;
@@ -76,6 +76,12 @@ export interface ComboboxProps<T extends ComboboxOptionData = ComboboxOptionData
76
76
  loading?: boolean;
77
77
  /** Подпись над полем. */
78
78
  label?: string;
79
+ /**
80
+ * Обязательное поле: к подписи добавляется красная звёздочка, полю —
81
+ * `aria-required`. Проверку значения проп на себя не берёт, это забота
82
+ * формы, — он только помечает поле.
83
+ */
84
+ required?: boolean;
79
85
  placeholder?: string;
80
86
  /** Плейсхолдер поля поиска в мобильной шторке. */
81
87
  searchPlaceholder?: string;
@@ -90,6 +96,12 @@ export interface ComboboxProps<T extends ComboboxOptionData = ComboboxOptionData
90
96
  * Пригодится серверному поиску, где до первого запроса список пуст и пустая
91
97
  * плашка только мешает.
92
98
  *
99
+ * Прячется только состояние «ещё не искали». Как только в поле есть
100
+ * запрос, список раскрывается в любом случае — в том числе когда сервер
101
+ * вернул ноль вариантов: «Ничего не найдено» это и есть ответ на запрос,
102
+ * прятать его нельзя. Различие важное, и компонент проводит его сам, по
103
+ * непустому запросу, — отдельного пропа для этого не нужно.
104
+ *
93
105
  * Внутреннее состояние «открыт» при этом сохраняется: как только придут
94
106
  * варианты или включится `loading`, список раскроется сам, без повторного
95
107
  * клика. По умолчанию выключено — пустое состояние со своим текстом и слотом
@@ -124,7 +136,7 @@ export interface ComboboxProps<T extends ComboboxOptionData = ComboboxOptionData
124
136
  /** Доступное имя, когда видимой подписи нет. */
125
137
  ariaLabel?: string;
126
138
  /** Ниже этой ширины экрана список открывается шторкой снизу. */
127
- breakpointMobile?: TBreakpoints;
139
+ breakpointMobile?: TBreakpointMobile;
128
140
  /** Базовый `data-testid`; внутренние части получают суффикс имени части. */
129
141
  testId?: string;
130
142
  }
@@ -2,7 +2,7 @@ import './Combobox.css';
2
2
  import o from "./Combobox.vue2.js";
3
3
  /* empty css */
4
4
  import t from "../../../_virtual/_plugin-vue_export-helper.js";
5
- const p = /* @__PURE__ */ t(o, [["__scopeId", "data-v-a7d76bc3"]]);
5
+ const p = /* @__PURE__ */ t(o, [["__scopeId", "data-v-cb477f62"]]);
6
6
  export {
7
7
  p as default
8
8
  };