@dxtmisha/wiki 0.24.3 → 0.25.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.
Files changed (230) hide show
  1. package/package.json +7 -7
  2. package/src/classes/WikiStorybookItem.ts +24 -0
  3. package/src/media/descriptions/wikiDescriptions.ts +28 -0
  4. package/src/media/descriptions/wikiDescriptionsAccordion.ts +158 -0
  5. package/src/media/descriptions/wikiDescriptionsActionSheet.ts +211 -0
  6. package/src/media/descriptions/wikiDescriptionsActions.ts +161 -0
  7. package/src/media/descriptions/wikiDescriptionsAnchor.ts +42 -0
  8. package/src/media/descriptions/wikiDescriptionsArrow.ts +181 -0
  9. package/src/media/descriptions/wikiDescriptionsBlock.ts +97 -0
  10. package/src/media/descriptions/wikiDescriptionsButton.ts +0 -1
  11. package/src/media/descriptions/wikiDescriptionsCell.ts +2 -1
  12. package/src/media/descriptions/wikiDescriptionsChipGroup.ts +168 -0
  13. package/src/media/descriptions/wikiDescriptionsDialog.ts +182 -0
  14. package/src/media/descriptions/wikiDescriptionsField.ts +2 -0
  15. package/src/media/descriptions/wikiDescriptionsImage.ts +41 -6
  16. package/src/media/descriptions/wikiDescriptionsInput.ts +257 -0
  17. package/src/media/descriptions/wikiDescriptionsMenu.ts +123 -0
  18. package/src/media/descriptions/wikiDescriptionsModal.ts +145 -0
  19. package/src/media/descriptions/wikiDescriptionsMotionTransform.ts +2 -6
  20. package/src/media/descriptions/wikiDescriptionsSelect.ts +209 -0
  21. package/src/media/descriptions/wikiDescriptionsSelectValue.ts +78 -0
  22. package/src/media/descriptions/wikiDescriptionsTextareaAutosize.ts +50 -0
  23. package/src/media/descriptions/wikiDescriptionsTooltip.ts +89 -0
  24. package/src/media/functional/en/conversions.mdx +67 -0
  25. package/src/media/functional/en/dataUtils.mdx +25 -0
  26. package/src/media/functional/en/datetimeRef.mdx +1 -1
  27. package/src/media/functional/en/eventRef.mdx +1 -1
  28. package/src/media/functional/en/executionUtils.mdx +58 -0
  29. package/src/media/functional/en/geoFlagRef.mdx +1 -1
  30. package/src/media/functional/en/geoIntlRef.mdx +1 -1
  31. package/src/media/functional/en/geoRef.mdx +2 -2
  32. package/src/media/functional/en/meta.mdx +1206 -0
  33. package/src/media/functional/en/metaManager.mdx +376 -0
  34. package/src/media/functional/en/metaOg.mdx +694 -0
  35. package/src/media/functional/en/metaTwitter.mdx +853 -0
  36. package/src/media/functional/en/reactive.mdx +40 -0
  37. package/src/media/functional/en/refTypes.mdx +1 -1
  38. package/src/media/functional/en/useApiRef.mdx +5 -5
  39. package/src/media/functional/en/useMeta.mdx +431 -0
  40. package/src/media/functional/en/validationUtils.mdx +11 -0
  41. package/src/media/functional/ru/conversions.mdx +67 -0
  42. package/src/media/functional/ru/dataUtils.mdx +25 -0
  43. package/src/media/functional/ru/datetimeRef.mdx +2 -2
  44. package/src/media/functional/ru/eventRef.mdx +1 -1
  45. package/src/media/functional/ru/executionUtils.mdx +58 -0
  46. package/src/media/functional/ru/geoFlagRef.mdx +1 -1
  47. package/src/media/functional/ru/geoIntl.mdx +2 -2
  48. package/src/media/functional/ru/geoIntlRef.mdx +1 -1
  49. package/src/media/functional/ru/geoRef.mdx +2 -2
  50. package/src/media/functional/ru/listTypes.mdx +1 -1
  51. package/src/media/functional/ru/meta.mdx +1330 -0
  52. package/src/media/functional/ru/metaManager.mdx +376 -0
  53. package/src/media/functional/ru/metaOg.mdx +694 -0
  54. package/src/media/functional/ru/metaTwitter.mdx +853 -0
  55. package/src/media/functional/ru/reactive.mdx +40 -0
  56. package/src/media/functional/ru/refTypes.mdx +2 -2
  57. package/src/media/functional/ru/useApiRef.mdx +5 -5
  58. package/src/media/functional/ru/useMeta.mdx +431 -0
  59. package/src/media/functional/ru/validationUtils.mdx +11 -0
  60. package/src/media/mdx/Accordion/accordion.en.mdx +59 -0
  61. package/src/media/mdx/Accordion/accordion.ru.mdx +59 -0
  62. package/src/media/mdx/Accordion/slots.en.mdx +6 -0
  63. package/src/media/mdx/Accordion/slots.ru.mdx +6 -0
  64. package/src/media/mdx/Accordion/wikiMdxAccordion.ts +25 -0
  65. package/src/media/mdx/ActionSheet/actionSheet.en.mdx +61 -0
  66. package/src/media/mdx/ActionSheet/actionSheet.ru.mdx +61 -0
  67. package/src/media/mdx/ActionSheet/touchClose.en.mdx +21 -0
  68. package/src/media/mdx/ActionSheet/touchClose.ru.mdx +21 -0
  69. package/src/media/mdx/ActionSheet/wikiMdxActionSheet.ts +25 -0
  70. package/src/media/mdx/Actions/actions.en.mdx +48 -0
  71. package/src/media/mdx/Actions/actions.ru.mdx +48 -0
  72. package/src/media/mdx/Actions/flexible.en.mdx +19 -0
  73. package/src/media/mdx/Actions/flexible.ru.mdx +19 -0
  74. package/src/media/mdx/Actions/list.en.mdx +50 -0
  75. package/src/media/mdx/Actions/list.ru.mdx +50 -0
  76. package/src/media/mdx/Actions/wikiMdxActions.ts +31 -0
  77. package/src/media/mdx/Anchor/anchor.en.mdx +34 -0
  78. package/src/media/mdx/Anchor/anchor.ru.mdx +34 -0
  79. package/src/media/mdx/Anchor/expose.go.en.mdx +6 -0
  80. package/src/media/mdx/Anchor/expose.go.ru.mdx +6 -0
  81. package/src/media/mdx/Anchor/hide.en.mdx +28 -0
  82. package/src/media/mdx/Anchor/hide.ru.mdx +28 -0
  83. package/src/media/mdx/Anchor/isCopy.en.mdx +23 -0
  84. package/src/media/mdx/Anchor/isCopy.ru.mdx +23 -0
  85. package/src/media/mdx/Anchor/scroll.en.mdx +34 -0
  86. package/src/media/mdx/Anchor/scroll.ru.mdx +35 -0
  87. package/src/media/mdx/Anchor/wikiMdxAnchor.ts +43 -0
  88. package/src/media/mdx/Arrow/arrow.en.mdx +33 -0
  89. package/src/media/mdx/Arrow/arrow.ru.mdx +33 -0
  90. package/src/media/mdx/Arrow/wikiMdxArrow.ts +19 -0
  91. package/src/media/mdx/Block/block.en.mdx +42 -0
  92. package/src/media/mdx/Block/block.ru.mdx +42 -0
  93. package/src/media/mdx/Block/wikiMdxBlock.ts +19 -0
  94. package/src/media/mdx/ChipGroup/chipGroup.en.mdx +51 -0
  95. package/src/media/mdx/ChipGroup/chipGroup.ru.mdx +51 -0
  96. package/src/media/mdx/ChipGroup/selected.en.mdx +50 -0
  97. package/src/media/mdx/ChipGroup/selected.ru.mdx +50 -0
  98. package/src/media/mdx/ChipGroup/wikiMdxChipGroup.ts +25 -0
  99. package/src/media/mdx/Dialog/buttons.en.mdx +45 -0
  100. package/src/media/mdx/Dialog/buttons.ru.mdx +45 -0
  101. package/src/media/mdx/Dialog/dialog.en.mdx +66 -0
  102. package/src/media/mdx/Dialog/dialog.ru.mdx +65 -0
  103. package/src/media/mdx/Dialog/events.en.mdx +63 -0
  104. package/src/media/mdx/Dialog/events.ru.mdx +63 -0
  105. package/src/media/mdx/Dialog/states.en.mdx +58 -0
  106. package/src/media/mdx/Dialog/states.ru.mdx +57 -0
  107. package/src/media/mdx/Dialog/wikiMdxDialog.ts +37 -0
  108. package/src/media/mdx/Field/arrows.en.mdx +22 -6
  109. package/src/media/mdx/Field/arrows.ru.mdx +22 -6
  110. package/src/media/mdx/Field/slots.en.mdx +0 -13
  111. package/src/media/mdx/Field/slots.ru.mdx +0 -13
  112. package/src/media/mdx/Image/img-tag.en.mdx +105 -0
  113. package/src/media/mdx/Image/img-tag.ru.mdx +105 -0
  114. package/src/media/mdx/Image/wikiMdxImage.ts +6 -0
  115. package/src/media/mdx/Input/currency.en.mdx +38 -0
  116. package/src/media/mdx/Input/currency.ru.mdx +38 -0
  117. package/src/media/mdx/Input/date.en.mdx +53 -0
  118. package/src/media/mdx/Input/date.ru.mdx +53 -0
  119. package/src/media/mdx/Input/input.en.mdx +143 -0
  120. package/src/media/mdx/Input/input.ru.mdx +71 -0
  121. package/src/media/mdx/Input/mask.en.mdx +30 -0
  122. package/src/media/mdx/Input/mask.ru.mdx +30 -0
  123. package/src/media/mdx/Input/number.en.mdx +41 -0
  124. package/src/media/mdx/Input/number.ru.mdx +41 -0
  125. package/src/media/mdx/Input/type.en.mdx +26 -0
  126. package/src/media/mdx/Input/type.ru.mdx +26 -0
  127. package/src/media/mdx/Input/wikiMdxInput.ts +49 -0
  128. package/src/media/mdx/Menu/event.updateValue.en.mdx +29 -0
  129. package/src/media/mdx/Menu/event.updateValue.ru.mdx +30 -0
  130. package/src/media/mdx/Menu/expose.navigation.en.mdx +12 -0
  131. package/src/media/mdx/Menu/expose.navigation.ru.mdx +12 -0
  132. package/src/media/mdx/Menu/navigation.en.mdx +56 -0
  133. package/src/media/mdx/Menu/navigation.ru.mdx +56 -0
  134. package/src/media/mdx/Menu/slots.control.en.mdx +65 -0
  135. package/src/media/mdx/Menu/slots.control.ru.mdx +65 -0
  136. package/src/media/mdx/Menu/slots.en.mdx +2 -24
  137. package/src/media/mdx/Menu/slots.ru.mdx +2 -24
  138. package/src/media/mdx/Menu/wikiMdxMenu.ts +27 -3
  139. package/src/media/mdx/Modal/differences.en.mdx +130 -0
  140. package/src/media/mdx/Modal/differences.ru.mdx +65 -0
  141. package/src/media/mdx/Modal/modal.en.mdx +63 -0
  142. package/src/media/mdx/Modal/modal.ru.mdx +63 -0
  143. package/src/media/mdx/Modal/wikiMdxModal.ts +25 -0
  144. package/src/media/mdx/MotionTransform/expose.motionTransformElement.en.mdx +13 -0
  145. package/src/media/mdx/MotionTransform/expose.motionTransformElement.ru.mdx +14 -0
  146. package/src/media/mdx/MotionTransform/wikiMdxMotionTransform.ts +6 -0
  147. package/src/media/mdx/Select/select.en.mdx +69 -0
  148. package/src/media/mdx/Select/select.ru.mdx +69 -0
  149. package/src/media/mdx/Select/wikiMdxSelect.ts +19 -0
  150. package/src/media/mdx/SelectValue/selectValue.en.mdx +64 -0
  151. package/src/media/mdx/SelectValue/selectValue.ru.mdx +64 -0
  152. package/src/media/mdx/SelectValue/wikiMdxSelectValue.ts +19 -0
  153. package/src/media/mdx/TextareaAutosize/textarea-autosize.en.mdx +65 -0
  154. package/src/media/mdx/TextareaAutosize/textarea-autosize.ru.mdx +65 -0
  155. package/src/media/mdx/TextareaAutosize/wikiMdxTextareaAutosize.ts +19 -0
  156. package/src/media/mdx/Tooltip/event.tooltip.en.mdx +7 -0
  157. package/src/media/mdx/Tooltip/event.tooltip.ru.mdx +8 -0
  158. package/src/media/mdx/Tooltip/slot.control.en.mdx +14 -0
  159. package/src/media/mdx/Tooltip/slot.control.ru.mdx +14 -0
  160. package/src/media/mdx/Tooltip/tooltip.en.mdx +34 -0
  161. package/src/media/mdx/Tooltip/tooltip.ru.mdx +34 -0
  162. package/src/media/mdx/Tooltip/wikiMdxTooltip.ts +31 -0
  163. package/src/media/mdx/Window/classes.ru.mdx +1 -1
  164. package/src/media/mdx/event/events.actions.en.mdx +44 -0
  165. package/src/media/mdx/event/events.actions.ru.mdx +44 -0
  166. package/src/media/mdx/event/events.inputStandard.en.mdx +6 -0
  167. package/src/media/mdx/event/events.inputStandard.ru.mdx +6 -0
  168. package/src/media/mdx/event/wikiMdxEvent.ts +20 -8
  169. package/src/media/mdx/expose/expose.descriptionId.en.mdx +6 -0
  170. package/src/media/mdx/expose/expose.descriptionId.ru.mdx +6 -0
  171. package/src/media/mdx/expose/expose.id.en.mdx +6 -0
  172. package/src/media/mdx/expose/expose.id.ru.mdx +6 -0
  173. package/src/media/mdx/expose/expose.labelId.en.mdx +6 -0
  174. package/src/media/mdx/expose/expose.labelId.ru.mdx +6 -0
  175. package/src/media/mdx/expose/wikiMdxExpose.ts +18 -0
  176. package/src/media/mdx/slot/body.en.mdx +6 -0
  177. package/src/media/mdx/slot/body.ru.mdx +6 -0
  178. package/src/media/mdx/slot/headline.en.mdx +7 -0
  179. package/src/media/mdx/slot/headline.ru.mdx +6 -0
  180. package/src/media/mdx/slot/leading.en.mdx +7 -0
  181. package/src/media/mdx/slot/leading.ru.mdx +7 -0
  182. package/src/media/mdx/slot/secondary.en.mdx +5 -0
  183. package/src/media/mdx/slot/secondary.ru.mdx +5 -0
  184. package/src/media/mdx/slot/trailing.en.mdx +7 -0
  185. package/src/media/mdx/slot/trailing.ru.mdx +7 -0
  186. package/src/media/mdx/slot/wikiMdxSlot.ts +30 -0
  187. package/src/media/mdx/style/isSkeleton.en.mdx +2 -2
  188. package/src/media/mdx/style/isSkeleton.ru.mdx +2 -2
  189. package/src/media/mdx/value/v-model-selected.en.mdx +28 -0
  190. package/src/media/mdx/value/v-model-selected.ru.mdx +28 -0
  191. package/src/media/mdx/value/v-model.en.mdx +26 -0
  192. package/src/media/mdx/value/v-model.ru.mdx +26 -0
  193. package/src/media/mdx/value/wikiMdxValue.ts +24 -3
  194. package/src/media/mdx/wikiMdx.ts +29 -1
  195. package/src/media/props/wiki.ts +42 -0
  196. package/src/media/props/wikiActions.ts +43 -0
  197. package/src/media/props/wikiActionsInclude.ts +62 -0
  198. package/src/media/props/wikiAnchor.ts +84 -0
  199. package/src/media/props/wikiAria.ts +102 -0
  200. package/src/media/props/wikiArrow.ts +24 -0
  201. package/src/media/props/wikiArrowInclude.ts +45 -0
  202. package/src/media/props/wikiBarsInclude.ts +80 -0
  203. package/src/media/props/wikiChipGroup.ts +39 -0
  204. package/src/media/props/wikiDialog.ts +34 -0
  205. package/src/media/props/wikiField.ts +0 -21
  206. package/src/media/props/wikiFieldCounterInclude.ts +78 -0
  207. package/src/media/props/wikiForm.ts +248 -0
  208. package/src/media/props/wikiHook.ts +20 -0
  209. package/src/media/props/wikiIcon.ts +3 -3
  210. package/src/media/props/wikiIconInclude.ts +319 -0
  211. package/src/media/props/wikiImage.ts +71 -19
  212. package/src/media/props/wikiInformation.ts +160 -0
  213. package/src/media/props/wikiInput.ts +34 -0
  214. package/src/media/props/wikiListItem.ts +20 -0
  215. package/src/media/props/wikiMask.ts +0 -10
  216. package/src/media/props/wikiMaskInclude.ts +54 -0
  217. package/src/media/props/wikiMenu.ts +0 -10
  218. package/src/media/props/wikiMotionTransform.ts +0 -10
  219. package/src/media/props/wikiOption.ts +113 -0
  220. package/src/media/props/wikiSelect.ts +68 -0
  221. package/src/media/props/wikiSelectValue.ts +30 -0
  222. package/src/media/props/wikiStatus.ts +29 -41
  223. package/src/media/props/wikiStyle.ts +154 -243
  224. package/src/media/props/wikiTechnical.ts +65 -0
  225. package/src/media/props/wikiText.ts +57 -0
  226. package/src/media/props/wikiTooltip.ts +53 -0
  227. package/src/media/props/wikiValue.ts +14 -203
  228. package/src/media/props/wikiWindow.ts +0 -31
  229. package/src/styles/storybookStyle.scss +3 -1
  230. package/src/types/storybookTypes.ts +26 -4
@@ -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
+ Moves the selection to the previous menu item based on the `step` property value.
4
+
5
+ **Returns:** `void`
6
+
7
+ ### `next()`
8
+
9
+ Moves the selection to the next menu item based on the `step` property value.
10
+
11
+ **Returns:** `void`
12
+
@@ -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
+
@@ -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
- <Menu v-model:open="isOpen" :list="menuItems">
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
- </Menu>
58
+ </Component>
81
59
  </template>
82
60
  ```
83
61