@retailcrm/embed-ui-v1-components 0.9.15 → 0.9.17

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 (71) hide show
  1. package/assets/sprites/map-and-places/navigate.svg +3 -0
  2. package/dist/host.cjs +1229 -616
  3. package/dist/host.css +346 -0
  4. package/dist/host.d.ts +300 -118
  5. package/dist/host.js +1229 -616
  6. package/dist/remote.cjs +501 -61
  7. package/dist/remote.d.ts +667 -81
  8. package/dist/remote.js +502 -62
  9. package/docs/COMPONENTS.md +4 -0
  10. package/docs/FORMAT.md +19 -0
  11. package/docs/PROFILES.md +2 -0
  12. package/docs/profiles/UiAddButton.yml +12 -0
  13. package/docs/profiles/UiAlert.yml +12 -0
  14. package/docs/profiles/UiAvatar.yml +12 -0
  15. package/docs/profiles/UiAvatarList.yml +12 -0
  16. package/docs/profiles/UiButton.yml +8 -0
  17. package/docs/profiles/UiCalendar.yml +12 -0
  18. package/docs/profiles/UiCheckbox.yml +12 -0
  19. package/docs/profiles/UiCollapse.yml +12 -0
  20. package/docs/profiles/UiCollapseBox.yml +12 -0
  21. package/docs/profiles/UiCollapseGroup.yml +12 -0
  22. package/docs/profiles/UiCopyButton.yml +12 -0
  23. package/docs/profiles/UiDate.yml +12 -0
  24. package/docs/profiles/UiDatePicker.yml +12 -0
  25. package/docs/profiles/UiError.yml +12 -0
  26. package/docs/profiles/UiField.yml +5 -1
  27. package/docs/profiles/UiImage.yml +12 -0
  28. package/docs/profiles/UiInfobox.yml +12 -0
  29. package/docs/profiles/UiLink.yml +12 -0
  30. package/docs/profiles/UiLoader.yml +12 -0
  31. package/docs/profiles/UiMenuItem.yml +12 -0
  32. package/docs/profiles/UiMenuItemGroup.yml +12 -0
  33. package/docs/profiles/UiModalSidebar.yml +12 -0
  34. package/docs/profiles/UiModalWindow.yml +12 -0
  35. package/docs/profiles/UiModalWindowSurface.yml +12 -0
  36. package/docs/profiles/UiNumberStepper.yml +12 -0
  37. package/docs/profiles/UiPageHeader.yml +5 -1
  38. package/docs/profiles/UiPopper.yml +5 -1
  39. package/docs/profiles/UiPopperConnector.yml +6 -0
  40. package/docs/profiles/UiPopperTarget.yml +6 -0
  41. package/docs/profiles/UiRadio.yml +12 -0
  42. package/docs/profiles/UiRadioSwitch.yml +7 -0
  43. package/docs/profiles/UiRadioSwitchOption.yml +8 -0
  44. package/docs/profiles/UiScrollBox.yml +12 -0
  45. package/docs/profiles/UiSelect.yml +9 -0
  46. package/docs/profiles/UiSelectOption.yml +12 -0
  47. package/docs/profiles/UiSelectOptionGroup.yml +12 -0
  48. package/docs/profiles/UiSkeleton.yml +41 -0
  49. package/docs/profiles/UiSlider.yml +12 -0
  50. package/docs/profiles/UiSwitch.yml +12 -0
  51. package/docs/profiles/UiTab.yml +5 -0
  52. package/docs/profiles/UiTabGroup.yml +5 -0
  53. package/docs/profiles/UiTable.yml +5 -1
  54. package/docs/profiles/UiTableBodyCell.yml +12 -0
  55. package/docs/profiles/UiTableColumn.yml +12 -0
  56. package/docs/profiles/UiTableFooterButton.yml +12 -0
  57. package/docs/profiles/UiTableFooterSection.yml +12 -0
  58. package/docs/profiles/UiTableHeadCell.yml +12 -0
  59. package/docs/profiles/UiTableSorter.yml +12 -0
  60. package/docs/profiles/UiTag.yml +12 -0
  61. package/docs/profiles/UiTextbox.yml +5 -1
  62. package/docs/profiles/UiTimePicker.yml +12 -0
  63. package/docs/profiles/UiToggleButton.yml +211 -0
  64. package/docs/profiles/UiToggleGroup.yml +211 -0
  65. package/docs/profiles/UiToggleGroupOption.yml +116 -0
  66. package/docs/profiles/UiToolbarButton.yml +12 -0
  67. package/docs/profiles/UiToolbarLink.yml +12 -0
  68. package/docs/profiles/UiTooltip.yml +12 -0
  69. package/docs/profiles/UiTransition.yml +12 -0
  70. package/docs/profiles/UiYandexMap.yml +12 -0
  71. package/package.json +2 -2
package/dist/remote.cjs CHANGED
@@ -163,7 +163,7 @@ const _hoisted_5$1 = {
163
163
  class: "ui-v1-field__addon"
164
164
  };
165
165
  const _hoisted_6 = { class: "ui-v1-field__control" };
166
- const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
166
+ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
167
167
  ...{
168
168
  inheritAttrs: false
169
169
  },
@@ -413,7 +413,7 @@ const _hoisted_3$2 = {
413
413
  key: 0,
414
414
  class: "ui-v1-page-header__actions"
415
415
  };
416
- const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
416
+ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
417
417
  ...{
418
418
  inheritAttrs: false
419
419
  },
@@ -575,27 +575,27 @@ function render$1(_ctx, _cache) {
575
575
  ])]);
576
576
  }
577
577
  const IconCheckmarkCircle = { render: render$1 };
578
- var APPEARANCE = /* @__PURE__ */ ((APPEARANCE2) => {
578
+ var APPEARANCE$2 = /* @__PURE__ */ ((APPEARANCE2) => {
579
579
  APPEARANCE2["DEFAULT"] = "default";
580
580
  APPEARANCE2["SECTION"] = "section";
581
581
  return APPEARANCE2;
582
- })(APPEARANCE || {});
583
- var SIZE$2 = /* @__PURE__ */ ((SIZE2) => {
582
+ })(APPEARANCE$2 || {});
583
+ var SIZE$4 = /* @__PURE__ */ ((SIZE2) => {
584
584
  SIZE2["SM"] = "sm";
585
585
  SIZE2["MD"] = "md";
586
586
  SIZE2["LG"] = "lg";
587
587
  return SIZE2;
588
- })(SIZE$2 || {});
588
+ })(SIZE$4 || {});
589
589
  const AppearanceKey = Symbol("UiRadioSwitchAppearance");
590
- const SizeKey = Symbol("UiRadioSwitchSize");
591
- const RegistryKey = Symbol("UiRadioSwitchRegistry");
590
+ const SizeKey$1 = Symbol("UiRadioSwitchSize");
591
+ const RegistryKey$1 = Symbol("UiRadioSwitchRegistry");
592
592
  const UpdateKey = Symbol("UiRadioSwitchUpdate");
593
- const FocusableIdKey = Symbol("UiRadioSwitchFocusableId");
594
- const SetFocusableIdKey = Symbol("UiRadioSwitchSetFocusableId");
595
- const MoveFocusKey = Symbol("UiRadioSwitchMoveFocus");
596
- const useAppearance = () => vue.inject(AppearanceKey, vue.computed(() => APPEARANCE.DEFAULT));
597
- const useSize = () => vue.inject(SizeKey, vue.computed(() => SIZE$2.MD));
598
- const useRegistry = () => vue.inject(RegistryKey, {
593
+ const FocusableIdKey$1 = Symbol("UiRadioSwitchFocusableId");
594
+ const SetFocusableIdKey$1 = Symbol("UiRadioSwitchSetFocusableId");
595
+ const MoveFocusKey$1 = Symbol("UiRadioSwitchMoveFocus");
596
+ const useAppearance = () => vue.inject(AppearanceKey, vue.computed(() => APPEARANCE$2.DEFAULT));
597
+ const useSize$1 = () => vue.inject(SizeKey$1, vue.computed(() => SIZE$4.MD));
598
+ const useRegistry$1 = () => vue.inject(RegistryKey$1, {
599
599
  register: () => {
600
600
  },
601
601
  unregister: () => {
@@ -603,10 +603,10 @@ const useRegistry = () => vue.inject(RegistryKey, {
603
603
  });
604
604
  const useUpdate = () => vue.inject(UpdateKey, () => {
605
605
  });
606
- const useFocusableId = () => vue.inject(FocusableIdKey, vue.computed(() => null));
607
- const useSetFocusableId = () => vue.inject(SetFocusableIdKey, () => {
606
+ const useFocusableId$1 = () => vue.inject(FocusableIdKey$1, vue.computed(() => null));
607
+ const useSetFocusableId$1 = () => vue.inject(SetFocusableIdKey$1, () => {
608
608
  });
609
- const useMoveFocus = () => vue.inject(MoveFocusKey, () => {
609
+ const useMoveFocus$1 = () => vue.inject(MoveFocusKey$1, () => {
610
610
  });
611
611
  const UiRadioSwitchRootType = "UiRadioSwitchRoot";
612
612
  const UiRadioSwitchRoot = remote.defineRemoteComponent(UiRadioSwitchRootType);
@@ -640,10 +640,10 @@ const _hoisted_5 = {
640
640
  key: 1,
641
641
  class: "ui-v1-radio-switch-option__done"
642
642
  };
643
- let counter$1 = 0;
644
- const __default__ = {};
645
- const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
646
- ...__default__,
643
+ let counter$2 = 0;
644
+ const __default__$1 = {};
645
+ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
646
+ ...__default__$1,
647
647
  ...{
648
648
  inheritAttrs: false
649
649
  },
@@ -652,7 +652,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
652
652
  /** Идентификатор */
653
653
  id: {
654
654
  type: String,
655
- default: () => "ui-v1-radio-switch-option-" + ++counter$1
655
+ default: () => "ui-v1-radio-switch-option-" + ++counter$2
656
656
  },
657
657
  /** Заголовок */
658
658
  label: {
@@ -677,14 +677,13 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
677
677
  },
678
678
  setup(__props) {
679
679
  const props = __props;
680
- const slots = vue.useSlots();
681
680
  const appearance = useAppearance();
682
- const focusableId = useFocusableId();
683
- const moveFocus = useMoveFocus();
681
+ const focusableId = useFocusableId$1();
682
+ const moveFocus = useMoveFocus$1();
684
683
  const shell = vue.useTemplateRef("shell");
685
- const size = useSize();
686
- const registry = useRegistry();
687
- const setFocusableId = useSetFocusableId();
684
+ const size = useSize$1();
685
+ const registry = useRegistry$1();
686
+ const setFocusableId = useSetFocusableId$1();
688
687
  const update = useUpdate();
689
688
  const checked = vue.ref(false);
690
689
  const tabIndex = vue.computed(() => {
@@ -765,17 +764,17 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
765
764
  default: vue.withCtx(() => [
766
765
  vue.renderSlot(_ctx.$slots, "default", {}, () => [
767
766
  vue.createElementVNode("div", _hoisted_1$3, [
768
- "icon" in vue.unref(slots) ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$1, [
767
+ _ctx.$slots.icon ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$1, [
769
768
  vue.renderSlot(_ctx.$slots, "icon")
770
769
  ])) : vue.createCommentVNode("", true),
771
- "label" in vue.unref(slots) || __props.label ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$1, [
770
+ _ctx.$slots.label || __props.label ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$1, [
772
771
  vue.renderSlot(_ctx.$slots, "label", {}, () => [
773
772
  vue.createTextVNode(vue.toDisplayString(__props.label), 1)
774
773
  ])
775
774
  ])) : vue.createCommentVNode("", true)
776
775
  ]),
777
- vue.unref(appearance) === vue.unref(APPEARANCE).SECTION ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
778
- "description" in vue.unref(slots) || __props.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, [
776
+ vue.unref(appearance) === vue.unref(APPEARANCE$2).SECTION ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
777
+ _ctx.$slots.description || __props.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, [
779
778
  vue.renderSlot(_ctx.$slots, "description", {}, () => [
780
779
  vue.createTextVNode(vue.toDisplayString(__props.description), 1)
781
780
  ])
@@ -793,7 +792,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
793
792
  };
794
793
  }
795
794
  });
796
- const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
795
+ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
797
796
  ...{
798
797
  inheritAttrs: false
799
798
  },
@@ -817,14 +816,14 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
817
816
  /** Внешний вид */
818
817
  appearance: {
819
818
  type: String,
820
- default: APPEARANCE.DEFAULT,
821
- validator: (appearance) => Object.values(APPEARANCE).includes(appearance)
819
+ default: APPEARANCE$2.DEFAULT,
820
+ validator: (appearance) => Object.values(APPEARANCE$2).includes(appearance)
822
821
  },
823
822
  /** Размер */
824
823
  size: {
825
824
  type: String,
826
- default: SIZE$2.MD,
827
- validator: (size) => Object.values(SIZE$2).includes(size)
825
+ default: SIZE$4.MD,
826
+ validator: (size) => Object.values(SIZE$4).includes(size)
828
827
  },
829
828
  /** Растягивание контейнера в зависимости от контента */
830
829
  rubber: {
@@ -855,12 +854,12 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
855
854
  focusableId.value = selectedEntry?.[0] ?? enabledEntries[0]?.[0] ?? null;
856
855
  };
857
856
  vue.provide(AppearanceKey, vue.computed(() => props.appearance));
858
- vue.provide(FocusableIdKey, vue.computed(() => focusableId.value));
859
- vue.provide(SizeKey, vue.computed(() => props.size));
860
- vue.provide(SetFocusableIdKey, (id) => {
857
+ vue.provide(FocusableIdKey$1, vue.computed(() => focusableId.value));
858
+ vue.provide(SizeKey$1, vue.computed(() => props.size));
859
+ vue.provide(SetFocusableIdKey$1, (id) => {
861
860
  syncFocusableId(id);
862
861
  });
863
- vue.provide(RegistryKey, {
862
+ vue.provide(RegistryKey$1, {
864
863
  register: (id, option) => {
865
864
  if (registry.has(id)) {
866
865
  return;
@@ -880,7 +879,7 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
880
879
  emit("change", newValue);
881
880
  emit("update:value", newValue);
882
881
  });
883
- vue.provide(MoveFocusKey, async (id, direction) => {
882
+ vue.provide(MoveFocusKey$1, async (id, direction) => {
884
883
  const enabledEntries = getEnabledEntries();
885
884
  if (!enabledEntries.length) {
886
885
  focusableId.value = null;
@@ -927,7 +926,7 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
927
926
  default: vue.withCtx(() => [
928
927
  vue.renderSlot(_ctx.$slots, "default", {}, () => [
929
928
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.options, (option, index) => {
930
- return vue.openBlock(), vue.createBlock(_sfc_main$7, {
929
+ return vue.openBlock(), vue.createBlock(_sfc_main$9, {
931
930
  key: `${option.label}-${index}`,
932
931
  label: option.label,
933
932
  value: option.value,
@@ -960,6 +959,11 @@ const UiScrollBox = remote.defineRemoteComponent(
960
959
  "ps-y-reach-end"
961
960
  ]
962
961
  );
962
+ const UiSkeletonType = "UiSkeleton";
963
+ const UiSkeleton = remote.defineRemoteComponent(
964
+ UiSkeletonType,
965
+ ["click", "focus", "blur"]
966
+ );
963
967
  const UiSliderType = "UiSlider";
964
968
  const UiSlider = remote.defineRemoteComponent(
965
969
  UiSliderType,
@@ -1016,7 +1020,7 @@ const byRowKey = (key) => {
1016
1020
  };
1017
1021
  const asRowClass = (value) => value;
1018
1022
  const asRowAttrs = (value) => value;
1019
- const _sfc_main$5 = vue.defineComponent({
1023
+ const _sfc_main$7 = vue.defineComponent({
1020
1024
  name: "UiTableColumn",
1021
1025
  props: {
1022
1026
  label: {
@@ -1096,7 +1100,7 @@ const isNamedComponent = (node, name) => {
1096
1100
  return "name" in node.type && node.type.name === name;
1097
1101
  };
1098
1102
  const isTableColumnVNode = (node) => {
1099
- return node.type === _sfc_main$5 || isNamedComponent(node, "UiTableColumn");
1103
+ return node.type === _sfc_main$7 || isNamedComponent(node, "UiTableColumn");
1100
1104
  };
1101
1105
  const isWhitespaceText = (value) => value.trim().length === 0;
1102
1106
  const normalizeNodes = (children) => {
@@ -1301,7 +1305,7 @@ const withoutClass = (attrs) => {
1301
1305
  delete next.class;
1302
1306
  return next;
1303
1307
  };
1304
- const _sfc_main$4 = vue.defineComponent({
1308
+ const _sfc_main$6 = vue.defineComponent({
1305
1309
  name: "UiTable",
1306
1310
  inheritAttrs: false,
1307
1311
  props: {
@@ -1570,14 +1574,30 @@ const UiTag = remote.defineRemoteComponent(
1570
1574
  UiTagType,
1571
1575
  ["click", "focus", "blur", "remove"]
1572
1576
  );
1573
- var SIZE$1 = /* @__PURE__ */ ((SIZE2) => {
1577
+ var WIDTH = /* @__PURE__ */ ((WIDTH2) => {
1578
+ WIDTH2["FIT"] = "fit";
1579
+ WIDTH2["FLUID"] = "fluid";
1580
+ return WIDTH2;
1581
+ })(WIDTH || {});
1582
+ const NUMERIC_PATTERN = /^(?:\d+|\d*\.\d+)$/;
1583
+ const UNIT_PATTERN = /^(?:\d+|\d*\.\d+)(?:%|cap|ch|cm|dvb|dvh|dvi|dvw|em|ex|ic|in|lh|lvb|lvh|lvi|lvw|mm|pc|pt|px|Q|rem|rlh|svb|svh|svi|svw|vb|vh|vi|vmax|vmin|vw)$/i;
1584
+ const isWidthNumeric = (value) => {
1585
+ return typeof value === "number" ? Number.isFinite(value) && value >= 0 : typeof value === "string" && NUMERIC_PATTERN.test(value.trim());
1586
+ };
1587
+ const isWidthToken = (value) => {
1588
+ return typeof value === "string" && Object.values(WIDTH).includes(value);
1589
+ };
1590
+ const isWidth = (value) => {
1591
+ return value === null || value === void 0 || isWidthToken(value) || isWidthNumeric(value) || typeof value === "string" && UNIT_PATTERN.test(value.trim());
1592
+ };
1593
+ var SIZE$3 = /* @__PURE__ */ ((SIZE2) => {
1574
1594
  SIZE2["XS"] = "xs";
1575
1595
  SIZE2["SM"] = "sm";
1576
1596
  SIZE2["MD"] = "md";
1577
1597
  SIZE2["LG"] = "lg";
1578
1598
  SIZE2["XL"] = "xl";
1579
1599
  return SIZE2;
1580
- })(SIZE$1 || {});
1600
+ })(SIZE$3 || {});
1581
1601
  const events = [
1582
1602
  "input",
1583
1603
  "keydown",
@@ -1617,6 +1637,371 @@ const UiTimePicker = remote.defineRemoteComponent(UiTimePickerType, {
1617
1637
  focus: remote.defineRemoteMethod()
1618
1638
  }
1619
1639
  });
1640
+ const UiToggleButtonType = "UiToggleButton";
1641
+ const UiToggleButton = remote.defineRemoteComponent(
1642
+ UiToggleButtonType,
1643
+ {
1644
+ emits: [
1645
+ "click",
1646
+ "focus",
1647
+ "blur",
1648
+ "keydown"
1649
+ ],
1650
+ methods: {
1651
+ focus: remote.defineRemoteMethod(),
1652
+ blur: remote.defineRemoteMethod(),
1653
+ click: remote.defineRemoteMethod()
1654
+ }
1655
+ }
1656
+ );
1657
+ var UiToggleButtonSize = /* @__PURE__ */ ((UiToggleButtonSize2) => {
1658
+ UiToggleButtonSize2["LG"] = "lg";
1659
+ UiToggleButtonSize2["MD"] = "md";
1660
+ UiToggleButtonSize2["SM"] = "sm";
1661
+ UiToggleButtonSize2["XS"] = "xs";
1662
+ return UiToggleButtonSize2;
1663
+ })(UiToggleButtonSize || {});
1664
+ const FocusableIdKey = Symbol("UiToggleGroupFocusableId");
1665
+ const MoveFocusKey = Symbol("UiToggleGroupMoveFocus");
1666
+ const RegistryKey = Symbol("UiToggleGroupRegistry");
1667
+ const SetFocusableIdKey = Symbol("UiToggleGroupSetFocusableId");
1668
+ const SizeKey = Symbol("UiToggleGroupSize");
1669
+ const DisabledKey = Symbol("UiToggleGroupDisabled");
1670
+ const ToggleKey$1 = Symbol("UiToggleGroupToggle");
1671
+ const useFocusableId = () => vue.inject(FocusableIdKey, vue.computed(() => null));
1672
+ const useMoveFocus = () => vue.inject(MoveFocusKey, () => {
1673
+ });
1674
+ const useRegistry = () => vue.inject(RegistryKey, {
1675
+ register: () => {
1676
+ },
1677
+ unregister: () => {
1678
+ }
1679
+ });
1680
+ const useSetFocusableId = () => vue.inject(SetFocusableIdKey, () => {
1681
+ });
1682
+ const useSize = () => vue.inject(SizeKey, vue.computed(() => UiToggleButtonSize.SM));
1683
+ const useDisabled = () => vue.inject(DisabledKey, vue.computed(() => false));
1684
+ const useToggle = () => vue.inject(ToggleKey$1, () => {
1685
+ });
1686
+ let counter$1 = 0;
1687
+ const __default__ = {};
1688
+ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
1689
+ ...__default__,
1690
+ ...{
1691
+ inheritAttrs: false
1692
+ },
1693
+ __name: "UiToggleGroupOption",
1694
+ props: {
1695
+ id: {
1696
+ type: String,
1697
+ default: () => "ui-v1-toggle-group-option-" + ++counter$1
1698
+ },
1699
+ label: {
1700
+ type: String,
1701
+ default: ""
1702
+ },
1703
+ value: {
1704
+ type: null,
1705
+ required: true
1706
+ },
1707
+ disabled: {
1708
+ type: Boolean,
1709
+ default: false
1710
+ }
1711
+ },
1712
+ setup(__props) {
1713
+ const props = __props;
1714
+ const button = vue.useTemplateRef("button");
1715
+ const groupDisabled = useDisabled();
1716
+ const focusableId = useFocusableId();
1717
+ const moveFocus = useMoveFocus();
1718
+ const registry = useRegistry();
1719
+ const setFocusableId = useSetFocusableId();
1720
+ const size = useSize();
1721
+ const toggle = useToggle();
1722
+ const focused = vue.ref(false);
1723
+ const disabled = vue.computed(() => groupDisabled.value || props.disabled);
1724
+ const pressed = vue.ref(false);
1725
+ const tabIndex = vue.computed(() => {
1726
+ return !disabled.value && focusableId.value === props.id ? 0 : -1;
1727
+ });
1728
+ const onClick = () => {
1729
+ if (disabled.value) {
1730
+ return;
1731
+ }
1732
+ setFocusableId(props.id);
1733
+ toggle(props.value);
1734
+ };
1735
+ const onFocus = () => {
1736
+ if (!disabled.value) {
1737
+ focused.value = true;
1738
+ setFocusableId(props.id);
1739
+ }
1740
+ };
1741
+ const onBlur = () => {
1742
+ focused.value = false;
1743
+ };
1744
+ const onKeyDown = (event) => {
1745
+ if (disabled.value) {
1746
+ return;
1747
+ }
1748
+ switch (event.key) {
1749
+ case " ":
1750
+ case "Enter":
1751
+ setFocusableId(props.id);
1752
+ toggle(props.value);
1753
+ return;
1754
+ case "ArrowDown":
1755
+ case "ArrowRight":
1756
+ void moveFocus(props.id, "next");
1757
+ return;
1758
+ case "ArrowUp":
1759
+ case "ArrowLeft":
1760
+ void moveFocus(props.id, "prev");
1761
+ return;
1762
+ case "Home":
1763
+ void moveFocus(props.id, "first");
1764
+ return;
1765
+ case "End":
1766
+ void moveFocus(props.id, "last");
1767
+ return;
1768
+ }
1769
+ };
1770
+ vue.onBeforeMount(() => {
1771
+ registry.register(props.id, {
1772
+ getValue: () => props.value,
1773
+ pressed,
1774
+ disabled: () => disabled.value,
1775
+ focus: () => button.value?.focus()
1776
+ });
1777
+ });
1778
+ vue.onBeforeUnmount(() => {
1779
+ registry.unregister(props.id);
1780
+ });
1781
+ return (_ctx, _cache) => {
1782
+ return vue.openBlock(), vue.createBlock(vue.unref(UiToggleButton), vue.mergeProps({
1783
+ id: __props.id,
1784
+ ref_key: "button",
1785
+ ref: button,
1786
+ size: vue.unref(size),
1787
+ pressed: pressed.value,
1788
+ disabled: disabled.value,
1789
+ focused: focused.value,
1790
+ grouped: true,
1791
+ tabindex: tabIndex.value,
1792
+ role: "checkbox",
1793
+ "aria-checked": `${pressed.value}`,
1794
+ "aria-disabled": `${disabled.value}`
1795
+ }, _ctx.$attrs, {
1796
+ onClick,
1797
+ onFocus,
1798
+ onBlur,
1799
+ onKeydown: [
1800
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["space"]),
1801
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["enter"]),
1802
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["left"]),
1803
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["right"]),
1804
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["up"]),
1805
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["down"]),
1806
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["home"]),
1807
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["end"])
1808
+ ]
1809
+ }), {
1810
+ default: vue.withCtx(() => [
1811
+ vue.renderSlot(_ctx.$slots, "default", {}, () => [
1812
+ _ctx.$slots.icon ? vue.renderSlot(_ctx.$slots, "icon", { key: 0 }) : vue.createCommentVNode("", true),
1813
+ _ctx.$slots.label || __props.label ? vue.renderSlot(_ctx.$slots, "label", { key: 1 }, () => [
1814
+ vue.createTextVNode(vue.toDisplayString(__props.label), 1)
1815
+ ]) : vue.createCommentVNode("", true)
1816
+ ])
1817
+ ]),
1818
+ _: 3
1819
+ }, 16, ["id", "size", "pressed", "disabled", "focused", "tabindex", "aria-checked", "aria-disabled", "onKeydown"]);
1820
+ };
1821
+ }
1822
+ });
1823
+ const UiToggleGroupRootType = "UiToggleGroupRoot";
1824
+ const UiToggleGroupRoot = remote.defineRemoteComponent(UiToggleGroupRootType);
1825
+ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
1826
+ ...{
1827
+ inheritAttrs: false
1828
+ },
1829
+ __name: "UiToggleGroup",
1830
+ props: {
1831
+ model: {
1832
+ type: Array,
1833
+ default: () => []
1834
+ },
1835
+ options: {
1836
+ type: Array,
1837
+ default: () => []
1838
+ },
1839
+ equalFn: {
1840
+ type: Function,
1841
+ default: (a, b) => a === b
1842
+ },
1843
+ size: {
1844
+ type: String,
1845
+ default: UiToggleButtonSize.SM,
1846
+ validator: (size) => {
1847
+ return Object.values(UiToggleButtonSize).includes(size);
1848
+ }
1849
+ },
1850
+ rubber: {
1851
+ type: Boolean,
1852
+ default: false
1853
+ },
1854
+ disabled: {
1855
+ type: Boolean,
1856
+ default: false
1857
+ },
1858
+ ariaLabel: {
1859
+ type: String,
1860
+ default: void 0
1861
+ },
1862
+ ariaLabelledby: {
1863
+ type: String,
1864
+ default: void 0
1865
+ },
1866
+ ariaDescribedby: {
1867
+ type: String,
1868
+ default: void 0
1869
+ },
1870
+ ariaOrientation: {
1871
+ type: String,
1872
+ default: "horizontal"
1873
+ }
1874
+ },
1875
+ emits: ["change", "update:model"],
1876
+ setup(__props, { emit: __emit }) {
1877
+ const props = __props;
1878
+ const emit = __emit;
1879
+ const registry = /* @__PURE__ */ new Map();
1880
+ const focusableId = vue.ref(null);
1881
+ const isPressed = (value) => {
1882
+ return props.model.some((entry) => props.equalFn(entry, value));
1883
+ };
1884
+ const getEnabledEntries = () => {
1885
+ return Array.from(registry.entries()).filter(([, option]) => !option.disabled());
1886
+ };
1887
+ const syncFocusableId = (preferredId) => {
1888
+ const enabledEntries = getEnabledEntries();
1889
+ const enabledIds = new Set(enabledEntries.map(([id]) => id));
1890
+ const pressedEntry = enabledEntries.find(([, option]) => option.pressed.value);
1891
+ if (preferredId && enabledIds.has(preferredId)) {
1892
+ focusableId.value = preferredId;
1893
+ return;
1894
+ }
1895
+ if (focusableId.value && enabledIds.has(focusableId.value)) {
1896
+ return;
1897
+ }
1898
+ focusableId.value = pressedEntry?.[0] ?? enabledEntries[0]?.[0] ?? null;
1899
+ };
1900
+ const updatePressedStates = () => {
1901
+ Array.from(registry.values()).forEach((option) => {
1902
+ option.pressed.value = isPressed(option.getValue());
1903
+ });
1904
+ };
1905
+ vue.provide(FocusableIdKey, vue.computed(() => focusableId.value));
1906
+ vue.provide(DisabledKey, vue.computed(() => props.disabled));
1907
+ vue.provide(SizeKey, vue.computed(() => props.size));
1908
+ vue.provide(SetFocusableIdKey, (id) => {
1909
+ syncFocusableId(id);
1910
+ });
1911
+ vue.provide(RegistryKey, {
1912
+ register: (id, option) => {
1913
+ if (registry.has(id)) {
1914
+ return;
1915
+ }
1916
+ option.pressed.value = isPressed(option.getValue());
1917
+ registry.set(id, option);
1918
+ syncFocusableId(option.pressed.value ? id : focusableId.value);
1919
+ },
1920
+ unregister: (id) => {
1921
+ registry.delete(id);
1922
+ if (focusableId.value === id) {
1923
+ syncFocusableId();
1924
+ }
1925
+ }
1926
+ });
1927
+ vue.provide(ToggleKey$1, (value) => {
1928
+ if (props.disabled) {
1929
+ return;
1930
+ }
1931
+ const nextModel = isPressed(value) ? props.model.filter((entry) => !props.equalFn(entry, value)) : [...props.model, value];
1932
+ emit("change", nextModel);
1933
+ emit("update:model", nextModel);
1934
+ });
1935
+ vue.provide(MoveFocusKey, async (id, direction) => {
1936
+ const enabledEntries = getEnabledEntries();
1937
+ if (!enabledEntries.length) {
1938
+ focusableId.value = null;
1939
+ return;
1940
+ }
1941
+ let targetEntry = enabledEntries[0];
1942
+ if (direction === "first") {
1943
+ targetEntry = enabledEntries[0];
1944
+ } else if (direction === "last") {
1945
+ targetEntry = enabledEntries.at(-1) ?? enabledEntries[0];
1946
+ } else {
1947
+ const currentIndex = enabledEntries.findIndex(([entryId]) => entryId === id);
1948
+ const fallbackIndex = focusableId.value ? enabledEntries.findIndex(([entryId]) => entryId === focusableId.value) : -1;
1949
+ const baseIndex = currentIndex === -1 ? Math.max(fallbackIndex, 0) : currentIndex;
1950
+ const offset = direction === "next" ? 1 : -1;
1951
+ const nextIndex = (baseIndex + offset + enabledEntries.length) % enabledEntries.length;
1952
+ targetEntry = enabledEntries[nextIndex] ?? enabledEntries[0];
1953
+ }
1954
+ if (!targetEntry) {
1955
+ return;
1956
+ }
1957
+ const [targetId, target] = targetEntry;
1958
+ focusableId.value = targetId;
1959
+ await target.focus();
1960
+ });
1961
+ vue.watch([() => props.model, () => props.equalFn], () => {
1962
+ updatePressedStates();
1963
+ syncFocusableId();
1964
+ }, {
1965
+ deep: true
1966
+ });
1967
+ vue.watch(() => props.disabled, () => {
1968
+ syncFocusableId();
1969
+ });
1970
+ return (_ctx, _cache) => {
1971
+ return vue.openBlock(), vue.createBlock(vue.unref(UiToggleGroupRoot), vue.mergeProps({
1972
+ size: __props.size,
1973
+ rubber: __props.rubber,
1974
+ disabled: __props.disabled,
1975
+ "aria-label": props.ariaLabel,
1976
+ "aria-labelledby": props.ariaLabelledby,
1977
+ "aria-describedby": props.ariaDescribedby,
1978
+ "aria-orientation": props.ariaOrientation
1979
+ }, _ctx.$attrs), {
1980
+ default: vue.withCtx(() => [
1981
+ vue.renderSlot(_ctx.$slots, "default", {}, () => [
1982
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.options, (option, index) => {
1983
+ return vue.openBlock(), vue.createBlock(_sfc_main$5, {
1984
+ key: `${option.label}-${index}`,
1985
+ label: option.label,
1986
+ value: option.value,
1987
+ disabled: option.disabled
1988
+ }, vue.createSlots({ _: 2 }, [
1989
+ _ctx.$slots.icon ? {
1990
+ name: "icon",
1991
+ fn: vue.withCtx(() => [
1992
+ vue.renderSlot(_ctx.$slots, "icon", { option })
1993
+ ]),
1994
+ key: "0"
1995
+ } : void 0
1996
+ ]), 1032, ["label", "value", "disabled"]);
1997
+ }), 128))
1998
+ ])
1999
+ ]),
2000
+ _: 3
2001
+ }, 16, ["size", "rubber", "disabled", "aria-label", "aria-labelledby", "aria-describedby", "aria-orientation"]);
2002
+ };
2003
+ }
2004
+ });
1620
2005
  const UiToolbarButtonType = "UiToolbarButton";
1621
2006
  const UiToolbarButton = remote.defineRemoteComponent(
1622
2007
  UiToolbarButtonType,
@@ -1998,8 +2383,14 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
1998
2383
  /** Размер поля ввода */
1999
2384
  textboxSize: {
2000
2385
  type: String,
2001
- validator: (size) => Object.values(SIZE$1).includes(size),
2002
- default: SIZE$1.SM
2386
+ validator: (size) => Object.values(SIZE$3).includes(size),
2387
+ default: SIZE$3.SM
2388
+ },
2389
+ /** Ширина селекта. fit — по содержимому, fluid — на всю ширину контейнера */
2390
+ width: {
2391
+ type: [Number, String],
2392
+ validator: isWidth,
2393
+ default: WIDTH.FIT
2003
2394
  },
2004
2395
  /** Наличие множественного выбора среди элементов выпадающего списка */
2005
2396
  multiple: {
@@ -2268,13 +2659,14 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
2268
2659
  "placeholder-only": __props.placeholderOnly,
2269
2660
  placeholder: __props.placeholder,
2270
2661
  "textbox-size": __props.textboxSize,
2662
+ width: __props.width,
2271
2663
  "active-descendant": activeOptionId.value
2272
2664
  }, _ctx.$attrs, {
2273
2665
  onInput,
2274
2666
  onKeydown: onKeyDown,
2275
2667
  "onUpdate:value": _cache[0] || (_cache[0] = ($event) => state.value = $event),
2276
2668
  "onUpdate:expanded": _cache[1] || (_cache[1] = ($event) => state.expanded = $event)
2277
- }), null, 16, ["id", "value", "multiple", "selection", "filter", "filterable", "clearable", "expanded", "invalid", "disabled", "readonly", "placeholder-only", "placeholder", "textbox-size", "active-descendant"]),
2669
+ }), null, 16, ["id", "value", "multiple", "selection", "filter", "filterable", "clearable", "expanded", "invalid", "disabled", "readonly", "placeholder-only", "placeholder", "textbox-size", "width", "active-descendant"]),
2278
2670
  vue.createVNode(vue.unref(UiSelectPopper), {
2279
2671
  id: resolvedId.value,
2280
2672
  ref_key: "popper",
@@ -2321,13 +2713,13 @@ function render(_ctx, _cache) {
2321
2713
  ])]);
2322
2714
  }
2323
2715
  const IconAddCircleOutlined = { render };
2324
- var SIZE = /* @__PURE__ */ ((SIZE2) => {
2716
+ var SIZE$2 = /* @__PURE__ */ ((SIZE2) => {
2325
2717
  SIZE2["XS"] = "xs";
2326
2718
  SIZE2["SM"] = "sm";
2327
2719
  SIZE2["MD"] = "md";
2328
2720
  SIZE2["LG"] = "lg";
2329
2721
  return SIZE2;
2330
- })(SIZE || {});
2722
+ })(SIZE$2 || {});
2331
2723
  const _hoisted_1 = ["id", "aria-selected", "aria-current"];
2332
2724
  const _hoisted_2 = ["innerHTML"];
2333
2725
  const _hoisted_3 = ["innerHTML"];
@@ -2362,8 +2754,8 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
2362
2754
  /** Размер шрифта, иконок и внутренних отступов компонента */
2363
2755
  size: {
2364
2756
  type: String,
2365
- validator: (size) => Object.values(SIZE).includes(size),
2366
- default: SIZE.MD
2757
+ validator: (size) => Object.values(SIZE$2).includes(size),
2758
+ default: SIZE$2.MD
2367
2759
  },
2368
2760
  /** Счетчик количества */
2369
2761
  counter: {
@@ -2691,6 +3083,8 @@ const createEndpointRoot = async (channel) => {
2691
3083
  "UiTag",
2692
3084
  "UiTextbox",
2693
3085
  "UiTimePicker",
3086
+ "UiToggleButton",
3087
+ "UiToggleGroupRoot",
2694
3088
  "UiToolbarButton",
2695
3089
  "UiToolbarLink",
2696
3090
  "UiTooltip",
@@ -2714,6 +3108,37 @@ const usePreview = (workers = vue.ref([])) => {
2714
3108
  preview: (url, resize = void 0, crop = void 0) => imagePreview.preview(_workers.value, url, resize, crop)
2715
3109
  };
2716
3110
  };
3111
+ var ANIMATION = /* @__PURE__ */ ((ANIMATION2) => {
3112
+ ANIMATION2["PULSE"] = "pulse";
3113
+ ANIMATION2["SHIMMER"] = "shimmer";
3114
+ return ANIMATION2;
3115
+ })(ANIMATION || {});
3116
+ var APPEARANCE$1 = /* @__PURE__ */ ((APPEARANCE2) => {
3117
+ APPEARANCE2["CIRCLE"] = "circle";
3118
+ APPEARANCE2["RECTANGLE"] = "rectangle";
3119
+ APPEARANCE2["TEXT"] = "text";
3120
+ return APPEARANCE2;
3121
+ })(APPEARANCE$1 || {});
3122
+ var SIZE$1 = /* @__PURE__ */ ((SIZE2) => {
3123
+ SIZE2["SM"] = "sm";
3124
+ SIZE2["MD"] = "md";
3125
+ SIZE2["LG"] = "lg";
3126
+ return SIZE2;
3127
+ })(SIZE$1 || {});
3128
+ function guessDimensionStyleValue(value) {
3129
+ return typeof value === "number" || typeof value === "string" && /^\d*$/.test(value) ? `${value}px` : value;
3130
+ }
3131
+ var SIZE = /* @__PURE__ */ ((SIZE2) => {
3132
+ SIZE2["SM"] = "sm";
3133
+ SIZE2["MD"] = "md";
3134
+ SIZE2["LG"] = "lg";
3135
+ return SIZE2;
3136
+ })(SIZE || {});
3137
+ var APPEARANCE = /* @__PURE__ */ ((APPEARANCE2) => {
3138
+ APPEARANCE2["TEXT"] = "text";
3139
+ APPEARANCE2["FILLED"] = "filled";
3140
+ return APPEARANCE2;
3141
+ })(APPEARANCE || {});
2717
3142
  const formatDateLat = (date) => dateFns.format(date, "dd/MM/yyyy", { locale: locale.enGB });
2718
3143
  const formatDateEs = (date) => dateFns.format(date, "dd.MM.yyyy", { locale: locale.es });
2719
3144
  const formatDateRu = (date) => dateFns.format(date, "dd.MM.yyyy", { locale: locale.ru });
@@ -2753,6 +3178,13 @@ function detectLocale() {
2753
3178
  exports.ALIGN = ALIGN;
2754
3179
  exports.DIRECTION = DIRECTION;
2755
3180
  exports.ImageWorkersKey = ImageWorkersKey;
3181
+ exports.RADIO_SWITCH_APPEARANCE = APPEARANCE$2;
3182
+ exports.RADIO_SWITCH_SIZE = SIZE$4;
3183
+ exports.SKELETON_ANIMATION = ANIMATION;
3184
+ exports.SKELETON_APPEARANCE = APPEARANCE$1;
3185
+ exports.SKELETON_SIZE = SIZE$1;
3186
+ exports.TAB_APPEARANCE = APPEARANCE;
3187
+ exports.TAB_SIZE = SIZE;
2756
3188
  exports.UiAddButton = UiAddButton;
2757
3189
  exports.UiAddButtonType = UiAddButtonType;
2758
3190
  exports.UiAlert = UiAlert;
@@ -2781,7 +3213,7 @@ exports.UiDatePickerType = UiDatePickerType;
2781
3213
  exports.UiDateType = UiDateType;
2782
3214
  exports.UiError = UiError;
2783
3215
  exports.UiErrorType = UiErrorType;
2784
- exports.UiField = _sfc_main$9;
3216
+ exports.UiField = _sfc_main$b;
2785
3217
  exports.UiInfobox = UiInfobox;
2786
3218
  exports.UiInfoboxType = UiInfoboxType;
2787
3219
  exports.UiLink = UiLink;
@@ -2800,7 +3232,7 @@ exports.UiModalWindowSurfaceType = UiModalWindowSurfaceType;
2800
3232
  exports.UiModalWindowType = UiModalWindowType;
2801
3233
  exports.UiNumberStepper = UiNumberStepper;
2802
3234
  exports.UiNumberStepperType = UiNumberStepperType;
2803
- exports.UiPageHeader = _sfc_main$8;
3235
+ exports.UiPageHeader = _sfc_main$a;
2804
3236
  exports.UiPopper = UiPopper;
2805
3237
  exports.UiPopperConnector = UiPopperConnector;
2806
3238
  exports.UiPopperConnectorType = UiPopperConnectorType;
@@ -2808,14 +3240,16 @@ exports.UiPopperTarget = UiPopperTarget;
2808
3240
  exports.UiPopperTargetType = UiPopperTargetType;
2809
3241
  exports.UiPopperType = UiPopperType;
2810
3242
  exports.UiRadio = UiRadio;
2811
- exports.UiRadioSwitch = _sfc_main$6;
2812
- exports.UiRadioSwitchOption = _sfc_main$7;
3243
+ exports.UiRadioSwitch = _sfc_main$8;
3244
+ exports.UiRadioSwitchOption = _sfc_main$9;
2813
3245
  exports.UiRadioType = UiRadioType;
2814
3246
  exports.UiScrollBox = UiScrollBox;
2815
3247
  exports.UiScrollBoxType = UiScrollBoxType;
2816
3248
  exports.UiSelect = _sfc_main$3;
2817
3249
  exports.UiSelectOption = _sfc_main$2;
2818
3250
  exports.UiSelectOptionGroup = _sfc_main;
3251
+ exports.UiSkeleton = UiSkeleton;
3252
+ exports.UiSkeletonType = UiSkeletonType;
2819
3253
  exports.UiSlider = UiSlider;
2820
3254
  exports.UiSliderType = UiSliderType;
2821
3255
  exports.UiSwitch = UiSwitch;
@@ -2824,9 +3258,9 @@ exports.UiTab = UiTab;
2824
3258
  exports.UiTabGroup = UiTabGroup;
2825
3259
  exports.UiTabGroupType = UiTabGroupType;
2826
3260
  exports.UiTabType = UiTabType;
2827
- exports.UiTable = _sfc_main$4;
3261
+ exports.UiTable = _sfc_main$6;
2828
3262
  exports.UiTableBodyCell = UiTableBodyCell;
2829
- exports.UiTableColumn = _sfc_main$5;
3263
+ exports.UiTableColumn = _sfc_main$7;
2830
3264
  exports.UiTableFooterButton = UiTableFooterButton;
2831
3265
  exports.UiTableFooterSection = UiTableFooterSection;
2832
3266
  exports.UiTableHeadCell = UiTableHeadCell;
@@ -2837,6 +3271,11 @@ exports.UiTextbox = UiTextbox;
2837
3271
  exports.UiTextboxType = UiTextboxType;
2838
3272
  exports.UiTimePicker = UiTimePicker;
2839
3273
  exports.UiTimePickerType = UiTimePickerType;
3274
+ exports.UiToggleButton = UiToggleButton;
3275
+ exports.UiToggleButtonSize = UiToggleButtonSize;
3276
+ exports.UiToggleButtonType = UiToggleButtonType;
3277
+ exports.UiToggleGroup = _sfc_main$4;
3278
+ exports.UiToggleGroupOption = _sfc_main$5;
2840
3279
  exports.UiToolbarButton = UiToolbarButton;
2841
3280
  exports.UiToolbarButtonType = UiToolbarButtonType;
2842
3281
  exports.UiToolbarLink = UiToolbarLink;
@@ -2855,5 +3294,6 @@ exports.createEndpointRoot = createEndpointRoot;
2855
3294
  exports.formatDate = formatDate;
2856
3295
  exports.formatDateTime = formatDateTime;
2857
3296
  exports.formatTime = formatTime;
3297
+ exports.guessSkeletonDimensionStyleValue = guessDimensionStyleValue;
2858
3298
  exports.mountEndpointRoot = mountEndpointRoot;
2859
3299
  exports.usePreview = usePreview;