@retailcrm/embed-ui-v1-components 0.9.22 → 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/dist/host.cjs +334 -306
- package/dist/host.css +46 -0
- package/dist/host.d.ts +2 -0
- package/dist/host.js +334 -306
- package/dist/remote.cjs +12 -0
- package/dist/remote.d.ts +46 -0
- package/dist/remote.js +12 -0
- 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/docs/profiles/components/UiPopper.yml +1 -1
- package/docs/profiles/pages/ModalSidebar.yml +1 -1
- package/package.json +1 -1
package/dist/remote.cjs
CHANGED
|
@@ -1347,6 +1347,15 @@ const UiNumberStepper = remote.defineRemoteComponent(
|
|
|
1347
1347
|
"violation"
|
|
1348
1348
|
]
|
|
1349
1349
|
);
|
|
1350
|
+
const UiPageFooterType = "UiPageFooter";
|
|
1351
|
+
const UiPageFooter = remote.defineRemoteComponent(
|
|
1352
|
+
UiPageFooterType,
|
|
1353
|
+
[],
|
|
1354
|
+
[
|
|
1355
|
+
"actions",
|
|
1356
|
+
"aside"
|
|
1357
|
+
]
|
|
1358
|
+
);
|
|
1350
1359
|
const events$1 = [
|
|
1351
1360
|
"blur",
|
|
1352
1361
|
"change",
|
|
@@ -4111,6 +4120,7 @@ const createEndpointRoot = async (channel) => {
|
|
|
4111
4120
|
"UiModalWindow",
|
|
4112
4121
|
"UiModalWindowSurface",
|
|
4113
4122
|
"UiNumberStepper",
|
|
4123
|
+
"UiPageFooter",
|
|
4114
4124
|
"UiPageHeader",
|
|
4115
4125
|
"UiPageHeaderLayout",
|
|
4116
4126
|
"UiPageHeaderTitle",
|
|
@@ -4302,6 +4312,8 @@ exports.UiModalWindowSurfaceType = UiModalWindowSurfaceType;
|
|
|
4302
4312
|
exports.UiModalWindowType = UiModalWindowType;
|
|
4303
4313
|
exports.UiNumberStepper = UiNumberStepper;
|
|
4304
4314
|
exports.UiNumberStepperType = UiNumberStepperType;
|
|
4315
|
+
exports.UiPageFooter = UiPageFooter;
|
|
4316
|
+
exports.UiPageFooterType = UiPageFooterType;
|
|
4305
4317
|
exports.UiPageHeader = _sfc_main$b;
|
|
4306
4318
|
exports.UiPopconfirm = _sfc_main$a;
|
|
4307
4319
|
exports.UiPopper = UiPopper;
|
package/dist/remote.d.ts
CHANGED
|
@@ -3879,6 +3879,52 @@ declare type UiNumberStepperProperties = {
|
|
|
3879
3879
|
textboxOptions?: Partial<Omit<UiTextboxProperties, 'id' | 'value' | 'type' | 'min' | 'max' | 'step' | 'decimals' | 'clearable' | 'disabled' | 'readonly' | 'required' | 'size' | 'outlined' | 'autofit' | 'inputAttributes'>>;
|
|
3880
3880
|
};
|
|
3881
3881
|
export declare const UiNumberStepperType: SchemaType<"UiNumberStepper", RemoteProperties<UiNumberStepperProperties>, RemoteCallable<UiNumberStepperMethods>>;
|
|
3882
|
+
export declare const UiPageFooter: {
|
|
3883
|
+
new (...args: any[]): CreateComponentPublicInstanceWithMixins<Readonly<ExtractPropTypes<RemoteProperties<UiPageFooterProperties>>>, {
|
|
3884
|
+
[x: string]: unknown;
|
|
3885
|
+
}, {
|
|
3886
|
+
[x: string]: never;
|
|
3887
|
+
}, {
|
|
3888
|
+
[x: string]: never;
|
|
3889
|
+
}, MethodOptions, never[], ComponentOptionsMixin, {}, PublicProps, {}, true, {}, {}, GlobalComponents, GlobalDirectives, string, {}, any, ComponentProvideOptions, {
|
|
3890
|
+
P: {};
|
|
3891
|
+
B: {};
|
|
3892
|
+
D: {};
|
|
3893
|
+
C: ComputedOptions;
|
|
3894
|
+
M: MethodOptions;
|
|
3895
|
+
Defaults: {};
|
|
3896
|
+
} & {
|
|
3897
|
+
P: {};
|
|
3898
|
+
B: {};
|
|
3899
|
+
D: {};
|
|
3900
|
+
C: {};
|
|
3901
|
+
M: {};
|
|
3902
|
+
Defaults: {};
|
|
3903
|
+
}, Readonly<ExtractPropTypes<RemoteProperties<UiPageFooterProperties>>>, {
|
|
3904
|
+
[x: string]: unknown;
|
|
3905
|
+
}, {
|
|
3906
|
+
[x: string]: never;
|
|
3907
|
+
}, ComputedOptions & {
|
|
3908
|
+
[x: string]: never;
|
|
3909
|
+
}, MethodOptions, {}>;
|
|
3910
|
+
__isFragment?: never;
|
|
3911
|
+
__isTeleport?: never;
|
|
3912
|
+
__isSuspense?: never;
|
|
3913
|
+
} & ComponentOptionsBase<Readonly<ExtractPropTypes<RemoteProperties<UiPageFooterProperties>>>, {
|
|
3914
|
+
[x: string]: unknown;
|
|
3915
|
+
}, {
|
|
3916
|
+
[x: string]: never;
|
|
3917
|
+
}, {
|
|
3918
|
+
[x: string]: never;
|
|
3919
|
+
}, MethodOptions, never[], ComponentOptionsMixin, {}, string, {}, {}, string, {}, GlobalComponents, GlobalDirectives, string, ComponentProvideOptions> & VNodeProps & AllowedComponentProps & ComponentCustomProps & (new () => {
|
|
3920
|
+
$slots: {
|
|
3921
|
+
[x: string]: never;
|
|
3922
|
+
} & {
|
|
3923
|
+
default?: (...args: never[]) => unknown;
|
|
3924
|
+
};
|
|
3925
|
+
});
|
|
3926
|
+
declare type UiPageFooterProperties = Record<string, never>;
|
|
3927
|
+
export declare const UiPageFooterType: SchemaType<"UiPageFooter", RemoteProperties<UiPageFooterProperties>>;
|
|
3882
3928
|
export declare const UiPageHeader: __VLS_WithTemplateSlots_3<typeof __VLS_component_3, __VLS_TemplateResult_3["slots"]>;
|
|
3883
3929
|
declare type UiPageHeaderProperties = {
|
|
3884
3930
|
id?: string;
|
package/dist/remote.js
CHANGED
|
@@ -1345,6 +1345,15 @@ const UiNumberStepper = defineRemoteComponent(
|
|
|
1345
1345
|
"violation"
|
|
1346
1346
|
]
|
|
1347
1347
|
);
|
|
1348
|
+
const UiPageFooterType = "UiPageFooter";
|
|
1349
|
+
const UiPageFooter = defineRemoteComponent(
|
|
1350
|
+
UiPageFooterType,
|
|
1351
|
+
[],
|
|
1352
|
+
[
|
|
1353
|
+
"actions",
|
|
1354
|
+
"aside"
|
|
1355
|
+
]
|
|
1356
|
+
);
|
|
1348
1357
|
const events$1 = [
|
|
1349
1358
|
"blur",
|
|
1350
1359
|
"change",
|
|
@@ -4109,6 +4118,7 @@ const createEndpointRoot = async (channel) => {
|
|
|
4109
4118
|
"UiModalWindow",
|
|
4110
4119
|
"UiModalWindowSurface",
|
|
4111
4120
|
"UiNumberStepper",
|
|
4121
|
+
"UiPageFooter",
|
|
4112
4122
|
"UiPageHeader",
|
|
4113
4123
|
"UiPageHeaderLayout",
|
|
4114
4124
|
"UiPageHeaderTitle",
|
|
@@ -4301,6 +4311,8 @@ export {
|
|
|
4301
4311
|
UiModalWindowType,
|
|
4302
4312
|
UiNumberStepper,
|
|
4303
4313
|
UiNumberStepperType,
|
|
4314
|
+
UiPageFooter,
|
|
4315
|
+
UiPageFooterType,
|
|
4304
4316
|
_sfc_main$b as UiPageHeader,
|
|
4305
4317
|
_sfc_main$a as UiPopconfirm,
|
|
4306
4318
|
UiPopper,
|
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.
|
|
@@ -77,7 +77,7 @@ examples:
|
|
|
77
77
|
</template>
|
|
78
78
|
|
|
79
79
|
<script lang="ts" setup>
|
|
80
|
-
import IconTrash from '@retailcrm/embed-ui-v1-components/assets/sprites/ui/delete.svg'
|
|
80
|
+
import IconTrash from '@retailcrm/embed-ui-v1-components/assets/sprites/ui/delete-outlined.svg'
|
|
81
81
|
import { UiButton, UiPopper, UiPopperConnector, UiPopperTarget } from '@retailcrm/embed-ui-v1-components/remote'
|
|
82
82
|
</script>
|
|
83
83
|
use_when:
|
|
@@ -65,7 +65,7 @@ examples:
|
|
|
65
65
|
<script lang="ts" setup>
|
|
66
66
|
import { ref } from 'vue'
|
|
67
67
|
|
|
68
|
-
import IconDelete from '@retailcrm/embed-ui-v1-components/assets/sprites/ui/delete.svg'
|
|
68
|
+
import IconDelete from '@retailcrm/embed-ui-v1-components/assets/sprites/ui/delete-outlined.svg'
|
|
69
69
|
import {
|
|
70
70
|
UiButton,
|
|
71
71
|
UiModalSidebar,
|
package/package.json
CHANGED