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

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 (70) hide show
  1. package/assets/sprites/map-and-places/navigate.svg +3 -0
  2. package/dist/host.cjs +993 -516
  3. package/dist/host.css +261 -0
  4. package/dist/host.d.ts +222 -112
  5. package/dist/host.js +993 -516
  6. package/dist/remote.cjs +446 -60
  7. package/dist/remote.d.ts +573 -81
  8. package/dist/remote.js +447 -61
  9. package/docs/COMPONENTS.md +3 -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/UiSlider.yml +12 -0
  49. package/docs/profiles/UiSwitch.yml +12 -0
  50. package/docs/profiles/UiTab.yml +5 -0
  51. package/docs/profiles/UiTabGroup.yml +5 -0
  52. package/docs/profiles/UiTable.yml +5 -1
  53. package/docs/profiles/UiTableBodyCell.yml +12 -0
  54. package/docs/profiles/UiTableColumn.yml +12 -0
  55. package/docs/profiles/UiTableFooterButton.yml +12 -0
  56. package/docs/profiles/UiTableFooterSection.yml +12 -0
  57. package/docs/profiles/UiTableHeadCell.yml +12 -0
  58. package/docs/profiles/UiTableSorter.yml +12 -0
  59. package/docs/profiles/UiTag.yml +12 -0
  60. package/docs/profiles/UiTextbox.yml +5 -1
  61. package/docs/profiles/UiTimePicker.yml +12 -0
  62. package/docs/profiles/UiToggleButton.yml +211 -0
  63. package/docs/profiles/UiToggleGroup.yml +211 -0
  64. package/docs/profiles/UiToggleGroupOption.yml +116 -0
  65. package/docs/profiles/UiToolbarButton.yml +12 -0
  66. package/docs/profiles/UiToolbarLink.yml +12 -0
  67. package/docs/profiles/UiTooltip.yml +12 -0
  68. package/docs/profiles/UiTransition.yml +12 -0
  69. package/docs/profiles/UiYandexMap.yml +12 -0
  70. 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$1 = /* @__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$1 || {});
583
+ var SIZE$3 = /* @__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$3 || {});
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$1.DEFAULT));
597
+ const useSize$1 = () => vue.inject(SizeKey$1, vue.computed(() => SIZE$3.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$1).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$1.DEFAULT,
820
+ validator: (appearance) => Object.values(APPEARANCE$1).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$3.MD,
826
+ validator: (size) => Object.values(SIZE$3).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,
@@ -1016,7 +1015,7 @@ const byRowKey = (key) => {
1016
1015
  };
1017
1016
  const asRowClass = (value) => value;
1018
1017
  const asRowAttrs = (value) => value;
1019
- const _sfc_main$5 = vue.defineComponent({
1018
+ const _sfc_main$7 = vue.defineComponent({
1020
1019
  name: "UiTableColumn",
1021
1020
  props: {
1022
1021
  label: {
@@ -1096,7 +1095,7 @@ const isNamedComponent = (node, name) => {
1096
1095
  return "name" in node.type && node.type.name === name;
1097
1096
  };
1098
1097
  const isTableColumnVNode = (node) => {
1099
- return node.type === _sfc_main$5 || isNamedComponent(node, "UiTableColumn");
1098
+ return node.type === _sfc_main$7 || isNamedComponent(node, "UiTableColumn");
1100
1099
  };
1101
1100
  const isWhitespaceText = (value) => value.trim().length === 0;
1102
1101
  const normalizeNodes = (children) => {
@@ -1301,7 +1300,7 @@ const withoutClass = (attrs) => {
1301
1300
  delete next.class;
1302
1301
  return next;
1303
1302
  };
1304
- const _sfc_main$4 = vue.defineComponent({
1303
+ const _sfc_main$6 = vue.defineComponent({
1305
1304
  name: "UiTable",
1306
1305
  inheritAttrs: false,
1307
1306
  props: {
@@ -1570,14 +1569,14 @@ const UiTag = remote.defineRemoteComponent(
1570
1569
  UiTagType,
1571
1570
  ["click", "focus", "blur", "remove"]
1572
1571
  );
1573
- var SIZE$1 = /* @__PURE__ */ ((SIZE2) => {
1572
+ var SIZE$2 = /* @__PURE__ */ ((SIZE2) => {
1574
1573
  SIZE2["XS"] = "xs";
1575
1574
  SIZE2["SM"] = "sm";
1576
1575
  SIZE2["MD"] = "md";
1577
1576
  SIZE2["LG"] = "lg";
1578
1577
  SIZE2["XL"] = "xl";
1579
1578
  return SIZE2;
1580
- })(SIZE$1 || {});
1579
+ })(SIZE$2 || {});
1581
1580
  const events = [
1582
1581
  "input",
1583
1582
  "keydown",
@@ -1617,6 +1616,371 @@ const UiTimePicker = remote.defineRemoteComponent(UiTimePickerType, {
1617
1616
  focus: remote.defineRemoteMethod()
1618
1617
  }
1619
1618
  });
1619
+ const UiToggleButtonType = "UiToggleButton";
1620
+ const UiToggleButton = remote.defineRemoteComponent(
1621
+ UiToggleButtonType,
1622
+ {
1623
+ emits: [
1624
+ "click",
1625
+ "focus",
1626
+ "blur",
1627
+ "keydown"
1628
+ ],
1629
+ methods: {
1630
+ focus: remote.defineRemoteMethod(),
1631
+ blur: remote.defineRemoteMethod(),
1632
+ click: remote.defineRemoteMethod()
1633
+ }
1634
+ }
1635
+ );
1636
+ var UiToggleButtonSize = /* @__PURE__ */ ((UiToggleButtonSize2) => {
1637
+ UiToggleButtonSize2["LG"] = "lg";
1638
+ UiToggleButtonSize2["MD"] = "md";
1639
+ UiToggleButtonSize2["SM"] = "sm";
1640
+ UiToggleButtonSize2["XS"] = "xs";
1641
+ return UiToggleButtonSize2;
1642
+ })(UiToggleButtonSize || {});
1643
+ const FocusableIdKey = Symbol("UiToggleGroupFocusableId");
1644
+ const MoveFocusKey = Symbol("UiToggleGroupMoveFocus");
1645
+ const RegistryKey = Symbol("UiToggleGroupRegistry");
1646
+ const SetFocusableIdKey = Symbol("UiToggleGroupSetFocusableId");
1647
+ const SizeKey = Symbol("UiToggleGroupSize");
1648
+ const DisabledKey = Symbol("UiToggleGroupDisabled");
1649
+ const ToggleKey$1 = Symbol("UiToggleGroupToggle");
1650
+ const useFocusableId = () => vue.inject(FocusableIdKey, vue.computed(() => null));
1651
+ const useMoveFocus = () => vue.inject(MoveFocusKey, () => {
1652
+ });
1653
+ const useRegistry = () => vue.inject(RegistryKey, {
1654
+ register: () => {
1655
+ },
1656
+ unregister: () => {
1657
+ }
1658
+ });
1659
+ const useSetFocusableId = () => vue.inject(SetFocusableIdKey, () => {
1660
+ });
1661
+ const useSize = () => vue.inject(SizeKey, vue.computed(() => UiToggleButtonSize.SM));
1662
+ const useDisabled = () => vue.inject(DisabledKey, vue.computed(() => false));
1663
+ const useToggle = () => vue.inject(ToggleKey$1, () => {
1664
+ });
1665
+ let counter$1 = 0;
1666
+ const __default__ = {};
1667
+ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
1668
+ ...__default__,
1669
+ ...{
1670
+ inheritAttrs: false
1671
+ },
1672
+ __name: "UiToggleGroupOption",
1673
+ props: {
1674
+ id: {
1675
+ type: String,
1676
+ default: () => "ui-v1-toggle-group-option-" + ++counter$1
1677
+ },
1678
+ label: {
1679
+ type: String,
1680
+ default: ""
1681
+ },
1682
+ value: {
1683
+ type: null,
1684
+ required: true
1685
+ },
1686
+ disabled: {
1687
+ type: Boolean,
1688
+ default: false
1689
+ }
1690
+ },
1691
+ setup(__props) {
1692
+ const props = __props;
1693
+ const button = vue.useTemplateRef("button");
1694
+ const groupDisabled = useDisabled();
1695
+ const focusableId = useFocusableId();
1696
+ const moveFocus = useMoveFocus();
1697
+ const registry = useRegistry();
1698
+ const setFocusableId = useSetFocusableId();
1699
+ const size = useSize();
1700
+ const toggle = useToggle();
1701
+ const focused = vue.ref(false);
1702
+ const disabled = vue.computed(() => groupDisabled.value || props.disabled);
1703
+ const pressed = vue.ref(false);
1704
+ const tabIndex = vue.computed(() => {
1705
+ return !disabled.value && focusableId.value === props.id ? 0 : -1;
1706
+ });
1707
+ const onClick = () => {
1708
+ if (disabled.value) {
1709
+ return;
1710
+ }
1711
+ setFocusableId(props.id);
1712
+ toggle(props.value);
1713
+ };
1714
+ const onFocus = () => {
1715
+ if (!disabled.value) {
1716
+ focused.value = true;
1717
+ setFocusableId(props.id);
1718
+ }
1719
+ };
1720
+ const onBlur = () => {
1721
+ focused.value = false;
1722
+ };
1723
+ const onKeyDown = (event) => {
1724
+ if (disabled.value) {
1725
+ return;
1726
+ }
1727
+ switch (event.key) {
1728
+ case " ":
1729
+ case "Enter":
1730
+ setFocusableId(props.id);
1731
+ toggle(props.value);
1732
+ return;
1733
+ case "ArrowDown":
1734
+ case "ArrowRight":
1735
+ void moveFocus(props.id, "next");
1736
+ return;
1737
+ case "ArrowUp":
1738
+ case "ArrowLeft":
1739
+ void moveFocus(props.id, "prev");
1740
+ return;
1741
+ case "Home":
1742
+ void moveFocus(props.id, "first");
1743
+ return;
1744
+ case "End":
1745
+ void moveFocus(props.id, "last");
1746
+ return;
1747
+ }
1748
+ };
1749
+ vue.onBeforeMount(() => {
1750
+ registry.register(props.id, {
1751
+ getValue: () => props.value,
1752
+ pressed,
1753
+ disabled: () => disabled.value,
1754
+ focus: () => button.value?.focus()
1755
+ });
1756
+ });
1757
+ vue.onBeforeUnmount(() => {
1758
+ registry.unregister(props.id);
1759
+ });
1760
+ return (_ctx, _cache) => {
1761
+ return vue.openBlock(), vue.createBlock(vue.unref(UiToggleButton), vue.mergeProps({
1762
+ id: __props.id,
1763
+ ref_key: "button",
1764
+ ref: button,
1765
+ size: vue.unref(size),
1766
+ pressed: pressed.value,
1767
+ disabled: disabled.value,
1768
+ focused: focused.value,
1769
+ grouped: true,
1770
+ tabindex: tabIndex.value,
1771
+ role: "checkbox",
1772
+ "aria-checked": `${pressed.value}`,
1773
+ "aria-disabled": `${disabled.value}`
1774
+ }, _ctx.$attrs, {
1775
+ onClick,
1776
+ onFocus,
1777
+ onBlur,
1778
+ onKeydown: [
1779
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["space"]),
1780
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["enter"]),
1781
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["left"]),
1782
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["right"]),
1783
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["up"]),
1784
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["down"]),
1785
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["home"]),
1786
+ remote.withKeys(remote.withModifiers(onKeyDown, ["prevent"]), ["end"])
1787
+ ]
1788
+ }), {
1789
+ default: vue.withCtx(() => [
1790
+ vue.renderSlot(_ctx.$slots, "default", {}, () => [
1791
+ _ctx.$slots.icon ? vue.renderSlot(_ctx.$slots, "icon", { key: 0 }) : vue.createCommentVNode("", true),
1792
+ _ctx.$slots.label || __props.label ? vue.renderSlot(_ctx.$slots, "label", { key: 1 }, () => [
1793
+ vue.createTextVNode(vue.toDisplayString(__props.label), 1)
1794
+ ]) : vue.createCommentVNode("", true)
1795
+ ])
1796
+ ]),
1797
+ _: 3
1798
+ }, 16, ["id", "size", "pressed", "disabled", "focused", "tabindex", "aria-checked", "aria-disabled", "onKeydown"]);
1799
+ };
1800
+ }
1801
+ });
1802
+ const UiToggleGroupRootType = "UiToggleGroupRoot";
1803
+ const UiToggleGroupRoot = remote.defineRemoteComponent(UiToggleGroupRootType);
1804
+ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
1805
+ ...{
1806
+ inheritAttrs: false
1807
+ },
1808
+ __name: "UiToggleGroup",
1809
+ props: {
1810
+ model: {
1811
+ type: Array,
1812
+ default: () => []
1813
+ },
1814
+ options: {
1815
+ type: Array,
1816
+ default: () => []
1817
+ },
1818
+ equalFn: {
1819
+ type: Function,
1820
+ default: (a, b) => a === b
1821
+ },
1822
+ size: {
1823
+ type: String,
1824
+ default: UiToggleButtonSize.SM,
1825
+ validator: (size) => {
1826
+ return Object.values(UiToggleButtonSize).includes(size);
1827
+ }
1828
+ },
1829
+ rubber: {
1830
+ type: Boolean,
1831
+ default: false
1832
+ },
1833
+ disabled: {
1834
+ type: Boolean,
1835
+ default: false
1836
+ },
1837
+ ariaLabel: {
1838
+ type: String,
1839
+ default: void 0
1840
+ },
1841
+ ariaLabelledby: {
1842
+ type: String,
1843
+ default: void 0
1844
+ },
1845
+ ariaDescribedby: {
1846
+ type: String,
1847
+ default: void 0
1848
+ },
1849
+ ariaOrientation: {
1850
+ type: String,
1851
+ default: "horizontal"
1852
+ }
1853
+ },
1854
+ emits: ["change", "update:model"],
1855
+ setup(__props, { emit: __emit }) {
1856
+ const props = __props;
1857
+ const emit = __emit;
1858
+ const registry = /* @__PURE__ */ new Map();
1859
+ const focusableId = vue.ref(null);
1860
+ const isPressed = (value) => {
1861
+ return props.model.some((entry) => props.equalFn(entry, value));
1862
+ };
1863
+ const getEnabledEntries = () => {
1864
+ return Array.from(registry.entries()).filter(([, option]) => !option.disabled());
1865
+ };
1866
+ const syncFocusableId = (preferredId) => {
1867
+ const enabledEntries = getEnabledEntries();
1868
+ const enabledIds = new Set(enabledEntries.map(([id]) => id));
1869
+ const pressedEntry = enabledEntries.find(([, option]) => option.pressed.value);
1870
+ if (preferredId && enabledIds.has(preferredId)) {
1871
+ focusableId.value = preferredId;
1872
+ return;
1873
+ }
1874
+ if (focusableId.value && enabledIds.has(focusableId.value)) {
1875
+ return;
1876
+ }
1877
+ focusableId.value = pressedEntry?.[0] ?? enabledEntries[0]?.[0] ?? null;
1878
+ };
1879
+ const updatePressedStates = () => {
1880
+ Array.from(registry.values()).forEach((option) => {
1881
+ option.pressed.value = isPressed(option.getValue());
1882
+ });
1883
+ };
1884
+ vue.provide(FocusableIdKey, vue.computed(() => focusableId.value));
1885
+ vue.provide(DisabledKey, vue.computed(() => props.disabled));
1886
+ vue.provide(SizeKey, vue.computed(() => props.size));
1887
+ vue.provide(SetFocusableIdKey, (id) => {
1888
+ syncFocusableId(id);
1889
+ });
1890
+ vue.provide(RegistryKey, {
1891
+ register: (id, option) => {
1892
+ if (registry.has(id)) {
1893
+ return;
1894
+ }
1895
+ option.pressed.value = isPressed(option.getValue());
1896
+ registry.set(id, option);
1897
+ syncFocusableId(option.pressed.value ? id : focusableId.value);
1898
+ },
1899
+ unregister: (id) => {
1900
+ registry.delete(id);
1901
+ if (focusableId.value === id) {
1902
+ syncFocusableId();
1903
+ }
1904
+ }
1905
+ });
1906
+ vue.provide(ToggleKey$1, (value) => {
1907
+ if (props.disabled) {
1908
+ return;
1909
+ }
1910
+ const nextModel = isPressed(value) ? props.model.filter((entry) => !props.equalFn(entry, value)) : [...props.model, value];
1911
+ emit("change", nextModel);
1912
+ emit("update:model", nextModel);
1913
+ });
1914
+ vue.provide(MoveFocusKey, async (id, direction) => {
1915
+ const enabledEntries = getEnabledEntries();
1916
+ if (!enabledEntries.length) {
1917
+ focusableId.value = null;
1918
+ return;
1919
+ }
1920
+ let targetEntry = enabledEntries[0];
1921
+ if (direction === "first") {
1922
+ targetEntry = enabledEntries[0];
1923
+ } else if (direction === "last") {
1924
+ targetEntry = enabledEntries.at(-1) ?? enabledEntries[0];
1925
+ } else {
1926
+ const currentIndex = enabledEntries.findIndex(([entryId]) => entryId === id);
1927
+ const fallbackIndex = focusableId.value ? enabledEntries.findIndex(([entryId]) => entryId === focusableId.value) : -1;
1928
+ const baseIndex = currentIndex === -1 ? Math.max(fallbackIndex, 0) : currentIndex;
1929
+ const offset = direction === "next" ? 1 : -1;
1930
+ const nextIndex = (baseIndex + offset + enabledEntries.length) % enabledEntries.length;
1931
+ targetEntry = enabledEntries[nextIndex] ?? enabledEntries[0];
1932
+ }
1933
+ if (!targetEntry) {
1934
+ return;
1935
+ }
1936
+ const [targetId, target] = targetEntry;
1937
+ focusableId.value = targetId;
1938
+ await target.focus();
1939
+ });
1940
+ vue.watch([() => props.model, () => props.equalFn], () => {
1941
+ updatePressedStates();
1942
+ syncFocusableId();
1943
+ }, {
1944
+ deep: true
1945
+ });
1946
+ vue.watch(() => props.disabled, () => {
1947
+ syncFocusableId();
1948
+ });
1949
+ return (_ctx, _cache) => {
1950
+ return vue.openBlock(), vue.createBlock(vue.unref(UiToggleGroupRoot), vue.mergeProps({
1951
+ size: __props.size,
1952
+ rubber: __props.rubber,
1953
+ disabled: __props.disabled,
1954
+ "aria-label": props.ariaLabel,
1955
+ "aria-labelledby": props.ariaLabelledby,
1956
+ "aria-describedby": props.ariaDescribedby,
1957
+ "aria-orientation": props.ariaOrientation
1958
+ }, _ctx.$attrs), {
1959
+ default: vue.withCtx(() => [
1960
+ vue.renderSlot(_ctx.$slots, "default", {}, () => [
1961
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.options, (option, index) => {
1962
+ return vue.openBlock(), vue.createBlock(_sfc_main$5, {
1963
+ key: `${option.label}-${index}`,
1964
+ label: option.label,
1965
+ value: option.value,
1966
+ disabled: option.disabled
1967
+ }, vue.createSlots({ _: 2 }, [
1968
+ _ctx.$slots.icon ? {
1969
+ name: "icon",
1970
+ fn: vue.withCtx(() => [
1971
+ vue.renderSlot(_ctx.$slots, "icon", { option })
1972
+ ]),
1973
+ key: "0"
1974
+ } : void 0
1975
+ ]), 1032, ["label", "value", "disabled"]);
1976
+ }), 128))
1977
+ ])
1978
+ ]),
1979
+ _: 3
1980
+ }, 16, ["size", "rubber", "disabled", "aria-label", "aria-labelledby", "aria-describedby", "aria-orientation"]);
1981
+ };
1982
+ }
1983
+ });
1620
1984
  const UiToolbarButtonType = "UiToolbarButton";
1621
1985
  const UiToolbarButton = remote.defineRemoteComponent(
1622
1986
  UiToolbarButtonType,
@@ -1998,8 +2362,8 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
1998
2362
  /** Размер поля ввода */
1999
2363
  textboxSize: {
2000
2364
  type: String,
2001
- validator: (size) => Object.values(SIZE$1).includes(size),
2002
- default: SIZE$1.SM
2365
+ validator: (size) => Object.values(SIZE$2).includes(size),
2366
+ default: SIZE$2.SM
2003
2367
  },
2004
2368
  /** Наличие множественного выбора среди элементов выпадающего списка */
2005
2369
  multiple: {
@@ -2321,13 +2685,13 @@ function render(_ctx, _cache) {
2321
2685
  ])]);
2322
2686
  }
2323
2687
  const IconAddCircleOutlined = { render };
2324
- var SIZE = /* @__PURE__ */ ((SIZE2) => {
2688
+ var SIZE$1 = /* @__PURE__ */ ((SIZE2) => {
2325
2689
  SIZE2["XS"] = "xs";
2326
2690
  SIZE2["SM"] = "sm";
2327
2691
  SIZE2["MD"] = "md";
2328
2692
  SIZE2["LG"] = "lg";
2329
2693
  return SIZE2;
2330
- })(SIZE || {});
2694
+ })(SIZE$1 || {});
2331
2695
  const _hoisted_1 = ["id", "aria-selected", "aria-current"];
2332
2696
  const _hoisted_2 = ["innerHTML"];
2333
2697
  const _hoisted_3 = ["innerHTML"];
@@ -2362,8 +2726,8 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
2362
2726
  /** Размер шрифта, иконок и внутренних отступов компонента */
2363
2727
  size: {
2364
2728
  type: String,
2365
- validator: (size) => Object.values(SIZE).includes(size),
2366
- default: SIZE.MD
2729
+ validator: (size) => Object.values(SIZE$1).includes(size),
2730
+ default: SIZE$1.MD
2367
2731
  },
2368
2732
  /** Счетчик количества */
2369
2733
  counter: {
@@ -2691,6 +3055,8 @@ const createEndpointRoot = async (channel) => {
2691
3055
  "UiTag",
2692
3056
  "UiTextbox",
2693
3057
  "UiTimePicker",
3058
+ "UiToggleButton",
3059
+ "UiToggleGroupRoot",
2694
3060
  "UiToolbarButton",
2695
3061
  "UiToolbarLink",
2696
3062
  "UiTooltip",
@@ -2714,6 +3080,17 @@ const usePreview = (workers = vue.ref([])) => {
2714
3080
  preview: (url, resize = void 0, crop = void 0) => imagePreview.preview(_workers.value, url, resize, crop)
2715
3081
  };
2716
3082
  };
3083
+ var SIZE = /* @__PURE__ */ ((SIZE2) => {
3084
+ SIZE2["SM"] = "sm";
3085
+ SIZE2["MD"] = "md";
3086
+ SIZE2["LG"] = "lg";
3087
+ return SIZE2;
3088
+ })(SIZE || {});
3089
+ var APPEARANCE = /* @__PURE__ */ ((APPEARANCE2) => {
3090
+ APPEARANCE2["TEXT"] = "text";
3091
+ APPEARANCE2["FILLED"] = "filled";
3092
+ return APPEARANCE2;
3093
+ })(APPEARANCE || {});
2717
3094
  const formatDateLat = (date) => dateFns.format(date, "dd/MM/yyyy", { locale: locale.enGB });
2718
3095
  const formatDateEs = (date) => dateFns.format(date, "dd.MM.yyyy", { locale: locale.es });
2719
3096
  const formatDateRu = (date) => dateFns.format(date, "dd.MM.yyyy", { locale: locale.ru });
@@ -2753,6 +3130,10 @@ function detectLocale() {
2753
3130
  exports.ALIGN = ALIGN;
2754
3131
  exports.DIRECTION = DIRECTION;
2755
3132
  exports.ImageWorkersKey = ImageWorkersKey;
3133
+ exports.RADIO_SWITCH_APPEARANCE = APPEARANCE$1;
3134
+ exports.RADIO_SWITCH_SIZE = SIZE$3;
3135
+ exports.TAB_APPEARANCE = APPEARANCE;
3136
+ exports.TAB_SIZE = SIZE;
2756
3137
  exports.UiAddButton = UiAddButton;
2757
3138
  exports.UiAddButtonType = UiAddButtonType;
2758
3139
  exports.UiAlert = UiAlert;
@@ -2781,7 +3162,7 @@ exports.UiDatePickerType = UiDatePickerType;
2781
3162
  exports.UiDateType = UiDateType;
2782
3163
  exports.UiError = UiError;
2783
3164
  exports.UiErrorType = UiErrorType;
2784
- exports.UiField = _sfc_main$9;
3165
+ exports.UiField = _sfc_main$b;
2785
3166
  exports.UiInfobox = UiInfobox;
2786
3167
  exports.UiInfoboxType = UiInfoboxType;
2787
3168
  exports.UiLink = UiLink;
@@ -2800,7 +3181,7 @@ exports.UiModalWindowSurfaceType = UiModalWindowSurfaceType;
2800
3181
  exports.UiModalWindowType = UiModalWindowType;
2801
3182
  exports.UiNumberStepper = UiNumberStepper;
2802
3183
  exports.UiNumberStepperType = UiNumberStepperType;
2803
- exports.UiPageHeader = _sfc_main$8;
3184
+ exports.UiPageHeader = _sfc_main$a;
2804
3185
  exports.UiPopper = UiPopper;
2805
3186
  exports.UiPopperConnector = UiPopperConnector;
2806
3187
  exports.UiPopperConnectorType = UiPopperConnectorType;
@@ -2808,8 +3189,8 @@ exports.UiPopperTarget = UiPopperTarget;
2808
3189
  exports.UiPopperTargetType = UiPopperTargetType;
2809
3190
  exports.UiPopperType = UiPopperType;
2810
3191
  exports.UiRadio = UiRadio;
2811
- exports.UiRadioSwitch = _sfc_main$6;
2812
- exports.UiRadioSwitchOption = _sfc_main$7;
3192
+ exports.UiRadioSwitch = _sfc_main$8;
3193
+ exports.UiRadioSwitchOption = _sfc_main$9;
2813
3194
  exports.UiRadioType = UiRadioType;
2814
3195
  exports.UiScrollBox = UiScrollBox;
2815
3196
  exports.UiScrollBoxType = UiScrollBoxType;
@@ -2824,9 +3205,9 @@ exports.UiTab = UiTab;
2824
3205
  exports.UiTabGroup = UiTabGroup;
2825
3206
  exports.UiTabGroupType = UiTabGroupType;
2826
3207
  exports.UiTabType = UiTabType;
2827
- exports.UiTable = _sfc_main$4;
3208
+ exports.UiTable = _sfc_main$6;
2828
3209
  exports.UiTableBodyCell = UiTableBodyCell;
2829
- exports.UiTableColumn = _sfc_main$5;
3210
+ exports.UiTableColumn = _sfc_main$7;
2830
3211
  exports.UiTableFooterButton = UiTableFooterButton;
2831
3212
  exports.UiTableFooterSection = UiTableFooterSection;
2832
3213
  exports.UiTableHeadCell = UiTableHeadCell;
@@ -2837,6 +3218,11 @@ exports.UiTextbox = UiTextbox;
2837
3218
  exports.UiTextboxType = UiTextboxType;
2838
3219
  exports.UiTimePicker = UiTimePicker;
2839
3220
  exports.UiTimePickerType = UiTimePickerType;
3221
+ exports.UiToggleButton = UiToggleButton;
3222
+ exports.UiToggleButtonSize = UiToggleButtonSize;
3223
+ exports.UiToggleButtonType = UiToggleButtonType;
3224
+ exports.UiToggleGroup = _sfc_main$4;
3225
+ exports.UiToggleGroupOption = _sfc_main$5;
2840
3226
  exports.UiToolbarButton = UiToolbarButton;
2841
3227
  exports.UiToolbarButtonType = UiToolbarButtonType;
2842
3228
  exports.UiToolbarLink = UiToolbarLink;