@retailcrm/embed-ui-v1-components 0.9.21 → 0.9.22-alpha.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/AGENTS.md +3 -3
- package/README.md +3 -4
- package/assets/sprites/actions/add-square-outlined.svg +8 -0
- package/assets/sprites/actions/drag.svg +8 -0
- package/bin/embed-ui-v1-components.mjs +227 -50
- package/bin/postinstall.mjs +2 -1
- package/dist/host.cjs +1204 -488
- package/dist/host.css +629 -0
- package/dist/host.d.ts +100 -20
- package/dist/host.js +1205 -489
- package/dist/remote.cjs +1210 -153
- package/dist/remote.d.ts +786 -36
- package/dist/remote.js +1212 -155
- package/docs/AI.md +19 -20
- package/docs/COMPONENTS.md +58 -59
- package/docs/FORMAT.md +6 -8
- package/docs/PROFILES.md +34 -21
- package/docs/README.md +3 -6
- package/docs/profiles/{UiAddButton.yml → components/UiAddButton.yml} +49 -2
- package/docs/profiles/{UiAlert.yml → components/UiAlert.yml} +32 -2
- package/docs/profiles/{UiAvatar.yml → components/UiAvatar.yml} +17 -3
- package/docs/profiles/{UiAvatarList.yml → components/UiAvatarList.yml} +0 -2
- package/docs/profiles/{UiButton.yml → components/UiButton.yml} +14 -1
- package/docs/profiles/components/UiCalendar.yml +190 -0
- package/docs/profiles/{UiCheckbox.yml → components/UiCheckbox.yml} +28 -2
- package/docs/profiles/{UiCollapse.yml → components/UiCollapse.yml} +57 -2
- package/docs/profiles/{UiCollapseBox.yml → components/UiCollapseBox.yml} +64 -2
- package/docs/profiles/{UiCollapseGroup.yml → components/UiCollapseGroup.yml} +0 -2
- package/docs/profiles/{UiCopyButton.yml → components/UiCopyButton.yml} +19 -2
- package/docs/profiles/{UiDate.yml → components/UiDate.yml} +20 -2
- package/docs/profiles/{UiDatePicker.yml → components/UiDatePicker.yml} +51 -2
- package/docs/profiles/{UiError.yml → components/UiError.yml} +48 -2
- package/docs/profiles/{UiField.yml → components/UiField.yml} +46 -1
- package/docs/profiles/{UiInfobox.yml → components/UiInfobox.yml} +54 -2
- package/docs/profiles/{UiLink.yml → components/UiLink.yml} +22 -2
- package/docs/profiles/{UiLoader.yml → components/UiLoader.yml} +0 -2
- package/docs/profiles/{UiMenuItem.yml → components/UiMenuItem.yml} +0 -2
- package/docs/profiles/{UiMenuItemGroup.yml → components/UiMenuItemGroup.yml} +0 -2
- package/docs/profiles/{UiModalSidebar.yml → components/UiModalSidebar.yml} +80 -2
- package/docs/profiles/components/UiModalWindow.yml +181 -0
- package/docs/profiles/{UiModalWindowSurface.yml → components/UiModalWindowSurface.yml} +0 -2
- package/docs/profiles/{UiNumberStepper.yml → components/UiNumberStepper.yml} +14 -2
- package/docs/profiles/{UiPageHeader.yml → components/UiPageHeader.yml} +39 -1
- package/docs/profiles/components/UiPopconfirm.yml +164 -0
- package/docs/profiles/{UiPopper.yml → components/UiPopper.yml} +66 -1
- package/docs/profiles/{UiPopperConnector.yml → components/UiPopperConnector.yml} +0 -2
- package/docs/profiles/{UiPopperTarget.yml → components/UiPopperTarget.yml} +0 -2
- package/docs/profiles/{UiRadio.yml → components/UiRadio.yml} +15 -2
- package/docs/profiles/{UiRadioSwitch.yml → components/UiRadioSwitch.yml} +55 -1
- package/docs/profiles/{UiRadioSwitchOption.yml → components/UiRadioSwitchOption.yml} +0 -2
- package/docs/profiles/{UiScrollBox.yml → components/UiScrollBox.yml} +45 -2
- package/docs/profiles/{UiSelect.yml → components/UiSelect.yml} +133 -1
- package/docs/profiles/{UiSelectOption.yml → components/UiSelectOption.yml} +0 -2
- package/docs/profiles/{UiSelectOptionGroup.yml → components/UiSelectOptionGroup.yml} +0 -2
- package/docs/profiles/{UiSkeleton.yml → components/UiSkeleton.yml} +11 -2
- package/docs/profiles/{UiSlider.yml → components/UiSlider.yml} +85 -2
- package/docs/profiles/{UiSwitch.yml → components/UiSwitch.yml} +50 -2
- package/docs/profiles/{UiTab.yml → components/UiTab.yml} +126 -2
- package/docs/profiles/{UiTabGroup.yml → components/UiTabGroup.yml} +0 -1
- package/docs/profiles/components/UiTable.yml +622 -0
- package/docs/profiles/{UiTableBodyCell.yml → components/UiTableBodyCell.yml} +0 -2
- package/docs/profiles/{UiTableColumn.yml → components/UiTableColumn.yml} +0 -2
- package/docs/profiles/{UiTableFooterButton.yml → components/UiTableFooterButton.yml} +0 -2
- package/docs/profiles/{UiTableFooterSection.yml → components/UiTableFooterSection.yml} +0 -2
- package/docs/profiles/{UiTableHeadCell.yml → components/UiTableHeadCell.yml} +0 -2
- package/docs/profiles/{UiTableSorter.yml → components/UiTableSorter.yml} +0 -2
- package/docs/profiles/{UiTag.yml → components/UiTag.yml} +13 -2
- package/docs/profiles/{UiTextbox.yml → components/UiTextbox.yml} +20 -1
- package/docs/profiles/{UiTimePicker.yml → components/UiTimePicker.yml} +60 -2
- package/docs/profiles/{UiToggleButton.yml → components/UiToggleButton.yml} +16 -1
- package/docs/profiles/{UiToggleGroup.yml → components/UiToggleGroup.yml} +25 -1
- package/docs/profiles/{UiToggleGroupOption.yml → components/UiToggleGroupOption.yml} +0 -2
- package/docs/profiles/{UiToolbarButton.yml → components/UiToolbarButton.yml} +15 -2
- package/docs/profiles/{UiToolbarLink.yml → components/UiToolbarLink.yml} +13 -2
- package/docs/profiles/{UiTooltip.yml → components/UiTooltip.yml} +18 -2
- package/docs/profiles/{UiTransition.yml → components/UiTransition.yml} +0 -2
- package/docs/profiles/{UiYandexMap.yml → components/UiYandexMap.yml} +24 -2
- package/docs/profiles/pages/CardSettingsPage.yml +58 -0
- package/docs/profiles/pages/CollapseBlockPage.yml +46 -0
- package/docs/profiles/pages/EntityListPage.yml +66 -0
- package/docs/profiles/pages/ModalSidebar.yml +158 -0
- package/docs/profiles/pages/ModalWindow.yml +55 -0
- package/docs/profiles/pages/MultiColumnPage.yml +27 -0
- package/docs/profiles/pages/PageComposition.yml +56 -0
- package/package.json +1 -1
- package/docs/AGENT-DESIGN-GUIDELINES.md +0 -463
- package/docs/assets/page-guidelines/card-settings-page.png +0 -0
- package/docs/assets/page-guidelines/collapse-block-page.png +0 -0
- package/docs/assets/page-guidelines/entity-list-page.png +0 -0
- package/docs/assets/page-guidelines/modal-sidebar.png +0 -0
- package/docs/assets/page-guidelines/modal-window.png +0 -0
- package/docs/assets/page-guidelines/multi-column-page.png +0 -0
- package/docs/profiles/UiCalendar.yml +0 -76
- package/docs/profiles/UiImage.yml +0 -67
- package/docs/profiles/UiModalWindow.yml +0 -86
- package/docs/profiles/UiTable.yml +0 -300
|
@@ -3,7 +3,6 @@ summary: >
|
|
|
3
3
|
UiField is a remote-only form field wrapper. It connects a label and an inner control through
|
|
4
4
|
id and ARIA data, supports a hint tooltip near the label, and exposes an addon zone on the
|
|
5
5
|
right side of the headline.
|
|
6
|
-
usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uifield--docs
|
|
7
6
|
|
|
8
7
|
public_import:
|
|
9
8
|
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
@@ -16,6 +15,52 @@ related_components:
|
|
|
16
15
|
- UiCheckbox
|
|
17
16
|
- UiDatePicker
|
|
18
17
|
|
|
18
|
+
examples:
|
|
19
|
+
- title: Basic usage
|
|
20
|
+
code: |
|
|
21
|
+
<template>
|
|
22
|
+
<UiField id="name-field" label="Name" hint="At least 3 characters">
|
|
23
|
+
<template #default="field">
|
|
24
|
+
<UiTextbox
|
|
25
|
+
:id="field.id"
|
|
26
|
+
:input-attributes="{
|
|
27
|
+
'aria-labelledby': field.ariaLabelledby,
|
|
28
|
+
'aria-invalid': field.ariaInvalid,
|
|
29
|
+
}"
|
|
30
|
+
/>
|
|
31
|
+
</template>
|
|
32
|
+
</UiField>
|
|
33
|
+
</template>
|
|
34
|
+
|
|
35
|
+
<script lang="ts" setup>
|
|
36
|
+
import {
|
|
37
|
+
UiField,
|
|
38
|
+
UiTextbox,
|
|
39
|
+
} from '@retailcrm/embed-ui-v1-components/remote'
|
|
40
|
+
</script>
|
|
41
|
+
- title: Addon next to label
|
|
42
|
+
code: |
|
|
43
|
+
<template>
|
|
44
|
+
<UiField id="name-field" label="Name">
|
|
45
|
+
<template #addon>
|
|
46
|
+
Up to 32 characters
|
|
47
|
+
</template>
|
|
48
|
+
|
|
49
|
+
<template #default="field">
|
|
50
|
+
<UiTextbox
|
|
51
|
+
:id="field.id"
|
|
52
|
+
:input-attributes="{
|
|
53
|
+
'aria-labelledby': field.ariaLabelledby,
|
|
54
|
+
'aria-invalid': field.ariaInvalid,
|
|
55
|
+
}"
|
|
56
|
+
/>
|
|
57
|
+
</template>
|
|
58
|
+
</UiField>
|
|
59
|
+
</template>
|
|
60
|
+
|
|
61
|
+
<script lang="ts" setup>
|
|
62
|
+
import { UiField, UiTextbox } from '@retailcrm/embed-ui-v1-components/remote'
|
|
63
|
+
</script>
|
|
19
64
|
use_when:
|
|
20
65
|
- You need a labeled form control with consistent field semantics.
|
|
21
66
|
- You need to pass id, aria-labelledby, and aria-invalid into an inner control.
|
|
@@ -2,13 +2,66 @@ component: UiInfobox
|
|
|
2
2
|
summary: >
|
|
3
3
|
UiInfobox is a richer explanatory block for inline product, warning, or helper content.
|
|
4
4
|
It can be closable and expandable.
|
|
5
|
-
usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uiinfobox--docs
|
|
6
5
|
|
|
7
6
|
public_import:
|
|
8
7
|
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
9
8
|
named:
|
|
10
9
|
- UiInfobox
|
|
11
10
|
|
|
11
|
+
examples:
|
|
12
|
+
- title: Example
|
|
13
|
+
code: |
|
|
14
|
+
<template>
|
|
15
|
+
<UiInfobox title="Important information">
|
|
16
|
+
Content
|
|
17
|
+
</UiInfobox>
|
|
18
|
+
</template>
|
|
19
|
+
|
|
20
|
+
<script lang="ts" setup>
|
|
21
|
+
import { UiInfobox } from '@retailcrm/embed-ui-v1-components/remote'
|
|
22
|
+
</script>
|
|
23
|
+
- title: Warning
|
|
24
|
+
code: |
|
|
25
|
+
<template>
|
|
26
|
+
<UiInfobox warning title="Warning">
|
|
27
|
+
Content
|
|
28
|
+
</UiInfobox>
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
|
+
<script lang="ts" setup>
|
|
32
|
+
import { UiInfobox } from '@retailcrm/embed-ui-v1-components/remote'
|
|
33
|
+
</script>
|
|
34
|
+
- title: Expandable
|
|
35
|
+
code: |
|
|
36
|
+
<template>
|
|
37
|
+
<UiInfobox
|
|
38
|
+
v-model:expanded="expanded"
|
|
39
|
+
expandable
|
|
40
|
+
/>
|
|
41
|
+
</template>
|
|
42
|
+
|
|
43
|
+
<script lang="ts" setup>
|
|
44
|
+
import { ref } from 'vue'
|
|
45
|
+
import { UiInfobox } from '@retailcrm/embed-ui-v1-components/remote'
|
|
46
|
+
|
|
47
|
+
const expanded = ref(false)
|
|
48
|
+
</script>
|
|
49
|
+
- title: Closable
|
|
50
|
+
code: |
|
|
51
|
+
<template>
|
|
52
|
+
<UiInfobox
|
|
53
|
+
v-model:shown="shown"
|
|
54
|
+
closable
|
|
55
|
+
/>
|
|
56
|
+
|
|
57
|
+
</template>
|
|
58
|
+
|
|
59
|
+
<script lang="ts" setup>
|
|
60
|
+
import { ref } from 'vue'
|
|
61
|
+
import { UiInfobox } from '@retailcrm/embed-ui-v1-components/remote'
|
|
62
|
+
|
|
63
|
+
const shown = ref(true)
|
|
64
|
+
</script>
|
|
12
65
|
use_when:
|
|
13
66
|
- You need a highlighted explanatory block.
|
|
14
67
|
- You need closable or expandable helper content.
|
|
@@ -73,6 +126,5 @@ styling:
|
|
|
73
126
|
notes:
|
|
74
127
|
- Use documented props and slots as the primary styling API.
|
|
75
128
|
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
76
|
-
- Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
|
|
77
129
|
root_classes:
|
|
78
130
|
- .ui-v1-infobox
|
|
@@ -2,13 +2,34 @@ component: UiLink
|
|
|
2
2
|
summary: >
|
|
3
3
|
UiLink is the main text-link component for inline navigation and inline actions that should
|
|
4
4
|
still read as links rather than buttons.
|
|
5
|
-
usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uilink--docs
|
|
6
5
|
|
|
7
6
|
public_import:
|
|
8
7
|
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
9
8
|
named:
|
|
10
9
|
- UiLink
|
|
11
10
|
|
|
11
|
+
examples:
|
|
12
|
+
- title: Example
|
|
13
|
+
code: |
|
|
14
|
+
<template>
|
|
15
|
+
<UiLink v-bind="$attrs">
|
|
16
|
+
<template v-if="text.length">
|
|
17
|
+
{{ text }}
|
|
18
|
+
</template>
|
|
19
|
+
</UiLink>
|
|
20
|
+
</template>
|
|
21
|
+
|
|
22
|
+
<script lang="ts" setup>
|
|
23
|
+
import { UiLink } from '@retailcrm/embed-ui-v1-components/remote'
|
|
24
|
+
|
|
25
|
+
defineProps({
|
|
26
|
+
text: {
|
|
27
|
+
type: String,
|
|
28
|
+
default: '',
|
|
29
|
+
},
|
|
30
|
+
})
|
|
31
|
+
</script>
|
|
32
|
+
|
|
12
33
|
use_when:
|
|
13
34
|
- You need inline navigation or linked text.
|
|
14
35
|
- You need a compact action that should still read as a link.
|
|
@@ -86,6 +107,5 @@ styling:
|
|
|
86
107
|
notes:
|
|
87
108
|
- Use documented props and slots as the primary styling API.
|
|
88
109
|
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
89
|
-
- Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
|
|
90
110
|
root_classes:
|
|
91
111
|
- .ui-v1-link
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
component: UiLoader
|
|
2
2
|
summary: >
|
|
3
3
|
UiLoader displays loading progress or waiting state. It can be used inline or as an overlay.
|
|
4
|
-
usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uiskeleton--docs
|
|
5
4
|
|
|
6
5
|
public_import:
|
|
7
6
|
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
@@ -68,6 +67,5 @@ styling:
|
|
|
68
67
|
notes:
|
|
69
68
|
- Use documented props and slots as the primary styling API.
|
|
70
69
|
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
71
|
-
- Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
|
|
72
70
|
root_classes:
|
|
73
71
|
- .ui-v1-loader
|
|
@@ -2,7 +2,6 @@ component: UiMenuItem
|
|
|
2
2
|
summary: >
|
|
3
3
|
UiMenuItem is a structured menu row component with support for icons, avatar, description,
|
|
4
4
|
counters, and active or danger styling.
|
|
5
|
-
usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/uimenuitem--docs
|
|
6
5
|
|
|
7
6
|
public_import:
|
|
8
7
|
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
@@ -90,6 +89,5 @@ styling:
|
|
|
90
89
|
notes:
|
|
91
90
|
- Use documented props and slots as the primary styling API.
|
|
92
91
|
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
93
|
-
- Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
|
|
94
92
|
root_classes:
|
|
95
93
|
- .ui-v1-menu-item
|
|
@@ -2,7 +2,6 @@ component: UiMenuItemGroup
|
|
|
2
2
|
summary: >
|
|
3
3
|
UiMenuItemGroup groups related menu items and exposes dedicated zones for group label
|
|
4
4
|
and quantity metadata.
|
|
5
|
-
usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/uimenuitem--docs
|
|
6
5
|
|
|
7
6
|
public_import:
|
|
8
7
|
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
@@ -72,6 +71,5 @@ styling:
|
|
|
72
71
|
notes:
|
|
73
72
|
- Use documented props and slots as the primary styling API.
|
|
74
73
|
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
75
|
-
- Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
|
|
76
74
|
root_classes:
|
|
77
75
|
- .ui-v1-menu-item-group
|
|
@@ -2,13 +2,92 @@ component: UiModalSidebar
|
|
|
2
2
|
summary: >
|
|
3
3
|
UiModalSidebar is a side-docked modal surface with open state, direction, size, and
|
|
4
4
|
scrolling control. Use it when the UI should slide from an edge instead of opening as a centered dialog.
|
|
5
|
-
usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uimodalsidebar--docs
|
|
6
5
|
|
|
7
6
|
public_import:
|
|
8
7
|
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
9
8
|
named:
|
|
10
9
|
- UiModalSidebar
|
|
11
10
|
|
|
11
|
+
examples:
|
|
12
|
+
- title: Example
|
|
13
|
+
code: |
|
|
14
|
+
<template>
|
|
15
|
+
<div>
|
|
16
|
+
<UiButton @click="open = true">
|
|
17
|
+
{{ buttonTitle }}
|
|
18
|
+
</UiButton>
|
|
19
|
+
|
|
20
|
+
<UiModalSidebar v-model:opened="open" v-bind="$attrs">
|
|
21
|
+
<template #title>
|
|
22
|
+
Title
|
|
23
|
+
</template>
|
|
24
|
+
|
|
25
|
+
<div style="height: 1500px;">
|
|
26
|
+
<div>Content with a height of 1500px</div>
|
|
27
|
+
|
|
28
|
+
<div v-if="hasNesting" style="margin-top: 16px">
|
|
29
|
+
<UiButton @click="modalSidebarInner = true">
|
|
30
|
+
Nested sidebar
|
|
31
|
+
</UiButton>
|
|
32
|
+
|
|
33
|
+
<UiModalSidebar
|
|
34
|
+
v-model:opened="modalSidebarInner"
|
|
35
|
+
@close-sidebar="modalSidebarInner = false"
|
|
36
|
+
>
|
|
37
|
+
<template #title>
|
|
38
|
+
Header
|
|
39
|
+
</template>
|
|
40
|
+
|
|
41
|
+
<div style="height: 1500px;">
|
|
42
|
+
<div>Some content</div>
|
|
43
|
+
<div>Nested sidebar</div>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<template #footer>
|
|
47
|
+
<UiButton @click="modalSidebarInner = false">
|
|
48
|
+
Close
|
|
49
|
+
</UiButton>
|
|
50
|
+
</template>
|
|
51
|
+
</UiModalSidebar>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<template v-if="footer" #footer>
|
|
56
|
+
<UiButton @click="open = false">
|
|
57
|
+
Close
|
|
58
|
+
</UiButton>
|
|
59
|
+
</template>
|
|
60
|
+
</UiModalSidebar>
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
|
|
64
|
+
<script lang="ts" setup>
|
|
65
|
+
import { ref } from 'vue'
|
|
66
|
+
|
|
67
|
+
import { UiButton } from '@retailcrm/embed-ui-v1-components/remote'
|
|
68
|
+
import { UiModalSidebar } from '@retailcrm/embed-ui-v1-components/remote'
|
|
69
|
+
|
|
70
|
+
defineProps({
|
|
71
|
+
buttonTitle: {
|
|
72
|
+
type: String,
|
|
73
|
+
default: '',
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
hasNesting: {
|
|
77
|
+
type: Boolean,
|
|
78
|
+
default: false,
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
footer: {
|
|
82
|
+
type: Boolean,
|
|
83
|
+
default: false,
|
|
84
|
+
},
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
const open = ref(false)
|
|
88
|
+
const modalSidebarInner = ref(false)
|
|
89
|
+
</script>
|
|
90
|
+
|
|
12
91
|
use_when:
|
|
13
92
|
- You need side-panel modal UI.
|
|
14
93
|
- You need left or right docked modal content.
|
|
@@ -73,6 +152,5 @@ styling:
|
|
|
73
152
|
notes:
|
|
74
153
|
- Use documented props and slots as the primary styling API.
|
|
75
154
|
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
76
|
-
- Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
|
|
77
155
|
root_classes:
|
|
78
156
|
- .ui-v1-modal-sidebar-overlay
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
component: UiModalWindow
|
|
2
|
+
summary: >
|
|
3
|
+
UiModalWindow is the main centered modal container. It supports open state, closability,
|
|
4
|
+
appearance variants, fullscreen and responsive behavior, and dialog roles.
|
|
5
|
+
|
|
6
|
+
public_import:
|
|
7
|
+
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
8
|
+
named:
|
|
9
|
+
- UiModalWindow
|
|
10
|
+
|
|
11
|
+
related_components:
|
|
12
|
+
- UiModalWindowSurface
|
|
13
|
+
|
|
14
|
+
examples:
|
|
15
|
+
- title: Example
|
|
16
|
+
code: |
|
|
17
|
+
<template>
|
|
18
|
+
<div>
|
|
19
|
+
<UiButton appearance="secondary" @click="open = true">
|
|
20
|
+
{{ buttonTitle }}
|
|
21
|
+
</UiButton>
|
|
22
|
+
|
|
23
|
+
<UiModalWindow v-model:opened="open" v-bind="$attrs">
|
|
24
|
+
<template #title>
|
|
25
|
+
Title
|
|
26
|
+
</template>
|
|
27
|
+
|
|
28
|
+
<div :style="$attrs.appearance == 'popup' ? { height: '1500px' } : {}">
|
|
29
|
+
<div>Some content</div>
|
|
30
|
+
|
|
31
|
+
<div v-if="hasNesting" style="margin-top: 16px">
|
|
32
|
+
<UiButton appearance="secondary" @click="openNesting = true">
|
|
33
|
+
Open nested window
|
|
34
|
+
</UiButton>
|
|
35
|
+
|
|
36
|
+
<UiModalWindow
|
|
37
|
+
v-if="!nestedOnSameLevel"
|
|
38
|
+
v-model:opened="openNesting"
|
|
39
|
+
responsive
|
|
40
|
+
>
|
|
41
|
+
<template #title>
|
|
42
|
+
Nested window
|
|
43
|
+
</template>
|
|
44
|
+
|
|
45
|
+
<p>Some content</p>
|
|
46
|
+
|
|
47
|
+
<template #footer>
|
|
48
|
+
<UiButton appearance="secondary" @click="openNesting = false">
|
|
49
|
+
Close
|
|
50
|
+
</UiButton>
|
|
51
|
+
</template>
|
|
52
|
+
</UiModalWindow>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<template #footer>
|
|
57
|
+
<UiButton appearance="secondary" @click="open = false">
|
|
58
|
+
Close
|
|
59
|
+
</UiButton>
|
|
60
|
+
</template>
|
|
61
|
+
</UiModalWindow>
|
|
62
|
+
|
|
63
|
+
<UiModalWindow
|
|
64
|
+
v-if="nestedOnSameLevel"
|
|
65
|
+
v-model:opened="openNesting"
|
|
66
|
+
v-bind="$attrs"
|
|
67
|
+
responsive
|
|
68
|
+
>
|
|
69
|
+
<template #title>
|
|
70
|
+
Nested same-level window
|
|
71
|
+
</template>
|
|
72
|
+
|
|
73
|
+
<p>Some content</p>
|
|
74
|
+
|
|
75
|
+
<template #footer>
|
|
76
|
+
<UiButton appearance="secondary" @click="openNesting = false">
|
|
77
|
+
Close
|
|
78
|
+
</UiButton>
|
|
79
|
+
</template>
|
|
80
|
+
</UiModalWindow>
|
|
81
|
+
</div>
|
|
82
|
+
</template>
|
|
83
|
+
|
|
84
|
+
<script lang="ts" setup>
|
|
85
|
+
import { ref } from 'vue'
|
|
86
|
+
|
|
87
|
+
import { UiButton } from '@retailcrm/embed-ui-v1-components/remote'
|
|
88
|
+
import { UiModalWindow } from '@retailcrm/embed-ui-v1-components/remote'
|
|
89
|
+
|
|
90
|
+
defineProps({
|
|
91
|
+
buttonTitle: {
|
|
92
|
+
type: String,
|
|
93
|
+
default: '',
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
hasNesting: {
|
|
97
|
+
type: Boolean,
|
|
98
|
+
default: false,
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
nestedOnSameLevel: {
|
|
102
|
+
type: Boolean,
|
|
103
|
+
default: false,
|
|
104
|
+
},
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
const open = ref(false)
|
|
108
|
+
const openNesting = ref(false)
|
|
109
|
+
</script>
|
|
110
|
+
|
|
111
|
+
use_when:
|
|
112
|
+
- You need a centered dialog.
|
|
113
|
+
- You need modal interaction with standard dialog semantics.
|
|
114
|
+
|
|
115
|
+
avoid_when:
|
|
116
|
+
- You need a side-docked modal, use UiModalSidebar instead.
|
|
117
|
+
|
|
118
|
+
api:
|
|
119
|
+
key_props:
|
|
120
|
+
- name: opened
|
|
121
|
+
- name: closable
|
|
122
|
+
- name: appearance
|
|
123
|
+
- name: fullscreen
|
|
124
|
+
- name: responsive
|
|
125
|
+
- name: scrolling
|
|
126
|
+
- name: role
|
|
127
|
+
methods:
|
|
128
|
+
- name: open
|
|
129
|
+
- name: close
|
|
130
|
+
|
|
131
|
+
rendered_structure:
|
|
132
|
+
descriptive_only: true
|
|
133
|
+
root:
|
|
134
|
+
shape: div.ui-v1-modal-window via UiModalWindowSurface
|
|
135
|
+
tag: div
|
|
136
|
+
notes: The component delegates the actual teleported modal root to UiModalWindowSurface and renders header, content, and footer inside it.
|
|
137
|
+
|
|
138
|
+
geometry:
|
|
139
|
+
layout: teleported modal layer with centered surface
|
|
140
|
+
root_display: flex
|
|
141
|
+
width_behavior: viewport-covering overlay with content-sized or responsive surface
|
|
142
|
+
|
|
143
|
+
behavior:
|
|
144
|
+
notes:
|
|
145
|
+
- opened controls modal visibility.
|
|
146
|
+
- closable should be false only when the user must complete or acknowledge a blocking flow.
|
|
147
|
+
- fullscreen and responsive affect surface sizing rather than modal semantics.
|
|
148
|
+
|
|
149
|
+
composition:
|
|
150
|
+
works_well_with:
|
|
151
|
+
- UiButton
|
|
152
|
+
- UiField
|
|
153
|
+
- UiModalWindowSurface
|
|
154
|
+
patterns:
|
|
155
|
+
- title: Confirmation dialog
|
|
156
|
+
notes: Keep copy concise and put primary and secondary actions in the footer.
|
|
157
|
+
- title: Focused form
|
|
158
|
+
notes: Use for short forms that should not navigate away from the current page.
|
|
159
|
+
|
|
160
|
+
ai_notes:
|
|
161
|
+
do:
|
|
162
|
+
- Use for focused blocking tasks and confirmations.
|
|
163
|
+
- Provide clear title, body, and footer actions when the modal asks the user to decide.
|
|
164
|
+
avoid:
|
|
165
|
+
- Do not use as a general page layout or for long workflows that deserve a full page or sidebar.
|
|
166
|
+
|
|
167
|
+
accessibility:
|
|
168
|
+
notes:
|
|
169
|
+
- Prefer visible text labels for interactive controls.
|
|
170
|
+
- For icon-only or custom visual content, provide an accessible name through the supported label, title, or ARIA attributes exposed by the component.
|
|
171
|
+
- Preserve native keyboard semantics by using the component root instead of recreating the control with arbitrary markup.
|
|
172
|
+
keyboard:
|
|
173
|
+
- Tab moves focus to the control when it is focusable.
|
|
174
|
+
- Enter or Space activates native button-like controls when the host implementation renders a button.
|
|
175
|
+
|
|
176
|
+
styling:
|
|
177
|
+
notes:
|
|
178
|
+
- Use documented props and slots as the primary styling API.
|
|
179
|
+
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
180
|
+
root_classes:
|
|
181
|
+
- .ui-v1-modal-window
|
|
@@ -2,7 +2,6 @@ component: UiModalWindowSurface
|
|
|
2
2
|
summary: >
|
|
3
3
|
UiModalWindowSurface is the lower-level modal surface API behind modal window flows.
|
|
4
4
|
Use it when you need modal surface behavior with more explicit composition control.
|
|
5
|
-
usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uimodalwindow--docs
|
|
6
5
|
|
|
7
6
|
public_import:
|
|
8
7
|
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
@@ -68,6 +67,5 @@ styling:
|
|
|
68
67
|
notes:
|
|
69
68
|
- Use documented props and slots as the primary styling API.
|
|
70
69
|
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
71
|
-
- Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
|
|
72
70
|
root_classes:
|
|
73
71
|
- .ui-v1-modal-window
|
|
@@ -2,7 +2,6 @@ component: UiNumberStepper
|
|
|
2
2
|
summary: >
|
|
3
3
|
UiNumberStepper is a numeric input with increase and decrease controls. It is built for
|
|
4
4
|
constrained numeric entry where arrowing and step-based changes matter.
|
|
5
|
-
usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uinumberstepper--docs
|
|
6
5
|
|
|
7
6
|
public_import:
|
|
8
7
|
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
@@ -12,6 +11,20 @@ public_import:
|
|
|
12
11
|
related_components:
|
|
13
12
|
- UiTextbox
|
|
14
13
|
|
|
14
|
+
examples:
|
|
15
|
+
- title: Example
|
|
16
|
+
code: |
|
|
17
|
+
<template>
|
|
18
|
+
<UiNumberStepper v-model:value="value" :min="0" :max="100" />
|
|
19
|
+
</template>
|
|
20
|
+
|
|
21
|
+
<script lang="ts" setup>
|
|
22
|
+
import { ref } from 'vue'
|
|
23
|
+
import { UiNumberStepper } from '@retailcrm/embed-ui-v1-components/remote'
|
|
24
|
+
|
|
25
|
+
const value = ref<number | null>(10)
|
|
26
|
+
</script>
|
|
27
|
+
|
|
15
28
|
use_when:
|
|
16
29
|
- You need numeric input with explicit step controls.
|
|
17
30
|
- You need range constraints and nullable numeric state.
|
|
@@ -83,6 +96,5 @@ styling:
|
|
|
83
96
|
notes:
|
|
84
97
|
- Use documented props and slots as the primary styling API.
|
|
85
98
|
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
86
|
-
- Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
|
|
87
99
|
root_classes:
|
|
88
100
|
- .ui-v1-number-stepper
|
|
@@ -3,7 +3,6 @@ summary: >
|
|
|
3
3
|
UiPageHeader is a page or major section header with an optional inline addon next to the title
|
|
4
4
|
and an optional actions area on the right. In display state it renders the title as a semantic h1;
|
|
5
5
|
in edit state it switches to UiTextbox.
|
|
6
|
-
usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uipageheader--docs
|
|
7
6
|
|
|
8
7
|
public_import:
|
|
9
8
|
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
@@ -17,6 +16,45 @@ related_components:
|
|
|
17
16
|
- UiPopperConnector
|
|
18
17
|
- UiPopperTarget
|
|
19
18
|
|
|
19
|
+
examples:
|
|
20
|
+
- title: Example
|
|
21
|
+
code: |
|
|
22
|
+
<template>
|
|
23
|
+
<UiPageHeader
|
|
24
|
+
v-model:value="title"
|
|
25
|
+
:error="title ? '' : 'Title is required'"
|
|
26
|
+
:invalid="!title"
|
|
27
|
+
editable
|
|
28
|
+
placeholder="Enter a title"
|
|
29
|
+
>
|
|
30
|
+
<template #addon>
|
|
31
|
+
<UiLink>
|
|
32
|
+
Collapse filter
|
|
33
|
+
</UiLink>
|
|
34
|
+
</template>
|
|
35
|
+
|
|
36
|
+
<template #actions>
|
|
37
|
+
<UiButton appearance="tertiary">
|
|
38
|
+
Actions
|
|
39
|
+
<IconCaretDown aria-hidden="true" />
|
|
40
|
+
</UiButton>
|
|
41
|
+
</template>
|
|
42
|
+
</UiPageHeader>
|
|
43
|
+
</template>
|
|
44
|
+
|
|
45
|
+
<script lang="ts" setup>
|
|
46
|
+
import { ref } from 'vue'
|
|
47
|
+
|
|
48
|
+
import IconCaretDown from '@retailcrm/embed-ui-v1-components/assets/sprites/arrows/caret-down.svg'
|
|
49
|
+
import {
|
|
50
|
+
UiButton,
|
|
51
|
+
UiLink,
|
|
52
|
+
UiPageHeader,
|
|
53
|
+
} from '@retailcrm/embed-ui-v1-components/remote'
|
|
54
|
+
|
|
55
|
+
const title = ref('Returns')
|
|
56
|
+
</script>
|
|
57
|
+
|
|
20
58
|
use_when:
|
|
21
59
|
- You need the main title of an extension page.
|
|
22
60
|
- You need inline title editing.
|