@retailcrm/embed-ui-v1-components 0.9.19 → 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 +9 -1
- package/README.md +5 -2
- 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 +231 -46
- package/bin/postinstall.mjs +3 -2
- package/dist/host.cjs +1223 -501
- package/dist/host.css +637 -10
- package/dist/host.d.ts +152 -78
- package/dist/host.js +1224 -502
- package/dist/remote.cjs +1358 -298
- package/dist/remote.d.ts +805 -67
- package/dist/remote.js +1360 -300
- package/docs/AI.md +99 -17
- package/docs/COMPONENTS.md +58 -59
- package/docs/FORMAT.md +10 -10
- package/docs/PROFILES.md +39 -22
- package/docs/README.md +11 -5
- package/docs/profiles/components/UiAddButton.yml +134 -0
- package/docs/profiles/components/UiAlert.yml +105 -0
- package/docs/profiles/components/UiAvatar.yml +88 -0
- package/docs/profiles/{UiAvatarList.yml → components/UiAvatarList.yml} +26 -0
- package/docs/profiles/{UiButton.yml → components/UiButton.yml} +14 -8
- package/docs/profiles/components/UiCalendar.yml +190 -0
- package/docs/profiles/components/UiCheckbox.yml +111 -0
- package/docs/profiles/components/UiCollapse.yml +129 -0
- package/docs/profiles/components/UiCollapseBox.yml +143 -0
- package/docs/profiles/{UiCollapseGroup.yml → components/UiCollapseGroup.yml} +24 -0
- package/docs/profiles/components/UiCopyButton.yml +104 -0
- package/docs/profiles/components/UiDate.yml +84 -0
- package/docs/profiles/components/UiDatePicker.yml +138 -0
- package/docs/profiles/components/UiError.yml +123 -0
- package/docs/profiles/{UiField.yml → components/UiField.yml} +46 -15
- package/docs/profiles/components/UiInfobox.yml +130 -0
- package/docs/profiles/components/UiLink.yml +111 -0
- package/docs/profiles/components/UiLoader.yml +71 -0
- package/docs/profiles/components/UiMenuItem.yml +93 -0
- package/docs/profiles/{UiMenuItemGroup.yml → components/UiMenuItemGroup.yml} +25 -0
- package/docs/profiles/components/UiModalSidebar.yml +156 -0
- package/docs/profiles/components/UiModalWindow.yml +181 -0
- package/docs/profiles/{UiModalWindowSurface.yml → components/UiModalWindowSurface.yml} +30 -0
- package/docs/profiles/components/UiNumberStepper.yml +100 -0
- package/docs/profiles/{UiPageHeader.yml → components/UiPageHeader.yml} +39 -23
- package/docs/profiles/components/UiPopconfirm.yml +164 -0
- package/docs/profiles/{UiPopper.yml → components/UiPopper.yml} +66 -13
- package/docs/profiles/{UiPopperConnector.yml → components/UiPopperConnector.yml} +5 -25
- package/docs/profiles/{UiPopperTarget.yml → components/UiPopperTarget.yml} +5 -25
- package/docs/profiles/components/UiRadio.yml +91 -0
- package/docs/profiles/{UiRadioSwitch.yml → components/UiRadioSwitch.yml} +55 -32
- package/docs/profiles/{UiRadioSwitchOption.yml → components/UiRadioSwitchOption.yml} +7 -13
- package/docs/profiles/components/UiScrollBox.yml +108 -0
- package/docs/profiles/{UiSelect.yml → components/UiSelect.yml} +133 -44
- package/docs/profiles/components/UiSelectOption.yml +74 -0
- package/docs/profiles/components/UiSelectOptionGroup.yml +66 -0
- package/docs/profiles/components/UiSkeleton.yml +82 -0
- package/docs/profiles/components/UiSlider.yml +161 -0
- package/docs/profiles/components/UiSwitch.yml +123 -0
- package/docs/profiles/components/UiTab.yml +234 -0
- package/docs/profiles/{UiTabGroup.yml → components/UiTabGroup.yml} +0 -30
- package/docs/profiles/components/UiTable.yml +622 -0
- package/docs/profiles/{UiTableBodyCell.yml → components/UiTableBodyCell.yml} +26 -0
- package/docs/profiles/components/UiTableColumn.yml +87 -0
- package/docs/profiles/components/UiTableFooterButton.yml +85 -0
- package/docs/profiles/components/UiTableFooterSection.yml +73 -0
- package/docs/profiles/{UiTableHeadCell.yml → components/UiTableHeadCell.yml} +26 -0
- package/docs/profiles/{UiTableSorter.yml → components/UiTableSorter.yml} +27 -0
- package/docs/profiles/components/UiTag.yml +90 -0
- package/docs/profiles/{UiTextbox.yml → components/UiTextbox.yml} +20 -32
- package/docs/profiles/components/UiTimePicker.yml +144 -0
- package/docs/profiles/{UiToggleButton.yml → components/UiToggleButton.yml} +16 -11
- package/docs/profiles/{UiToggleGroup.yml → components/UiToggleGroup.yml} +25 -13
- package/docs/profiles/{UiToggleGroupOption.yml → components/UiToggleGroupOption.yml} +7 -11
- package/docs/profiles/components/UiToolbarButton.yml +87 -0
- package/docs/profiles/components/UiToolbarLink.yml +80 -0
- package/docs/profiles/components/UiTooltip.yml +97 -0
- package/docs/profiles/components/UiTransition.yml +62 -0
- package/docs/profiles/components/UiYandexMap.yml +104 -0
- 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 +15 -15
- package/docs/profiles/UiAddButton.yml +0 -57
- package/docs/profiles/UiAlert.yml +0 -48
- package/docs/profiles/UiAvatar.yml +0 -48
- package/docs/profiles/UiCalendar.yml +0 -48
- package/docs/profiles/UiCheckbox.yml +0 -53
- package/docs/profiles/UiCollapse.yml +0 -40
- package/docs/profiles/UiCollapseBox.yml +0 -51
- package/docs/profiles/UiCopyButton.yml +0 -52
- package/docs/profiles/UiDate.yml +0 -38
- package/docs/profiles/UiDatePicker.yml +0 -59
- package/docs/profiles/UiError.yml +0 -32
- package/docs/profiles/UiImage.yml +0 -39
- package/docs/profiles/UiInfobox.yml +0 -45
- package/docs/profiles/UiLink.yml +0 -51
- package/docs/profiles/UiLoader.yml +0 -38
- package/docs/profiles/UiMenuItem.yml +0 -57
- package/docs/profiles/UiModalSidebar.yml +0 -46
- package/docs/profiles/UiModalWindow.yml +0 -44
- package/docs/profiles/UiNumberStepper.yml +0 -52
- package/docs/profiles/UiRadio.yml +0 -38
- package/docs/profiles/UiScrollBox.yml +0 -31
- package/docs/profiles/UiSelectOption.yml +0 -44
- package/docs/profiles/UiSelectOptionGroup.yml +0 -38
- package/docs/profiles/UiSkeleton.yml +0 -41
- package/docs/profiles/UiSlider.yml +0 -38
- package/docs/profiles/UiSwitch.yml +0 -37
- package/docs/profiles/UiTab.yml +0 -119
- package/docs/profiles/UiTable.yml +0 -152
- package/docs/profiles/UiTableColumn.yml +0 -50
- package/docs/profiles/UiTableFooterButton.yml +0 -44
- package/docs/profiles/UiTableFooterSection.yml +0 -38
- package/docs/profiles/UiTag.yml +0 -41
- package/docs/profiles/UiTimePicker.yml +0 -46
- package/docs/profiles/UiToolbarButton.yml +0 -37
- package/docs/profiles/UiToolbarLink.yml +0 -32
- package/docs/profiles/UiTooltip.yml +0 -43
- package/docs/profiles/UiTransition.yml +0 -27
- package/docs/profiles/UiYandexMap.yml +0 -29
|
@@ -16,6 +16,31 @@ related_components:
|
|
|
16
16
|
- UiCheckbox
|
|
17
17
|
- UiRadioSwitch
|
|
18
18
|
|
|
19
|
+
examples:
|
|
20
|
+
- title: Weekday selection
|
|
21
|
+
code: |
|
|
22
|
+
<template>
|
|
23
|
+
<UiToggleGroup v-model:model="days" rubber>
|
|
24
|
+
<UiToggleGroupOption label="Mon" value="monday" />
|
|
25
|
+
<UiToggleGroupOption label="Tue" value="tuesday" />
|
|
26
|
+
<UiToggleGroupOption label="Wed" value="wednesday" />
|
|
27
|
+
<UiToggleGroupOption label="Thu" value="thursday" />
|
|
28
|
+
<UiToggleGroupOption label="Fri" value="friday" />
|
|
29
|
+
<UiToggleGroupOption label="Sat" value="saturday" />
|
|
30
|
+
<UiToggleGroupOption label="Sun" value="sunday" />
|
|
31
|
+
</UiToggleGroup>
|
|
32
|
+
</template>
|
|
33
|
+
|
|
34
|
+
<script lang="ts" setup>
|
|
35
|
+
import { ref } from 'vue'
|
|
36
|
+
import {
|
|
37
|
+
UiToggleGroup,
|
|
38
|
+
UiToggleGroupOption,
|
|
39
|
+
} from '@retailcrm/embed-ui-v1-components/remote'
|
|
40
|
+
|
|
41
|
+
const days = ref(['monday', 'wednesday', 'friday'])
|
|
42
|
+
</script>
|
|
43
|
+
|
|
19
44
|
use_when:
|
|
20
45
|
- You need multiple independent selections from a short fixed set.
|
|
21
46
|
- You want checkbox-like semantics with segmented button visuals.
|
|
@@ -187,19 +212,6 @@ composition:
|
|
|
187
212
|
- title: Filter chips with icon
|
|
188
213
|
notes: Use manual option composition or the shared icon slot for compact filters.
|
|
189
214
|
|
|
190
|
-
examples:
|
|
191
|
-
- title: Weekday selection
|
|
192
|
-
goal: Build a segmented multi-select weekday picker.
|
|
193
|
-
code: |
|
|
194
|
-
<UiToggleGroup
|
|
195
|
-
v-model:model="days"
|
|
196
|
-
aria-label="Weekdays"
|
|
197
|
-
rubber
|
|
198
|
-
>
|
|
199
|
-
<UiToggleGroupOption label="Mon" value="monday" />
|
|
200
|
-
<UiToggleGroupOption label="Tue" value="tuesday" />
|
|
201
|
-
<UiToggleGroupOption label="Wed" value="wednesday" />
|
|
202
|
-
</UiToggleGroup>
|
|
203
215
|
|
|
204
216
|
ai_notes:
|
|
205
217
|
do:
|
|
@@ -96,17 +96,6 @@ composition:
|
|
|
96
96
|
- title: Custom label content
|
|
97
97
|
notes: Use label or default slot when the option needs richer inline markup.
|
|
98
98
|
|
|
99
|
-
examples:
|
|
100
|
-
- title: Icon option inside a group
|
|
101
|
-
goal: Define one rich segmented option with icon content.
|
|
102
|
-
code: |
|
|
103
|
-
<UiToggleGroup v-model:model="filters" aria-label="Filters">
|
|
104
|
-
<UiToggleGroupOption label="Files" value="files">
|
|
105
|
-
<template #icon>
|
|
106
|
-
<IconFile />
|
|
107
|
-
</template>
|
|
108
|
-
</UiToggleGroupOption>
|
|
109
|
-
</UiToggleGroup>
|
|
110
99
|
|
|
111
100
|
ai_notes:
|
|
112
101
|
do:
|
|
@@ -114,3 +103,10 @@ ai_notes:
|
|
|
114
103
|
- Prefer label prop for plain text and slots for richer content.
|
|
115
104
|
avoid:
|
|
116
105
|
- Do not use it as a standalone control outside UiToggleGroup.
|
|
106
|
+
|
|
107
|
+
styling:
|
|
108
|
+
notes:
|
|
109
|
+
- Use documented props and slots as the primary styling API.
|
|
110
|
+
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
111
|
+
root_classes:
|
|
112
|
+
- .ui-v1-toggle-button
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
component: UiToolbarButton
|
|
2
|
+
summary: >
|
|
3
|
+
UiToolbarButton is a compact button for toolbar zones. It shares action semantics with buttons
|
|
4
|
+
but is tuned for dense toolbar layouts.
|
|
5
|
+
|
|
6
|
+
public_import:
|
|
7
|
+
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
8
|
+
named:
|
|
9
|
+
- UiToolbarButton
|
|
10
|
+
|
|
11
|
+
examples:
|
|
12
|
+
- title: Toolbar action
|
|
13
|
+
code: |
|
|
14
|
+
<template>
|
|
15
|
+
<UiToolbarButton>
|
|
16
|
+
<IconAdd aria-hidden="true" />
|
|
17
|
+
Create
|
|
18
|
+
</UiToolbarButton>
|
|
19
|
+
</template>
|
|
20
|
+
|
|
21
|
+
<script lang="ts" setup>
|
|
22
|
+
import IconAdd from '@retailcrm/embed-ui-v1-components/assets/sprites/actions/add.svg'
|
|
23
|
+
import { UiToolbarButton } from '@retailcrm/embed-ui-v1-components/remote'
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
use_when:
|
|
27
|
+
- You need a compact button in a toolbar or action strip.
|
|
28
|
+
|
|
29
|
+
avoid_when:
|
|
30
|
+
- You need the full visual weight of UiButton.
|
|
31
|
+
|
|
32
|
+
api:
|
|
33
|
+
emits:
|
|
34
|
+
- name: click
|
|
35
|
+
- name: focus
|
|
36
|
+
- name: blur
|
|
37
|
+
methods:
|
|
38
|
+
- name: click
|
|
39
|
+
- name: focus
|
|
40
|
+
- name: blur
|
|
41
|
+
|
|
42
|
+
rendered_structure:
|
|
43
|
+
descriptive_only: true
|
|
44
|
+
root:
|
|
45
|
+
shape: button.ui-v1-button or a.ui-v1-button via UiButton
|
|
46
|
+
tag: button or a
|
|
47
|
+
notes: The component delegates its actual root element and layout behavior to UiButton.
|
|
48
|
+
|
|
49
|
+
geometry:
|
|
50
|
+
layout: compact toolbar action
|
|
51
|
+
root_display: inline-block
|
|
52
|
+
width_behavior: content-sized by default
|
|
53
|
+
|
|
54
|
+
behavior:
|
|
55
|
+
notes:
|
|
56
|
+
- Delegates button semantics to UiButton.
|
|
57
|
+
- Use for dense repeated toolbar actions, not primary form submission.
|
|
58
|
+
|
|
59
|
+
composition:
|
|
60
|
+
works_well_with:
|
|
61
|
+
- UiToolbarLink
|
|
62
|
+
- UiButton
|
|
63
|
+
patterns:
|
|
64
|
+
- title: Compact action strip
|
|
65
|
+
notes: Use for secondary actions near tables, editors, or filter bars.
|
|
66
|
+
|
|
67
|
+
ai_notes:
|
|
68
|
+
do:
|
|
69
|
+
- Use in toolbar zones where UiButton would be too visually heavy.
|
|
70
|
+
avoid:
|
|
71
|
+
- Do not use for the main page CTA; use UiButton.
|
|
72
|
+
|
|
73
|
+
accessibility:
|
|
74
|
+
notes:
|
|
75
|
+
- Prefer visible text labels for interactive controls.
|
|
76
|
+
- For icon-only or custom visual content, provide an accessible name through the supported label, title, or ARIA attributes exposed by the component.
|
|
77
|
+
- Preserve native keyboard semantics by using the component root instead of recreating the control with arbitrary markup.
|
|
78
|
+
keyboard:
|
|
79
|
+
- Tab moves focus to the control when it is focusable.
|
|
80
|
+
- Enter or Space activates native button-like controls when the host implementation renders a button.
|
|
81
|
+
|
|
82
|
+
styling:
|
|
83
|
+
notes:
|
|
84
|
+
- Use documented props and slots as the primary styling API.
|
|
85
|
+
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
86
|
+
root_classes:
|
|
87
|
+
- .ui-v1-button
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
component: UiToolbarLink
|
|
2
|
+
summary: >
|
|
3
|
+
UiToolbarLink is a compact toolbar-oriented link. It is the link counterpart to UiToolbarButton.
|
|
4
|
+
|
|
5
|
+
public_import:
|
|
6
|
+
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
7
|
+
named:
|
|
8
|
+
- UiToolbarLink
|
|
9
|
+
|
|
10
|
+
examples:
|
|
11
|
+
- title: Toolbar link
|
|
12
|
+
code: |
|
|
13
|
+
<template>
|
|
14
|
+
<UiToolbarLink href="https://example.com">
|
|
15
|
+
Hyperlink
|
|
16
|
+
</UiToolbarLink>
|
|
17
|
+
</template>
|
|
18
|
+
|
|
19
|
+
<script lang="ts" setup>
|
|
20
|
+
import { UiToolbarLink } from '@retailcrm/embed-ui-v1-components/remote'
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
use_when:
|
|
24
|
+
- You need a compact link in a toolbar area.
|
|
25
|
+
|
|
26
|
+
avoid_when:
|
|
27
|
+
- You need a regular inline content link.
|
|
28
|
+
|
|
29
|
+
api:
|
|
30
|
+
emits:
|
|
31
|
+
- name: click
|
|
32
|
+
- name: focus
|
|
33
|
+
- name: blur
|
|
34
|
+
|
|
35
|
+
rendered_structure:
|
|
36
|
+
descriptive_only: true
|
|
37
|
+
root:
|
|
38
|
+
shape: a.ui-v1-link via UiLink
|
|
39
|
+
tag: a
|
|
40
|
+
notes: The component delegates its actual root element and layout behavior to UiLink.
|
|
41
|
+
|
|
42
|
+
geometry:
|
|
43
|
+
layout: compact toolbar link
|
|
44
|
+
root_display: inline-flex
|
|
45
|
+
width_behavior: content-sized by default
|
|
46
|
+
|
|
47
|
+
behavior:
|
|
48
|
+
notes:
|
|
49
|
+
- Delegates link semantics to UiLink.
|
|
50
|
+
- Use only for real navigation or link-shaped actions in dense toolbar areas.
|
|
51
|
+
|
|
52
|
+
composition:
|
|
53
|
+
works_well_with:
|
|
54
|
+
- UiToolbarButton
|
|
55
|
+
- UiLink
|
|
56
|
+
patterns:
|
|
57
|
+
- title: Toolbar navigation
|
|
58
|
+
notes: Use for compact links next to toolbar buttons when the action navigates.
|
|
59
|
+
|
|
60
|
+
ai_notes:
|
|
61
|
+
do:
|
|
62
|
+
- Use in toolbar zones when a compact real link is needed.
|
|
63
|
+
avoid:
|
|
64
|
+
- Do not use for ordinary inline content links; use UiLink.
|
|
65
|
+
|
|
66
|
+
accessibility:
|
|
67
|
+
notes:
|
|
68
|
+
- Prefer visible text labels for interactive controls.
|
|
69
|
+
- For icon-only or custom visual content, provide an accessible name through the supported label, title, or ARIA attributes exposed by the component.
|
|
70
|
+
- Preserve native keyboard semantics by using the component root instead of recreating the control with arbitrary markup.
|
|
71
|
+
keyboard:
|
|
72
|
+
- Tab moves focus to the control when it is focusable.
|
|
73
|
+
- Enter or Space activates native button-like controls when the host implementation renders a button.
|
|
74
|
+
|
|
75
|
+
styling:
|
|
76
|
+
notes:
|
|
77
|
+
- Use documented props and slots as the primary styling API.
|
|
78
|
+
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
79
|
+
root_classes:
|
|
80
|
+
- .ui-v1-link
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
component: UiTooltip
|
|
2
|
+
summary: >
|
|
3
|
+
UiTooltip is the tooltip-specialized floating layer built on top of popper mechanics.
|
|
4
|
+
Use it for compact helper content anchored to one target.
|
|
5
|
+
|
|
6
|
+
public_import:
|
|
7
|
+
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
8
|
+
named:
|
|
9
|
+
- UiTooltip
|
|
10
|
+
|
|
11
|
+
related_components:
|
|
12
|
+
- UiPopper
|
|
13
|
+
- UiPopperConnector
|
|
14
|
+
- UiPopperTarget
|
|
15
|
+
|
|
16
|
+
examples:
|
|
17
|
+
- title: Usage
|
|
18
|
+
code: |
|
|
19
|
+
<template>
|
|
20
|
+
<UiPopperConnector>
|
|
21
|
+
<UiButton disabled>
|
|
22
|
+
Save
|
|
23
|
+
</UiButton>
|
|
24
|
+
|
|
25
|
+
<UiTooltip>
|
|
26
|
+
Complete all required fields before saving
|
|
27
|
+
</UiTooltip>
|
|
28
|
+
</UiPopperConnector>
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
|
+
<script lang="ts" setup>
|
|
32
|
+
import { UiButton, UiPopperConnector, UiTooltip } from '@retailcrm/embed-ui-v1-components/remote'
|
|
33
|
+
</script>
|
|
34
|
+
use_when:
|
|
35
|
+
- You need compact helper text or tooltip content.
|
|
36
|
+
|
|
37
|
+
avoid_when:
|
|
38
|
+
- You need a dropdown or rich popup layout.
|
|
39
|
+
|
|
40
|
+
api:
|
|
41
|
+
key_props:
|
|
42
|
+
- name: visible
|
|
43
|
+
- name: placement
|
|
44
|
+
- name: targetTriggers
|
|
45
|
+
- name: popperTriggers
|
|
46
|
+
|
|
47
|
+
rendered_structure:
|
|
48
|
+
descriptive_only: true
|
|
49
|
+
root:
|
|
50
|
+
shape: div.ui-v1-popper via UiPopper
|
|
51
|
+
tag: div
|
|
52
|
+
notes: The component delegates the actual floating root to UiPopper and renders its content inside the popper body.
|
|
53
|
+
|
|
54
|
+
geometry:
|
|
55
|
+
layout: floating tooltip layer outside normal document flow
|
|
56
|
+
root_display: block
|
|
57
|
+
width_behavior: content-sized by tooltip content
|
|
58
|
+
|
|
59
|
+
ai_notes:
|
|
60
|
+
do:
|
|
61
|
+
- Use UiTooltip for tooltip semantics and UiPopper for lower-level floating behavior.
|
|
62
|
+
- Keep tooltip content short and non-essential.
|
|
63
|
+
avoid:
|
|
64
|
+
- Do not put forms, tables, or multi-step interactions in tooltips.
|
|
65
|
+
|
|
66
|
+
behavior:
|
|
67
|
+
notes:
|
|
68
|
+
- visible can control display explicitly.
|
|
69
|
+
- targetTriggers and popperTriggers define how the tooltip opens and closes.
|
|
70
|
+
- placement controls the preferred floating position.
|
|
71
|
+
|
|
72
|
+
composition:
|
|
73
|
+
works_well_with:
|
|
74
|
+
- UiPopperConnector
|
|
75
|
+
- UiPopperTarget
|
|
76
|
+
- UiButton
|
|
77
|
+
patterns:
|
|
78
|
+
- title: Icon helper
|
|
79
|
+
notes: Pair with an icon-only or compact control when a short explanation is needed.
|
|
80
|
+
- title: Truncated text hint
|
|
81
|
+
notes: Use to reveal full text only when the visible cell or label is intentionally truncated.
|
|
82
|
+
|
|
83
|
+
accessibility:
|
|
84
|
+
notes:
|
|
85
|
+
- Prefer visible text labels for interactive controls.
|
|
86
|
+
- For icon-only or custom visual content, provide an accessible name through the supported label, title, or ARIA attributes exposed by the component.
|
|
87
|
+
- Preserve native keyboard semantics by using the component root instead of recreating the control with arbitrary markup.
|
|
88
|
+
keyboard:
|
|
89
|
+
- Tab moves focus to the control when it is focusable.
|
|
90
|
+
- Enter or Space activates native button-like controls when the host implementation renders a button.
|
|
91
|
+
|
|
92
|
+
styling:
|
|
93
|
+
notes:
|
|
94
|
+
- Use documented props and slots as the primary styling API.
|
|
95
|
+
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
96
|
+
root_classes:
|
|
97
|
+
- .ui-v1-popper
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
component: UiTransition
|
|
2
|
+
summary: >
|
|
3
|
+
UiTransition is a transition wrapper for animated mount, unmount, and visibility flows.
|
|
4
|
+
Use it to express motion without switching to raw transition markup.
|
|
5
|
+
|
|
6
|
+
public_import:
|
|
7
|
+
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
8
|
+
named:
|
|
9
|
+
- UiTransition
|
|
10
|
+
|
|
11
|
+
use_when:
|
|
12
|
+
- You need transition behavior around content.
|
|
13
|
+
|
|
14
|
+
avoid_when:
|
|
15
|
+
- You need static content with no transition behavior.
|
|
16
|
+
|
|
17
|
+
rendered_structure:
|
|
18
|
+
descriptive_only: true
|
|
19
|
+
root:
|
|
20
|
+
shape: no persistent DOM root
|
|
21
|
+
tag: none
|
|
22
|
+
notes: The component is a thin wrapper around the native Vue transition and forwards its slot content.
|
|
23
|
+
|
|
24
|
+
geometry:
|
|
25
|
+
layout: no standalone layout of its own
|
|
26
|
+
root_display: none
|
|
27
|
+
width_behavior: defined entirely by the transitioned child
|
|
28
|
+
|
|
29
|
+
api:
|
|
30
|
+
key_props:
|
|
31
|
+
- name: name
|
|
32
|
+
- name: appear
|
|
33
|
+
|
|
34
|
+
behavior:
|
|
35
|
+
notes:
|
|
36
|
+
- Adds transition semantics around the slotted child.
|
|
37
|
+
- Does not create layout or styling by itself.
|
|
38
|
+
|
|
39
|
+
composition:
|
|
40
|
+
works_well_with:
|
|
41
|
+
- UiAlert
|
|
42
|
+
- UiCollapse
|
|
43
|
+
- UiModalWindow
|
|
44
|
+
patterns:
|
|
45
|
+
- title: Animated presence
|
|
46
|
+
notes: Use when content should mount or unmount with the shared transition behavior.
|
|
47
|
+
|
|
48
|
+
ai_notes:
|
|
49
|
+
do:
|
|
50
|
+
- Use around one logical child whose own layout should remain responsible for size.
|
|
51
|
+
avoid:
|
|
52
|
+
- Do not use as a layout wrapper or visual container.
|
|
53
|
+
|
|
54
|
+
accessibility:
|
|
55
|
+
notes:
|
|
56
|
+
- Keep rendered text concise and meaningful for screen-reader users.
|
|
57
|
+
- Do not use this component as the only carrier of critical state if the state also needs form-level validation or focus management.
|
|
58
|
+
|
|
59
|
+
styling:
|
|
60
|
+
notes:
|
|
61
|
+
- Use documented props and slots as the primary styling API.
|
|
62
|
+
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
component: UiYandexMap
|
|
2
|
+
summary: >
|
|
3
|
+
UiYandexMap is the Yandex map component for map display and related location scenarios.
|
|
4
|
+
Treat it as unstable for now and avoid it unless the screen explicitly requires a map surface.
|
|
5
|
+
|
|
6
|
+
public_import:
|
|
7
|
+
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
8
|
+
named:
|
|
9
|
+
- UiYandexMap
|
|
10
|
+
|
|
11
|
+
examples:
|
|
12
|
+
- title: Address picker map
|
|
13
|
+
code: |
|
|
14
|
+
<template>
|
|
15
|
+
<div style="width: 640px; max-width: 100%;">
|
|
16
|
+
<UiYandexMap
|
|
17
|
+
v-model:address="address"
|
|
18
|
+
api-key="YOUR_YANDEX_MAPS_API_KEY"
|
|
19
|
+
:plugins="plugins"
|
|
20
|
+
/>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<p>Selected address:</p>
|
|
24
|
+
{{ address }}
|
|
25
|
+
</template>
|
|
26
|
+
|
|
27
|
+
<script lang="ts" setup>
|
|
28
|
+
import { ref } from 'vue'
|
|
29
|
+
import { UiYandexMap } from '@retailcrm/embed-ui-v1-components/remote'
|
|
30
|
+
|
|
31
|
+
const address = ref('')
|
|
32
|
+
const plugins = []
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
use_when:
|
|
36
|
+
- You need a Yandex map view.
|
|
37
|
+
- You need location display inside extension UI.
|
|
38
|
+
|
|
39
|
+
avoid_when:
|
|
40
|
+
- You can solve the task without an embedded map and do not want to depend on an unstable component.
|
|
41
|
+
- You only need text address output.
|
|
42
|
+
|
|
43
|
+
rendered_structure:
|
|
44
|
+
descriptive_only: true
|
|
45
|
+
root:
|
|
46
|
+
shape: div.ui-v1-yandex-map
|
|
47
|
+
tag: div
|
|
48
|
+
notes: The root is one map container that hosts the Yandex map instance.
|
|
49
|
+
|
|
50
|
+
geometry:
|
|
51
|
+
layout: block-like map container
|
|
52
|
+
root_display: flex
|
|
53
|
+
width_behavior: stretches to container width by default
|
|
54
|
+
|
|
55
|
+
api:
|
|
56
|
+
key_props:
|
|
57
|
+
- name: apiKey
|
|
58
|
+
notes: Required Yandex Maps API key.
|
|
59
|
+
- name: address
|
|
60
|
+
notes: Address string used by the map and update channel.
|
|
61
|
+
- name: plugins
|
|
62
|
+
notes: Optional map plugins such as locator integration.
|
|
63
|
+
emits:
|
|
64
|
+
- name: update:address
|
|
65
|
+
- name: change
|
|
66
|
+
|
|
67
|
+
behavior:
|
|
68
|
+
notes:
|
|
69
|
+
- Depends on Yandex map runtime availability.
|
|
70
|
+
- Should be treated as a specialized surface, not a generic layout block.
|
|
71
|
+
- The current public API is address-oriented rather than marker-list oriented.
|
|
72
|
+
|
|
73
|
+
composition:
|
|
74
|
+
works_well_with:
|
|
75
|
+
- UiLoader
|
|
76
|
+
- UiAlert
|
|
77
|
+
patterns:
|
|
78
|
+
- title: Location display
|
|
79
|
+
notes: Use only when map interaction or spatial context is essential.
|
|
80
|
+
- title: Address-only view
|
|
81
|
+
notes: Prefer text address output when a map does not add actionable value.
|
|
82
|
+
|
|
83
|
+
ai_notes:
|
|
84
|
+
do:
|
|
85
|
+
- Use only for explicit map requirements.
|
|
86
|
+
- Provide a non-map fallback or error state when the map runtime can fail.
|
|
87
|
+
avoid:
|
|
88
|
+
- Do not add maps as decorative content.
|
|
89
|
+
|
|
90
|
+
accessibility:
|
|
91
|
+
notes:
|
|
92
|
+
- Prefer visible text labels for interactive controls.
|
|
93
|
+
- For icon-only or custom visual content, provide an accessible name through the supported label, title, or ARIA attributes exposed by the component.
|
|
94
|
+
- Preserve native keyboard semantics by using the component root instead of recreating the control with arbitrary markup.
|
|
95
|
+
keyboard:
|
|
96
|
+
- Tab moves focus to the control when it is focusable.
|
|
97
|
+
- Enter or Space activates native button-like controls when the host implementation renders a button.
|
|
98
|
+
|
|
99
|
+
styling:
|
|
100
|
+
notes:
|
|
101
|
+
- Use documented props and slots as the primary styling API.
|
|
102
|
+
- Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
|
|
103
|
+
root_classes:
|
|
104
|
+
- .ui-v1-yandex-map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
page_profile: CardSettingsPage
|
|
2
|
+
summary: >
|
|
3
|
+
Settings page or entity card pattern for screens made mostly from forms and local actions.
|
|
4
|
+
|
|
5
|
+
use_when:
|
|
6
|
+
- You need to edit an entity.
|
|
7
|
+
- You need a settings form.
|
|
8
|
+
- You need a white content surface with fields and local controls.
|
|
9
|
+
|
|
10
|
+
examples_from_design:
|
|
11
|
+
- tracked event page
|
|
12
|
+
- sending limit settings
|
|
13
|
+
- email template settings
|
|
14
|
+
- trigger page
|
|
15
|
+
|
|
16
|
+
expected_structure:
|
|
17
|
+
- UiPageHeader with a page title.
|
|
18
|
+
- The title can be editable via an inline-edit pattern when the product flow requires it.
|
|
19
|
+
- One or more 48px header buttons on the right.
|
|
20
|
+
- Header actions can be accompanied by text information or status labels.
|
|
21
|
+
- Optional top tabs.
|
|
22
|
+
- Main content sits on a white content surface.
|
|
23
|
+
- Content can include text, buttons, fields, checkboxes, radio groups, switches, and other form controls.
|
|
24
|
+
- A bottom save panel is optional.
|
|
25
|
+
|
|
26
|
+
recommended_components:
|
|
27
|
+
- name: UiPageHeader
|
|
28
|
+
profile: ../components/UiPageHeader.yml
|
|
29
|
+
- name: UiButton
|
|
30
|
+
profile: ../components/UiButton.yml
|
|
31
|
+
- name: UiField
|
|
32
|
+
profile: ../components/UiField.yml
|
|
33
|
+
- name: UiTextbox
|
|
34
|
+
profile: ../components/UiTextbox.yml
|
|
35
|
+
- name: UiSelect
|
|
36
|
+
profile: ../components/UiSelect.yml
|
|
37
|
+
- name: UiCheckbox
|
|
38
|
+
profile: ../components/UiCheckbox.yml
|
|
39
|
+
- name: UiRadio
|
|
40
|
+
profile: ../components/UiRadio.yml
|
|
41
|
+
- name: UiRadioSwitch
|
|
42
|
+
profile: ../components/UiRadioSwitch.yml
|
|
43
|
+
- name: UiSwitch
|
|
44
|
+
profile: ../components/UiSwitch.yml
|
|
45
|
+
- name: UiTabGroup
|
|
46
|
+
profile: ../components/UiTabGroup.yml
|
|
47
|
+
- name: UiTab
|
|
48
|
+
profile: ../components/UiTab.yml
|
|
49
|
+
- name: UiTag
|
|
50
|
+
profile: ../components/UiTag.yml
|
|
51
|
+
|
|
52
|
+
ai_notes:
|
|
53
|
+
do:
|
|
54
|
+
- Keep form controls grouped by task or semantic section.
|
|
55
|
+
- Use UiField around labelled form controls.
|
|
56
|
+
- Use tabs only when they reduce visible complexity without hiding required work.
|
|
57
|
+
avoid:
|
|
58
|
+
- Do not create a decorative landing page for operational settings.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
page_profile: CollapseBlockPage
|
|
2
|
+
summary: >
|
|
3
|
+
Settings page pattern for content split into independent collapsible semantic groups.
|
|
4
|
+
|
|
5
|
+
use_when:
|
|
6
|
+
- You need settings split into semantic groups.
|
|
7
|
+
- You need optional or advanced sections that can collapse independently.
|
|
8
|
+
|
|
9
|
+
examples_from_design:
|
|
10
|
+
- product editing
|
|
11
|
+
- mailing editing
|
|
12
|
+
- Double Opt-In settings
|
|
13
|
+
|
|
14
|
+
expected_structure:
|
|
15
|
+
- Multiple collapsible blocks with their own content and local actions.
|
|
16
|
+
- If the page contains only collapse blocks, the white page surface is not needed.
|
|
17
|
+
- If every collapse block has its own save action, the bottom save panel is not needed.
|
|
18
|
+
- Collapse blocks can contain text, buttons, fields, controls, and small tables.
|
|
19
|
+
|
|
20
|
+
avoid_inside_blocks:
|
|
21
|
+
- complex tables
|
|
22
|
+
- nested collapse blocks
|
|
23
|
+
- two-column content split across separate surfaces
|
|
24
|
+
|
|
25
|
+
recommended_components:
|
|
26
|
+
- name: UiCollapse
|
|
27
|
+
profile: ../components/UiCollapse.yml
|
|
28
|
+
- name: UiCollapseBox
|
|
29
|
+
profile: ../components/UiCollapseBox.yml
|
|
30
|
+
- name: UiCollapseGroup
|
|
31
|
+
profile: ../components/UiCollapseGroup.yml
|
|
32
|
+
- name: UiButton
|
|
33
|
+
profile: ../components/UiButton.yml
|
|
34
|
+
- name: UiField
|
|
35
|
+
profile: ../components/UiField.yml
|
|
36
|
+
- name: UiTable
|
|
37
|
+
profile: ../components/UiTable.yml
|
|
38
|
+
notes: Use only for small, simple tables.
|
|
39
|
+
|
|
40
|
+
ai_notes:
|
|
41
|
+
do:
|
|
42
|
+
- Use collapses for optional or separable sections.
|
|
43
|
+
- Keep required critical actions visible enough for the workflow.
|
|
44
|
+
avoid:
|
|
45
|
+
- Do not nest collapses inside collapses.
|
|
46
|
+
- Do not hide complex tables inside collapse blocks.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
page_profile: EntityListPage
|
|
2
|
+
summary: >
|
|
3
|
+
Separate page pattern for listing entities with filtering, sorting, table data, pagination,
|
|
4
|
+
and a primary create action.
|
|
5
|
+
|
|
6
|
+
use_when:
|
|
7
|
+
- You need a searchable, filterable registry.
|
|
8
|
+
- You need an order list, customer list, mailing list, task list, catalog, journal, or search-result page.
|
|
9
|
+
|
|
10
|
+
examples_from_design:
|
|
11
|
+
- order list
|
|
12
|
+
- customer list
|
|
13
|
+
- mailing list
|
|
14
|
+
- task list
|
|
15
|
+
|
|
16
|
+
expected_structure:
|
|
17
|
+
- UiPageHeader with a page title.
|
|
18
|
+
- One or more 48px page buttons on the right side of the header.
|
|
19
|
+
- If there are multiple header buttons, one should be primary and the rest can be secondary or tertiary.
|
|
20
|
+
- The main primary button usually creates a new entity for the list.
|
|
21
|
+
- Filters above the table, built from controls such as select, textbox, and combobox-like selection components.
|
|
22
|
+
- Filter controls should run in rows of roughly 4-5 fields, then wrap to the next row.
|
|
23
|
+
- Filters can be collapsible.
|
|
24
|
+
- Filter apply action uses a default secondary 36px text button.
|
|
25
|
+
- Filter reset action uses a danger secondary 36px icon button.
|
|
26
|
+
- Entity data is shown in a table.
|
|
27
|
+
- The table may scroll and may support export.
|
|
28
|
+
|
|
29
|
+
recommended_components:
|
|
30
|
+
- name: UiPageHeader
|
|
31
|
+
profile: ../components/UiPageHeader.yml
|
|
32
|
+
- name: UiButton
|
|
33
|
+
profile: ../components/UiButton.yml
|
|
34
|
+
- name: UiField
|
|
35
|
+
profile: ../components/UiField.yml
|
|
36
|
+
- name: UiTextbox
|
|
37
|
+
profile: ../components/UiTextbox.yml
|
|
38
|
+
- name: UiSelect
|
|
39
|
+
profile: ../components/UiSelect.yml
|
|
40
|
+
- name: UiTable
|
|
41
|
+
profile: ../components/UiTable.yml
|
|
42
|
+
- name: UiTableColumn
|
|
43
|
+
profile: ../components/UiTableColumn.yml
|
|
44
|
+
- name: UiTableSorter
|
|
45
|
+
profile: ../components/UiTableSorter.yml
|
|
46
|
+
- name: UiTableFooterSection
|
|
47
|
+
profile: ../components/UiTableFooterSection.yml
|
|
48
|
+
- name: UiTableFooterButton
|
|
49
|
+
profile: ../components/UiTableFooterButton.yml
|
|
50
|
+
|
|
51
|
+
table_footer_rules:
|
|
52
|
+
- Use UiTableFooterSection and UiTableFooterButton for table footer pagination.
|
|
53
|
+
- Do not replace table footer pagination controls with regular UiButton.
|
|
54
|
+
- Use chevron icon assets for arrow controls, not text glyphs.
|
|
55
|
+
- Keep footer styling scoped to a local table root class.
|
|
56
|
+
- Override the internal footer button class together with the local class when changing pagination text, active page, or arrow colours.
|
|
57
|
+
- "Reference Vue and CSS footer pattern: ../components/UiTable.yml"
|
|
58
|
+
|
|
59
|
+
ai_notes:
|
|
60
|
+
do:
|
|
61
|
+
- Keep filters and table controls directly above the table.
|
|
62
|
+
- Persist filters, sorting, page, and page size in query parameters when routing is available.
|
|
63
|
+
- Reset page to 1 when filters or sorting change.
|
|
64
|
+
avoid:
|
|
65
|
+
- Do not hide filters in page header actions.
|
|
66
|
+
- Do not put pagination only in local state when the result set is routable.
|