@retailcrm/embed-ui-v1-components 0.9.23-alpha.1 → 0.9.23-alpha.2
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 +10 -4
- package/docs/AI.md +3 -0
- package/docs/COMPONENTS.md +1 -0
- package/docs/PROFILES.md +1 -0
- package/docs/profiles/components/UiPageFooter.yml +166 -0
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -39,6 +39,7 @@ When building UI in an extension, start with imports like:
|
|
|
39
39
|
import {
|
|
40
40
|
UiButton,
|
|
41
41
|
UiField,
|
|
42
|
+
UiPageFooter,
|
|
42
43
|
UiPageHeader,
|
|
43
44
|
UiSelect,
|
|
44
45
|
UiTextbox,
|
|
@@ -54,7 +55,7 @@ Commonly used exports from `remote` include:
|
|
|
54
55
|
- selection and date controls:
|
|
55
56
|
`UiSelect`, `UiSelectOption`, `UiSelectOptionGroup`, `UiDatePicker`, `UiTimePicker`, `UiCalendar`
|
|
56
57
|
- layout and structure:
|
|
57
|
-
`UiField`, `UiPageHeader`, `UiCollapse`, `UiCollapseBox`, `UiScrollBox`
|
|
58
|
+
`UiField`, `UiPageHeader`, `UiPageFooter`, `UiCollapse`, `UiCollapseBox`, `UiScrollBox`
|
|
58
59
|
- actions and links:
|
|
59
60
|
`UiButton`, `UiAddButton`, `UiCopyButton`, `UiToolbarButton`, `UiToolbarLink`, `UiLink`
|
|
60
61
|
- feedback and overlays:
|
|
@@ -93,9 +94,13 @@ Commonly used exports from `remote` include:
|
|
|
93
94
|
<UiTextbox v-model="comment" placeholder="Введите текст" />
|
|
94
95
|
</UiField>
|
|
95
96
|
|
|
96
|
-
<
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
<UiPageFooter>
|
|
98
|
+
<template #actions>
|
|
99
|
+
<UiButton @click="save">
|
|
100
|
+
Сохранить
|
|
101
|
+
</UiButton>
|
|
102
|
+
</template>
|
|
103
|
+
</UiPageFooter>
|
|
99
104
|
</template>
|
|
100
105
|
|
|
101
106
|
<script lang="ts" setup>
|
|
@@ -104,6 +109,7 @@ import { ref } from 'vue'
|
|
|
104
109
|
import {
|
|
105
110
|
UiButton,
|
|
106
111
|
UiField,
|
|
112
|
+
UiPageFooter,
|
|
107
113
|
UiPageHeader,
|
|
108
114
|
UiTextbox,
|
|
109
115
|
} from '@retailcrm/embed-ui-v1-components/remote'
|
package/docs/AI.md
CHANGED
|
@@ -62,6 +62,7 @@ When building a basic form or settings screen, start from patterns like:
|
|
|
62
62
|
import {
|
|
63
63
|
UiButton,
|
|
64
64
|
UiField,
|
|
65
|
+
UiPageFooter,
|
|
65
66
|
UiPageHeader,
|
|
66
67
|
UiSelect,
|
|
67
68
|
UiTextbox,
|
|
@@ -85,6 +86,7 @@ Default screen rules:
|
|
|
85
86
|
- use [`PageComposition.yml`](./profiles/pages/PageComposition.yml) to choose between an entity list,
|
|
86
87
|
card/settings page, multi-column page, collapse-block page, modal sidebar, or modal window;
|
|
87
88
|
- use `UiPageHeader` for page identity and top-level actions;
|
|
89
|
+
- use `UiPageFooter` for page-level save/cancel/delete actions instead of recreating a local footer;
|
|
88
90
|
- keep filters and controls near the content they affect;
|
|
89
91
|
- use `UiField` around labeled form controls;
|
|
90
92
|
- use `UiTable` for structured result lists;
|
|
@@ -168,6 +170,7 @@ The preferred styling signal is:
|
|
|
168
170
|
- [`UiTextbox`](./profiles/components/UiTextbox.yml)
|
|
169
171
|
- [`UiButton`](./profiles/components/UiButton.yml)
|
|
170
172
|
- [`UiPageHeader`](./profiles/components/UiPageHeader.yml)
|
|
173
|
+
- [`UiPageFooter`](./profiles/components/UiPageFooter.yml)
|
|
171
174
|
- [`UiSelect`](./profiles/components/UiSelect.yml)
|
|
172
175
|
- [`UiRadioSwitch`](./profiles/components/UiRadioSwitch.yml)
|
|
173
176
|
- [`UiTabGroup`](./profiles/components/UiTabGroup.yml)
|
package/docs/COMPONENTS.md
CHANGED
|
@@ -45,6 +45,7 @@ Detailed AI-friendly profiles are collected in [`PROFILES.md`](./PROFILES.md).
|
|
|
45
45
|
## Layout And Structure
|
|
46
46
|
|
|
47
47
|
- [`UiPageHeader`](./profiles/components/UiPageHeader.yml): page or section header with an editable title and action zone
|
|
48
|
+
- [`UiPageFooter`](./profiles/components/UiPageFooter.yml): page action footer with primary action and aside zones
|
|
48
49
|
- [`UiCollapse`](./profiles/components/UiCollapse.yml): collapsible section
|
|
49
50
|
- [`UiCollapseBox`](./profiles/components/UiCollapseBox.yml): collapsible container
|
|
50
51
|
- [`UiCollapseGroup`](./profiles/components/UiCollapseGroup.yml): multiple collapse coordination
|
package/docs/PROFILES.md
CHANGED
|
@@ -43,6 +43,7 @@ Current high-signal core profiles:
|
|
|
43
43
|
- [`UiToggleButton`](./profiles/components/UiToggleButton.yml)
|
|
44
44
|
- [`UiToggleGroup`](./profiles/components/UiToggleGroup.yml)
|
|
45
45
|
- [`UiPageHeader`](./profiles/components/UiPageHeader.yml)
|
|
46
|
+
- [`UiPageFooter`](./profiles/components/UiPageFooter.yml)
|
|
46
47
|
- [`UiSelect`](./profiles/components/UiSelect.yml)
|
|
47
48
|
- [`UiRadioSwitch`](./profiles/components/UiRadioSwitch.yml)
|
|
48
49
|
- [`UiTabGroup`](./profiles/components/UiTabGroup.yml)
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
component: UiPageFooter
|
|
2
|
+
summary: >
|
|
3
|
+
UiPageFooter is a page-level action footer for extension screens. It provides
|
|
4
|
+
visual structure and spacing for primary actions on the left and an optional
|
|
5
|
+
aside action area on the right. The component does not create buttons by itself;
|
|
6
|
+
compose it with UiButton or other public action components in its slots.
|
|
7
|
+
|
|
8
|
+
public_import:
|
|
9
|
+
from: '@retailcrm/embed-ui-v1-components/remote'
|
|
10
|
+
named:
|
|
11
|
+
- UiPageFooter
|
|
12
|
+
|
|
13
|
+
related_components:
|
|
14
|
+
- UiButton
|
|
15
|
+
- UiPageHeader
|
|
16
|
+
|
|
17
|
+
examples:
|
|
18
|
+
- title: Settings page footer
|
|
19
|
+
code: |
|
|
20
|
+
<template>
|
|
21
|
+
<UiPageFooter>
|
|
22
|
+
<template #actions>
|
|
23
|
+
<UiButton variant="success" @click="save">
|
|
24
|
+
Save
|
|
25
|
+
</UiButton>
|
|
26
|
+
|
|
27
|
+
<UiButton appearance="secondary" @click="saveAndExit">
|
|
28
|
+
Save and exit
|
|
29
|
+
</UiButton>
|
|
30
|
+
</template>
|
|
31
|
+
|
|
32
|
+
<template #aside>
|
|
33
|
+
<UiButton
|
|
34
|
+
aria-label="Delete"
|
|
35
|
+
appearance="tertiary"
|
|
36
|
+
variant="danger"
|
|
37
|
+
@click="remove"
|
|
38
|
+
>
|
|
39
|
+
<IconDelete aria-hidden="true" />
|
|
40
|
+
</UiButton>
|
|
41
|
+
</template>
|
|
42
|
+
</UiPageFooter>
|
|
43
|
+
</template>
|
|
44
|
+
|
|
45
|
+
<script lang="ts" setup>
|
|
46
|
+
import IconDelete from '@retailcrm/embed-ui-v1-components/assets/sprites/ui/delete-outlined.svg'
|
|
47
|
+
import {
|
|
48
|
+
UiButton,
|
|
49
|
+
UiPageFooter,
|
|
50
|
+
} from '@retailcrm/embed-ui-v1-components/remote'
|
|
51
|
+
|
|
52
|
+
const save = () => {}
|
|
53
|
+
const saveAndExit = () => {}
|
|
54
|
+
const remove = () => {}
|
|
55
|
+
</script>
|
|
56
|
+
|
|
57
|
+
use_when:
|
|
58
|
+
- You need a page-level action strip for a settings or edit screen.
|
|
59
|
+
- You need primary and secondary actions grouped on the left.
|
|
60
|
+
- You need a separate right-side zone for a destructive or secondary standalone action.
|
|
61
|
+
- You want CRM footer spacing and border styling instead of custom footer markup.
|
|
62
|
+
|
|
63
|
+
avoid_when:
|
|
64
|
+
- You need a modal footer, use the modal component footer slot instead.
|
|
65
|
+
- You need a table footer, use UiTable footer slots and table footer primitives.
|
|
66
|
+
- You need the component to be fixed to the viewport bottom by itself.
|
|
67
|
+
- You need automatic button creation from props.
|
|
68
|
+
|
|
69
|
+
api:
|
|
70
|
+
key_props: []
|
|
71
|
+
props: []
|
|
72
|
+
slots:
|
|
73
|
+
- name: actions
|
|
74
|
+
zone: left-side action group
|
|
75
|
+
creates: Primary action area.
|
|
76
|
+
accepts:
|
|
77
|
+
recommended:
|
|
78
|
+
- UiButton
|
|
79
|
+
- UiToolbarButton
|
|
80
|
+
- UiToolbarLink
|
|
81
|
+
- compact action components
|
|
82
|
+
avoid:
|
|
83
|
+
- full form layouts
|
|
84
|
+
- wide content blocks
|
|
85
|
+
- nested page sections
|
|
86
|
+
layout_effect: Renders as the flexible left area and can contain multiple actions.
|
|
87
|
+
notes: Use this slot for save, apply, cancel, or save-and-exit actions.
|
|
88
|
+
- name: aside
|
|
89
|
+
zone: right-side aside action group
|
|
90
|
+
creates: Separate aside action area.
|
|
91
|
+
accepts:
|
|
92
|
+
recommended:
|
|
93
|
+
- UiButton
|
|
94
|
+
- one compact destructive action
|
|
95
|
+
- one compact secondary action
|
|
96
|
+
avoid:
|
|
97
|
+
- main save actions
|
|
98
|
+
- wide content blocks
|
|
99
|
+
- multi-row form content
|
|
100
|
+
layout_effect: Renders at the right edge on desktop and below the actions area on narrow screens.
|
|
101
|
+
notes: Commonly used for delete or another separated secondary action.
|
|
102
|
+
emits: []
|
|
103
|
+
methods: []
|
|
104
|
+
|
|
105
|
+
rendered_structure:
|
|
106
|
+
descriptive_only: true
|
|
107
|
+
notes: >
|
|
108
|
+
This structure is useful for reasoning and debugging, not as a public styling API.
|
|
109
|
+
root:
|
|
110
|
+
shape: footer.ui-v1-page-footer
|
|
111
|
+
tag: footer
|
|
112
|
+
zones:
|
|
113
|
+
- .ui-v1-page-footer__actions
|
|
114
|
+
- .ui-v1-page-footer__aside
|
|
115
|
+
|
|
116
|
+
geometry:
|
|
117
|
+
layout: page action footer
|
|
118
|
+
root_display: flex
|
|
119
|
+
width_behavior: stretches to container width by default
|
|
120
|
+
notes:
|
|
121
|
+
- Root uses flex layout with space between the actions and aside zones.
|
|
122
|
+
- The actions zone flexes and the aside zone stays content-sized on desktop.
|
|
123
|
+
- On narrow screens the root switches to a vertical layout and action groups can wrap.
|
|
124
|
+
- The component renders where it is called and does not fix itself to the bottom of the viewport.
|
|
125
|
+
|
|
126
|
+
styling:
|
|
127
|
+
notes:
|
|
128
|
+
- UiPageFooter provides the visual footer shell: spacing, border, background, and action grouping.
|
|
129
|
+
- The CRM shell may position the root footer according to page layout needs.
|
|
130
|
+
- Internal classes are descriptive hooks, not a stable public selector API unless documented by the host integration.
|
|
131
|
+
root_classes:
|
|
132
|
+
- .ui-v1-page-footer
|
|
133
|
+
zones:
|
|
134
|
+
- .ui-v1-page-footer__actions
|
|
135
|
+
- .ui-v1-page-footer__aside
|
|
136
|
+
css_variables: {}
|
|
137
|
+
typography:
|
|
138
|
+
notes:
|
|
139
|
+
- The footer itself does not impose action text typography.
|
|
140
|
+
- Typography comes from slotted components such as UiButton.
|
|
141
|
+
|
|
142
|
+
behavior:
|
|
143
|
+
states: []
|
|
144
|
+
notes:
|
|
145
|
+
- UiPageFooter has no own state props.
|
|
146
|
+
- It does not create, disable, lock, or submit actions by itself.
|
|
147
|
+
- Pass disabled, locked, click handlers, icons, and labels to the slotted UiButton or action component.
|
|
148
|
+
- It renders as a regular footer in place and does not apply fixed or sticky positioning by itself.
|
|
149
|
+
|
|
150
|
+
accessibility:
|
|
151
|
+
notes:
|
|
152
|
+
- The root uses a semantic footer element.
|
|
153
|
+
- Slotted action components are responsible for accessible labels, disabled state, and click behavior.
|
|
154
|
+
|
|
155
|
+
ai_notes:
|
|
156
|
+
do:
|
|
157
|
+
- Import UiPageFooter from @retailcrm/embed-ui-v1-components/remote.
|
|
158
|
+
- Use the actions slot for primary and secondary page actions.
|
|
159
|
+
- Use the aside slot for a separated destructive or secondary action.
|
|
160
|
+
- Put UiButton or another public action component inside slots.
|
|
161
|
+
- Add page-level positioning only in the host/page layout when the footer must stick to a specific shell area.
|
|
162
|
+
avoid:
|
|
163
|
+
- Do not recreate a local footer when UiPageFooter is available.
|
|
164
|
+
- Do not import UiPageFooter from internal package paths.
|
|
165
|
+
- Do not expect UiPageFooter to create buttons from props.
|
|
166
|
+
- Do not expect UiPageFooter to be fixed to the bottom of the window automatically.
|
package/package.json
CHANGED