@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/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)
@@ -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
@@ -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.22",
5
+ "version": "0.9.23-alpha.2",
6
6
  "license": "MIT",
7
7
  "author": "RetailDriverLLC <integration@retailcrm.ru>",
8
8
  "repository": {