@retailcrm/embed-ui-v1-components 0.9.14 → 0.9.16

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.
Files changed (78) hide show
  1. package/AGENTS.md +126 -0
  2. package/README.md +24 -0
  3. package/assets/sprites/map-and-places/navigate.svg +3 -0
  4. package/assets/stylesheets/palette.less +11 -6
  5. package/bin/embed-ui-v1-components.mjs +209 -0
  6. package/bin/postinstall.mjs +37 -0
  7. package/dist/host.cjs +2443 -657
  8. package/dist/host.css +920 -6
  9. package/dist/host.d.ts +2440 -6
  10. package/dist/host.js +2444 -658
  11. package/dist/remote.cjs +1009 -46
  12. package/dist/remote.d.ts +1240 -67
  13. package/dist/remote.js +1011 -48
  14. package/docs/AI.md +106 -0
  15. package/docs/COMPONENTS.md +99 -0
  16. package/docs/FORMAT.md +267 -0
  17. package/docs/PROFILES.md +66 -0
  18. package/docs/README.md +65 -0
  19. package/docs/STYLING.md +156 -0
  20. package/docs/profiles/UiAddButton.yml +57 -0
  21. package/docs/profiles/UiAlert.yml +48 -0
  22. package/docs/profiles/UiAvatar.yml +48 -0
  23. package/docs/profiles/UiAvatarList.yml +42 -0
  24. package/docs/profiles/UiButton.yml +229 -0
  25. package/docs/profiles/UiCalendar.yml +48 -0
  26. package/docs/profiles/UiCheckbox.yml +53 -0
  27. package/docs/profiles/UiCollapse.yml +40 -0
  28. package/docs/profiles/UiCollapseBox.yml +51 -0
  29. package/docs/profiles/UiCollapseGroup.yml +39 -0
  30. package/docs/profiles/UiCopyButton.yml +52 -0
  31. package/docs/profiles/UiDate.yml +38 -0
  32. package/docs/profiles/UiDatePicker.yml +59 -0
  33. package/docs/profiles/UiError.yml +32 -0
  34. package/docs/profiles/UiField.yml +233 -0
  35. package/docs/profiles/UiImage.yml +39 -0
  36. package/docs/profiles/UiInfobox.yml +45 -0
  37. package/docs/profiles/UiLink.yml +51 -0
  38. package/docs/profiles/UiLoader.yml +38 -0
  39. package/docs/profiles/UiMenuItem.yml +57 -0
  40. package/docs/profiles/UiMenuItemGroup.yml +50 -0
  41. package/docs/profiles/UiModalSidebar.yml +46 -0
  42. package/docs/profiles/UiModalWindow.yml +44 -0
  43. package/docs/profiles/UiModalWindowSurface.yml +41 -0
  44. package/docs/profiles/UiNumberStepper.yml +52 -0
  45. package/docs/profiles/UiPageHeader.yml +244 -0
  46. package/docs/profiles/UiPopper.yml +201 -0
  47. package/docs/profiles/UiPopperConnector.yml +115 -0
  48. package/docs/profiles/UiPopperTarget.yml +118 -0
  49. package/docs/profiles/UiRadio.yml +38 -0
  50. package/docs/profiles/UiRadioSwitch.yml +231 -0
  51. package/docs/profiles/UiRadioSwitchOption.yml +121 -0
  52. package/docs/profiles/UiScrollBox.yml +31 -0
  53. package/docs/profiles/UiSelect.yml +327 -0
  54. package/docs/profiles/UiSelectOption.yml +44 -0
  55. package/docs/profiles/UiSelectOptionGroup.yml +38 -0
  56. package/docs/profiles/UiSlider.yml +38 -0
  57. package/docs/profiles/UiSwitch.yml +37 -0
  58. package/docs/profiles/UiTab.yml +119 -0
  59. package/docs/profiles/UiTabGroup.yml +238 -0
  60. package/docs/profiles/UiTable.yml +152 -0
  61. package/docs/profiles/UiTableBodyCell.yml +47 -0
  62. package/docs/profiles/UiTableColumn.yml +50 -0
  63. package/docs/profiles/UiTableFooterButton.yml +44 -0
  64. package/docs/profiles/UiTableFooterSection.yml +38 -0
  65. package/docs/profiles/UiTableHeadCell.yml +44 -0
  66. package/docs/profiles/UiTableSorter.yml +45 -0
  67. package/docs/profiles/UiTag.yml +41 -0
  68. package/docs/profiles/UiTextbox.yml +392 -0
  69. package/docs/profiles/UiTimePicker.yml +46 -0
  70. package/docs/profiles/UiToggleButton.yml +211 -0
  71. package/docs/profiles/UiToggleGroup.yml +211 -0
  72. package/docs/profiles/UiToggleGroupOption.yml +116 -0
  73. package/docs/profiles/UiToolbarButton.yml +37 -0
  74. package/docs/profiles/UiToolbarLink.yml +32 -0
  75. package/docs/profiles/UiTooltip.yml +43 -0
  76. package/docs/profiles/UiTransition.yml +27 -0
  77. package/docs/profiles/UiYandexMap.yml +29 -0
  78. package/package.json +8 -3
@@ -0,0 +1,119 @@
1
+ component: UiTab
2
+ summary: >
3
+ UiTab is a declarative child node for UiTabGroup. It does not render meaningful
4
+ standalone UI by itself; instead, UiTabGroup consumes its props and slots to build
5
+ tab buttons, overflow menu items, and optional tab panel content.
6
+
7
+ public_import:
8
+ from: '@retailcrm/embed-ui-v1-components/remote'
9
+ named:
10
+ - UiTab
11
+ - UiTabGroup
12
+
13
+ related_components:
14
+ - UiTabGroup
15
+
16
+ use_when:
17
+ - You need custom icon, label, counter, or content inside UiTabGroup.
18
+ - You want each tab declaration to keep its header and panel content together.
19
+
20
+ avoid_when:
21
+ - You need a standalone button or link.
22
+ - A plain items array on UiTabGroup is enough for the screen.
23
+ - You need non-string tab identity, because UiTabGroup uses string id.
24
+
25
+ api:
26
+ key_props:
27
+ - name: id
28
+ notes: Required string identifier used by UiTabGroup as activeId.
29
+ - name: label
30
+ notes: Fallback plain-text header label.
31
+ - name: counter
32
+ notes: Optional badge-like counter.
33
+ - name: disabled
34
+ notes: Marks the tab as non-interactive.
35
+ props:
36
+ - name: id
37
+ notes: Must be unique within one UiTabGroup.
38
+ - name: label
39
+ notes: Optional when label slot is used.
40
+ - name: counter
41
+ notes: Optional when counter slot is used.
42
+ - name: disabled
43
+ notes: Excluded from selection and keyboard navigation.
44
+ slots:
45
+ - name: icon
46
+ zone: tab leading icon
47
+ notes: Used both in the visible tab button and in the overflow menu item.
48
+ - name: label
49
+ zone: tab label
50
+ notes: Overrides plain label prop for the header.
51
+ - name: counter
52
+ zone: tab counter
53
+ notes: Overrides plain counter prop for the header.
54
+ - name: content
55
+ zone: active tab panel
56
+ notes: Rendered only for the active tab by UiTabGroup.
57
+
58
+ rendered_structure:
59
+ descriptive_only: true
60
+ root:
61
+ shape: no standalone DOM root
62
+ tag: none
63
+ notes: >
64
+ UiTab is a structural declaration rather than a standalone DOM component. The
65
+ parent UiTabGroup resolves UiTab children and renders the actual tab buttons,
66
+ menu items, and optional tabpanel.
67
+
68
+ geometry:
69
+ layout: no standalone layout, interpreted by UiTabGroup
70
+ root_display: none
71
+ width_behavior: no standalone width behavior of its own
72
+ notes:
73
+ - UiTab itself should not be used outside UiTabGroup.
74
+ - Icon-only tabs are inferred when icon exists but label and counter do not.
75
+
76
+ behavior:
77
+ states:
78
+ - name: disabled
79
+ notes: The parent group keeps it visible but non-interactive.
80
+ notes:
81
+ - content slot is mounted only for the active tab.
82
+ - icon, label, and counter are also used when the tab moves into overflow menu.
83
+
84
+ accessibility:
85
+ notes:
86
+ - UiTab does not create tab semantics by itself.
87
+ - UiTabGroup applies role=tab, aria-selected, aria-controls, and tabpanel relationships.
88
+
89
+ composition:
90
+ works_well_with:
91
+ - UiTabGroup
92
+ patterns:
93
+ - title: Rich tab declaration
94
+ notes: Keep icon, counter, and content close to the tab declaration inside UiTabGroup.
95
+
96
+ examples:
97
+ - title: Rich tab child
98
+ goal: Declare one tab with custom icon and panel content.
99
+ code: |
100
+ <UiTab id="overview" label="Overview" counter="8">
101
+ <template #icon>
102
+ <IconStar />
103
+ </template>
104
+
105
+ <template #content>
106
+ <section>
107
+ <h4>Overview</h4>
108
+ <p>Panel content for the active tab.</p>
109
+ </section>
110
+ </template>
111
+ </UiTab>
112
+
113
+ ai_notes:
114
+ do:
115
+ - Use UiTab only inside UiTabGroup.
116
+ - Prefer label and counter props for simple cases, and slots for richer markup.
117
+ avoid:
118
+ - Do not expect UiTab to render useful DOM outside a group.
119
+ - Do not rely on an undocumented default slot for header rendering.
@@ -0,0 +1,238 @@
1
+ component: UiTabGroup
2
+ summary: >
3
+ UiTabGroup is the navigation container for UiTab children or simple tab items.
4
+ It manages active tab selection by string id, keyboard navigation, optional overflow
5
+ into a dropdown menu, and optional tabpanel rendering from the active UiTab content slot.
6
+
7
+ public_import:
8
+ from: '@retailcrm/embed-ui-v1-components/remote'
9
+ named:
10
+ - UiTabGroup
11
+ - UiTab
12
+
13
+ related_components:
14
+ - UiTab
15
+ - UiButton
16
+ - UiMenuItem
17
+
18
+ use_when:
19
+ - You need horizontal navigation between a small or medium number of sections.
20
+ - Active state can be represented by a string id.
21
+ - You need overflow handling that moves extra tabs into a dropdown.
22
+ - You want optional panel content rendered from the active UiTab.
23
+
24
+ avoid_when:
25
+ - You need free-form router navigation that should not behave like a tablist.
26
+ - You need non-string identity with custom equality logic.
27
+ - You need many options better served by a menu or select.
28
+
29
+ api:
30
+ key_props:
31
+ - name: activeId
32
+ notes: Main selected-tab model by string id.
33
+ - name: items
34
+ notes: Simple array-based alternative to slot-declared UiTab children.
35
+ - name: appearance
36
+ notes: Supports text and filled visual styles.
37
+ - name: size
38
+ notes: Supports sm, md, lg.
39
+ - name: overflowing
40
+ notes: Enables overflow resolution into a dropdown menu.
41
+ - name: menuExpanded
42
+ notes: Optional controlled state for the overflow menu.
43
+ - name: focusableId
44
+ notes: Optional controlled state for roving focus.
45
+ props:
46
+ - name: activeId
47
+ notes: Usually used through v-model:active-id.
48
+ - name: items
49
+ notes: Expects array items shaped as { id, label?, counter?, disabled?, iconOnly? }.
50
+ - name: focusableId
51
+ notes: Advanced control hook; usually let the component manage it.
52
+ - name: menuExpanded
53
+ notes: Advanced control hook; usually let the component manage it.
54
+ - name: size
55
+ notes: Changes typography, icon size, and spacing.
56
+ - name: appearance
57
+ notes: text is classic tabs, filled is segmented-tab styling.
58
+ - name: overflowing
59
+ notes: When false, all tabs stay in the header row without overflow menu.
60
+ child_components:
61
+ - name: UiTab
62
+ key_props:
63
+ - id
64
+ - label
65
+ - counter
66
+ - disabled
67
+ notes: Use it when a tab needs icon, custom label, custom counter, or content slot.
68
+ slots:
69
+ - name: default
70
+ zone: tab declarations
71
+ creates: Slot-based tab registry via UiTab children.
72
+ accepts:
73
+ recommended:
74
+ - UiTab
75
+ avoid:
76
+ - arbitrary buttons
77
+ - unrelated layout wrappers
78
+ notes: >
79
+ Use items for simple data-driven tabs, and default slot with UiTab for richer
80
+ headers or tabpanel content.
81
+ emits:
82
+ - name: change
83
+ payload: string
84
+ notes: Fired when the active tab changes.
85
+ - name: update:activeId
86
+ payload: string
87
+ notes: Main v-model channel.
88
+ - name: update:focusableId
89
+ payload: string | null
90
+ notes: Optional roving-focus control channel.
91
+ - name: update:menuExpanded
92
+ payload: boolean
93
+ notes: Optional overflow-menu visibility control channel.
94
+ - name: layout
95
+ payload: "{ headIds: string[]; menuIds: string[] }"
96
+ notes: Emits the current overflow split between visible tabs and menu tabs.
97
+
98
+ rendered_structure:
99
+ descriptive_only: true
100
+ notes: >
101
+ UiTabGroup renders a header row, a visible tablist region, an optional overflow
102
+ trigger with popper menu, and an optional tabpanel for the active UiTab content.
103
+ Class names are useful for debugging, not as a guaranteed public styling API.
104
+ root:
105
+ shape: div.ui-v1-tab-group
106
+ tag: div
107
+ composition:
108
+ - .ui-v1-tab-group root
109
+ - .ui-v1-tab-group__head with role=tablist region
110
+ - .ui-v1-tab-group__content for visible tabs
111
+ - .ui-v1-tab-group__measure hidden sizing layer
112
+ - .ui-v1-tab-group__trigger for overflow button
113
+ - .ui-v1-tab-group__menu inside UiPopper
114
+ - .ui-v1-tab-group__panel for active tabpanel content
115
+ classes:
116
+ - .ui-v1-tab-group
117
+ - .ui-v1-tab-group_text
118
+ - .ui-v1-tab-group_filled
119
+ - .ui-v1-tab
120
+ - .ui-v1-tab_active
121
+ - .ui-v1-tab_disabled
122
+
123
+ geometry:
124
+ layout: block-level group with full-width header and optional content panel
125
+ root_display: block
126
+ width_behavior: stretches to container width by default
127
+ notes:
128
+ - The group itself stretches to width 100%.
129
+ - The visible header keeps tabs on one row.
130
+ - overflowing lets extra tabs move into a dropdown instead of wrapping.
131
+ - The active panel sits below the tab header.
132
+
133
+ styling:
134
+ notes:
135
+ - Prefer appearance and size props over selector overrides.
136
+ - Current classes help explain state and overflow structure.
137
+ root_classes:
138
+ - .ui-v1-tab-group
139
+ - .ui-v1-tab
140
+ state_classes:
141
+ - .ui-v1-tab-group_text
142
+ - .ui-v1-tab-group_filled
143
+ - .ui-v1-tab_active
144
+ - .ui-v1-tab_disabled
145
+ - .ui-v1-tab_icon-without-text
146
+ zones:
147
+ - .ui-v1-tab-group__head
148
+ - .ui-v1-tab-group__content
149
+ - .ui-v1-tab-group__measure
150
+ - .ui-v1-tab-group__trigger
151
+ - .ui-v1-tab-group__menu
152
+ - .ui-v1-tab-group__panel
153
+ - .ui-v1-tab__icon
154
+ - .ui-v1-tab__label
155
+ - .ui-v1-tab__counter
156
+ typography:
157
+ default:
158
+ notes:
159
+ - text appearance uses tab-specific typography that depends on size.
160
+ - lg uses heading-scale typography and larger icon sizing.
161
+
162
+ behavior:
163
+ states:
164
+ - name: overflowing
165
+ notes: Enables moving extra tabs into a dropdown menu.
166
+ - name: appearance=text
167
+ notes: Classic underline tabs.
168
+ - name: appearance=filled
169
+ notes: Filled segmented-tab look with zero gap between tabs.
170
+ - name: disabled tab
171
+ notes: Visible but not interactive and excluded from keyboard navigation.
172
+ selection_and_layout:
173
+ - activeId is resolved only against existing tab ids.
174
+ - When overflowing is enabled, the active tab tries to remain in the visible header.
175
+ - layout reports which ids stay in the header and which move into the menu.
176
+ - menuExpanded and focusableId can be controlled from outside but usually do not need to be.
177
+ keyboard:
178
+ - One tab stop is used for the whole visible tablist.
179
+ - Arrow keys move focus and selection across enabled visible tabs.
180
+ - Home and End jump to the first or last enabled visible tab.
181
+ - Space and Enter activate the focused tab.
182
+ - Overflow menu items use menuitemradio semantics and activate on click, Enter, or Space.
183
+
184
+ accessibility:
185
+ notes:
186
+ - The visible header uses tablist and tab roles.
187
+ - The active tab can be linked to its content through aria-controls and aria-labelledby.
188
+ - The content container uses role=tabpanel when active UiTab provides content slot.
189
+ - Overflow menu items use role=menuitemradio and aria-checked.
190
+
191
+ composition:
192
+ works_well_with:
193
+ - UiTab
194
+ patterns:
195
+ - title: Simple tabs from items
196
+ notes: Use items when tabs are data-only and do not need per-tab content slots.
197
+ - title: Rich tabs from UiTab
198
+ notes: Use UiTab children when tabs need icon, custom label, counter, or tabpanel content.
199
+
200
+ examples:
201
+ - title: Data-driven tabs
202
+ goal: Render a compact tab header from plain items.
203
+ code: |
204
+ <UiTabGroup
205
+ v-model:active-id="activeId"
206
+ :items="[
207
+ { id: 'overview', label: 'Overview', counter: '8' },
208
+ { id: 'orders', label: 'Orders', counter: '12' },
209
+ ]"
210
+ overflowing
211
+ />
212
+ - title: Tabs with panel content
213
+ goal: Render active tabpanel content from UiTab child declarations.
214
+ code: |
215
+ <UiTabGroup
216
+ v-model:active-id="activeId"
217
+ overflowing
218
+ >
219
+ <UiTab id="overview" label="Overview">
220
+ <template #content>
221
+ <section>
222
+ <h4>Overview</h4>
223
+ <p>Visible only when this tab is active.</p>
224
+ </section>
225
+ </template>
226
+ </UiTab>
227
+
228
+ <UiTab id="orders" label="Orders" />
229
+ </UiTabGroup>
230
+
231
+ ai_notes:
232
+ do:
233
+ - Use v-model:active-id with string ids.
234
+ - Prefer items for simple tabs and UiTab children for rich composition.
235
+ - Treat menuExpanded and focusableId as advanced controlled props, not default requirements.
236
+ avoid:
237
+ - Do not pass object values or expect equalsFn-like behavior.
238
+ - Do not rely on internal overflow DOM structure as a stable extension contract.
@@ -0,0 +1,152 @@
1
+ component: UiTable
2
+ summary: >
3
+ UiTable is the main data table component. It supports row rendering, grouping, expandable rows,
4
+ footer areas, and row-level interactions.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiTable
10
+
11
+ related_components:
12
+ - UiTableColumn
13
+
14
+ use_when:
15
+ - You need structured tabular data.
16
+ - You need group headers, expandable rows, or footer sections.
17
+
18
+ avoid_when:
19
+ - You need a simple list or card layout.
20
+
21
+ api:
22
+ key_props:
23
+ - name: rows
24
+ - name: rowKey
25
+ - name: headless
26
+ - name: bordered
27
+ - name: fixed
28
+ - name: groupBy
29
+ slots:
30
+ - name: default
31
+ zone: columns
32
+ creates: Column declarations.
33
+ - name: expand
34
+ zone: expanded-row
35
+ creates: Expanded row content.
36
+ - name: footer
37
+ zone: footer
38
+ creates: Full footer area.
39
+ - name: group-head
40
+ zone: group-head
41
+ creates: Group heading content.
42
+ - name: empty
43
+ zone: empty-state
44
+ creates: Empty-state content.
45
+ emits:
46
+ - name: row:click
47
+ methods:
48
+ - name: resetExpanded
49
+ - name: expand
50
+ - name: collapse
51
+ - name: toggle
52
+
53
+ rendered_structure:
54
+ descriptive_only: true
55
+ root:
56
+ shape: table.ui-v1-table
57
+ tag: table
58
+ zones:
59
+ - .ui-v1-table__section_head
60
+ - .ui-v1-table__section_body
61
+ - .ui-v1-table__section_foot
62
+ - .ui-v1-table__row
63
+ - .ui-v1-table__head-cell
64
+ - .ui-v1-table__body-cell
65
+ notes: >
66
+ Table layout is distributed across head, body, foot, and cell-level classes. Treat this as a
67
+ reasoning model for geometry and spacing, not as a stable selector contract.
68
+
69
+ geometry:
70
+ layout: block-width table
71
+ root_display: table
72
+ width: 100%
73
+ width_behavior: stretches to container width by default
74
+ notes:
75
+ - Root fills available width.
76
+ - fixed=true switches table-layout from auto to fixed.
77
+ - bordered=true adds border and corner rounding through CSS variables.
78
+
79
+ styling:
80
+ notes:
81
+ - UiTable exposes a relatively rich CSS-variable surface for spacing and table chrome.
82
+ - Prefer table props and slot composition first, then CSS variables for spacing or background tuning.
83
+ - Internal classes are descriptive and mainly useful for debugging or narrow local integration.
84
+ root_classes:
85
+ - .ui-v1-table
86
+ state_classes:
87
+ - .ui-v1-table_fixed
88
+ - .ui-v1-table_bordered
89
+ - .ui-v1-table__head-cell_align-center
90
+ - .ui-v1-table__head-cell_align-right
91
+ - .ui-v1-table__body-cell_align-center
92
+ - .ui-v1-table__body-cell_align-right
93
+ - .ui-v1-table__body-cell_valign-top
94
+ - .ui-v1-table__body-cell_valign-bottom
95
+ - .ui-v1-table__body-cell_theme-group
96
+ - .ui-v1-table__body-cell_trim
97
+ - .ui-v1-table__head-cell_trim
98
+ zones:
99
+ - .ui-v1-table__head-cell
100
+ - .ui-v1-table__body-cell
101
+ - .ui-v1-table__footer-cell
102
+ css_variables:
103
+ public_theme_variables:
104
+ - name: --ui-v1-table-border-width
105
+ effect: Outer border width in bordered mode.
106
+ - name: --ui-v1-table-rounding
107
+ effect: Shared corner rounding.
108
+ - name: --ui-v1-table-cell-padding-x
109
+ effect: Base inline cell padding.
110
+ - name: --ui-v1-table-cell-padding-y
111
+ effect: Base block cell padding.
112
+ - name: --ui-v1-table-head-background
113
+ effect: Header row background.
114
+ - name: --ui-v1-table-group-head-background
115
+ effect: Group heading row background.
116
+ - name: --ui-v1-table-padding-start
117
+ effect: Effective first-column start padding.
118
+ - name: --ui-v1-table-padding-end
119
+ effect: Effective last-column end padding.
120
+ internal_layout_variables:
121
+ - name: --ui-v1-table-effective-padding-start
122
+ effect: Start padding after bordered adjustments.
123
+ - name: --ui-v1-table-effective-padding-end
124
+ effect: End padding after bordered adjustments.
125
+ - name: --ui-v1-table-head-cell-padding-block-start
126
+ effect: Header top padding.
127
+ - name: --ui-v1-table-head-cell-padding-block-end
128
+ effect: Header bottom padding.
129
+ - name: --ui-v1-table-body-cell-padding-block-start
130
+ effect: Body top padding.
131
+ - name: --ui-v1-table-body-cell-padding-block-end
132
+ effect: Body bottom padding.
133
+ - name: --ui-v1-table-group-head-padding-block-start
134
+ effect: Group row top padding.
135
+ - name: --ui-v1-table-group-head-padding-block-end
136
+ effect: Group row bottom padding.
137
+ typography:
138
+ default:
139
+ mixin: text-small
140
+ size: 14px
141
+ line_height: 20px
142
+ weight: 400
143
+ head_cells:
144
+ mixin: text-tiny-accent
145
+ size: 12px
146
+ line_height: 14px
147
+ weight: 500
148
+ group_rows:
149
+ mixin: text-tiny
150
+ size: 12px
151
+ line_height: 14px
152
+ weight: 400
@@ -0,0 +1,47 @@
1
+ component: UiTableBodyCell
2
+ summary: >
3
+ UiTableBodyCell is the low-level body cell primitive used inside UiTable rows.
4
+ Use it only for custom table layouts built from public table parts.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiTableBodyCell
10
+
11
+ related_components:
12
+ - UiTable
13
+
14
+ use_when:
15
+ - You compose custom body rows with public table primitives.
16
+ - You need explicit align, valign, colspan, rowspan, or grouped-cell theme control.
17
+
18
+ avoid_when:
19
+ - UiTableColumn already covers the body-cell rendering you need.
20
+ - You are not inside table row structure.
21
+
22
+ api:
23
+ key_props:
24
+ - name: align
25
+ - name: valign
26
+ - name: colspan
27
+ - name: rowspan
28
+ - name: trim
29
+ - name: theme
30
+
31
+ rendered_structure:
32
+ descriptive_only: true
33
+ root:
34
+ shape: td.ui-v1-table__body-cell
35
+ tag: td
36
+ notes: The component renders one table body cell.
37
+
38
+ geometry:
39
+ layout: table cell
40
+ root_display: table-cell
41
+ width_behavior: controlled by table layout and column sizing
42
+
43
+ ai_notes:
44
+ do:
45
+ - Keep it inside UiTable row composition.
46
+ avoid:
47
+ - Do not use it as a generic box or layout wrapper.
@@ -0,0 +1,50 @@
1
+ component: UiTableColumn
2
+ summary: >
3
+ UiTableColumn declares one logical column inside UiTable. It carries label and sizing metadata
4
+ and defines how header labels and cells render.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiTableColumn
10
+
11
+ related_components:
12
+ - UiTable
13
+
14
+ use_when:
15
+ - You define columns for UiTable.
16
+
17
+ avoid_when:
18
+ - You need standalone layout markup outside UiTable.
19
+
20
+ api:
21
+ key_props:
22
+ - name: label
23
+ - name: width
24
+ - name: minWidth
25
+ - name: maxWidth
26
+ - name: align
27
+ - name: valign
28
+ - name: trim
29
+ slots:
30
+ - name: default
31
+ zone: cell
32
+ creates: Cell content.
33
+ - name: cell
34
+ zone: cell
35
+ creates: Explicit cell content.
36
+ - name: label
37
+ zone: header-label
38
+ creates: Header label content.
39
+
40
+ rendered_structure:
41
+ descriptive_only: true
42
+ root:
43
+ shape: col
44
+ tag: col
45
+ notes: The component renders one structural table column node.
46
+
47
+ geometry:
48
+ layout: structural table column
49
+ root_display: table-column
50
+ width_behavior: controlled by table layout and width props on the parent table
@@ -0,0 +1,44 @@
1
+ component: UiTableFooterButton
2
+ summary: >
3
+ UiTableFooterButton is a footer-scoped action control for custom table footer layouts.
4
+ It behaves like a table-specific button primitive rather than a full replacement for UiButton.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiTableFooterButton
10
+
11
+ related_components:
12
+ - UiTable
13
+ - UiTableFooterSection
14
+
15
+ use_when:
16
+ - You need an action inside a custom table footer area.
17
+
18
+ avoid_when:
19
+ - UiButton is enough outside table footer composition.
20
+ - You are not building custom footer structure.
21
+
22
+ api:
23
+ key_props:
24
+ - name: type
25
+ emits:
26
+ - name: click
27
+
28
+ rendered_structure:
29
+ descriptive_only: true
30
+ root:
31
+ shape: button.ui-v1-table__footer-button
32
+ tag: button
33
+ notes: The visible label is wrapped in an inner inline-flex content span.
34
+
35
+ geometry:
36
+ layout: inline footer action
37
+ root_display: inline-block
38
+ width_behavior: content-sized by label content
39
+
40
+ ai_notes:
41
+ do:
42
+ - Keep it in table footer usage.
43
+ avoid:
44
+ - Do not substitute it for general page-level actions.
@@ -0,0 +1,38 @@
1
+ component: UiTableFooterSection
2
+ summary: >
3
+ UiTableFooterSection is the low-level footer container for custom table footer layouts.
4
+ It is mainly useful when UiTable footer slots are not enough on their own.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiTableFooterSection
10
+
11
+ related_components:
12
+ - UiTable
13
+ - UiTableFooterButton
14
+
15
+ use_when:
16
+ - You compose custom footer content from public table primitives.
17
+
18
+ avoid_when:
19
+ - UiTable footer slots already solve the layout.
20
+ - You do not need explicit footer structure.
21
+
22
+ rendered_structure:
23
+ descriptive_only: true
24
+ root:
25
+ shape: div.ui-v1-table__footer-section
26
+ tag: div
27
+ notes: Renders one footer section wrapper inside the table footer controls area.
28
+
29
+ geometry:
30
+ layout: footer meta or control section
31
+ root_display: block
32
+ width_behavior: content-sized within the footer flex row
33
+
34
+ ai_notes:
35
+ do:
36
+ - Use it only as part of custom table footer composition.
37
+ avoid:
38
+ - Do not treat it as a standalone layout section.