@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,143 @@
|
|
|
1
|
+
Text input field component with validation, masking and formatting support.
|
|
2
|
+
|
|
3
|
+
Input provides a flexible interface for entering various types of data: text, numbers, email, passwords, phones, URLs, dates and time. The component automatically applies appropriate validation, formatting and keyboard based on the specified type. Supports masking for structured input (phones, dates, custom patterns), currency and number formatting, password visibility control and integration with the Field component for consistent styling.
|
|
4
|
+
|
|
5
|
+
**Key features:**
|
|
6
|
+
|
|
7
|
+
- Multiple input types (text, number, email, password, tel, url, date, time and more)
|
|
8
|
+
- Built-in validation with custom messages
|
|
9
|
+
- Masking for formatted input
|
|
10
|
+
- Currency and number formatting with localization
|
|
11
|
+
- Password visibility toggle
|
|
12
|
+
- Prefix and suffix for additional context
|
|
13
|
+
- Character counter for length limits
|
|
14
|
+
- Navigation arrows for numeric values
|
|
15
|
+
- Autocomplete and spellcheck support
|
|
16
|
+
- Clear button for value reset
|
|
17
|
+
|
|
18
|
+
**Common use cases:**
|
|
19
|
+
|
|
20
|
+
- Registration and login forms
|
|
21
|
+
- Contact information fields (email, phone)
|
|
22
|
+
- Numeric fields (quantity, price, age)
|
|
23
|
+
- Password fields with visibility toggle
|
|
24
|
+
- Search fields with quick clear
|
|
25
|
+
- Formatted input (phones, dates, cards)
|
|
26
|
+
- Currency fields with automatic formatting
|
|
27
|
+
|
|
28
|
+
```html
|
|
29
|
+
<script setup>
|
|
30
|
+
import { ref } from 'vue'
|
|
31
|
+
|
|
32
|
+
const email = ref('')
|
|
33
|
+
const password = ref('')
|
|
34
|
+
|
|
35
|
+
const handleInput = (event, validation) => {
|
|
36
|
+
console.log('Input value:', validation.value)
|
|
37
|
+
console.log('Valid:', validation.status)
|
|
38
|
+
}
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<template>
|
|
42
|
+
<div class="form">
|
|
43
|
+
<Input
|
|
44
|
+
v-model="email"
|
|
45
|
+
type="email"
|
|
46
|
+
label="Email"
|
|
47
|
+
placeholder="example@mail.com"
|
|
48
|
+
required
|
|
49
|
+
@input="handleInput"
|
|
50
|
+
/>
|
|
51
|
+
|
|
52
|
+
<Input
|
|
53
|
+
v-model="password"
|
|
54
|
+
type="password"
|
|
55
|
+
label="Password"
|
|
56
|
+
placeholder="Enter password"
|
|
57
|
+
minlength="8"
|
|
58
|
+
required
|
|
59
|
+
iconVisibility="visibility"
|
|
60
|
+
iconVisibilityOff="visibility_off"
|
|
61
|
+
/>
|
|
62
|
+
|
|
63
|
+
<Input
|
|
64
|
+
type="currency"
|
|
65
|
+
label="Price"
|
|
66
|
+
currency="USD"
|
|
67
|
+
language="en-US"
|
|
68
|
+
/>
|
|
69
|
+
</div>
|
|
70
|
+
</template>
|
|
71
|
+
```
|
|
72
|
+
Компонент текстового поля ввода с поддержкой валидации, маскирования и форматирования.
|
|
73
|
+
|
|
74
|
+
Input предоставляет гибкий интерфейс для ввода данных различных типов: текст, числа, email, пароли, телефоны, URL, даты и время. Компонент автоматически применяет соответствующую валидацию, форматирование и клавиатуру в зависимости от указанного типа. Поддерживает маскирование для структурированного ввода (телефоны, даты, кастомные паттерны), форматирование валют и чисел, управление видимостью пароля и интеграцию с компонентом Field для единообразной стилизации.
|
|
75
|
+
|
|
76
|
+
**Основные возможности:**
|
|
77
|
+
|
|
78
|
+
- Множественные типы ввода (text, number, email, password, tel, url, date, time и другие)
|
|
79
|
+
- Встроенная валидация с пользовательскими сообщениями
|
|
80
|
+
- Маскирование для форматированного ввода
|
|
81
|
+
- Форматирование валюты и чисел с локализацией
|
|
82
|
+
- Переключатель видимости пароля
|
|
83
|
+
- Префикс и суффикс для дополнительного контекста
|
|
84
|
+
- Счётчик символов для ограничения длины
|
|
85
|
+
- Стрелки навигации для числовых значений
|
|
86
|
+
- Поддержка автозаполнения и проверки орфографии
|
|
87
|
+
- Кнопка очистки значения
|
|
88
|
+
|
|
89
|
+
**Типичные сценарии использования:**
|
|
90
|
+
|
|
91
|
+
- Формы регистрации и авторизации
|
|
92
|
+
- Поля ввода контактных данных (email, телефон)
|
|
93
|
+
- Числовые поля (количество, цена, возраст)
|
|
94
|
+
- Поля для ввода паролей с переключением видимости
|
|
95
|
+
- Поля поиска с быстрой очисткой
|
|
96
|
+
- Форматированный ввод (телефоны, даты, карты)
|
|
97
|
+
- Валютные поля с автоматическим форматированием
|
|
98
|
+
|
|
99
|
+
```html
|
|
100
|
+
<script setup>
|
|
101
|
+
import { ref } from 'vue'
|
|
102
|
+
|
|
103
|
+
const email = ref('')
|
|
104
|
+
const password = ref('')
|
|
105
|
+
|
|
106
|
+
const handleInput = (event, validation) => {
|
|
107
|
+
console.log('Введённое значение:', validation.value)
|
|
108
|
+
console.log('Валидно:', validation.status)
|
|
109
|
+
}
|
|
110
|
+
</script>
|
|
111
|
+
|
|
112
|
+
<template>
|
|
113
|
+
<div class="form">
|
|
114
|
+
<Input
|
|
115
|
+
v-model="email"
|
|
116
|
+
type="email"
|
|
117
|
+
label="Email"
|
|
118
|
+
placeholder="example@mail.com"
|
|
119
|
+
required
|
|
120
|
+
@input="handleInput"
|
|
121
|
+
/>
|
|
122
|
+
|
|
123
|
+
<Input
|
|
124
|
+
v-model="password"
|
|
125
|
+
type="password"
|
|
126
|
+
label="Пароль"
|
|
127
|
+
placeholder="Введите пароль"
|
|
128
|
+
minlength="8"
|
|
129
|
+
required
|
|
130
|
+
iconVisibility="visibility"
|
|
131
|
+
iconVisibilityOff="visibility_off"
|
|
132
|
+
/>
|
|
133
|
+
|
|
134
|
+
<Input
|
|
135
|
+
type="currency"
|
|
136
|
+
label="Цена"
|
|
137
|
+
currency="RUB"
|
|
138
|
+
language="ru-RU"
|
|
139
|
+
/>
|
|
140
|
+
</div>
|
|
141
|
+
</template>
|
|
142
|
+
```
|
|
143
|
+
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
Компонент текстового поля ввода с поддержкой валидации, маскирования и форматирования.
|
|
2
|
+
|
|
3
|
+
Input предоставляет гибкий интерфейс для ввода данных различных типов: текст, числа, email, пароли, телефоны, URL, даты и время. Компонент автоматически применяет соответствующую валидацию, форматирование и клавиатуру в зависимости от указанного типа. Поддерживает маскирование для структурированного ввода (телефоны, даты, кастомные паттерны), форматирование валют и чисел, управление видимостью пароля и интеграцию с компонентом Field для единообразной стилизации.
|
|
4
|
+
|
|
5
|
+
**Основные возможности:**
|
|
6
|
+
|
|
7
|
+
- Множественные типы ввода (text, number, email, password, tel, url, date, time и другие)
|
|
8
|
+
- Встроенная валидация с пользовательскими сообщениями
|
|
9
|
+
- Маскирование для форматированного ввода
|
|
10
|
+
- Форматирование валюты и чисел с локализацией
|
|
11
|
+
- Переключатель видимости пароля
|
|
12
|
+
- Префикс и суффикс для дополнительного контекста
|
|
13
|
+
- Счётчик символов для ограничения длины
|
|
14
|
+
- Стрелки навигации для числовых значений
|
|
15
|
+
- Поддержка автозаполнения и проверки орфографии
|
|
16
|
+
- Кнопка очистки значения
|
|
17
|
+
|
|
18
|
+
**Типичные сценарии использования:**
|
|
19
|
+
|
|
20
|
+
- Формы регистрации и авторизации
|
|
21
|
+
- Поля ввода контактных данных (email, телефон)
|
|
22
|
+
- Числовые поля (количество, цена, возраст)
|
|
23
|
+
- Поля для ввода паролей с переключением видимости
|
|
24
|
+
- Поля поиска с быстрой очисткой
|
|
25
|
+
- Форматированный ввод (телефоны, даты, карты)
|
|
26
|
+
- Валютные поля с автоматическим форматированием
|
|
27
|
+
|
|
28
|
+
```html
|
|
29
|
+
<script setup>
|
|
30
|
+
import { ref } from 'vue'
|
|
31
|
+
|
|
32
|
+
const email = ref('')
|
|
33
|
+
const password = ref('')
|
|
34
|
+
|
|
35
|
+
const handleInput = (event, validation) => {
|
|
36
|
+
console.log('Введённое значение:', validation.value)
|
|
37
|
+
console.log('Валидно:', validation.status)
|
|
38
|
+
}
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<template>
|
|
42
|
+
<div class="form">
|
|
43
|
+
<Input
|
|
44
|
+
v-model="email"
|
|
45
|
+
type="email"
|
|
46
|
+
label="Email"
|
|
47
|
+
placeholder="example@mail.com"
|
|
48
|
+
required
|
|
49
|
+
@input="handleInput"
|
|
50
|
+
/>
|
|
51
|
+
|
|
52
|
+
<Input
|
|
53
|
+
v-model="password"
|
|
54
|
+
type="password"
|
|
55
|
+
label="Пароль"
|
|
56
|
+
placeholder="Введите пароль"
|
|
57
|
+
minlength="8"
|
|
58
|
+
required
|
|
59
|
+
iconVisibility="visibility"
|
|
60
|
+
iconVisibilityOff="visibility_off"
|
|
61
|
+
/>
|
|
62
|
+
|
|
63
|
+
<Input
|
|
64
|
+
type="currency"
|
|
65
|
+
label="Цена"
|
|
66
|
+
currency="RUB"
|
|
67
|
+
language="ru-RU"
|
|
68
|
+
/>
|
|
69
|
+
</div>
|
|
70
|
+
</template>
|
|
71
|
+
```
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
## Input Masking
|
|
2
|
+
|
|
3
|
+
Properties `mask`, `maskVisible`, `maskNone`, and `maskAttrs` are designed to manage formatted input with automatic separator insertion and character control at specified positions.
|
|
4
|
+
|
|
5
|
+
**Properties:**
|
|
6
|
+
|
|
7
|
+
- `mask` — mask template as a string (e.g., `+1 (***) ***-****`)
|
|
8
|
+
- `maskVisible` — controls placeholder characters display (default `true`)
|
|
9
|
+
- `maskNone` — completely disables the mask
|
|
10
|
+
- `maskAttrs` — object with extended mask settings
|
|
11
|
+
|
|
12
|
+
Properties work together: `mask` defines the formatting structure, where special character (default `*`) defines positions for digit input, and other characters (spaces, brackets, hyphens) are automatically inserted as fixed separators. `maskVisible` controls the display of unfilled positions, where when set to `true` they are displayed with placeholder characters `_`, and when `false` only entered characters with separators are shown. `maskNone` allows completely disabling masking logic, converting the field to a regular text input. `maskAttrs` provides access to extended settings, allowing configuration of special characters (`special`), regular expressions for validation (`match`), custom placeholder characters (`view`), validation patterns (`pattern`), and rubber groups (`rubber`).
|
|
13
|
+
|
|
14
|
+
```html
|
|
15
|
+
<script setup>
|
|
16
|
+
import { ref } from 'vue'
|
|
17
|
+
const value = ref('')
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<template>
|
|
21
|
+
<!-- US Phone -->
|
|
22
|
+
<Input v-model="value" type="tel" mask="+1 (###) ###-####" placeholder="+1 (555) 000-0000" label="Phone" />
|
|
23
|
+
|
|
24
|
+
<!-- Credit Card -->
|
|
25
|
+
<Input v-model="value" type="text" mask="#### #### #### ####" placeholder="0000 0000 0000 0000" label="Card" />
|
|
26
|
+
|
|
27
|
+
<!-- Without placeholder display -->
|
|
28
|
+
<Input v-model="value" type="tel" mask="+1 (###) ###-####" :mask-visible="false" label="No placeholder" />
|
|
29
|
+
</template>
|
|
30
|
+
```
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
## Маскирование ввода
|
|
2
|
+
|
|
3
|
+
Свойства `mask`, `maskVisible`, `maskNone` и `maskAttrs` предназначены для управления форматированным вводом с автоматической подстановкой разделителей и контролем символов в заданных позициях.
|
|
4
|
+
|
|
5
|
+
**Свойства:**
|
|
6
|
+
|
|
7
|
+
- `mask` — шаблон маски в виде строки (например, `+1 (***) ***-****`)
|
|
8
|
+
- `maskVisible` — управляет отображением символов-заполнителей (по умолчанию `true`)
|
|
9
|
+
- `maskNone` — полностью отключает маску
|
|
10
|
+
- `maskAttrs` — объект с расширенными настройками маски
|
|
11
|
+
|
|
12
|
+
Свойства работают совместно: `mask` определяет структуру форматирования, где специальный символ (по умолчанию `*`) определяет позиции для ввода цифр, а остальные символы (пробелы, скобки, дефисы) автоматически подставляются как фиксированные разделители. `maskVisible` управляет отображением незаполненных позиций, где при значении `true` они отображаются символами-заполнителями `_`, а при `false` показываются только введённые символы с разделителями. `maskNone` позволяет полностью отключить логику маскирования, превращая поле в обычный текстовый инпут. `maskAttrs` обеспечивает доступ к расширенным настройкам, позволяя настраивать специальные символы (`special`), регулярные выражения для проверки (`match`), кастомные символы-заполнители (`view`), паттерны валидации (`pattern`) и резиновые группы (`rubber`).
|
|
13
|
+
|
|
14
|
+
```html
|
|
15
|
+
<script setup>
|
|
16
|
+
import { ref } from 'vue'
|
|
17
|
+
const value = ref('')
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<template>
|
|
21
|
+
<!-- Телефон США -->
|
|
22
|
+
<Input v-model="value" type="tel" mask="+1 (###) ###-####" placeholder="+1 (555) 000-0000" label="Телефон" />
|
|
23
|
+
|
|
24
|
+
<!-- Кредитная карта -->
|
|
25
|
+
<Input v-model="value" type="text" mask="#### #### #### ####" placeholder="0000 0000 0000 0000" label="Карта" />
|
|
26
|
+
|
|
27
|
+
<!-- Без отображения символов-заполнителей -->
|
|
28
|
+
<Input v-model="value" type="tel" mask="+1 (###) ###-####" :mask-visible="false" label="Без заполнителя" />
|
|
29
|
+
</template>
|
|
30
|
+
```
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
## Working with Numbers
|
|
2
|
+
|
|
3
|
+
Properties `type`, `fraction`, `language`, `min`, `max`, `step`, `arrow`, `arrowStep`, and `align` are designed to manage numeric value input and formatting with localization support and interactive control elements.
|
|
4
|
+
|
|
5
|
+
**Properties:**
|
|
6
|
+
|
|
7
|
+
- `type` — input type (`number` or `number-format`)
|
|
8
|
+
- `fraction` — number of decimal places (number, `true` for dynamic fractional part)
|
|
9
|
+
- `language` — locale code for formatting (e.g., `ru-RU`, `en-US`)
|
|
10
|
+
- `min` — minimum allowed value
|
|
11
|
+
- `max` — maximum allowed value
|
|
12
|
+
- `step` — step size for keyboard input
|
|
13
|
+
- `arrow` — control arrows type (`auto`, `stepper`, `carousel`, `none`)
|
|
14
|
+
- `arrowStep` — step size for arrow clicks
|
|
15
|
+
- `align` — arrows placement (`left`, `center`, `right`)
|
|
16
|
+
|
|
17
|
+
Properties work together: `type` defines the base input mode, where `number` activates simple numeric input with basic validation without formatting, and `number-format` enables automatic formatting with thousands separators and decimal places depending on locale. `language` defines regional rules for thousands separators (space, comma, period) and decimal separator (period or comma). Properties `min` and `max` activate built-in range validation. `step` defines increment/decrement magnitude when using arrow keys up/down and Page Up/Down. Properties `arrow` and `arrowStep` add visual control elements (± buttons or < > arrows) with customizable step size, where if `arrowStep` is not specified, `step` value is used. `align` controls arrows placement in the input field.
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<script setup>
|
|
21
|
+
import { ref } from 'vue'
|
|
22
|
+
const value = ref('1234567.89')
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<template>
|
|
26
|
+
<!-- Simple numeric input -->
|
|
27
|
+
<Input v-model="value" type="number" label="Number" />
|
|
28
|
+
|
|
29
|
+
<!-- Formatted number with locale -->
|
|
30
|
+
<Input v-model="value" type="number-format" language="en-US" label="Formatted" />
|
|
31
|
+
|
|
32
|
+
<!-- With range constraints -->
|
|
33
|
+
<Input v-model="value" type="number" :min="0" :max="100" label="From 0 to 100" />
|
|
34
|
+
|
|
35
|
+
<!-- With step and stepper arrows -->
|
|
36
|
+
<Input v-model="value" type="number" arrow="stepper" :step="5" :arrow-step="10" label="Step 5/10" />
|
|
37
|
+
|
|
38
|
+
<!-- With center alignment -->
|
|
39
|
+
<Input v-model="value" type="number-format" align="center" :fraction="2" label="Centered" />
|
|
40
|
+
</template>
|
|
41
|
+
```
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
## Работа с числами
|
|
2
|
+
|
|
3
|
+
Свойства `type`, `fraction`, `language`, `min`, `max`, `step`, `arrow`, `arrowStep` и `align` предназначены для управления вводом и форматированием числовых значений с поддержкой локализации и интерактивных элементов управления.
|
|
4
|
+
|
|
5
|
+
**Свойства:**
|
|
6
|
+
|
|
7
|
+
- `type` — тип инпута (`number` или `number-format`)
|
|
8
|
+
- `fraction` — количество знаков после запятой (число, `true` для динамической дробной части)
|
|
9
|
+
- `language` — код локали для форматирования (например, `ru-RU`, `en-US`)
|
|
10
|
+
- `min` — минимальное допустимое значение
|
|
11
|
+
- `max` — максимальное допустимое значение
|
|
12
|
+
- `step` — шаг изменения при клавиатурном вводе
|
|
13
|
+
- `arrow` — тип управляющих стрелок (`auto`, `stepper`, `carousel`, `none`)
|
|
14
|
+
- `arrowStep` — шаг изменения при нажатии на стрелки
|
|
15
|
+
- `align` — расположение стрелок (`left`, `center`, `right`)
|
|
16
|
+
|
|
17
|
+
Свойства работают совместно: `type` определяет базовый режим ввода, где `number` активирует простой числовой ввод с базовой валидацией без форматирования, а `number-format` включает автоматическое форматирование с разделителями тысяч и десятичными знаками в зависимости от локали. `language` определяет региональные правила для разделителей тысяч (пробел, запятая, точка) и десятичного разделителя (точка или запятая). Свойства `min` и `max` активируют встроенную валидацию диапазона. `step` определяет величину инкремента/декремента при использовании клавиш стрелок вверх/вниз и Page Up/Down. Свойства `arrow` и `arrowStep` добавляют визуальные элементы управления (кнопки ± или стрелки < >) с настраиваемым шагом изменения, где если `arrowStep` не указан, используется значение `step`. `align` управляет расположением стрелок в поле ввода.
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<script setup>
|
|
21
|
+
import { ref } from 'vue'
|
|
22
|
+
const value = ref('1234567.89')
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<template>
|
|
26
|
+
<!-- Простой числовой ввод -->
|
|
27
|
+
<Input v-model="value" type="number" label="Число" />
|
|
28
|
+
|
|
29
|
+
<!-- Форматированное число с локалью -->
|
|
30
|
+
<Input v-model="value" type="number-format" language="ru-RU" label="Форматированное" />
|
|
31
|
+
|
|
32
|
+
<!-- С ограничениями диапазона -->
|
|
33
|
+
<Input v-model="value" type="number" :min="0" :max="100" label="От 0 до 100" />
|
|
34
|
+
|
|
35
|
+
<!-- С шагом и стрелками stepper -->
|
|
36
|
+
<Input v-model="value" type="number" arrow="stepper" :step="5" :arrow-step="10" label="Шаг 5/10" />
|
|
37
|
+
|
|
38
|
+
<!-- С выравниванием по центру -->
|
|
39
|
+
<Input v-model="value" type="number-format" align="center" :fraction="2" label="По центру" />
|
|
40
|
+
</template>
|
|
41
|
+
```
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
## Input Field Type
|
|
2
|
+
|
|
3
|
+
The `type` property defines the type and behavior of the Input field.
|
|
4
|
+
|
|
5
|
+
**Available values:**
|
|
6
|
+
|
|
7
|
+
- `'text'` — standard text field (default value)
|
|
8
|
+
- `'search'` — search field with quick clear functionality
|
|
9
|
+
- `'number'` — numeric field with basic number validation
|
|
10
|
+
- `'number-format'` — numeric field with formatting (thousands separators)
|
|
11
|
+
- `'currency'` — field for currency input with currency formatting
|
|
12
|
+
- `'email'` — field for email input with corresponding validation
|
|
13
|
+
- `'password'` — field for password input (hides characters)
|
|
14
|
+
- `'datetime'` — field for date and time input
|
|
15
|
+
- `'date'` — field for date input
|
|
16
|
+
- `'year-month'` — field for year and month input
|
|
17
|
+
- `'time'` — field for time input
|
|
18
|
+
- `'hour-minute'` — field for hours and minutes input
|
|
19
|
+
- `'tel'` — field for telephone number input
|
|
20
|
+
- `'url'` — field for web address input with URL validation
|
|
21
|
+
- `'checkbox'` — checkbox (used for boolean values)
|
|
22
|
+
- `'radio'` — radio button (used for selecting one option from a group)
|
|
23
|
+
|
|
24
|
+
Each type activates corresponding validation, formatting, and input mechanisms. For the `password` type, a visibility toggle function is available through a special icon. Types `number`, `number-format`, and `currency` automatically enable formatting and restrict input to numeric values only. Types `email`, `tel`, and `url` apply built-in HTML5 validation and set the appropriate `inputMode` for mobile keyboards. Date and time related types (`datetime`, `date`, `year-month`, `time`, `hour-minute`) activate special input masks and value formatting.
|
|
25
|
+
|
|
26
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
## Тип поля ввода
|
|
2
|
+
|
|
3
|
+
Свойство `type` определяет тип и поведение поля ввода Input.
|
|
4
|
+
|
|
5
|
+
**Возможные значения:**
|
|
6
|
+
|
|
7
|
+
- `'text'` — обычное текстовое поле (значение по умолчанию)
|
|
8
|
+
- `'search'` — поле для поиска с возможностью быстрой очистки
|
|
9
|
+
- `'number'` — числовое поле с базовой валидацией чисел
|
|
10
|
+
- `'number-format'` — числовое поле с форматированием (разделители тысяч)
|
|
11
|
+
- `'currency'` — поле для ввода денежных значений с форматированием валюты
|
|
12
|
+
- `'email'` — поле для ввода электронной почты с соответствующей валидацией
|
|
13
|
+
- `'password'` — поле для ввода пароля (скрывает символы)
|
|
14
|
+
- `'datetime'` — поле для ввода даты и времени
|
|
15
|
+
- `'date'` — поле для ввода даты
|
|
16
|
+
- `'year-month'` — поле для ввода года и месяца
|
|
17
|
+
- `'time'` — поле для ввода времени
|
|
18
|
+
- `'hour-minute'` — поле для ввода часов и минут
|
|
19
|
+
- `'tel'` — поле для ввода телефонного номера
|
|
20
|
+
- `'url'` — поле для ввода веб-адреса с валидацией URL
|
|
21
|
+
- `'checkbox'` — чекбокс (используется для булевых значений)
|
|
22
|
+
- `'radio'` — радиокнопка (используется для выбора одного варианта из группы)
|
|
23
|
+
|
|
24
|
+
Каждый тип активирует соответствующие механизмы валидации, форматирования и ввода. Для типа `password` доступна функция переключения видимости через специальную иконку. Типы `number`, `number-format` и `currency` автоматически включают форматирование и ограничивают ввод только числовыми значениями. Типы `email`, `tel` и `url` применяют встроенную HTML5-валидацию и устанавливают соответствующий `inputMode` для мобильных клавиатур. Типы, связанные с датой и временем (`datetime`, `date`, `year-month`, `time`, `hour-minute`), активируют специальные маски ввода и форматирование значений.
|
|
25
|
+
|
|
26
|
+
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { StorybookComponentsMdxItem } from '../../../types/storybookTypes'
|
|
2
|
+
|
|
3
|
+
import currencyEn from './currency.en.mdx'
|
|
4
|
+
import currencyRu from './currency.ru.mdx'
|
|
5
|
+
import dateEn from './date.en.mdx'
|
|
6
|
+
import dateRu from './date.ru.mdx'
|
|
7
|
+
import inputEn from './input.en.mdx'
|
|
8
|
+
import inputRu from './input.ru.mdx'
|
|
9
|
+
import maskEn from './mask.en.mdx'
|
|
10
|
+
import maskRu from './mask.ru.mdx'
|
|
11
|
+
import numberEn from './number.en.mdx'
|
|
12
|
+
import numberRu from './number.ru.mdx'
|
|
13
|
+
import typeEn from './type.en.mdx'
|
|
14
|
+
import typeRu from './type.ru.mdx'
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* MDX files for Input component
|
|
18
|
+
*
|
|
19
|
+
* MDX файлы для компонента Input
|
|
20
|
+
*/
|
|
21
|
+
export const wikiMdxInput: StorybookComponentsMdxItem = {
|
|
22
|
+
name: 'Input',
|
|
23
|
+
descriptions: {
|
|
24
|
+
currency: {
|
|
25
|
+
en: currencyEn,
|
|
26
|
+
ru: currencyRu
|
|
27
|
+
},
|
|
28
|
+
date: {
|
|
29
|
+
en: dateEn,
|
|
30
|
+
ru: dateRu
|
|
31
|
+
},
|
|
32
|
+
input: {
|
|
33
|
+
en: inputEn,
|
|
34
|
+
ru: inputRu
|
|
35
|
+
},
|
|
36
|
+
mask: {
|
|
37
|
+
en: maskEn,
|
|
38
|
+
ru: maskRu
|
|
39
|
+
},
|
|
40
|
+
number: {
|
|
41
|
+
en: numberEn,
|
|
42
|
+
ru: numberRu
|
|
43
|
+
},
|
|
44
|
+
type: {
|
|
45
|
+
en: typeEn,
|
|
46
|
+
ru: typeRu
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
### `updateValue`
|
|
2
|
+
|
|
3
|
+
Event fires when the selected value in the menu changes.
|
|
4
|
+
|
|
5
|
+
**Parameters:**
|
|
6
|
+
- `value?: NumberOrStringOrBoolean` — new selected value
|
|
7
|
+
|
|
8
|
+
```html
|
|
9
|
+
<script setup>
|
|
10
|
+
const handleUpdateValue = (value) => {
|
|
11
|
+
console.log('New value:', value)
|
|
12
|
+
console.log('Value type:', typeof value)
|
|
13
|
+
}
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<template>
|
|
17
|
+
<Menu
|
|
18
|
+
:isSelectedByValue="true"
|
|
19
|
+
@updateValue="handleUpdateValue"
|
|
20
|
+
>
|
|
21
|
+
<template #default>
|
|
22
|
+
<MenuItem value="item1">Menu Item 1</MenuItem>
|
|
23
|
+
<MenuItem value="item2">Menu Item 2</MenuItem>
|
|
24
|
+
<MenuItem value="item3">Menu Item 3</MenuItem>
|
|
25
|
+
</template>
|
|
26
|
+
</Menu>
|
|
27
|
+
</template>
|
|
28
|
+
```
|
|
29
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
### `updateValue`
|
|
2
|
+
|
|
3
|
+
Событие срабатывает при изменении выбранного значения в меню.
|
|
4
|
+
|
|
5
|
+
**Параметры:**
|
|
6
|
+
- `value?: NumberOrStringOrBoolean` — новое выбранное значение
|
|
7
|
+
|
|
8
|
+
```html
|
|
9
|
+
<script setup>
|
|
10
|
+
const handleUpdateValue = (value) => {
|
|
11
|
+
console.log('Новое значение:', value)
|
|
12
|
+
console.log('Тип значения:', typeof value)
|
|
13
|
+
}
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<template>
|
|
17
|
+
<Menu
|
|
18
|
+
:isSelectedByValue="true"
|
|
19
|
+
@updateValue="handleUpdateValue"
|
|
20
|
+
>
|
|
21
|
+
<template #default>
|
|
22
|
+
<MenuItem value="item1">Пункт меню 1</MenuItem>
|
|
23
|
+
<MenuItem value="item2">Пункт меню 2</MenuItem>
|
|
24
|
+
<MenuItem value="item3">Пункт меню 3</MenuItem>
|
|
25
|
+
</template>
|
|
26
|
+
</Menu>
|
|
27
|
+
</template>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
### `previous()`
|
|
2
|
+
|
|
3
|
+
Перемещает выбор на предыдущий элемент меню на основе значения свойства `step`.
|
|
4
|
+
|
|
5
|
+
**Возвращает:** `void`
|
|
6
|
+
|
|
7
|
+
### `next()`
|
|
8
|
+
|
|
9
|
+
Перемещает выбор на следующий элемент меню на основе значения свойства `step`.
|
|
10
|
+
|
|
11
|
+
**Возвращает:** `void`
|
|
12
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
## Menu item navigation
|
|
2
|
+
|
|
3
|
+
Methods `previous()` and `next()` are designed for programmatic movement through menu items based on current selection and the `step` property.
|
|
4
|
+
|
|
5
|
+
**Methods:**
|
|
6
|
+
|
|
7
|
+
- `previous()` — moves selection to the previous item (backwards by `step` positions)
|
|
8
|
+
- `next()` — moves selection to the next item (forwards by `step` positions)
|
|
9
|
+
- `step` — number of items to skip during navigation (default: 1)
|
|
10
|
+
|
|
11
|
+
The methods work together with reactive `selected` state: calling `previous()` or `next()` automatically calculates the new position relative to the currently selected item. If no item is selected, the methods select the first available item. When reaching list boundaries (first or last item), navigation stops at the boundary item, preventing overflow beyond the list.
|
|
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
|
+
<!-- Call via ref -->
|
|
23
|
+
<button @click="menuRef?.previous()">Previous</button>
|
|
24
|
+
<button @click="menuRef?.next()">Next</button>
|
|
25
|
+
|
|
26
|
+
<Menu
|
|
27
|
+
ref="menuRef"
|
|
28
|
+
v-model:selected="selected"
|
|
29
|
+
:list="[
|
|
30
|
+
{ label: 'Item 1', value: 'item1' },
|
|
31
|
+
{ label: 'Item 2', value: 'item2' },
|
|
32
|
+
{ label: 'Item 3', value: 'item3' }
|
|
33
|
+
]"
|
|
34
|
+
:step="1"
|
|
35
|
+
/>
|
|
36
|
+
|
|
37
|
+
<!-- Navigation in control slot -->
|
|
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
|
+
<!-- With custom step -->
|
|
47
|
+
<Menu
|
|
48
|
+
ref="menuRef"
|
|
49
|
+
v-model:selected="selected"
|
|
50
|
+
:list="items"
|
|
51
|
+
:step="2"
|
|
52
|
+
/>
|
|
53
|
+
</template>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
|