@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
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
page_profile: ModalSidebar
|
|
2
|
+
summary: >
|
|
3
|
+
Side-docked modal pattern for small contextual forms, local additional information,
|
|
4
|
+
or compact entity cards.
|
|
5
|
+
|
|
6
|
+
use_when:
|
|
7
|
+
- You need a small contextual form.
|
|
8
|
+
- You need local additional information connected to the current page.
|
|
9
|
+
- You need a compact entity card with a limited number of fields and settings.
|
|
10
|
+
|
|
11
|
+
examples_from_design:
|
|
12
|
+
- task card
|
|
13
|
+
- notifications
|
|
14
|
+
- new ticket
|
|
15
|
+
- scenario step editing
|
|
16
|
+
|
|
17
|
+
examples:
|
|
18
|
+
- title: Footer actions
|
|
19
|
+
code: |
|
|
20
|
+
<template>
|
|
21
|
+
<div>
|
|
22
|
+
<UiButton @click="open = true">
|
|
23
|
+
Open sidebar
|
|
24
|
+
</UiButton>
|
|
25
|
+
|
|
26
|
+
<UiModalSidebar v-model:opened="open">
|
|
27
|
+
<template #title>
|
|
28
|
+
Title
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
|
+
<div class="modal-sidebar-example__body">
|
|
32
|
+
Sidebar content
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<template #footer>
|
|
36
|
+
<div class="modal-sidebar-footer">
|
|
37
|
+
<div class="modal-sidebar-footer__main">
|
|
38
|
+
<UiButton @click="save">
|
|
39
|
+
Save
|
|
40
|
+
</UiButton>
|
|
41
|
+
|
|
42
|
+
<UiButton appearance="secondary" @click="open = false">
|
|
43
|
+
Close
|
|
44
|
+
</UiButton>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<UiButton
|
|
48
|
+
aria-label="Delete"
|
|
49
|
+
appearance="tertiary"
|
|
50
|
+
class="modal-sidebar-footer__delete"
|
|
51
|
+
variant="danger"
|
|
52
|
+
@click="deleteItem"
|
|
53
|
+
>
|
|
54
|
+
<IconDelete
|
|
55
|
+
aria-hidden="true"
|
|
56
|
+
class="modal-sidebar-footer__delete-icon"
|
|
57
|
+
/>
|
|
58
|
+
</UiButton>
|
|
59
|
+
</div>
|
|
60
|
+
</template>
|
|
61
|
+
</UiModalSidebar>
|
|
62
|
+
</div>
|
|
63
|
+
</template>
|
|
64
|
+
|
|
65
|
+
<script lang="ts" setup>
|
|
66
|
+
import { ref } from 'vue'
|
|
67
|
+
|
|
68
|
+
import IconDelete from '@retailcrm/embed-ui-v1-components/assets/sprites/ui/delete.svg'
|
|
69
|
+
import {
|
|
70
|
+
UiButton,
|
|
71
|
+
UiModalSidebar,
|
|
72
|
+
} from '@retailcrm/embed-ui-v1-components/remote'
|
|
73
|
+
|
|
74
|
+
const open = ref(false)
|
|
75
|
+
|
|
76
|
+
const save = () => {
|
|
77
|
+
open.value = false
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const deleteItem = () => {
|
|
81
|
+
open.value = false
|
|
82
|
+
}
|
|
83
|
+
</script>
|
|
84
|
+
|
|
85
|
+
<style scoped>
|
|
86
|
+
.modal-sidebar-example__body {
|
|
87
|
+
min-height: 360px;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.modal-sidebar-footer {
|
|
91
|
+
display: flex;
|
|
92
|
+
align-items: center;
|
|
93
|
+
justify-content: space-between;
|
|
94
|
+
width: 100%;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.modal-sidebar-footer__main {
|
|
98
|
+
display: flex;
|
|
99
|
+
align-items: center;
|
|
100
|
+
gap: 16px;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.modal-sidebar-footer__delete.ui-v1-button {
|
|
104
|
+
color: #8a96a6;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.modal-sidebar-footer__delete.ui-v1-button:hover,
|
|
108
|
+
.modal-sidebar-footer__delete.ui-v1-button:focus-visible {
|
|
109
|
+
color: #dd4040;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.modal-sidebar-footer__delete-icon {
|
|
113
|
+
display: block;
|
|
114
|
+
width: 24px;
|
|
115
|
+
height: 24px;
|
|
116
|
+
}
|
|
117
|
+
</style>
|
|
118
|
+
|
|
119
|
+
size_rules:
|
|
120
|
+
- Sidebar can use 720px width.
|
|
121
|
+
- Sidebar can use 416px width.
|
|
122
|
+
|
|
123
|
+
expected_structure:
|
|
124
|
+
- Fixed header at the top with title and close button.
|
|
125
|
+
- Header can also contain extra text, icon, button, or tag.
|
|
126
|
+
- If a sidebar opens from another sidebar, show a back arrow to return to the previous sidebar.
|
|
127
|
+
- Fixed footer at the bottom.
|
|
128
|
+
- Footer usually contains save, cancel or close, and delete actions.
|
|
129
|
+
- Footer can also contain a copy button or auxiliary text.
|
|
130
|
+
- Content can be flexible, but should stay compact.
|
|
131
|
+
- Small tables can be placed in sidebars.
|
|
132
|
+
|
|
133
|
+
recommended_components:
|
|
134
|
+
- name: UiModalSidebar
|
|
135
|
+
profile: ../components/UiModalSidebar.yml
|
|
136
|
+
- name: UiButton
|
|
137
|
+
profile: ../components/UiButton.yml
|
|
138
|
+
- name: UiTag
|
|
139
|
+
profile: ../components/UiTag.yml
|
|
140
|
+
- name: UiField
|
|
141
|
+
profile: ../components/UiField.yml
|
|
142
|
+
- name: UiTextbox
|
|
143
|
+
profile: ../components/UiTextbox.yml
|
|
144
|
+
- name: UiSelect
|
|
145
|
+
profile: ../components/UiSelect.yml
|
|
146
|
+
- name: UiTable
|
|
147
|
+
profile: ../components/UiTable.yml
|
|
148
|
+
notes: Use only for small, simple tables.
|
|
149
|
+
|
|
150
|
+
ai_notes:
|
|
151
|
+
do:
|
|
152
|
+
- Use for inspect, edit, or secondary workflows related to the current list or page.
|
|
153
|
+
- Keep the flow compact.
|
|
154
|
+
avoid:
|
|
155
|
+
- Do not use for bulky or complex interfaces.
|
|
156
|
+
- Do not use collapse blocks inside sidebars.
|
|
157
|
+
- Do not use two-column content on separate surfaces.
|
|
158
|
+
- Use a full page or modal window for bulky flows.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
page_profile: ModalWindow
|
|
2
|
+
summary: >
|
|
3
|
+
Centered modal pattern for large contextual tables or additional local settings when a sidebar is not enough.
|
|
4
|
+
|
|
5
|
+
use_when:
|
|
6
|
+
- You need a large local workflow.
|
|
7
|
+
- You need auxiliary table content.
|
|
8
|
+
- You need dense local settings that do not fit a sidebar.
|
|
9
|
+
|
|
10
|
+
examples_from_design:
|
|
11
|
+
- adding products to an order
|
|
12
|
+
- marking products in an order
|
|
13
|
+
- viewing an email from the communication list
|
|
14
|
+
- merging duplicates in the database cleanliness section
|
|
15
|
+
|
|
16
|
+
size_rules:
|
|
17
|
+
- Modal can use 960px width.
|
|
18
|
+
- Modal can use full screen with side margins.
|
|
19
|
+
|
|
20
|
+
expected_structure:
|
|
21
|
+
- Fixed header at the top with title and close button.
|
|
22
|
+
- Header can include extra text, icon, button, or tag.
|
|
23
|
+
- Fixed footer at the bottom.
|
|
24
|
+
- Footer usually contains save, cancel or close, and delete actions.
|
|
25
|
+
- Footer can also contain a copy button or auxiliary text.
|
|
26
|
+
- Content can be flexible; tables are a common modal use case.
|
|
27
|
+
- If a modal contains a table, the table stretches across the modal width.
|
|
28
|
+
- If a modal is split into sections, use large tabs instead of a regular modal header.
|
|
29
|
+
|
|
30
|
+
spacing_rules:
|
|
31
|
+
- Left, right, and bottom margins are 32px.
|
|
32
|
+
- Top margin is 24px.
|
|
33
|
+
|
|
34
|
+
recommended_components:
|
|
35
|
+
- name: UiModalWindow
|
|
36
|
+
profile: ../components/UiModalWindow.yml
|
|
37
|
+
- name: UiButton
|
|
38
|
+
profile: ../components/UiButton.yml
|
|
39
|
+
- name: UiTabGroup
|
|
40
|
+
profile: ../components/UiTabGroup.yml
|
|
41
|
+
- name: UiTab
|
|
42
|
+
profile: ../components/UiTab.yml
|
|
43
|
+
- name: UiTable
|
|
44
|
+
profile: ../components/UiTable.yml
|
|
45
|
+
- name: UiTableColumn
|
|
46
|
+
profile: ../components/UiTableColumn.yml
|
|
47
|
+
- name: UiTableFooterSection
|
|
48
|
+
profile: ../components/UiTableFooterSection.yml
|
|
49
|
+
|
|
50
|
+
ai_notes:
|
|
51
|
+
do:
|
|
52
|
+
- Use for workflows that need width, table content, or several sections.
|
|
53
|
+
- Use large tabs when modal content is split into sections.
|
|
54
|
+
avoid:
|
|
55
|
+
- Do not use a sidebar when content needs wide tables or complex controls.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
page_profile: MultiColumnPage
|
|
2
|
+
summary: >
|
|
3
|
+
Detail-page pattern for entity cards with several semantic blocks that should be visible in parallel.
|
|
4
|
+
|
|
5
|
+
use_when:
|
|
6
|
+
- You need an entity detail page with multiple related blocks.
|
|
7
|
+
- You need order, customer, or product information visible in parallel.
|
|
8
|
+
|
|
9
|
+
examples_from_design:
|
|
10
|
+
- order page
|
|
11
|
+
- customer page
|
|
12
|
+
- product view page
|
|
13
|
+
|
|
14
|
+
layout_rules:
|
|
15
|
+
- Content is placed on surfaces.
|
|
16
|
+
- The most common surface spans the full screen width.
|
|
17
|
+
- Semantic blocks can be arranged vertically and horizontally.
|
|
18
|
+
- Distance between blocks is 24px.
|
|
19
|
+
- Allowed width distributions are 100%, 50% / 50%, and 30% / 70%.
|
|
20
|
+
|
|
21
|
+
ai_notes:
|
|
22
|
+
do:
|
|
23
|
+
- Keep hierarchy operational and dense.
|
|
24
|
+
- Use parallel blocks only when users need to compare or scan them together.
|
|
25
|
+
avoid:
|
|
26
|
+
- Do not use marketing-style layouts.
|
|
27
|
+
- Do not split content into columns when a single linear form is easier to complete.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
page_profile: PageComposition
|
|
2
|
+
summary: >
|
|
3
|
+
Shared page-composition rules for RetailCRM extension screens built with
|
|
4
|
+
@retailcrm/embed-ui-v1-components.
|
|
5
|
+
|
|
6
|
+
use_after:
|
|
7
|
+
- ../../README.md
|
|
8
|
+
- ../../../AGENTS.md
|
|
9
|
+
- ../../AI.md
|
|
10
|
+
- ../components
|
|
11
|
+
|
|
12
|
+
scope:
|
|
13
|
+
- Page-composition guidance for full pages, modals, sidebars, filters, tables, and settings layouts.
|
|
14
|
+
- Complements component API profiles instead of replacing them.
|
|
15
|
+
|
|
16
|
+
shared_rules:
|
|
17
|
+
- Page title uses the large accent text style, Text large Accent 24.
|
|
18
|
+
- Page-level actions sit to the right of the title.
|
|
19
|
+
- A page can have only one Default Primary button and one Success Primary button.
|
|
20
|
+
- Additional page actions can use secondary or tertiary variants when the task needs them.
|
|
21
|
+
- When a group has multiple buttons, the primary action should represent the main flow.
|
|
22
|
+
- Secondary actions should support or cancel the primary flow.
|
|
23
|
+
- Components inside pages and blocks should be spaced by values divisible by 4px.
|
|
24
|
+
- Common spacing values are 4, 8, 12, 16, 20, 24, 28, and 32px.
|
|
25
|
+
- Content blocks commonly use 32px left, right, and bottom padding and 24px top padding.
|
|
26
|
+
- Prefer public components from @retailcrm/embed-ui-v1-components/remote.
|
|
27
|
+
- Do not invent custom chrome for pages, forms, tables, tabs, buttons, modals, or sidebars when a documented component fits.
|
|
28
|
+
|
|
29
|
+
decision_guide:
|
|
30
|
+
- need: Searchable, filterable registry.
|
|
31
|
+
use: EntityListPage
|
|
32
|
+
profile: ./EntityListPage.yml
|
|
33
|
+
- need: Entity editing or settings form.
|
|
34
|
+
use: CardSettingsPage
|
|
35
|
+
profile: ./CardSettingsPage.yml
|
|
36
|
+
- need: Several semantic blocks visible together.
|
|
37
|
+
use: MultiColumnPage
|
|
38
|
+
profile: ./MultiColumnPage.yml
|
|
39
|
+
- need: Grouped settings with independent sections.
|
|
40
|
+
use: CollapseBlockPage
|
|
41
|
+
profile: ./CollapseBlockPage.yml
|
|
42
|
+
- need: Small contextual form or compact entity card.
|
|
43
|
+
use: ModalSidebar
|
|
44
|
+
profile: ./ModalSidebar.yml
|
|
45
|
+
- need: Large local workflow, auxiliary table, or dense settings flow.
|
|
46
|
+
use: ModalWindow
|
|
47
|
+
profile: ./ModalWindow.yml
|
|
48
|
+
|
|
49
|
+
ai_notes:
|
|
50
|
+
do:
|
|
51
|
+
- Choose ModalSidebar only when the flow is compact.
|
|
52
|
+
- Choose ModalWindow or a full page when content needs wide tables, several sections, or complex controls.
|
|
53
|
+
- Keep operational CRM screens dense, scannable, and work-focused.
|
|
54
|
+
avoid:
|
|
55
|
+
- Do not turn internal CRM work screens into marketing-style layouts.
|
|
56
|
+
- Do not hide filters or primary workflow controls away from the content they affect.
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@retailcrm/embed-ui-v1-components",
|
|
3
3
|
"bin": "./bin/embed-ui-v1-components.mjs",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "0.9.
|
|
5
|
+
"version": "0.9.22-alpha.1",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "RetailDriverLLC <integration@retailcrm.ru>",
|
|
8
8
|
"repository": "git@github.com:retailcrm/embed-ui.git",
|
|
@@ -67,20 +67,20 @@
|
|
|
67
67
|
"@retailcrm/image-preview": "^1.0.2",
|
|
68
68
|
"date-fns": "^4.1.0",
|
|
69
69
|
"lodash.isequal": "^4.5.0",
|
|
70
|
-
"vue3-perfect-scrollbar": "^
|
|
70
|
+
"vue3-perfect-scrollbar": "^2.0.0"
|
|
71
71
|
},
|
|
72
72
|
"devDependencies": {
|
|
73
|
-
"@storybook/addon-a11y": "^10.
|
|
74
|
-
"@storybook/addon-docs": "^10.
|
|
75
|
-
"@storybook/addon-links": "^10.
|
|
76
|
-
"@storybook/addon-themes": "^10.
|
|
77
|
-
"@storybook/builder-vite": "^10.
|
|
78
|
-
"@storybook/vue3": "^10.
|
|
79
|
-
"@storybook/vue3-vite": "^10.
|
|
73
|
+
"@storybook/addon-a11y": "^10.3.5",
|
|
74
|
+
"@storybook/addon-docs": "^10.3.5",
|
|
75
|
+
"@storybook/addon-links": "^10.3.5",
|
|
76
|
+
"@storybook/addon-themes": "^10.3.5",
|
|
77
|
+
"@storybook/builder-vite": "^10.3.5",
|
|
78
|
+
"@storybook/vue3": "^10.3.5",
|
|
79
|
+
"@storybook/vue3-vite": "^10.3.5",
|
|
80
80
|
"@types/lodash.isequal": "^4.5.8",
|
|
81
81
|
"@vitejs/plugin-vue": "^6.0.2",
|
|
82
|
-
"@vitest/browser": "4.
|
|
83
|
-
"@vitest/browser-playwright": "4.
|
|
82
|
+
"@vitest/browser": "4.1.3",
|
|
83
|
+
"@vitest/browser-playwright": "4.1.3",
|
|
84
84
|
"@vue/compiler-sfc": "^3.5.25",
|
|
85
85
|
"@vue/test-utils": "^2.4.6",
|
|
86
86
|
"@yandex/ymaps3-types": "^1.0.19072130",
|
|
@@ -90,15 +90,15 @@
|
|
|
90
90
|
"react": "^18.3.1",
|
|
91
91
|
"react-dom": "^18.3.1",
|
|
92
92
|
"remark-gfm": "^4.0.0",
|
|
93
|
-
"storybook": "^10.
|
|
93
|
+
"storybook": "^10.3.5",
|
|
94
94
|
"tsx": "^4.21.0",
|
|
95
95
|
"typescript": "^5.9.3",
|
|
96
96
|
"uuid": "^13.0.0",
|
|
97
|
-
"vite": "^7.2
|
|
97
|
+
"vite": "^7.3.2",
|
|
98
98
|
"vite-plugin-dts": "^4.5.4",
|
|
99
99
|
"vite-svg-loader": "^5.1.0",
|
|
100
|
-
"vitest": "^4.
|
|
101
|
-
"vue": "^3.5.
|
|
100
|
+
"vitest": "^4.1.3",
|
|
101
|
+
"vue": "^3.5.32",
|
|
102
102
|
"vue-i18n": "10.0.8"
|
|
103
103
|
}
|
|
104
104
|
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
component: UiAddButton
|
|
2
|
-
summary: >
|
|
3
|
-
UiAddButton is an action-first button for add or create flows. It is close to UiButton,
|
|
4
|
-
but tuned for "create another item" scenarios and supports small descriptive additions.
|
|
5
|
-
|
|
6
|
-
public_import:
|
|
7
|
-
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
8
|
-
named:
|
|
9
|
-
- UiAddButton
|
|
10
|
-
|
|
11
|
-
related_components:
|
|
12
|
-
- UiButton
|
|
13
|
-
- UiToolbarButton
|
|
14
|
-
|
|
15
|
-
use_when:
|
|
16
|
-
- You need a dedicated create or add action.
|
|
17
|
-
- You need a compact add CTA with optional extra description.
|
|
18
|
-
|
|
19
|
-
avoid_when:
|
|
20
|
-
- You need a regular text link.
|
|
21
|
-
- You need a generic button without add semantics.
|
|
22
|
-
|
|
23
|
-
api:
|
|
24
|
-
key_props:
|
|
25
|
-
- name: color
|
|
26
|
-
- name: small
|
|
27
|
-
- name: disabled
|
|
28
|
-
- name: height
|
|
29
|
-
slots:
|
|
30
|
-
- name: icon
|
|
31
|
-
zone: leading-icon
|
|
32
|
-
creates: Leading icon area for the add action.
|
|
33
|
-
- name: description
|
|
34
|
-
zone: secondary-copy
|
|
35
|
-
creates: Optional secondary description near the main label.
|
|
36
|
-
|
|
37
|
-
rendered_structure:
|
|
38
|
-
descriptive_only: true
|
|
39
|
-
root:
|
|
40
|
-
shape: button.ui-v1-add-button
|
|
41
|
-
tag: button
|
|
42
|
-
notes: Current root is a single action button with optional icon and description zones.
|
|
43
|
-
|
|
44
|
-
geometry:
|
|
45
|
-
layout: button-like action root
|
|
46
|
-
root_display: flex
|
|
47
|
-
width_behavior: content-sized by default
|
|
48
|
-
|
|
49
|
-
behavior:
|
|
50
|
-
notes:
|
|
51
|
-
- Behaves like a clickable add action with standard button focus and click semantics.
|
|
52
|
-
|
|
53
|
-
ai_notes:
|
|
54
|
-
do:
|
|
55
|
-
- Use for create and add flows rather than generic submit actions.
|
|
56
|
-
avoid:
|
|
57
|
-
- Do not replace a plain UiButton unless the add semantics are intentional.
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
component: UiAlert
|
|
2
|
-
summary: >
|
|
3
|
-
UiAlert is a compact contextual message block for status, warning, success, and danger feedback.
|
|
4
|
-
It can be shown inline in normal page flow and can be closable.
|
|
5
|
-
|
|
6
|
-
public_import:
|
|
7
|
-
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
8
|
-
named:
|
|
9
|
-
- UiAlert
|
|
10
|
-
|
|
11
|
-
use_when:
|
|
12
|
-
- You need inline status feedback.
|
|
13
|
-
- You need dismissible page-level or section-level notice content.
|
|
14
|
-
|
|
15
|
-
avoid_when:
|
|
16
|
-
- You need a blocking modal message.
|
|
17
|
-
- You need a tiny field-level validation hint.
|
|
18
|
-
|
|
19
|
-
api:
|
|
20
|
-
key_props:
|
|
21
|
-
- name: variant
|
|
22
|
-
- name: text
|
|
23
|
-
- name: shown
|
|
24
|
-
- name: closable
|
|
25
|
-
- name: fluid
|
|
26
|
-
|
|
27
|
-
rendered_structure:
|
|
28
|
-
descriptive_only: true
|
|
29
|
-
root:
|
|
30
|
-
shape: div.ui-v1-alert
|
|
31
|
-
tag: div
|
|
32
|
-
notes: Current alert body is wrapped in UiTransition and uses one flex row for icon, content, and optional closer.
|
|
33
|
-
|
|
34
|
-
geometry:
|
|
35
|
-
layout: block-like feedback row
|
|
36
|
-
root_display: flex
|
|
37
|
-
width_behavior: stretches to container width by default
|
|
38
|
-
|
|
39
|
-
behavior:
|
|
40
|
-
notes:
|
|
41
|
-
- shown controls visibility.
|
|
42
|
-
- closable enables user dismissal.
|
|
43
|
-
|
|
44
|
-
ai_notes:
|
|
45
|
-
do:
|
|
46
|
-
- Use UiAlert for inline feedback that should stay in normal layout flow.
|
|
47
|
-
avoid:
|
|
48
|
-
- Do not use it as a replacement for modal confirmation.
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
component: UiAvatar
|
|
2
|
-
summary: >
|
|
3
|
-
UiAvatar renders a user or entity avatar with optional name, status, and link semantics.
|
|
4
|
-
It is meant for compact identity display rather than generic image rendering.
|
|
5
|
-
|
|
6
|
-
public_import:
|
|
7
|
-
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
8
|
-
named:
|
|
9
|
-
- UiAvatar
|
|
10
|
-
|
|
11
|
-
use_when:
|
|
12
|
-
- You need a compact identity marker for a user or contact.
|
|
13
|
-
- You need avatar display with optional status.
|
|
14
|
-
|
|
15
|
-
avoid_when:
|
|
16
|
-
- You need a generic content image.
|
|
17
|
-
- You need a large media block.
|
|
18
|
-
|
|
19
|
-
api:
|
|
20
|
-
key_props:
|
|
21
|
-
- name: src
|
|
22
|
-
- name: name
|
|
23
|
-
- name: status
|
|
24
|
-
- name: size
|
|
25
|
-
- name: href
|
|
26
|
-
|
|
27
|
-
rendered_structure:
|
|
28
|
-
descriptive_only: true
|
|
29
|
-
root:
|
|
30
|
-
shape: div.ui-v1-avatar or a.ui-v1-avatar
|
|
31
|
-
tag: div or a
|
|
32
|
-
notes: The root switches to anchor when href is provided.
|
|
33
|
-
|
|
34
|
-
geometry:
|
|
35
|
-
layout: avatar frame
|
|
36
|
-
root_display: inline-block
|
|
37
|
-
width_behavior: content-sized by size
|
|
38
|
-
|
|
39
|
-
behavior:
|
|
40
|
-
notes:
|
|
41
|
-
- Can render linked avatar behavior when href is provided.
|
|
42
|
-
- Name is useful as fallback identity information.
|
|
43
|
-
|
|
44
|
-
ai_notes:
|
|
45
|
-
do:
|
|
46
|
-
- Use UiAvatar for identity display, not for general media.
|
|
47
|
-
avoid:
|
|
48
|
-
- Do not use it where UiImage is the better semantic fit.
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
component: UiCalendar
|
|
2
|
-
summary: >
|
|
3
|
-
UiCalendar is the date selection primitive behind date and date-range flows. It supports
|
|
4
|
-
single and range selection, multiple visual appearances, and locale-sensitive behavior.
|
|
5
|
-
|
|
6
|
-
public_import:
|
|
7
|
-
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
8
|
-
named:
|
|
9
|
-
- UiCalendar
|
|
10
|
-
|
|
11
|
-
use_when:
|
|
12
|
-
- You need inline date selection.
|
|
13
|
-
- You need single-date or date-range picking without a textbox wrapper.
|
|
14
|
-
|
|
15
|
-
avoid_when:
|
|
16
|
-
- You need the full textbox-plus-popper date picker flow.
|
|
17
|
-
|
|
18
|
-
api:
|
|
19
|
-
key_props:
|
|
20
|
-
- name: value
|
|
21
|
-
- name: type
|
|
22
|
-
- name: appearance
|
|
23
|
-
- name: minDate
|
|
24
|
-
- name: maxDate
|
|
25
|
-
- name: locale
|
|
26
|
-
|
|
27
|
-
rendered_structure:
|
|
28
|
-
descriptive_only: true
|
|
29
|
-
root:
|
|
30
|
-
shape: div.ui-v1-calendar
|
|
31
|
-
tag: div
|
|
32
|
-
notes: The root contains header controls, weekday labels, and the date grid.
|
|
33
|
-
|
|
34
|
-
geometry:
|
|
35
|
-
layout: block-like calendar panel
|
|
36
|
-
root_display: flex
|
|
37
|
-
width_behavior: stretches to container width by default
|
|
38
|
-
|
|
39
|
-
behavior:
|
|
40
|
-
notes:
|
|
41
|
-
- Supports single and range selection.
|
|
42
|
-
- minDate and maxDate constrain selection.
|
|
43
|
-
|
|
44
|
-
ai_notes:
|
|
45
|
-
do:
|
|
46
|
-
- Use UiCalendar when inline calendar selection is the actual UI.
|
|
47
|
-
avoid:
|
|
48
|
-
- Use UiDatePicker instead if users expect textbox plus popup behavior.
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
component: UiCheckbox
|
|
2
|
-
summary: >
|
|
3
|
-
UiCheckbox is a boolean or set-membership control. It supports single boolean-like usage
|
|
4
|
-
as well as model-plus-value patterns for checkbox groups.
|
|
5
|
-
|
|
6
|
-
public_import:
|
|
7
|
-
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
8
|
-
named:
|
|
9
|
-
- UiCheckbox
|
|
10
|
-
|
|
11
|
-
use_when:
|
|
12
|
-
- You need a yes or no control.
|
|
13
|
-
- You need one value inside a checkbox group model.
|
|
14
|
-
|
|
15
|
-
avoid_when:
|
|
16
|
-
- You need exclusive single choice, use UiRadio instead.
|
|
17
|
-
- You need a more compact toggle-like control, use UiSwitch instead.
|
|
18
|
-
|
|
19
|
-
api:
|
|
20
|
-
key_props:
|
|
21
|
-
- name: model
|
|
22
|
-
- name: value
|
|
23
|
-
- name: indeterminate
|
|
24
|
-
- name: valueOfTruthy
|
|
25
|
-
- name: valueOfFalsy
|
|
26
|
-
- name: disabled
|
|
27
|
-
methods:
|
|
28
|
-
- name: click
|
|
29
|
-
- name: focus
|
|
30
|
-
- name: blur
|
|
31
|
-
|
|
32
|
-
rendered_structure:
|
|
33
|
-
descriptive_only: true
|
|
34
|
-
root:
|
|
35
|
-
shape: span.ui-v1-checkbox
|
|
36
|
-
tag: span
|
|
37
|
-
notes: One inline wrapper around the visual checkbox control and label content.
|
|
38
|
-
|
|
39
|
-
geometry:
|
|
40
|
-
layout: inline checkbox control
|
|
41
|
-
root_display: inline-flex
|
|
42
|
-
width_behavior: content-sized by default
|
|
43
|
-
|
|
44
|
-
behavior:
|
|
45
|
-
notes:
|
|
46
|
-
- model plus value supports group-style selection.
|
|
47
|
-
- indeterminate is useful for partial selection states.
|
|
48
|
-
|
|
49
|
-
ai_notes:
|
|
50
|
-
do:
|
|
51
|
-
- Use for boolean choice or checkbox-group membership.
|
|
52
|
-
avoid:
|
|
53
|
-
- Do not use for mutually exclusive options.
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
component: UiCollapse
|
|
2
|
-
summary: >
|
|
3
|
-
UiCollapse is a low-level show and hide container for expandable content. It controls
|
|
4
|
-
whether content is hidden or disposed and how the transition behaves.
|
|
5
|
-
|
|
6
|
-
public_import:
|
|
7
|
-
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
8
|
-
named:
|
|
9
|
-
- UiCollapse
|
|
10
|
-
|
|
11
|
-
use_when:
|
|
12
|
-
- You need conditional expandable content.
|
|
13
|
-
- You need to choose between hidden and disposed collapsed states.
|
|
14
|
-
|
|
15
|
-
avoid_when:
|
|
16
|
-
- You need a ready-to-use disclosure box with header UI, use UiCollapseBox instead.
|
|
17
|
-
|
|
18
|
-
api:
|
|
19
|
-
key_props:
|
|
20
|
-
- name: expanded
|
|
21
|
-
- name: collapseBehaviour
|
|
22
|
-
- name: duration
|
|
23
|
-
|
|
24
|
-
rendered_structure:
|
|
25
|
-
descriptive_only: true
|
|
26
|
-
root:
|
|
27
|
-
shape: div.ui-v1-collapse
|
|
28
|
-
tag: div
|
|
29
|
-
notes: The animated container is wrapped in a native transition and exists only while shown or expanded.
|
|
30
|
-
|
|
31
|
-
geometry:
|
|
32
|
-
layout: block-like animated container
|
|
33
|
-
root_display: block
|
|
34
|
-
width_behavior: stretches to container width by default
|
|
35
|
-
|
|
36
|
-
ai_notes:
|
|
37
|
-
do:
|
|
38
|
-
- Use UiCollapse as a primitive for expandable content regions.
|
|
39
|
-
avoid:
|
|
40
|
-
- Do not use it when a full disclosure component is the actual need.
|