@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
|
@@ -227,5 +227,47 @@ export const wikiDescriptionsMask: StorybookComponentsDescriptionItem = {
|
|
|
227
227
|
<StorybookDescriptions componentName={'Mask'} type={'expose'}/>
|
|
228
228
|
<StorybookDescriptions componentName={'Expose'} type={'clear'}/>
|
|
229
229
|
`
|
|
230
|
+
},
|
|
231
|
+
ai: {
|
|
232
|
+
description: `
|
|
233
|
+
**Note:** This component is already integrated into the \`Input\` component and should not be used directly.
|
|
234
|
+
|
|
235
|
+
Mask is a low-level utility component responsible for controlling and formatting user input. It ensures that the data entered matches a predefined structure (mask) or data type (date, number, currency).
|
|
236
|
+
|
|
237
|
+
**How it works:**
|
|
238
|
+
The component intercepts input events (\`beforeinput\`, \`input\`) and validates each character against allowed patterns (\`match\`). It automatically inserts static characters defined in the \`mask\` (like parentheses, dashes) and skips over them during navigation. For complex types like \`date\` or \`number\`, it uses internal logic to validate ranges (e.g., month 1-12) and format values (e.g., adding thousands separators).
|
|
239
|
+
|
|
240
|
+
**Key Properties & Usage:**
|
|
241
|
+
|
|
242
|
+
1. **Masking (\`mask\`):**
|
|
243
|
+
- **String:** A single pattern (e.g., \`+1 (***) ***-****\`). The \`*\` character (or value of \`special\`) represents an input slot. All other characters are treated as static literals and are automatically inserted/skipped.
|
|
244
|
+
- **Array:** A list of patterns (e.g., \`['(***) ***-****', '+1 (***) ***-****']\`). The component automatically selects the most appropriate mask based on the input length.
|
|
245
|
+
|
|
246
|
+
2. **Input Types (\`type\`):**
|
|
247
|
+
- \`text\` (default): Uses the \`mask\` pattern directly.
|
|
248
|
+
- \`number\`: Formats input as a number. Automatically adds thousands separators based on \`language\`.
|
|
249
|
+
- \`currency\`: Formats as currency. Requires \`currency\` prop (e.g., 'USD'). Uses \`fraction\` for decimal places.
|
|
250
|
+
- \`date\` / \`datetime\` / \`time\`: Enforces valid date/time entry. The format (e.g., DD.MM.YYYY vs MM/DD/YYYY) is determined by the \`language\` prop.
|
|
251
|
+
|
|
252
|
+
3. **Validation & Constraints:**
|
|
253
|
+
- \`match\`: A Regular Expression string (e.g., \`[0-9a-fA-F]\`). Only characters matching this pattern are accepted. Useful for Hex codes, alphanumeric IDs, etc.
|
|
254
|
+
- \`pattern\`: A Regex for validating the *completed* value.
|
|
255
|
+
- \`min\`, \`max\`: For number/currency types, restricts the value range.
|
|
256
|
+
|
|
257
|
+
4. **Customization:**
|
|
258
|
+
- \`special\`: Defines the placeholder character in the \`mask\`. Default is \`*\`. Change this if your mask needs to contain literal asterisks.
|
|
259
|
+
- \`language\`: Determines locale-specific formatting for dates and numbers (separators, date order).
|
|
260
|
+
- \`fraction\`: Specifies the number of decimal places for numbers/currency.
|
|
261
|
+
|
|
262
|
+
**When to use (Design Identification):**
|
|
263
|
+
- **Formatted Text:** Inputs that require specific formatting like Phone Numbers \`+1 (555) ...\`, Credit Cards \`0000 0000 ...\`, or License Plates.
|
|
264
|
+
- **Financial Data:** Inputs for amounts that need thousands separators or currency symbols.
|
|
265
|
+
- **Dates:** Inputs requiring strict date structure (DD.MM.YYYY).
|
|
266
|
+
|
|
267
|
+
**Example Scenarios:**
|
|
268
|
+
- **Phone:** \`<Mask mask="+1 (***) ***-****" match="[0-9]"/>\`
|
|
269
|
+
- **Price:** \`<Mask type="currency" currency="USD" fraction="2"/>\`
|
|
270
|
+
- **Date:** \`<Mask type="date" language="en-GB"/>\` (DD/MM/YYYY)
|
|
271
|
+
`
|
|
230
272
|
}
|
|
231
273
|
}
|
|
@@ -29,6 +29,9 @@ export const wikiDescriptionsMenu: StorybookComponentsDescriptionItem = {
|
|
|
29
29
|
'настройка атрибутов пунктов и списка (itemAttrs, listAttrs)'
|
|
30
30
|
]
|
|
31
31
|
},
|
|
32
|
+
import: [
|
|
33
|
+
'import { ref } from \'vue\''
|
|
34
|
+
],
|
|
32
35
|
render: `
|
|
33
36
|
<DesignComponent v-bind="args">
|
|
34
37
|
<template #control="{binds}">
|
|
@@ -37,6 +40,75 @@ export const wikiDescriptionsMenu: StorybookComponentsDescriptionItem = {
|
|
|
37
40
|
</DesignComponent>
|
|
38
41
|
`,
|
|
39
42
|
stories: [
|
|
43
|
+
{
|
|
44
|
+
id: 'MenuNavigation',
|
|
45
|
+
name: {
|
|
46
|
+
en: 'Navigation with previous/next',
|
|
47
|
+
ru: 'Навигация с previous/next'
|
|
48
|
+
},
|
|
49
|
+
setup: `
|
|
50
|
+
return {
|
|
51
|
+
selectedValue: ref('color2'),
|
|
52
|
+
colors: ref([
|
|
53
|
+
{label: '[1]Red', value: 'color1', icon: 'palette'},
|
|
54
|
+
{label: '[2]Green', value: 'color2', icon: 'palette'},
|
|
55
|
+
{label: '[3]Blue', value: 'color3', icon: 'palette'},
|
|
56
|
+
{label: '[4]Yellow', value: 'color4', icon: 'palette'},
|
|
57
|
+
{label: '[5]Purple', value: 'color5', icon: 'palette'},
|
|
58
|
+
{label: '[6]Orange', value: 'color6', icon: 'palette'}
|
|
59
|
+
]),
|
|
60
|
+
step: ref(1)
|
|
61
|
+
}
|
|
62
|
+
`,
|
|
63
|
+
template: `
|
|
64
|
+
<div class="wiki-storybook-flex-column">
|
|
65
|
+
<div class="wiki-storybook-item wiki-storybook-item--auto wiki-storybook-item--padding">
|
|
66
|
+
<div class="wiki-storybook-item__label">Step size:</div>
|
|
67
|
+
<div class="wiki-storybook-flex">
|
|
68
|
+
<button class="wiki-storybook-button" @click="step = 1">1 item</button>
|
|
69
|
+
<button class="wiki-storybook-button" @click="step = 2">2 items</button>
|
|
70
|
+
<button class="wiki-storybook-button" @click="step = 3">3 items</button>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
|
|
74
|
+
<DesignComponent
|
|
75
|
+
v-model:selected="selectedValue"
|
|
76
|
+
:list="colors"
|
|
77
|
+
:step="step"
|
|
78
|
+
is-selected-by-value
|
|
79
|
+
>
|
|
80
|
+
<template #control="{previous, next, selectedNames, open}">
|
|
81
|
+
<div class="wiki-storybook-item wiki-storybook-item--auto wiki-storybook-item--padding">
|
|
82
|
+
<div class="wiki-storybook-flex">
|
|
83
|
+
<button
|
|
84
|
+
class="wiki-storybook-button"
|
|
85
|
+
@click="previous"
|
|
86
|
+
style="padding: 4px 12px;"
|
|
87
|
+
>
|
|
88
|
+
◀ Previous
|
|
89
|
+
</button>
|
|
90
|
+
<div style="flex: 1; text-align: center; font-weight: 500;">
|
|
91
|
+
{{ selectedNames.value[0] || 'None' }}
|
|
92
|
+
</div>
|
|
93
|
+
<button
|
|
94
|
+
class="wiki-storybook-button"
|
|
95
|
+
@click="next"
|
|
96
|
+
style="padding: 4px 12px;"
|
|
97
|
+
>
|
|
98
|
+
Next ▶
|
|
99
|
+
</button>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
</template>
|
|
103
|
+
</DesignComponent>
|
|
104
|
+
|
|
105
|
+
<div class="wiki-storybook-item wiki-storybook-item--auto wiki-storybook-item--padding">
|
|
106
|
+
<div>Selected: {{ selectedValue }}</div>
|
|
107
|
+
<div>Step: {{ step }}</div>
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
`
|
|
111
|
+
},
|
|
40
112
|
{
|
|
41
113
|
id: 'MenuAjax',
|
|
42
114
|
name: {
|
|
@@ -62,26 +134,133 @@ export const wikiDescriptionsMenu: StorybookComponentsDescriptionItem = {
|
|
|
62
134
|
</template>
|
|
63
135
|
</DesignComponent>
|
|
64
136
|
`
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
id: 'MenuVModel',
|
|
140
|
+
name: {
|
|
141
|
+
en: 'Two-way binding (v-model)',
|
|
142
|
+
ru: 'Двусторонняя привязка (v-model)'
|
|
143
|
+
},
|
|
144
|
+
setup: `
|
|
145
|
+
return {
|
|
146
|
+
selectedValue: ref('settings'),
|
|
147
|
+
menuItems: ref([
|
|
148
|
+
{label: 'Dashboard', value: 'dashboard', icon: 'dashboard'},
|
|
149
|
+
{label: 'Users', value: 'users', icon: 'people'},
|
|
150
|
+
{label: 'Settings', value: 'settings', icon: 'settings'},
|
|
151
|
+
{label: 'Reports', value: 'reports', icon: 'assessment'},
|
|
152
|
+
{label: 'Help', value: 'help', icon: 'help'}
|
|
153
|
+
])
|
|
154
|
+
}
|
|
155
|
+
`,
|
|
156
|
+
template: `
|
|
157
|
+
<div class="wiki-storybook-flex-column">
|
|
158
|
+
<div class="wiki-storybook-flex">
|
|
159
|
+
<button class="wiki-storybook-button" @click="selectedValue = 'dashboard'">Select Dashboard</button>
|
|
160
|
+
<button class="wiki-storybook-button" @click="selectedValue = 'reports'">Select Reports</button>
|
|
161
|
+
<button class="wiki-storybook-button" @click="selectedValue = ''">Clear</button>
|
|
162
|
+
</div>
|
|
163
|
+
<div class="wiki-storybook-flex">
|
|
164
|
+
<DesignComponent
|
|
165
|
+
v-model:selected="selectedValue"
|
|
166
|
+
:list="menuItems"
|
|
167
|
+
is-selected-by-value
|
|
168
|
+
>
|
|
169
|
+
<template #control="{binds}">
|
|
170
|
+
<button class="wiki-storybook-button" v-bind="binds">
|
|
171
|
+
Open Menu
|
|
172
|
+
</button>
|
|
173
|
+
</template>
|
|
174
|
+
</DesignComponent>
|
|
175
|
+
</div>
|
|
176
|
+
<div>Selected value: {{ selectedValue }}</div>
|
|
177
|
+
</div>
|
|
178
|
+
`
|
|
65
179
|
}
|
|
66
180
|
],
|
|
67
181
|
documentation: {
|
|
68
182
|
body: `
|
|
69
183
|
<StorybookDescriptions componentName={'Menu'} type={'menu'}/>
|
|
70
184
|
|
|
185
|
+
<StorybookDescriptions componentName={'Menu'} type={'navigation'}/>
|
|
186
|
+
<Canvas of={Component.MenuNavigation}/>
|
|
187
|
+
|
|
71
188
|
<StorybookDescriptions componentName={'Menu'} type={'ajax'}/>
|
|
72
189
|
<Canvas of={Component.MenuAjax}/>
|
|
190
|
+
|
|
191
|
+
<StorybookDescriptions componentName={'Value'} type={'v-model'}/>
|
|
192
|
+
<Canvas of={Component.MenuVModel}/>
|
|
73
193
|
`,
|
|
74
194
|
events: `
|
|
75
195
|
<StorybookDescriptions componentName={'Event'} type={'click'}/>
|
|
76
196
|
<StorybookDescriptions componentName={'Event'} type={'bars'}/>
|
|
197
|
+
<StorybookDescriptions componentName={'Menu'} type={'event.updateValue'}/>
|
|
77
198
|
<StorybookDescriptions componentName={'Window'} type={'event.window'}/>
|
|
78
199
|
`,
|
|
79
200
|
expose: `
|
|
80
201
|
<StorybookDescriptions componentName={'Expose'} type={'selected'}/>
|
|
202
|
+
<StorybookDescriptions componentName={'Menu'} type={'expose.navigation'}/>
|
|
81
203
|
`,
|
|
82
204
|
slots: `
|
|
83
205
|
<StorybookDescriptions componentName={'List'} type={'slot.html'}/>
|
|
206
|
+
<StorybookDescriptions componentName={'Menu'} type={'slotsControl'}/>
|
|
84
207
|
<StorybookDescriptions componentName={'Menu'} type={'slots'}/>
|
|
85
208
|
`
|
|
209
|
+
},
|
|
210
|
+
ai: {
|
|
211
|
+
render: `
|
|
212
|
+
<div :class="classDemo.item">
|
|
213
|
+
<Menu embedded :window-attrs="{open: true}" v-bind="args">
|
|
214
|
+
<template #control="{ binds }">
|
|
215
|
+
<button class="wiki-storybook-button" v-bind="binds">
|
|
216
|
+
Open Menu
|
|
217
|
+
</button>
|
|
218
|
+
</template>
|
|
219
|
+
</Menu>
|
|
220
|
+
</div>
|
|
221
|
+
`,
|
|
222
|
+
description: `
|
|
223
|
+
Menu is a comprehensive dropdown component used for navigation, actions, and selection.
|
|
224
|
+
It combines a trigger (Control), a popup container (Window), and a structured list (List).
|
|
225
|
+
|
|
226
|
+
**Key Features:**
|
|
227
|
+
1. **Structure:**
|
|
228
|
+
- **Control Slot (\`#control\`):** The trigger element (e.g., Button, Avatar). Receives \`binds\` (click/keydown handlers) which **must** be applied.
|
|
229
|
+
- **Popup:** Opens a floating window positioned relative to the trigger.
|
|
230
|
+
- **Content:** Renders a list of items defined in the \`list\` prop.
|
|
231
|
+
|
|
232
|
+
2. **Data Model (\`list\` prop):**
|
|
233
|
+
- Array of objects: \`{ label, value, icon, disabled, to, ... }\`.
|
|
234
|
+
- Supports special types: \`line\` (separator), \`group\` (headers), \`menu\` (nested submenus).
|
|
235
|
+
|
|
236
|
+
3. **Interaction:**
|
|
237
|
+
- **Selection:** Tracks selected values via \`v-model:selected\`.
|
|
238
|
+
- **Navigation:** Supports keyboard navigation (Arrows, Enter, Esc).
|
|
239
|
+
- **Async:** Can load data dynamically using the \`ajax\` prop.
|
|
240
|
+
|
|
241
|
+
**When to use:**
|
|
242
|
+
- **Dropdown Menus:** For user profile menus, settings, or navigation.
|
|
243
|
+
- **Context Menus:** For right-click actions.
|
|
244
|
+
- **Select-like UI:** When a standard select is not enough (needs icons, groups, custom rendering).
|
|
245
|
+
|
|
246
|
+
**Usage Examples:**
|
|
247
|
+
|
|
248
|
+
- **Basic Menu:**
|
|
249
|
+
\`<Menu :list="[{ label: 'Item 1' }, { label: 'Item 2' }]">
|
|
250
|
+
<template #control="{ binds }">
|
|
251
|
+
<button v-bind="binds">Options</button>
|
|
252
|
+
</template>
|
|
253
|
+
</Menu>\`
|
|
254
|
+
|
|
255
|
+
- **With Selection:**
|
|
256
|
+
\`<Menu
|
|
257
|
+
v-model:selected="currentValue"
|
|
258
|
+
:list="options"
|
|
259
|
+
>
|
|
260
|
+
<template #control="{ binds }">
|
|
261
|
+
<button v-bind="binds">Select: {{ currentValue }}</button>
|
|
262
|
+
</template>
|
|
263
|
+
</Menu>\`
|
|
264
|
+
`
|
|
86
265
|
}
|
|
87
266
|
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import type { StorybookComponentsDescriptionItem } from '../../types/storybookTypes'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Descriptions for Modal component properties
|
|
5
|
+
*
|
|
6
|
+
* Описания свойств компонента Modal
|
|
7
|
+
*/
|
|
8
|
+
export const wikiDescriptionsModal: StorybookComponentsDescriptionItem = {
|
|
9
|
+
name: 'Modal',
|
|
10
|
+
description: {
|
|
11
|
+
en: 'Simplified wrapper over a Window component for creating centered modal dialogs',
|
|
12
|
+
ru: 'Упрощенная обертка над компонентом Window для создания центрированных модальных диалогов'
|
|
13
|
+
},
|
|
14
|
+
possibilities: {
|
|
15
|
+
en: [
|
|
16
|
+
'pre-configured modal window with centered positioning',
|
|
17
|
+
'overlay backdrop with background blocking',
|
|
18
|
+
'close on the ESC key and click outside',
|
|
19
|
+
'integration with scrollbar for long content',
|
|
20
|
+
'slots for title, content and footer customization',
|
|
21
|
+
'lifecycle events (preparation, opening, closing)',
|
|
22
|
+
'close a button with a customizable icon',
|
|
23
|
+
'programmatic control via a v-model:open',
|
|
24
|
+
'focus management and keyboard navigation',
|
|
25
|
+
'responsive design with mobile optimization'
|
|
26
|
+
],
|
|
27
|
+
ru: [
|
|
28
|
+
'предварительно настроенное модальное окно с центрированием',
|
|
29
|
+
'оверлей с блокировкой фона',
|
|
30
|
+
'закрытие по ESC и клику вне области',
|
|
31
|
+
'интеграция со скроллбаром для длинного контента',
|
|
32
|
+
'слоты для настройки заголовка, содержимого и подвала',
|
|
33
|
+
'события жизненного цикла (preparation, opening, closing)',
|
|
34
|
+
'кнопка закрытия с настраиваемой иконкой',
|
|
35
|
+
'программное управление через v-model:open',
|
|
36
|
+
'управление фокусом и клавиатурная навигация',
|
|
37
|
+
'адаптивный дизайн с оптимизацией для мобильных'
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
import: [
|
|
41
|
+
'import { ref } from \'vue\''
|
|
42
|
+
],
|
|
43
|
+
render: `
|
|
44
|
+
<DesignComponent v-bind="args">
|
|
45
|
+
<template #control="{binds}">
|
|
46
|
+
<button class="wiki-storybook-button" v-bind="binds">Open Modal</button>
|
|
47
|
+
</template>
|
|
48
|
+
|
|
49
|
+
<template #default>
|
|
50
|
+
<h4>Modal Component Overview</h4>
|
|
51
|
+
<p>Modal is a specialized wrapper around the Window component with preset adaptive mode set to 'modal'. It provides a simplified API for creating centered modal dialogs without needing to configure positioning and adaptive behavior manually.</p>
|
|
52
|
+
|
|
53
|
+
<p>The component automatically handles common modal dialog scenarios including confirmations, forms, alerts, and content previews. It manages focus, scroll behavior, and keyboard navigation to ensure accessibility and optimal user experience across different devices and screen sizes.</p>
|
|
54
|
+
|
|
55
|
+
<h4>Best Practices</h4>
|
|
56
|
+
<p>Use modals sparingly and only for content that genuinely requires immediate attention. Ensure modals have clear actions (confirm/cancel), provide easy ways to dismiss them, and avoid nesting modals within modals. The component should be large enough to display content comfortably but not so large that it overwhelms the screen.</p>
|
|
57
|
+
|
|
58
|
+
<h4>Relationship with Window</h4>
|
|
59
|
+
<p>Modal is essentially Window with <code>adaptive="modal"</code> preset, simplifying the usage for standard dialog scenarios. All Window properties, slots, and events are available in a Modal component.</p>
|
|
60
|
+
</template>
|
|
61
|
+
</DesignComponent>
|
|
62
|
+
`,
|
|
63
|
+
stories: [
|
|
64
|
+
{
|
|
65
|
+
id: 'ModalVModel',
|
|
66
|
+
name: {
|
|
67
|
+
en: 'Two-way binding (v-model)',
|
|
68
|
+
ru: 'Двусторонняя привязка (v-model)'
|
|
69
|
+
},
|
|
70
|
+
setup: `
|
|
71
|
+
return {
|
|
72
|
+
open: ref(false)
|
|
73
|
+
}
|
|
74
|
+
`,
|
|
75
|
+
template: `
|
|
76
|
+
<button class="wiki-storybook-button" @click="open = true">Open via v-model ({{ open }})</button>
|
|
77
|
+
|
|
78
|
+
<DesignComponent v-model:open="open">
|
|
79
|
+
<div class="wiki-storybook-item--padding">Your content here</div>
|
|
80
|
+
</DesignComponent>
|
|
81
|
+
`
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: 'ModalAllSlots',
|
|
85
|
+
name: {
|
|
86
|
+
en: 'All slots demonstration',
|
|
87
|
+
ru: 'Демонстрация всех слотов'
|
|
88
|
+
},
|
|
89
|
+
template: `
|
|
90
|
+
<DesignComponent>
|
|
91
|
+
<template #control="{binds}">
|
|
92
|
+
<button class="wiki-storybook-button" v-bind="binds">Open Modal with All Slots</button>
|
|
93
|
+
</template>
|
|
94
|
+
|
|
95
|
+
<template #title>
|
|
96
|
+
Modal Title Slot
|
|
97
|
+
</template>
|
|
98
|
+
|
|
99
|
+
<template #default>
|
|
100
|
+
<h4>Default Slot Content</h4>
|
|
101
|
+
<p>This is the main content area of the modal. You can place any content here, including text, forms, images, or other components.</p>
|
|
102
|
+
|
|
103
|
+
<div class="wiki-storybook-info">
|
|
104
|
+
<strong>Available slots:</strong>
|
|
105
|
+
<ul>
|
|
106
|
+
<li><code>#control</code> - trigger button or element</li>
|
|
107
|
+
<li><code>#title</code> - modal header/title area</li>
|
|
108
|
+
<li><code>#default</code> - main content area</li>
|
|
109
|
+
<li><code>#footer</code> - footer with actions</li>
|
|
110
|
+
</ul>
|
|
111
|
+
</div>
|
|
112
|
+
|
|
113
|
+
<p>Each slot receives control props that allow you to interact with the modal programmatically, such as closing it or accessing window classes.</p>
|
|
114
|
+
</template>
|
|
115
|
+
|
|
116
|
+
<template #footer="{classesWindow}">
|
|
117
|
+
<button :class="classesWindow.close" class="wiki-storybook-button wiki-storybook-button--text">Cancel</button>
|
|
118
|
+
<button class="wiki-storybook-button">Confirm</button>
|
|
119
|
+
</template>
|
|
120
|
+
</DesignComponent>
|
|
121
|
+
`
|
|
122
|
+
}
|
|
123
|
+
],
|
|
124
|
+
documentation: {
|
|
125
|
+
body: `
|
|
126
|
+
<StorybookDescriptions componentName={'Modal'} type={'modal'}/>
|
|
127
|
+
<StorybookDescriptions componentName={'Window'} type={'v-model'}/>
|
|
128
|
+
<Canvas of={Component.ModalVModel}/>
|
|
129
|
+
|
|
130
|
+
<StorybookDescriptions componentName={'Modal'} type={'differences'}/>
|
|
131
|
+
`,
|
|
132
|
+
events: `
|
|
133
|
+
<StorybookDescriptions componentName={'Window'} type={'event.window'}/>
|
|
134
|
+
<StorybookDescriptions componentName={'Event'} type={'bars'}/>
|
|
135
|
+
<StorybookDescriptions componentName={'Event'} type={'actions'}/>
|
|
136
|
+
`,
|
|
137
|
+
expose: `
|
|
138
|
+
<StorybookDescriptions componentName={'Window'} type={'expose'}/>
|
|
139
|
+
`,
|
|
140
|
+
slots: `
|
|
141
|
+
<Canvas of={Component.ModalAllSlots}/>
|
|
142
|
+
<StorybookDescriptions componentName={'Window'} type={'slots'}/>
|
|
143
|
+
`
|
|
144
|
+
},
|
|
145
|
+
ai: {
|
|
146
|
+
render: `
|
|
147
|
+
<div :class="classDemo.item">
|
|
148
|
+
<Modal embedded open v-bind="args">
|
|
149
|
+
<template #default>
|
|
150
|
+
<p>This is a modal dialog.</p>
|
|
151
|
+
</template>
|
|
152
|
+
</Modal>
|
|
153
|
+
</div>
|
|
154
|
+
`,
|
|
155
|
+
description: `
|
|
156
|
+
Modal is a simplified wrapper over the Window component for creating centered modal dialogs.
|
|
157
|
+
It is designed to handle standard use cases for pop-ups, alerts, and forms with minimal configuration.
|
|
158
|
+
|
|
159
|
+
**Note:** The \`embedded\` prop is used only for documentation examples to render the component inline. Do not use it in production code.
|
|
160
|
+
|
|
161
|
+
**Key Features:**
|
|
162
|
+
1. **Positioning & Overlay:**
|
|
163
|
+
- Always centered on the screen.
|
|
164
|
+
- Renders a backdrop (overlay) to block background interactions.
|
|
165
|
+
- Preset \`adaptive="modal"\` ensures correct behavior on all devices.
|
|
166
|
+
|
|
167
|
+
2. **State Management:**
|
|
168
|
+
- Controlled via \`v-model:open\` (boolean).
|
|
169
|
+
- Automatically manages focus and scroll locking on the body.
|
|
170
|
+
|
|
171
|
+
3. **Slots Structure:**
|
|
172
|
+
- \`#control\`: The trigger element (e.g., button). Receives \`binds\` (click handlers) to automatically toggle the modal.
|
|
173
|
+
- \`#title\`: The header area of the modal.
|
|
174
|
+
- \`#default\`: The main content body.
|
|
175
|
+
- \`#footer\`: The footer area, typically for action buttons.
|
|
176
|
+
|
|
177
|
+
4. **User Interaction:**
|
|
178
|
+
- Closes on ESC key press.
|
|
179
|
+
- Closes on clicking outside the modal (backdrop).
|
|
180
|
+
- Supports a close button in the header.
|
|
181
|
+
|
|
182
|
+
**Usage Examples:**
|
|
183
|
+
|
|
184
|
+
- **With Trigger Button:**
|
|
185
|
+
\`<Modal>
|
|
186
|
+
<template #control="{ binds }">
|
|
187
|
+
<button v-bind="binds">Open Modal</button>
|
|
188
|
+
</template>
|
|
189
|
+
<template #default>
|
|
190
|
+
<p>Are you sure?</p>
|
|
191
|
+
</template>
|
|
192
|
+
</Modal>\`
|
|
193
|
+
|
|
194
|
+
- **Programmatic Control:**
|
|
195
|
+
\`<Modal v-model:open="showModal">
|
|
196
|
+
<p>Content...</p>
|
|
197
|
+
</Modal>\`
|
|
198
|
+
`
|
|
199
|
+
}
|
|
200
|
+
}
|
|
@@ -30,7 +30,7 @@ export const wikiDescriptionsMotionTransform: StorybookComponentsDescriptionItem
|
|
|
30
30
|
]
|
|
31
31
|
},
|
|
32
32
|
render: `
|
|
33
|
-
<DesignComponent
|
|
33
|
+
<DesignComponent v-bind="args">
|
|
34
34
|
<template #head>
|
|
35
35
|
<div class="wiki-storybook-item--padding">
|
|
36
36
|
<h3>MotionTransform Demo</h3>
|
|
@@ -203,14 +203,67 @@ export const wikiDescriptionsMotionTransform: StorybookComponentsDescriptionItem
|
|
|
203
203
|
`,
|
|
204
204
|
expose: `
|
|
205
205
|
<StorybookDescriptions componentName={'MotionTransform'} type={'expose.isShow'}/>
|
|
206
|
-
<StorybookDescriptions componentName={'Window'} type={'expose
|
|
207
|
-
<StorybookDescriptions componentName={'Window'} type={'expose.setOpen'}/>
|
|
208
|
-
<StorybookDescriptions componentName={'Window'} type={'expose.toOpen'}/>
|
|
209
|
-
<StorybookDescriptions componentName={'Window'} type={'expose.toClose'}/>
|
|
210
|
-
<StorybookDescriptions componentName={'Window'} type={'expose.toggle'}/>
|
|
206
|
+
<StorybookDescriptions componentName={'Window'} type={'expose'}/>
|
|
211
207
|
`,
|
|
212
208
|
slots: `
|
|
213
209
|
<StorybookDescriptions componentName={'MotionTransform'} type={'slots'}/>
|
|
214
210
|
`
|
|
211
|
+
},
|
|
212
|
+
ai: {
|
|
213
|
+
render: `
|
|
214
|
+
<div :class="classDemo.item">
|
|
215
|
+
<MotionTransform :auto-close="false" v-bind="args">
|
|
216
|
+
<template #head>
|
|
217
|
+
<button class="wiki-storybook-button">Toggle Content</button>
|
|
218
|
+
</template>
|
|
219
|
+
<template #body>
|
|
220
|
+
<div class="wiki-storybook-item--padding">
|
|
221
|
+
<p>Expandable content goes here.</p>
|
|
222
|
+
</div>
|
|
223
|
+
</template>
|
|
224
|
+
</MotionTransform>
|
|
225
|
+
</div>
|
|
226
|
+
`,
|
|
227
|
+
description: `
|
|
228
|
+
MotionTransform is a core utility component for creating expanding, collapsing, or floating UI elements with smooth animations.
|
|
229
|
+
It serves as the base for Dropdowns, Accordions, and custom interactive panels.
|
|
230
|
+
|
|
231
|
+
**Key Features:**
|
|
232
|
+
1. **Structure:**
|
|
233
|
+
- \`#head\`: The trigger area (e.g., a button or title).
|
|
234
|
+
- \`#body\`: The content area that animates in/out.
|
|
235
|
+
|
|
236
|
+
2. **Animation Logic:**
|
|
237
|
+
- Automatically handles height calculations for smooth CSS transitions (expand/collapse).
|
|
238
|
+
- \`animationHeadPosition\`: Controls the visual flow (e.g., \`top\` for standard dropdowns, \`toBottom\` for specific motion effects).
|
|
239
|
+
|
|
240
|
+
3. **Positioning & Teleport:**
|
|
241
|
+
- **Inline (Default):** Content expands within the flow (Accordion style).
|
|
242
|
+
- **Teleported:** With \`teleport\`, content moves to the \`<body>\` tag, useful for floating menus/popups that need to overlay other content.
|
|
243
|
+
|
|
244
|
+
4. **Interaction:**
|
|
245
|
+
- \`clickOpen\`: Toggles state when clicking the head.
|
|
246
|
+
- \`autoClose\`: Closes when clicking outside the component.
|
|
247
|
+
- \`ignore\`: Selectors to exclude from the "click outside" check.
|
|
248
|
+
|
|
249
|
+
**When to use:**
|
|
250
|
+
- **Accordion/Collapse:** When clicking a header should push content down.
|
|
251
|
+
- **Dropdown/Menu:** When clicking a button should show a floating list (use with \`teleport\`).
|
|
252
|
+
- **Custom Toggles:** Any UI pattern requiring show/hide transitions.
|
|
253
|
+
|
|
254
|
+
**Usage Examples:**
|
|
255
|
+
|
|
256
|
+
- **Accordion:**
|
|
257
|
+
\`<MotionTransform click-open>
|
|
258
|
+
<template #head>Title</template>
|
|
259
|
+
<template #body>Content</template>
|
|
260
|
+
</MotionTransform>\`
|
|
261
|
+
|
|
262
|
+
- **Floating Menu:**
|
|
263
|
+
\`<MotionTransform teleport auto-close>
|
|
264
|
+
<template #head><button>Options</button></template>
|
|
265
|
+
<template #body><menu>...</menu></template>
|
|
266
|
+
</MotionTransform>\`
|
|
267
|
+
`
|
|
215
268
|
}
|
|
216
269
|
}
|