@dxtmisha/wiki 0.24.3 → 0.39.1
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.
- package/package.json +8 -8
- package/src/classes/WikiStorybook.ts +92 -1
- package/src/classes/WikiStorybookItem.ts +79 -5
- package/src/classes/WikiStorybookProp.ts +109 -0
- package/src/library.ts +1 -0
- package/src/media/descriptions/wikiDescriptions.ts +32 -0
- package/src/media/descriptions/wikiDescriptionsAccordion.ts +204 -0
- package/src/media/descriptions/wikiDescriptionsActionSheet.ts +264 -0
- package/src/media/descriptions/wikiDescriptionsActions.ts +189 -0
- package/src/media/descriptions/wikiDescriptionsAnchor.ts +78 -0
- package/src/media/descriptions/wikiDescriptionsArrow.ts +214 -0
- package/src/media/descriptions/wikiDescriptionsBadge.ts +43 -0
- package/src/media/descriptions/wikiDescriptionsBars.ts +33 -0
- package/src/media/descriptions/wikiDescriptionsBlock.ts +159 -0
- package/src/media/descriptions/wikiDescriptionsButton.ts +32 -1
- package/src/media/descriptions/wikiDescriptionsCell.ts +26 -1
- package/src/media/descriptions/wikiDescriptionsChip.ts +42 -0
- package/src/media/descriptions/wikiDescriptionsChipGroup.ts +199 -0
- package/src/media/descriptions/wikiDescriptionsDialog.ts +226 -0
- package/src/media/descriptions/wikiDescriptionsField.ts +57 -2
- package/src/media/descriptions/wikiDescriptionsFieldCounter.ts +32 -0
- package/src/media/descriptions/wikiDescriptionsFieldLabel.ts +22 -0
- package/src/media/descriptions/wikiDescriptionsFieldMessage.ts +25 -0
- package/src/media/descriptions/wikiDescriptionsIcon.ts +46 -8
- package/src/media/descriptions/wikiDescriptionsImage.ts +91 -7
- package/src/media/descriptions/wikiDescriptionsInput.ts +313 -0
- package/src/media/descriptions/wikiDescriptionsList.ts +31 -0
- package/src/media/descriptions/wikiDescriptionsListGroup.ts +57 -0
- package/src/media/descriptions/wikiDescriptionsListItem.ts +42 -0
- package/src/media/descriptions/wikiDescriptionsListMenu.ts +41 -0
- package/src/media/descriptions/wikiDescriptionsMask.ts +42 -0
- package/src/media/descriptions/wikiDescriptionsMenu.ts +179 -0
- package/src/media/descriptions/wikiDescriptionsModal.ts +200 -0
- package/src/media/descriptions/wikiDescriptionsMotionTransform.ts +59 -6
- package/src/media/descriptions/wikiDescriptionsPage.ts +155 -0
- package/src/media/descriptions/wikiDescriptionsProgress.ts +39 -0
- package/src/media/descriptions/wikiDescriptionsRipple.ts +42 -3
- package/src/media/descriptions/wikiDescriptionsScrollbar.ts +48 -0
- package/src/media/descriptions/wikiDescriptionsSection.ts +152 -0
- package/src/media/descriptions/wikiDescriptionsSelect.ts +253 -0
- package/src/media/descriptions/wikiDescriptionsSelectValue.ts +107 -0
- package/src/media/descriptions/wikiDescriptionsSkeleton.ts +42 -1
- package/src/media/descriptions/wikiDescriptionsTextareaAutosize.ts +80 -0
- package/src/media/descriptions/wikiDescriptionsTooltip.ts +136 -0
- package/src/media/descriptions/wikiDescriptionsWindow.ts +60 -0
- package/src/media/functional/en/conversions.mdx +67 -0
- package/src/media/functional/en/dataUtils.mdx +25 -0
- package/src/media/functional/en/datetimeRef.mdx +1 -1
- package/src/media/functional/en/eventRef.mdx +1 -1
- package/src/media/functional/en/executionUtils.mdx +58 -0
- package/src/media/functional/en/geoFlagRef.mdx +1 -1
- package/src/media/functional/en/geoIntlRef.mdx +1 -1
- package/src/media/functional/en/geoRef.mdx +2 -2
- package/src/media/functional/en/meta.mdx +1206 -0
- package/src/media/functional/en/metaManager.mdx +376 -0
- package/src/media/functional/en/metaOg.mdx +694 -0
- package/src/media/functional/en/metaTwitter.mdx +853 -0
- package/src/media/functional/en/reactive.mdx +40 -0
- package/src/media/functional/en/refTypes.mdx +1 -1
- package/src/media/functional/en/useApiRef.mdx +5 -5
- package/src/media/functional/en/useMeta.mdx +431 -0
- package/src/media/functional/en/validationUtils.mdx +11 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.en.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.ru.mdx +25 -0
- package/src/media/functional/functional-basic/functions/getCurrentDate/getCurrentDate.vi.mdx +25 -0
- package/src/media/functional/functional-basic/functions/isEnter/isEnter.en.mdx +30 -0
- package/src/media/functional/functional-basic/functions/isEnter/isEnter.ru.mdx +30 -0
- package/src/media/functional/functional-basic/functions/isEnter/isEnter.vi.mdx +30 -0
- package/src/media/functional/ru/conversions.mdx +67 -0
- package/src/media/functional/ru/dataUtils.mdx +25 -0
- package/src/media/functional/ru/datetimeRef.mdx +2 -2
- package/src/media/functional/ru/eventRef.mdx +1 -1
- package/src/media/functional/ru/executionUtils.mdx +58 -0
- package/src/media/functional/ru/geoFlagRef.mdx +1 -1
- package/src/media/functional/ru/geoIntl.mdx +2 -2
- package/src/media/functional/ru/geoIntlRef.mdx +1 -1
- package/src/media/functional/ru/geoRef.mdx +2 -2
- package/src/media/functional/ru/listTypes.mdx +1 -1
- package/src/media/functional/ru/meta.mdx +1330 -0
- package/src/media/functional/ru/metaManager.mdx +376 -0
- package/src/media/functional/ru/metaOg.mdx +694 -0
- package/src/media/functional/ru/metaTwitter.mdx +853 -0
- package/src/media/functional/ru/reactive.mdx +40 -0
- package/src/media/functional/ru/refTypes.mdx +2 -2
- package/src/media/functional/ru/useApiRef.mdx +5 -5
- package/src/media/functional/ru/useMeta.mdx +431 -0
- package/src/media/functional/ru/validationUtils.mdx +11 -0
- package/src/media/mdx/Accordion/accordion.en.mdx +59 -0
- package/src/media/mdx/Accordion/accordion.ru.mdx +59 -0
- package/src/media/mdx/Accordion/slots.en.mdx +6 -0
- package/src/media/mdx/Accordion/slots.ru.mdx +6 -0
- package/src/media/mdx/Accordion/wikiMdxAccordion.ts +25 -0
- package/src/media/mdx/ActionSheet/actionSheet.en.mdx +61 -0
- package/src/media/mdx/ActionSheet/actionSheet.ru.mdx +61 -0
- package/src/media/mdx/ActionSheet/touchClose.en.mdx +21 -0
- package/src/media/mdx/ActionSheet/touchClose.ru.mdx +21 -0
- package/src/media/mdx/ActionSheet/wikiMdxActionSheet.ts +25 -0
- package/src/media/mdx/Actions/actions.en.mdx +48 -0
- package/src/media/mdx/Actions/actions.ru.mdx +48 -0
- package/src/media/mdx/Actions/flexible.en.mdx +19 -0
- package/src/media/mdx/Actions/flexible.ru.mdx +19 -0
- package/src/media/mdx/Actions/list.en.mdx +50 -0
- package/src/media/mdx/Actions/list.ru.mdx +50 -0
- package/src/media/mdx/Actions/wikiMdxActions.ts +31 -0
- package/src/media/mdx/Anchor/anchor.en.mdx +34 -0
- package/src/media/mdx/Anchor/anchor.ru.mdx +34 -0
- package/src/media/mdx/Anchor/expose.go.en.mdx +6 -0
- package/src/media/mdx/Anchor/expose.go.ru.mdx +6 -0
- package/src/media/mdx/Anchor/hide.en.mdx +28 -0
- package/src/media/mdx/Anchor/hide.ru.mdx +28 -0
- package/src/media/mdx/Anchor/isCopy.en.mdx +23 -0
- package/src/media/mdx/Anchor/isCopy.ru.mdx +23 -0
- package/src/media/mdx/Anchor/scroll.en.mdx +34 -0
- package/src/media/mdx/Anchor/scroll.ru.mdx +35 -0
- package/src/media/mdx/Anchor/wikiMdxAnchor.ts +43 -0
- package/src/media/mdx/Arrow/arrow.en.mdx +33 -0
- package/src/media/mdx/Arrow/arrow.ru.mdx +33 -0
- package/src/media/mdx/Arrow/wikiMdxArrow.ts +19 -0
- package/src/media/mdx/Block/block.en.mdx +42 -0
- package/src/media/mdx/Block/block.ru.mdx +42 -0
- package/src/media/mdx/Block/wikiMdxBlock.ts +19 -0
- package/src/media/mdx/ChipGroup/chipGroup.en.mdx +51 -0
- package/src/media/mdx/ChipGroup/chipGroup.ru.mdx +51 -0
- package/src/media/mdx/ChipGroup/selected.en.mdx +50 -0
- package/src/media/mdx/ChipGroup/selected.ru.mdx +50 -0
- package/src/media/mdx/ChipGroup/wikiMdxChipGroup.ts +25 -0
- package/src/media/mdx/Dialog/buttons.en.mdx +45 -0
- package/src/media/mdx/Dialog/buttons.ru.mdx +45 -0
- package/src/media/mdx/Dialog/dialog.en.mdx +66 -0
- package/src/media/mdx/Dialog/dialog.ru.mdx +65 -0
- package/src/media/mdx/Dialog/events.en.mdx +63 -0
- package/src/media/mdx/Dialog/events.ru.mdx +63 -0
- package/src/media/mdx/Dialog/states.en.mdx +58 -0
- package/src/media/mdx/Dialog/states.ru.mdx +57 -0
- package/src/media/mdx/Dialog/wikiMdxDialog.ts +37 -0
- package/src/media/mdx/Field/arrows.en.mdx +22 -6
- package/src/media/mdx/Field/arrows.ru.mdx +22 -6
- package/src/media/mdx/Field/slots.en.mdx +0 -13
- package/src/media/mdx/Field/slots.ru.mdx +0 -13
- package/src/media/mdx/Image/flag.en.mdx +23 -0
- package/src/media/mdx/Image/flag.ru.mdx +23 -0
- package/src/media/mdx/Image/image.en.mdx +26 -21
- package/src/media/mdx/Image/image.ru.mdx +26 -22
- package/src/media/mdx/Image/img-tag.en.mdx +105 -0
- package/src/media/mdx/Image/img-tag.ru.mdx +105 -0
- package/src/media/mdx/Image/wikiMdxImage.ts +12 -0
- package/src/media/mdx/Input/currency.en.mdx +38 -0
- package/src/media/mdx/Input/currency.ru.mdx +38 -0
- package/src/media/mdx/Input/date.en.mdx +53 -0
- package/src/media/mdx/Input/date.ru.mdx +53 -0
- package/src/media/mdx/Input/input.en.mdx +143 -0
- package/src/media/mdx/Input/input.ru.mdx +71 -0
- package/src/media/mdx/Input/mask.en.mdx +30 -0
- package/src/media/mdx/Input/mask.ru.mdx +30 -0
- package/src/media/mdx/Input/number.en.mdx +41 -0
- package/src/media/mdx/Input/number.ru.mdx +41 -0
- package/src/media/mdx/Input/type.en.mdx +26 -0
- package/src/media/mdx/Input/type.ru.mdx +26 -0
- package/src/media/mdx/Input/wikiMdxInput.ts +49 -0
- package/src/media/mdx/Menu/event.updateValue.en.mdx +29 -0
- package/src/media/mdx/Menu/event.updateValue.ru.mdx +30 -0
- package/src/media/mdx/Menu/expose.navigation.en.mdx +12 -0
- package/src/media/mdx/Menu/expose.navigation.ru.mdx +12 -0
- package/src/media/mdx/Menu/navigation.en.mdx +56 -0
- package/src/media/mdx/Menu/navigation.ru.mdx +56 -0
- package/src/media/mdx/Menu/slots.control.en.mdx +65 -0
- package/src/media/mdx/Menu/slots.control.ru.mdx +65 -0
- package/src/media/mdx/Menu/slots.en.mdx +2 -24
- package/src/media/mdx/Menu/slots.ru.mdx +2 -24
- package/src/media/mdx/Menu/wikiMdxMenu.ts +27 -3
- package/src/media/mdx/Modal/differences.en.mdx +130 -0
- package/src/media/mdx/Modal/differences.ru.mdx +65 -0
- package/src/media/mdx/Modal/modal.en.mdx +63 -0
- package/src/media/mdx/Modal/modal.ru.mdx +63 -0
- package/src/media/mdx/Modal/wikiMdxModal.ts +25 -0
- package/src/media/mdx/MotionTransform/expose.motionTransformElement.en.mdx +13 -0
- package/src/media/mdx/MotionTransform/expose.motionTransformElement.ru.mdx +14 -0
- package/src/media/mdx/MotionTransform/wikiMdxMotionTransform.ts +6 -0
- package/src/media/mdx/Page/page.en.mdx +38 -0
- package/src/media/mdx/Page/page.ru.mdx +38 -0
- package/src/media/mdx/Page/wikiMdxPage.ts +19 -0
- package/src/media/mdx/Section/section.en.mdx +38 -0
- package/src/media/mdx/Section/section.ru.mdx +38 -0
- package/src/media/mdx/Section/wikiMdxSection.ts +19 -0
- package/src/media/mdx/Select/select.en.mdx +69 -0
- package/src/media/mdx/Select/select.ru.mdx +69 -0
- package/src/media/mdx/Select/wikiMdxSelect.ts +19 -0
- package/src/media/mdx/SelectValue/selectValue.en.mdx +64 -0
- package/src/media/mdx/SelectValue/selectValue.ru.mdx +64 -0
- package/src/media/mdx/SelectValue/wikiMdxSelectValue.ts +19 -0
- package/src/media/mdx/TextareaAutosize/textarea-autosize.en.mdx +65 -0
- package/src/media/mdx/TextareaAutosize/textarea-autosize.ru.mdx +65 -0
- package/src/media/mdx/TextareaAutosize/wikiMdxTextareaAutosize.ts +19 -0
- package/src/media/mdx/Tooltip/event.tooltip.en.mdx +7 -0
- package/src/media/mdx/Tooltip/event.tooltip.ru.mdx +8 -0
- package/src/media/mdx/Tooltip/slot.control.en.mdx +14 -0
- package/src/media/mdx/Tooltip/slot.control.ru.mdx +14 -0
- package/src/media/mdx/Tooltip/tooltip.en.mdx +34 -0
- package/src/media/mdx/Tooltip/tooltip.ru.mdx +34 -0
- package/src/media/mdx/Tooltip/wikiMdxTooltip.ts +31 -0
- package/src/media/mdx/Window/classes.ru.mdx +1 -1
- package/src/media/mdx/event/events.actions.en.mdx +44 -0
- package/src/media/mdx/event/events.actions.ru.mdx +44 -0
- package/src/media/mdx/event/events.inputStandard.en.mdx +6 -0
- package/src/media/mdx/event/events.inputStandard.ru.mdx +6 -0
- package/src/media/mdx/event/wikiMdxEvent.ts +20 -8
- package/src/media/mdx/expose/expose.clear.en.mdx +1 -1
- package/src/media/mdx/expose/expose.descriptionId.en.mdx +6 -0
- package/src/media/mdx/expose/expose.descriptionId.ru.mdx +6 -0
- package/src/media/mdx/expose/expose.id.en.mdx +6 -0
- package/src/media/mdx/expose/expose.id.ru.mdx +6 -0
- package/src/media/mdx/expose/expose.labelId.en.mdx +6 -0
- package/src/media/mdx/expose/expose.labelId.ru.mdx +6 -0
- package/src/media/mdx/expose/wikiMdxExpose.ts +18 -0
- package/src/media/mdx/slot/body.en.mdx +6 -0
- package/src/media/mdx/slot/body.ru.mdx +6 -0
- package/src/media/mdx/slot/headline.en.mdx +7 -0
- package/src/media/mdx/slot/headline.ru.mdx +6 -0
- package/src/media/mdx/slot/leading.en.mdx +7 -0
- package/src/media/mdx/slot/leading.ru.mdx +7 -0
- package/src/media/mdx/slot/secondary.en.mdx +5 -0
- package/src/media/mdx/slot/secondary.ru.mdx +5 -0
- package/src/media/mdx/slot/trailing.en.mdx +7 -0
- package/src/media/mdx/slot/trailing.ru.mdx +7 -0
- package/src/media/mdx/slot/wikiMdxSlot.ts +30 -0
- package/src/media/mdx/style/isSkeleton.en.mdx +2 -2
- package/src/media/mdx/style/isSkeleton.ru.mdx +2 -2
- package/src/media/mdx/value/v-model-selected.en.mdx +28 -0
- package/src/media/mdx/value/v-model-selected.ru.mdx +28 -0
- package/src/media/mdx/value/v-model.en.mdx +26 -0
- package/src/media/mdx/value/v-model.ru.mdx +26 -0
- package/src/media/mdx/value/wikiMdxValue.ts +24 -3
- package/src/media/mdx/wikiMdx.ts +33 -1
- package/src/media/props/wiki.ts +44 -0
- package/src/media/props/wikiActions.ts +43 -0
- package/src/media/props/wikiActionsInclude.ts +62 -0
- package/src/media/props/wikiAnchor.ts +85 -0
- package/src/media/props/wikiAria.ts +123 -0
- package/src/media/props/wikiArrow.ts +24 -0
- package/src/media/props/wikiArrowInclude.ts +45 -0
- package/src/media/props/wikiAttributes.ts +143 -0
- package/src/media/props/wikiBadge.ts +7 -4
- package/src/media/props/wikiBars.ts +7 -6
- package/src/media/props/wikiBarsInclude.ts +82 -0
- package/src/media/props/wikiButton.ts +8 -4
- package/src/media/props/wikiChip.ts +4 -2
- package/src/media/props/wikiChipGroup.ts +39 -0
- package/src/media/props/wikiDialog.ts +33 -0
- package/src/media/props/wikiField.ts +18 -31
- package/src/media/props/wikiFieldCounterInclude.ts +87 -0
- package/src/media/props/wikiForm.ts +267 -0
- package/src/media/props/wikiHook.ts +20 -0
- package/src/media/props/wikiIcon.ts +19 -6
- package/src/media/props/wikiIconInclude.ts +322 -0
- package/src/media/props/wikiImage.ts +97 -20
- package/src/media/props/wikiInformation.ts +164 -0
- package/src/media/props/wikiInput.ts +34 -0
- package/src/media/props/wikiList.ts +10 -4
- package/src/media/props/wikiListItem.ts +23 -2
- package/src/media/props/wikiMask.ts +2 -12
- package/src/media/props/wikiMaskInclude.ts +54 -0
- package/src/media/props/wikiMenu.ts +1 -11
- package/src/media/props/wikiMotionTransform.ts +7 -13
- package/src/media/props/wikiOption.ts +356 -0
- package/src/media/props/wikiProgress.ts +8 -5
- package/src/media/props/wikiScrollbar.ts +6 -6
- package/src/media/props/wikiSelect.ts +68 -0
- package/src/media/props/wikiSelectValue.ts +30 -0
- package/src/media/props/wikiStatus.ts +34 -57
- package/src/media/props/wikiStyle.ts +85 -406
- package/src/media/props/wikiTechnical.ts +141 -1
- package/src/media/props/wikiText.ts +167 -0
- package/src/media/props/wikiTooltip.ts +53 -0
- package/src/media/props/wikiValue.ts +22 -276
- package/src/media/props/wikiWindow.ts +24 -45
- package/src/shims-mdx.d.ts +5 -0
- package/src/styles/storybookStyle.scss +3 -1
- package/src/types/storybookTypes.ts +48 -4
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
## Навигация по элементам меню
|
|
2
|
+
|
|
3
|
+
Методы `previous()` и `next()` предназначены для программного перемещения по элементам меню на основе текущего выбора и свойства `step`.
|
|
4
|
+
|
|
5
|
+
**Методы:**
|
|
6
|
+
|
|
7
|
+
- `previous()` — перемещает выбор на предыдущий элемент (назад на `step` позиций)
|
|
8
|
+
- `next()` — перемещает выбор на следующий элемент (вперед на `step` позиций)
|
|
9
|
+
- `step` — количество элементов для пропуска при навигации (по умолчанию: 1)
|
|
10
|
+
|
|
11
|
+
Методы работают совместно с реактивным состоянием `selected`: при вызове `previous()` или `next()` происходит автоматический расчёт новой позиции относительно текущего выделенного элемента. Если элемент не выбран, методы выбирают первый доступный элемент. При достижении границ списка (первый или последний элемент) навигация останавливается на граничном элементе, предотвращая выход за пределы списка.
|
|
12
|
+
|
|
13
|
+
```html
|
|
14
|
+
<script setup>
|
|
15
|
+
import { ref } from 'vue'
|
|
16
|
+
|
|
17
|
+
const menuRef = ref()
|
|
18
|
+
const selected = ref('item2')
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<template>
|
|
22
|
+
<!-- Вызов через ref -->
|
|
23
|
+
<button @click="menuRef?.previous()">Назад</button>
|
|
24
|
+
<button @click="menuRef?.next()">Вперед</button>
|
|
25
|
+
|
|
26
|
+
<Menu
|
|
27
|
+
ref="menuRef"
|
|
28
|
+
v-model:selected="selected"
|
|
29
|
+
:list="[
|
|
30
|
+
{ label: 'Элемент 1', value: 'item1' },
|
|
31
|
+
{ label: 'Элемент 2', value: 'item2' },
|
|
32
|
+
{ label: 'Элемент 3', value: 'item3' }
|
|
33
|
+
]"
|
|
34
|
+
:step="1"
|
|
35
|
+
/>
|
|
36
|
+
|
|
37
|
+
<!-- Навигация в слоте control -->
|
|
38
|
+
<Menu v-model:selected="selected" :list="items">
|
|
39
|
+
<template #control="{ previous, next, selectedNames }">
|
|
40
|
+
<button @click="previous">◀</button>
|
|
41
|
+
<span>{{ selectedNames[0] }}</span>
|
|
42
|
+
<button @click="next">▶</button>
|
|
43
|
+
</template>
|
|
44
|
+
</Menu>
|
|
45
|
+
|
|
46
|
+
<!-- С пользовательским шагом -->
|
|
47
|
+
<Menu
|
|
48
|
+
ref="menuRef"
|
|
49
|
+
v-model:selected="selected"
|
|
50
|
+
:list="items"
|
|
51
|
+
:step="2"
|
|
52
|
+
/>
|
|
53
|
+
</template>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
### `control`
|
|
2
|
+
|
|
3
|
+
Slot for placing the menu control element (trigger).
|
|
4
|
+
|
|
5
|
+
**Parameters:**
|
|
6
|
+
- `props: MenuControlItem` — object with menu control data
|
|
7
|
+
- `onclick` — function to toggle menu open/close
|
|
8
|
+
- `isSelected` — computed boolean indicating if any item is selected
|
|
9
|
+
- `selectedNames` — computed array of selected item labels
|
|
10
|
+
- `selectedValues` — computed array of selected item values
|
|
11
|
+
- `selectedList` — computed array of selected list items
|
|
12
|
+
- `loading` — ref indicating AJAX loading state
|
|
13
|
+
- `previous()` — method to navigate to previous item(s)
|
|
14
|
+
- `next()` — method to navigate to next item(s)
|
|
15
|
+
|
|
16
|
+
```html
|
|
17
|
+
<script setup>
|
|
18
|
+
import { ref } from 'vue'
|
|
19
|
+
|
|
20
|
+
const isOpen = ref(false)
|
|
21
|
+
const menuItems = ref([
|
|
22
|
+
{ label: 'Item 1', value: '1' },
|
|
23
|
+
{ label: 'Item 2', value: '2' },
|
|
24
|
+
{ label: 'Item 3', value: '3' }
|
|
25
|
+
])
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<template>
|
|
29
|
+
<Menu v-model:open="isOpen" :list="menuItems">
|
|
30
|
+
<template #control="{ onclick, isSelected, selectedNames }">
|
|
31
|
+
<button @click="onclick">
|
|
32
|
+
{{ isSelected ? selectedNames.join(', ') : 'Select items' }}
|
|
33
|
+
</button>
|
|
34
|
+
</template>
|
|
35
|
+
</Menu>
|
|
36
|
+
</template>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Navigation Example:**
|
|
40
|
+
|
|
41
|
+
```html
|
|
42
|
+
<script setup>
|
|
43
|
+
import { ref } from 'vue'
|
|
44
|
+
|
|
45
|
+
const selected = ref('item1')
|
|
46
|
+
const menuItems = ref([
|
|
47
|
+
{ label: 'Item 1', value: 'item1' },
|
|
48
|
+
{ label: 'Item 2', value: 'item2' },
|
|
49
|
+
{ label: 'Item 3', value: 'item3' }
|
|
50
|
+
])
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
<template>
|
|
54
|
+
<Menu v-model:selected="selected" :list="menuItems">
|
|
55
|
+
<template #control="{ previous, next, selectedNames }">
|
|
56
|
+
<div class="navigation-control">
|
|
57
|
+
<button @click="previous">◀</button>
|
|
58
|
+
<span>{{ selectedNames[0] }}</span>
|
|
59
|
+
<button @click="next">▶</button>
|
|
60
|
+
</div>
|
|
61
|
+
</template>
|
|
62
|
+
</Menu>
|
|
63
|
+
</template>
|
|
64
|
+
```
|
|
65
|
+
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
### `control`
|
|
2
|
+
|
|
3
|
+
Слот для размещения элемента управления (триггера) меню.
|
|
4
|
+
|
|
5
|
+
**Параметры:**
|
|
6
|
+
- `props: MenuControlItem` — объект с данными управления меню
|
|
7
|
+
- `onclick` — функция для переключения открытия/закрытия меню
|
|
8
|
+
- `isSelected` — computed boolean, указывающий, выбран ли какой-либо элемент
|
|
9
|
+
- `selectedNames` — computed массив меток выбранных элементов
|
|
10
|
+
- `selectedValues` — computed массив значений выбранных элементов
|
|
11
|
+
- `selectedList` — computed массив выбранных элементов списка
|
|
12
|
+
- `loading` — ref, указывающий на состояние загрузки AJAX
|
|
13
|
+
- `previous()` — метод для перехода к предыдущему элементу(ам)
|
|
14
|
+
- `next()` — метод для перехода к следующему элементу(ам)
|
|
15
|
+
|
|
16
|
+
```html
|
|
17
|
+
<script setup>
|
|
18
|
+
import { ref } from 'vue'
|
|
19
|
+
|
|
20
|
+
const isOpen = ref(false)
|
|
21
|
+
const menuItems = ref([
|
|
22
|
+
{ label: 'Элемент 1', value: '1' },
|
|
23
|
+
{ label: 'Элемент 2', value: '2' },
|
|
24
|
+
{ label: 'Элемент 3', value: '3' }
|
|
25
|
+
])
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<template>
|
|
29
|
+
<Menu v-model:open="isOpen" :list="menuItems">
|
|
30
|
+
<template #control="{ onclick, isSelected, selectedNames }">
|
|
31
|
+
<button @click="onclick">
|
|
32
|
+
{{ isSelected ? selectedNames.join(', ') : 'Выбрать элементы' }}
|
|
33
|
+
</button>
|
|
34
|
+
</template>
|
|
35
|
+
</Menu>
|
|
36
|
+
</template>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Пример навигации:**
|
|
40
|
+
|
|
41
|
+
```html
|
|
42
|
+
<script setup>
|
|
43
|
+
import { ref } from 'vue'
|
|
44
|
+
|
|
45
|
+
const selected = ref('item1')
|
|
46
|
+
const menuItems = ref([
|
|
47
|
+
{ label: 'Элемент 1', value: 'item1' },
|
|
48
|
+
{ label: 'Элемент 2', value: 'item2' },
|
|
49
|
+
{ label: 'Элемент 3', value: 'item3' }
|
|
50
|
+
])
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
<template>
|
|
54
|
+
<Menu v-model:selected="selected" :list="menuItems">
|
|
55
|
+
<template #control="{ previous, next, selectedNames }">
|
|
56
|
+
<div class="navigation-control">
|
|
57
|
+
<button @click="previous">◀</button>
|
|
58
|
+
<span>{{ selectedNames[0] }}</span>
|
|
59
|
+
<button @click="next">▶</button>
|
|
60
|
+
</div>
|
|
61
|
+
</template>
|
|
62
|
+
</Menu>
|
|
63
|
+
</template>
|
|
64
|
+
```
|
|
65
|
+
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
### `control`
|
|
2
|
-
|
|
3
|
-
Slot for placing the menu control element (trigger).
|
|
4
|
-
|
|
5
|
-
**Parameters:**
|
|
6
|
-
- `props: MenuControlItem` — object with menu control data
|
|
7
|
-
|
|
8
1
|
### `title`
|
|
9
2
|
|
|
10
3
|
Slot for placing the menu window title.
|
|
@@ -35,28 +28,13 @@ Slot for placing contextual area below the menu list (hints, final actions).
|
|
|
35
28
|
|
|
36
29
|
```html
|
|
37
30
|
<script setup>
|
|
38
|
-
import { ref } from 'vue'
|
|
39
|
-
|
|
40
|
-
const isOpen = ref(false)
|
|
41
|
-
const menuItems = ref([
|
|
42
|
-
{ label: 'Item 1', value: '1' },
|
|
43
|
-
{ label: 'Item 2', value: '2' },
|
|
44
|
-
{ label: 'Item 3', value: '3' }
|
|
45
|
-
])
|
|
46
|
-
|
|
47
31
|
const handleSubmit = (values) => {
|
|
48
32
|
console.log('Selected values:', values)
|
|
49
33
|
}
|
|
50
34
|
</script>
|
|
51
35
|
|
|
52
36
|
<template>
|
|
53
|
-
<
|
|
54
|
-
<template #control="{ onclick, isSelected, selectedNames }">
|
|
55
|
-
<button @click="onclick">
|
|
56
|
-
{{ isSelected ? selectedNames.join(', ') : 'Select items' }}
|
|
57
|
-
</button>
|
|
58
|
-
</template>
|
|
59
|
-
|
|
37
|
+
<Component>
|
|
60
38
|
<template #title="{ selectedList }">
|
|
61
39
|
<h3>Select Items</h3>
|
|
62
40
|
<span v-if="selectedList.length">
|
|
@@ -77,7 +55,7 @@ const handleSubmit = (values) => {
|
|
|
77
55
|
Apply
|
|
78
56
|
</button>
|
|
79
57
|
</template>
|
|
80
|
-
</
|
|
58
|
+
</Component>
|
|
81
59
|
</template>
|
|
82
60
|
```
|
|
83
61
|
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
### `control`
|
|
2
|
-
|
|
3
|
-
Слот для размещения элемента управления (триггера) меню.
|
|
4
|
-
|
|
5
|
-
**Параметры:**
|
|
6
|
-
- `props: MenuControlItem` — объект с данными управления меню
|
|
7
|
-
|
|
8
1
|
### `title`
|
|
9
2
|
|
|
10
3
|
Слот для размещения заголовка окна меню.
|
|
@@ -35,28 +28,13 @@
|
|
|
35
28
|
|
|
36
29
|
```html
|
|
37
30
|
<script setup>
|
|
38
|
-
import { ref } from 'vue'
|
|
39
|
-
|
|
40
|
-
const isOpen = ref(false)
|
|
41
|
-
const menuItems = ref([
|
|
42
|
-
{ label: 'Элемент 1', value: '1' },
|
|
43
|
-
{ label: 'Элемент 2', value: '2' },
|
|
44
|
-
{ label: 'Элемент 3', value: '3' }
|
|
45
|
-
])
|
|
46
|
-
|
|
47
31
|
const handleSubmit = (values) => {
|
|
48
32
|
console.log('Выбранные значения:', values)
|
|
49
33
|
}
|
|
50
34
|
</script>
|
|
51
35
|
|
|
52
36
|
<template>
|
|
53
|
-
<
|
|
54
|
-
<template #control="{ onclick, isSelected, selectedNames }">
|
|
55
|
-
<button @click="onclick">
|
|
56
|
-
{{ isSelected ? selectedNames.join(', ') : 'Выбрать элементы' }}
|
|
57
|
-
</button>
|
|
58
|
-
</template>
|
|
59
|
-
|
|
37
|
+
<Component>
|
|
60
38
|
<template #title="{ selectedList }">
|
|
61
39
|
<h3>Выбор элементов</h3>
|
|
62
40
|
<span v-if="selectedList.length">
|
|
@@ -77,7 +55,7 @@ const handleSubmit = (values) => {
|
|
|
77
55
|
Применить
|
|
78
56
|
</button>
|
|
79
57
|
</template>
|
|
80
|
-
</
|
|
58
|
+
</Component>
|
|
81
59
|
</template>
|
|
82
60
|
```
|
|
83
61
|
|
|
@@ -2,26 +2,50 @@ import type { StorybookComponentsMdxItem } from '../../../types/storybookTypes'
|
|
|
2
2
|
|
|
3
3
|
import ajaxEn from './ajax.en.mdx'
|
|
4
4
|
import ajaxRu from './ajax.ru.mdx'
|
|
5
|
+
import eventUpdateValueEn from './event.updateValue.en.mdx'
|
|
6
|
+
import eventUpdateValueRu from './event.updateValue.ru.mdx'
|
|
7
|
+
import exposeNavigationEn from './expose.navigation.en.mdx'
|
|
8
|
+
import exposeNavigationRu from './expose.navigation.ru.mdx'
|
|
5
9
|
import menuEn from './menu.en.mdx'
|
|
6
10
|
import menuRu from './menu.ru.mdx'
|
|
11
|
+
import navigationEn from './navigation.en.mdx'
|
|
12
|
+
import navigationRu from './navigation.ru.mdx'
|
|
7
13
|
import slotsEn from './slots.en.mdx'
|
|
8
14
|
import slotsRu from './slots.ru.mdx'
|
|
15
|
+
import slotsControlEn from './slots.control.en.mdx'
|
|
16
|
+
import slotsControlRu from './slots.control.ru.mdx'
|
|
9
17
|
|
|
10
18
|
/** MDX документация для компонента Menu */
|
|
11
19
|
export const wikiMdxMenu: StorybookComponentsMdxItem = {
|
|
12
20
|
name: 'Menu',
|
|
13
21
|
descriptions: {
|
|
14
|
-
ajax: {
|
|
22
|
+
'ajax': {
|
|
15
23
|
en: ajaxEn,
|
|
16
24
|
ru: ajaxRu
|
|
17
25
|
},
|
|
18
|
-
|
|
26
|
+
'event.updateValue': {
|
|
27
|
+
en: eventUpdateValueEn,
|
|
28
|
+
ru: eventUpdateValueRu
|
|
29
|
+
},
|
|
30
|
+
'expose.navigation': {
|
|
31
|
+
en: exposeNavigationEn,
|
|
32
|
+
ru: exposeNavigationRu
|
|
33
|
+
},
|
|
34
|
+
'menu': {
|
|
19
35
|
en: menuEn,
|
|
20
36
|
ru: menuRu
|
|
21
37
|
},
|
|
22
|
-
|
|
38
|
+
'navigation': {
|
|
39
|
+
en: navigationEn,
|
|
40
|
+
ru: navigationRu
|
|
41
|
+
},
|
|
42
|
+
'slots': {
|
|
23
43
|
en: slotsEn,
|
|
24
44
|
ru: slotsRu
|
|
45
|
+
},
|
|
46
|
+
'slotsControl': {
|
|
47
|
+
en: slotsControlEn,
|
|
48
|
+
ru: slotsControlRu
|
|
25
49
|
}
|
|
26
50
|
}
|
|
27
51
|
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
## Differences between Modal, ActionSheet and Dialog
|
|
2
|
+
|
|
3
|
+
All three components are built on top of **Window**, but have different purposes and behaviors:
|
|
4
|
+
|
|
5
|
+
### Modal
|
|
6
|
+
|
|
7
|
+
**Modal** — a modal window with centered positioning for content requiring immediate user attention.
|
|
8
|
+
|
|
9
|
+
**Features:**
|
|
10
|
+
- Uses `adaptive: 'modal'` Window mode
|
|
11
|
+
- **Centered positioning** by default
|
|
12
|
+
- Semi-transparent overlay blocks interaction with the main interface
|
|
13
|
+
- Closes on ESC key and click outside (unless `persistent` is set)
|
|
14
|
+
- Supports slots for title, content, and footer
|
|
15
|
+
- Integrated with Bars and Actions components
|
|
16
|
+
|
|
17
|
+
**Common use cases:**
|
|
18
|
+
- Action confirmation dialogs
|
|
19
|
+
- Create/edit record forms
|
|
20
|
+
- Warnings and informational messages
|
|
21
|
+
- Viewing detailed information
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
### ActionSheet
|
|
26
|
+
|
|
27
|
+
**ActionSheet** — a modal panel with a set of actions appearing from the bottom of the screen (on mobile devices) or as a context menu.
|
|
28
|
+
|
|
29
|
+
**Features:**
|
|
30
|
+
- Uses `adaptive: 'actionSheet'` Window mode
|
|
31
|
+
- **Bottom positioning** on mobile devices
|
|
32
|
+
- **Swipe down gesture** support for closing (`touchClose`)
|
|
33
|
+
- Automatically adds dividers between items (`divider: true`)
|
|
34
|
+
- Adaptive behavior: can transform into modal on larger screens
|
|
35
|
+
- Specialized for action lists
|
|
36
|
+
|
|
37
|
+
**Common use cases:**
|
|
38
|
+
- Action menus for objects (edit, delete, share)
|
|
39
|
+
- Selecting an option from a list
|
|
40
|
+
- Context menus on mobile devices
|
|
41
|
+
- Actions requiring quick access
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
### Dialog
|
|
46
|
+
|
|
47
|
+
**Dialog** — a component for dialog windows with simplified API.
|
|
48
|
+
|
|
49
|
+
**Features:**
|
|
50
|
+
- Usually an even more simplified wrapper over Modal
|
|
51
|
+
- May have preset styles for system dialogs
|
|
52
|
+
- Often used for simple confirmations (yes/no, OK/Cancel)
|
|
53
|
+
|
|
54
|
+
**Common use cases:**
|
|
55
|
+
- Simple confirmations (alert, confirm)
|
|
56
|
+
- System notifications
|
|
57
|
+
- Quick dialogs without complex content
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### Choosing a component
|
|
62
|
+
|
|
63
|
+
- **Use Modal** when you need to display a form, detailed information, or content requiring user attention
|
|
64
|
+
- **Use ActionSheet** when you need to offer a list of actions, especially on mobile devices
|
|
65
|
+
- **Use Dialog** when you need a simple confirmation or system notification
|
|
66
|
+
## Разница между Modal, ActionSheet и Dialog
|
|
67
|
+
|
|
68
|
+
Все три компонента построены на базе **Window**, но имеют различное назначение и поведение:
|
|
69
|
+
|
|
70
|
+
### Modal
|
|
71
|
+
|
|
72
|
+
**Modal** — модальное окно с центрированным позиционированием для контента, требующего немедленного внимания пользователя.
|
|
73
|
+
|
|
74
|
+
**Особенности:**
|
|
75
|
+
- Использует `adaptive: 'modal'` режим Window
|
|
76
|
+
- **Центрированное позиционирование** по умолчанию
|
|
77
|
+
- Полупрозрачный оверлей блокирует взаимодействие с основным интерфейсом
|
|
78
|
+
- Закрывается по ESC и клику вне области (если не установлен `persistent`)
|
|
79
|
+
- Поддерживает слоты для заголовка, контента и футера
|
|
80
|
+
- Интегрирован с компонентами Bars и Actions
|
|
81
|
+
|
|
82
|
+
**Типичные сценарии:**
|
|
83
|
+
- Диалоги подтверждения действий
|
|
84
|
+
- Формы создания/редактирования записей
|
|
85
|
+
- Предупреждения и информационные сообщения
|
|
86
|
+
- Просмотр детальной информации
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### ActionSheet
|
|
91
|
+
|
|
92
|
+
**ActionSheet** — модальная панель с набором действий, появляющаяся снизу экрана (на мобильных устройствах) или в виде контекстного меню.
|
|
93
|
+
|
|
94
|
+
**Особенности:**
|
|
95
|
+
- Использует `adaptive: 'actionSheet'` режим Window
|
|
96
|
+
- **Позиционирование снизу** экрана на мобильных устройствах
|
|
97
|
+
- Поддержка **жеста свайпа вниз** для закрытия (`touchClose`)
|
|
98
|
+
- Автоматически добавляет разделители между элементами (`divider: true`)
|
|
99
|
+
- Адаптивное поведение: может трансформироваться в modal на больших экранах
|
|
100
|
+
- Специализирован для списков действий
|
|
101
|
+
|
|
102
|
+
**Типичные сценарии:**
|
|
103
|
+
- Меню действий с объектом (редактировать, удалить, поделиться)
|
|
104
|
+
- Выбор опции из списка
|
|
105
|
+
- Контекстные меню на мобильных устройствах
|
|
106
|
+
- Действия, требующие быстрого доступа
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
### Dialog
|
|
111
|
+
|
|
112
|
+
**Dialog** — компонент для диалоговых окон с упрощенным API (если реализован в вашей системе).
|
|
113
|
+
|
|
114
|
+
**Особенности:**
|
|
115
|
+
- Обычно является еще более упрощенной оберткой над Modal
|
|
116
|
+
- Может иметь предустановленные стили для системных диалогов
|
|
117
|
+
- Часто используется для простых подтверждений (да/нет, ОК/Отмена)
|
|
118
|
+
|
|
119
|
+
**Типичные сценарии:**
|
|
120
|
+
- Простые подтверждения (alert, confirm)
|
|
121
|
+
- Системные уведомления
|
|
122
|
+
- Быстрые диалоги без сложного контента
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
### Выбор компонента
|
|
127
|
+
|
|
128
|
+
- **Используйте Modal**, когда нужно показать форму, детальную информацию или контент, требующий внимания пользователя
|
|
129
|
+
- **Используйте ActionSheet**, когда нужно предложить список действий, особенно на мобильных устройствах
|
|
130
|
+
- **Используйте Dialog**, когда нужно простое подтверждение или системное уведомление
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
## Разница между Modal, ActionSheet и Dialog
|
|
2
|
+
|
|
3
|
+
Все три компонента построены на базе **Window**, но имеют различное назначение и поведение:
|
|
4
|
+
|
|
5
|
+
### Modal
|
|
6
|
+
|
|
7
|
+
**Modal** — модальное окно с центрированным позиционированием для контента, требующего немедленного внимания пользователя.
|
|
8
|
+
|
|
9
|
+
**Особенности:**
|
|
10
|
+
- Использует `adaptive: 'modal'` режим Window
|
|
11
|
+
- **Центрированное позиционирование** по умолчанию
|
|
12
|
+
- Полупрозрачный оверлей блокирует взаимодействие с основным интерфейсом
|
|
13
|
+
- Закрывается по ESC и клику вне области (если не установлен `persistent`)
|
|
14
|
+
- Поддерживает слоты для заголовка, контента и футера
|
|
15
|
+
- Интегрирован с компонентами Bars и Actions
|
|
16
|
+
|
|
17
|
+
**Типичные сценарии:**
|
|
18
|
+
- Диалоги подтверждения действий
|
|
19
|
+
- Формы создания/редактирования записей
|
|
20
|
+
- Предупреждения и информационные сообщения
|
|
21
|
+
- Просмотр детальной информации
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
### ActionSheet
|
|
26
|
+
|
|
27
|
+
**ActionSheet** — модальная панель с набором действий, появляющаяся снизу экрана (на мобильных устройствах) или в виде контекстного меню.
|
|
28
|
+
|
|
29
|
+
**Особенности:**
|
|
30
|
+
- Использует `adaptive: 'actionSheet'` режим Window
|
|
31
|
+
- **Позиционирование снизу** экрана на мобильных устройствах
|
|
32
|
+
- Поддержка **жеста свайпа вниз** для закрытия (`touchClose`)
|
|
33
|
+
- Автоматически добавляет разделители между элементами (`divider: true`)
|
|
34
|
+
- Адаптивное поведение: может трансформироваться в modal на больших экранах
|
|
35
|
+
- Специализирован для списков действий
|
|
36
|
+
|
|
37
|
+
**Типичные сценарии:**
|
|
38
|
+
- Меню действий с объектом (редактировать, удалить, поделиться)
|
|
39
|
+
- Выбор опции из списка
|
|
40
|
+
- Контекстные меню на мобильных устройствах
|
|
41
|
+
- Действия, требующие быстрого доступа
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
### Dialog
|
|
46
|
+
|
|
47
|
+
**Dialog** — компонент для диалоговых окон с упрощенным API.
|
|
48
|
+
|
|
49
|
+
**Особенности:**
|
|
50
|
+
- Обычно является еще более упрощенной оберткой над Modal
|
|
51
|
+
- Может иметь предустановленные стили для системных диалогов
|
|
52
|
+
- Часто используется для простых подтверждений (да/нет, ОК/Отмена)
|
|
53
|
+
|
|
54
|
+
**Типичные сценарии:**
|
|
55
|
+
- Простые подтверждения (alert, confirm)
|
|
56
|
+
- Системные уведомления
|
|
57
|
+
- Быстрые диалоги без сложного контента
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### Выбор компонента
|
|
62
|
+
|
|
63
|
+
- **Используйте Modal**, когда нужно показать форму, детальную информацию или контент, требующий внимания пользователя
|
|
64
|
+
- **Используйте ActionSheet**, когда нужно предложить список действий, особенно на мобильных устройствах
|
|
65
|
+
- **Используйте Dialog**, когда нужно простое подтверждение или системное уведомление
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
A simplified wrapper over the Window component for creating modal dialogs with preconfigured centered positioning settings.
|
|
2
|
+
|
|
3
|
+
Modal is a specialized component that uses Window with a fixed `adaptive: 'modal'` mode. It is designed to display content that requires immediate user attention, blocking interaction with the main interface. The component automatically centers content, adds a semi-transparent backdrop (overlay), and manages focus.
|
|
4
|
+
|
|
5
|
+
**Key features:**
|
|
6
|
+
|
|
7
|
+
- Centered positioning by default
|
|
8
|
+
- Semi-transparent overlay with background blocking
|
|
9
|
+
- Control via v-model:open
|
|
10
|
+
- Close on ESC key and click outside
|
|
11
|
+
- Integration with Scrollbar for long content
|
|
12
|
+
- Slots for title, content, and footer
|
|
13
|
+
- Lifecycle events (preparation, opening, closing)
|
|
14
|
+
- Close button with customizable icon
|
|
15
|
+
|
|
16
|
+
**Differences from Window:**
|
|
17
|
+
|
|
18
|
+
Modal is a Window with preset `adaptive: 'modal'`, which simplifies usage for standard dialog windows without explicitly specifying the adaptive mode.
|
|
19
|
+
|
|
20
|
+
**Common use cases:**
|
|
21
|
+
|
|
22
|
+
- Action confirmation dialogs
|
|
23
|
+
- Create/edit forms
|
|
24
|
+
- Warnings and informational messages
|
|
25
|
+
- Viewing detailed information
|
|
26
|
+
- Multi-step wizards
|
|
27
|
+
|
|
28
|
+
```html
|
|
29
|
+
<script setup>
|
|
30
|
+
import { ref } from 'vue'
|
|
31
|
+
|
|
32
|
+
const isModalOpen = ref(false)
|
|
33
|
+
|
|
34
|
+
const handleBeforeClosing = async () => {
|
|
35
|
+
// Check before closing
|
|
36
|
+
return confirm('Close modal window?')
|
|
37
|
+
}
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<template>
|
|
41
|
+
<button @click="isModalOpen = true">Open Modal</button>
|
|
42
|
+
|
|
43
|
+
<Modal
|
|
44
|
+
v-model:open="isModalOpen"
|
|
45
|
+
:beforeClosing="handleBeforeClosing"
|
|
46
|
+
closeButton
|
|
47
|
+
>
|
|
48
|
+
<template #title>
|
|
49
|
+
<h2>Confirm Action</h2>
|
|
50
|
+
</template>
|
|
51
|
+
|
|
52
|
+
<template #default>
|
|
53
|
+
<p>Are you sure you want to perform this action?</p>
|
|
54
|
+
<p>This action cannot be undone.</p>
|
|
55
|
+
</template>
|
|
56
|
+
|
|
57
|
+
<template #footer="{ classesModal }">
|
|
58
|
+
<button :class="classesModal.close">Cancel</button>
|
|
59
|
+
<button @click="performAction">Confirm</button>
|
|
60
|
+
</template>
|
|
61
|
+
</Modal>
|
|
62
|
+
</template>
|
|
63
|
+
```
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
Упрощенная обертка над компонентом Window для создания модальных диалогов с предустановленными настройками центрированного позиционирования.
|
|
2
|
+
|
|
3
|
+
Modal является специализированным компонентом, который использует Window с фиксированным режимом `adaptive: 'modal'`. Он предназначен для отображения контента, требующего немедленного внимания пользователя, с блокировкой взаимодействия с основным интерфейсом. Компонент автоматически центрирует содержимое, добавляет полупрозрачный фон (overlay) и управляет фокусом.
|
|
4
|
+
|
|
5
|
+
**Основные возможности:**
|
|
6
|
+
|
|
7
|
+
- Центрированное позиционирование по умолчанию
|
|
8
|
+
- Полупрозрачный оверлей с блокировкой фона
|
|
9
|
+
- Управление через v-model:open
|
|
10
|
+
- Закрытие по ESC и клику вне области
|
|
11
|
+
- Интеграция со Scrollbar для длинного контента
|
|
12
|
+
- Слоты для заголовка, содержимого и футера
|
|
13
|
+
- События жизненного цикла (preparation, opening, closing)
|
|
14
|
+
- Кнопка закрытия с настраиваемой иконкой
|
|
15
|
+
|
|
16
|
+
**Отличия от Window:**
|
|
17
|
+
|
|
18
|
+
Modal - это Window с предустановленным `adaptive: 'modal'`, что упрощает использование для стандартных диалоговых окон без необходимости явно указывать режим адаптивности.
|
|
19
|
+
|
|
20
|
+
**Типичные сценарии использования:**
|
|
21
|
+
|
|
22
|
+
- Диалоги подтверждения действий
|
|
23
|
+
- Формы создания/редактирования
|
|
24
|
+
- Предупреждения и информационные сообщения
|
|
25
|
+
- Просмотр детальной информации
|
|
26
|
+
- Многошаговые мастера (wizards)
|
|
27
|
+
|
|
28
|
+
```html
|
|
29
|
+
<script setup>
|
|
30
|
+
import { ref } from 'vue'
|
|
31
|
+
|
|
32
|
+
const isModalOpen = ref(false)
|
|
33
|
+
|
|
34
|
+
const handleBeforeClosing = async () => {
|
|
35
|
+
// Проверка перед закрытием
|
|
36
|
+
return confirm('Закрыть модальное окно?')
|
|
37
|
+
}
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<template>
|
|
41
|
+
<button @click="isModalOpen = true">Открыть модальное окно</button>
|
|
42
|
+
|
|
43
|
+
<Modal
|
|
44
|
+
v-model:open="isModalOpen"
|
|
45
|
+
:beforeClosing="handleBeforeClosing"
|
|
46
|
+
closeButton
|
|
47
|
+
>
|
|
48
|
+
<template #title>
|
|
49
|
+
<h2>Подтверждение действия</h2>
|
|
50
|
+
</template>
|
|
51
|
+
|
|
52
|
+
<template #default>
|
|
53
|
+
<p>Вы уверены, что хотите выполнить это действие?</p>
|
|
54
|
+
<p>Это действие нельзя будет отменить.</p>
|
|
55
|
+
</template>
|
|
56
|
+
|
|
57
|
+
<template #footer="{ classesModal }">
|
|
58
|
+
<button :class="classesModal.close">Отмена</button>
|
|
59
|
+
<button @click="performAction">Подтвердить</button>
|
|
60
|
+
</template>
|
|
61
|
+
</Modal>
|
|
62
|
+
</template>
|
|
63
|
+
```
|