@retailcrm/embed-ui-v1-components 0.9.18 → 0.9.21

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 (82) hide show
  1. package/AGENTS.md +8 -0
  2. package/README.md +5 -1
  3. package/bin/embed-ui-v1-components.mjs +32 -24
  4. package/bin/postinstall.mjs +2 -2
  5. package/dist/host.cjs +19 -13
  6. package/dist/host.css +8 -10
  7. package/dist/host.d.ts +52 -58
  8. package/dist/host.js +19 -13
  9. package/dist/remote.cjs +110 -100
  10. package/dist/remote.d.ts +30 -36
  11. package/dist/remote.js +110 -100
  12. package/docs/AGENT-DESIGN-GUIDELINES.md +463 -0
  13. package/docs/AI.md +89 -6
  14. package/docs/FORMAT.md +11 -9
  15. package/docs/PROFILES.md +9 -5
  16. package/docs/README.md +14 -5
  17. package/docs/assets/page-guidelines/card-settings-page.png +0 -0
  18. package/docs/assets/page-guidelines/collapse-block-page.png +0 -0
  19. package/docs/assets/page-guidelines/entity-list-page.png +0 -0
  20. package/docs/assets/page-guidelines/modal-sidebar.png +0 -0
  21. package/docs/assets/page-guidelines/modal-window.png +0 -0
  22. package/docs/assets/page-guidelines/multi-column-page.png +0 -0
  23. package/docs/profiles/UiAddButton.yml +30 -0
  24. package/docs/profiles/UiAlert.yml +27 -0
  25. package/docs/profiles/UiAvatar.yml +26 -0
  26. package/docs/profiles/UiAvatarList.yml +28 -0
  27. package/docs/profiles/UiButton.yml +1 -8
  28. package/docs/profiles/UiCalendar.yml +28 -0
  29. package/docs/profiles/UiCheckbox.yml +32 -0
  30. package/docs/profiles/UiCollapse.yml +34 -0
  31. package/docs/profiles/UiCollapseBox.yml +30 -0
  32. package/docs/profiles/UiCollapseGroup.yml +26 -0
  33. package/docs/profiles/UiCopyButton.yml +35 -0
  34. package/docs/profiles/UiDate.yml +28 -0
  35. package/docs/profiles/UiDatePicker.yml +30 -0
  36. package/docs/profiles/UiError.yml +45 -0
  37. package/docs/profiles/UiField.yml +1 -15
  38. package/docs/profiles/UiImage.yml +28 -0
  39. package/docs/profiles/UiInfobox.yml +33 -0
  40. package/docs/profiles/UiLink.yml +40 -0
  41. package/docs/profiles/UiLoader.yml +35 -0
  42. package/docs/profiles/UiMenuItem.yml +38 -0
  43. package/docs/profiles/UiMenuItemGroup.yml +27 -0
  44. package/docs/profiles/UiModalSidebar.yml +32 -0
  45. package/docs/profiles/UiModalWindow.yml +42 -0
  46. package/docs/profiles/UiModalWindowSurface.yml +32 -0
  47. package/docs/profiles/UiNumberStepper.yml +36 -0
  48. package/docs/profiles/UiPageHeader.yml +1 -23
  49. package/docs/profiles/UiPopper.yml +1 -13
  50. package/docs/profiles/UiPopperConnector.yml +7 -25
  51. package/docs/profiles/UiPopperTarget.yml +7 -25
  52. package/docs/profiles/UiRadio.yml +40 -0
  53. package/docs/profiles/UiRadioSwitch.yml +1 -32
  54. package/docs/profiles/UiRadioSwitchOption.yml +9 -13
  55. package/docs/profiles/UiScrollBox.yml +34 -0
  56. package/docs/profiles/UiSelect.yml +1 -44
  57. package/docs/profiles/UiSelectOption.yml +32 -0
  58. package/docs/profiles/UiSelectOptionGroup.yml +30 -0
  59. package/docs/profiles/UiSkeleton.yml +32 -0
  60. package/docs/profiles/UiSlider.yml +40 -0
  61. package/docs/profiles/UiSwitch.yml +38 -0
  62. package/docs/profiles/UiTab.yml +7 -16
  63. package/docs/profiles/UiTabGroup.yml +1 -30
  64. package/docs/profiles/UiTable.yml +148 -0
  65. package/docs/profiles/UiTableBodyCell.yml +28 -0
  66. package/docs/profiles/UiTableColumn.yml +39 -0
  67. package/docs/profiles/UiTableFooterButton.yml +43 -0
  68. package/docs/profiles/UiTableFooterSection.yml +37 -0
  69. package/docs/profiles/UiTableHeadCell.yml +28 -0
  70. package/docs/profiles/UiTableSorter.yml +29 -0
  71. package/docs/profiles/UiTag.yml +38 -0
  72. package/docs/profiles/UiTextbox.yml +1 -32
  73. package/docs/profiles/UiTimePicker.yml +40 -0
  74. package/docs/profiles/UiToggleButton.yml +1 -11
  75. package/docs/profiles/UiToggleGroup.yml +1 -13
  76. package/docs/profiles/UiToggleGroupOption.yml +9 -11
  77. package/docs/profiles/UiToolbarButton.yml +37 -0
  78. package/docs/profiles/UiToolbarLink.yml +37 -0
  79. package/docs/profiles/UiTooltip.yml +38 -0
  80. package/docs/profiles/UiTransition.yml +37 -0
  81. package/docs/profiles/UiYandexMap.yml +53 -0
  82. package/package.json +15 -15
@@ -2,6 +2,7 @@ component: UiRadio
2
2
  summary: >
3
3
  UiRadio is the single-choice selection control for exclusive option sets.
4
4
  It is the radio-style counterpart to UiCheckbox.
5
+ usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uiradio--docs
5
6
 
6
7
  public_import:
7
8
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -36,3 +37,42 @@ geometry:
36
37
  layout: inline radio control
37
38
  root_display: inline-flex
38
39
  width_behavior: content-sized by default
40
+
41
+ behavior:
42
+ notes:
43
+ - Use several UiRadio controls with the same model to represent one exclusive group.
44
+ - The selected value comes from the option value, not from the label text.
45
+
46
+ composition:
47
+ works_well_with:
48
+ - UiField
49
+ - UiRadioSwitch
50
+ patterns:
51
+ - title: Simple exclusive choice
52
+ notes: Use UiRadio for compact vertical or inline lists of mutually exclusive values.
53
+ - title: Rich segmented choice
54
+ notes: Use UiRadioSwitch instead when the options should look like a segmented control or rich section cards.
55
+
56
+ ai_notes:
57
+ do:
58
+ - Use for plain mutually exclusive options.
59
+ - Keep all options in one visible group with clear labels.
60
+ avoid:
61
+ - Do not use for multiple independent selections; use UiCheckbox or UiToggleGroup.
62
+
63
+ accessibility:
64
+ notes:
65
+ - Prefer visible text labels for interactive controls.
66
+ - For icon-only or custom visual content, provide an accessible name through the supported label, title, or ARIA attributes exposed by the component.
67
+ - Preserve native keyboard semantics by using the component root instead of recreating the control with arbitrary markup.
68
+ keyboard:
69
+ - Tab moves focus to the control when it is focusable.
70
+ - Enter or Space activates native button-like controls when the host implementation renders a button.
71
+
72
+ styling:
73
+ notes:
74
+ - Use documented props and slots as the primary styling API.
75
+ - Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
76
+ - Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
77
+ root_classes:
78
+ - .ui-v1-radio
@@ -4,6 +4,7 @@ summary: >
4
4
  a compact inline switch and a richer section-card layout. It is useful when the
5
5
  choice set is small and always visible. For richer per-option content, compose it
6
6
  with UiRadioSwitchOption instead of relying only on the options array.
7
+ usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uiradioswitch--docs
7
8
 
8
9
  public_import:
9
10
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -188,38 +189,6 @@ composition:
188
189
  - title: Section cards
189
190
  notes: Use UiRadioSwitchOption when each choice needs icon, description, or custom checkmark.
190
191
 
191
- examples:
192
- - title: Simple options array
193
- goal: Build a compact single-choice segmented control.
194
- code: |
195
- <UiRadioSwitch
196
- v-model:value="mode"
197
- :options="[
198
- { label: 'Auto', value: 'auto' },
199
- { label: 'Manual', value: 'manual' },
200
- ]"
201
- />
202
- - title: Rich card options
203
- goal: Render section cards with object values and descriptions.
204
- code: |
205
- <UiRadioSwitch
206
- v-model:value="mode"
207
- appearance="section"
208
- rubber
209
- :equal-fn="(a, b) => a?.key === b?.key"
210
- >
211
- <UiRadioSwitchOption
212
- label="Auto"
213
- :value="{ key: 'auto' }"
214
- description="Automatic mode"
215
- />
216
-
217
- <UiRadioSwitchOption
218
- label="Manual"
219
- :value="{ key: 'manual' }"
220
- description="Manual setup"
221
- />
222
- </UiRadioSwitch>
223
192
 
224
193
  ai_notes:
225
194
  do:
@@ -3,6 +3,7 @@ summary: >
3
3
  UiRadioSwitchOption is the declarative option child of UiRadioSwitch. It is the
4
4
  richer alternative to the plain options array and is used when one option needs
5
5
  custom icon, label, description, or selected-state checkmark content.
6
+ usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uiradioswitch--docs
6
7
 
7
8
  public_import:
8
9
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -99,19 +100,6 @@ composition:
99
100
  - title: Rich switch option
100
101
  notes: Use when one option needs icon, label, description, and custom selected state.
101
102
 
102
- examples:
103
- - title: Section option
104
- goal: Define one rich option inside a radio switch.
105
- code: |
106
- <UiRadioSwitchOption
107
- label="Manual"
108
- :value="{ key: 'manual' }"
109
- description="Manual setup"
110
- >
111
- <template #icon>
112
- <IconStar />
113
- </template>
114
- </UiRadioSwitchOption>
115
103
 
116
104
  ai_notes:
117
105
  do:
@@ -119,3 +107,11 @@ ai_notes:
119
107
  - Prefer label and description props for simple content and slots for richer custom markup.
120
108
  avoid:
121
109
  - Do not use it as a standalone control outside UiRadioSwitch.
110
+
111
+ styling:
112
+ notes:
113
+ - Use documented props and slots as the primary styling API.
114
+ - Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
115
+ - Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
116
+ root_classes:
117
+ - .ui-v1-radio-switch-option
@@ -2,6 +2,7 @@ component: UiScrollBox
2
2
  summary: >
3
3
  UiScrollBox is a scrollable container for constrained content areas. Use it when content
4
4
  should remain inside a dedicated scrolling region instead of growing the whole page.
5
+ usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uiscrollbox--docs
5
6
 
6
7
  public_import:
7
8
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -29,3 +30,36 @@ geometry:
29
30
  layout: scroll container
30
31
  root_display: block
31
32
  width_behavior: stretches to the size of its layout context
33
+
34
+ behavior:
35
+ notes:
36
+ - Use only when a bounded region should scroll independently.
37
+ - The parent layout must provide meaningful height or width constraints.
38
+
39
+ composition:
40
+ works_well_with:
41
+ - UiModalWindow
42
+ - UiModalSidebar
43
+ - UiTable
44
+ patterns:
45
+ - title: Modal body scrolling
46
+ notes: Use when modal content is long but header and footer should remain accessible.
47
+ - title: Constrained list
48
+ notes: Use for long menu or panel content when full page scrolling is undesirable.
49
+
50
+ ai_notes:
51
+ do:
52
+ - Give the surrounding layout a stable height before relying on scrolling.
53
+ avoid:
54
+ - Do not wrap normal page content in a scroll container by default.
55
+
56
+ accessibility:
57
+ notes:
58
+ - Keep visible labels and slot content meaningful.
59
+ - Prefer documented props and slots over custom DOM replacements so host-side accessibility behavior is preserved.
60
+
61
+ styling:
62
+ notes:
63
+ - Use documented props and slots as the primary styling API.
64
+ - Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
65
+ - Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
@@ -3,6 +3,7 @@ summary: >
3
3
  UiSelect is a dropdown component for single-select and multi-select flows. It combines
4
4
  a textbox-like trigger with a popper-based option layer. For a correct mental model,
5
5
  read it together with UiPopper, UiPopperConnector, and UiPopperTarget.
6
+ usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uiselect--docs
6
7
 
7
8
  public_import:
8
9
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -271,50 +272,6 @@ composition:
271
272
  - title: Popper mental model
272
273
  notes: Think of UiSelect as target plus floating dropdown, not as a single inline control.
273
274
 
274
- examples:
275
- - title: Standard select in a field
276
- goal: Build a labeled select with field semantics.
277
- code: |
278
- <UiField id="assignee" label="Assignee">
279
- <template #default="field">
280
- <UiSelect
281
- :id="field.id"
282
- :invalid="field.invalid"
283
- :placeholder="'Select assignee'"
284
- v-model:value="assignee"
285
- >
286
- <UiSelectOption value="kyle" label="Kyle Simmons" />
287
- <UiSelectOption value="eduardo" label="Eduardo Henry" />
288
- </UiSelect>
289
- </template>
290
- </UiField>
291
- - title: Grouped options
292
- goal: Build a grouped option tree through the safe child components.
293
- code: |
294
- <UiSelect placeholder="Employee">
295
- <UiSelectOptionGroup label="Sales">
296
- <UiSelectOption value="kyle" label="Kyle Simmons" />
297
- </UiSelectOptionGroup>
298
-
299
- <UiSelectOptionGroup label="Support">
300
- <UiSelectOption value="philip" label="Philip Williamson" />
301
- </UiSelectOptionGroup>
302
- </UiSelect>
303
- - title: Object values with equalsFn
304
- goal: Avoid object comparison by reference.
305
- code: |
306
- <UiSelect
307
- v-model:value="selectedUser"
308
- :equals-fn="(left, right) => left?.id === right?.id"
309
- placeholder="Employee"
310
- >
311
- <UiSelectOption
312
- v-for="user in users"
313
- :key="user.id"
314
- :value="user"
315
- :label="user.name"
316
- />
317
- </UiSelect>
318
275
 
319
276
  ai_notes:
320
277
  do:
@@ -2,6 +2,7 @@ component: UiSelectOption
2
2
  summary: >
3
3
  UiSelectOption is the base selectable child of UiSelect. It represents one option node
4
4
  in the select option tree.
5
+ usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uiselect--docs
5
6
 
6
7
  public_import:
7
8
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -42,3 +43,34 @@ geometry:
42
43
  ai_notes:
43
44
  do:
44
45
  - Use as the default child node of UiSelect.
46
+ - Provide stable value and human-readable label.
47
+ - Use description for secondary explanation, not for long help text.
48
+ avoid:
49
+ - Do not put arbitrary controls inside options.
50
+
51
+ behavior:
52
+ notes:
53
+ - disabled prevents selection while keeping the option visible.
54
+ - counter and accent help scan dense option lists.
55
+ - In filterable selects, label and description participate in matching.
56
+
57
+ composition:
58
+ works_well_with:
59
+ - UiSelect
60
+ - UiSelectOptionGroup
61
+ patterns:
62
+ - title: Status filter option
63
+ notes: Use concise labels that match the visible table status names.
64
+
65
+ accessibility:
66
+ notes:
67
+ - This component is normally used inside its parent composition; accessibility behavior is completed by the parent component.
68
+ - Keep labels and visible text meaningful because parent keyboard and screen-reader behavior depends on child content.
69
+
70
+ styling:
71
+ notes:
72
+ - Use documented props and slots as the primary styling API.
73
+ - Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
74
+ - Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
75
+ root_classes:
76
+ - .ui-v1-select-option
@@ -1,6 +1,7 @@
1
1
  component: UiSelectOptionGroup
2
2
  summary: >
3
3
  UiSelectOptionGroup groups related UiSelectOption nodes under a shared label.
4
+ usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uiselect--docs
4
5
 
5
6
  public_import:
6
7
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -36,3 +37,32 @@ geometry:
36
37
  ai_notes:
37
38
  do:
38
39
  - Use to structure large option lists inside UiSelect.
40
+ - Keep group labels short and categorical.
41
+ avoid:
42
+ - Do not use groups for two or three obvious flat options.
43
+
44
+ behavior:
45
+ notes:
46
+ - Group visibility can change when the parent select is filterable.
47
+ - The group itself is not selectable; child UiSelectOption nodes provide selection.
48
+
49
+ composition:
50
+ works_well_with:
51
+ - UiSelect
52
+ - UiSelectOption
53
+ patterns:
54
+ - title: Large grouped select
55
+ notes: Use for managers by team, statuses by category, or locations by region.
56
+
57
+ accessibility:
58
+ notes:
59
+ - This component is normally used inside its parent composition; accessibility behavior is completed by the parent component.
60
+ - Keep labels and visible text meaningful because parent keyboard and screen-reader behavior depends on child content.
61
+
62
+ styling:
63
+ notes:
64
+ - Use documented props and slots as the primary styling API.
65
+ - Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
66
+ - Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
67
+ root_classes:
68
+ - .ui-v1-select-option-group
@@ -2,6 +2,7 @@ component: UiSkeleton
2
2
  summary: >
3
3
  UiSkeleton displays a placeholder block for loading content. It supports text,
4
4
  rectangle and circle appearances with pulse or shimmer animation.
5
+ usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uiskeleton--docs
5
6
 
6
7
  public_import:
7
8
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -39,3 +40,34 @@ ai_notes:
39
40
  - Use text appearance for line placeholders.
40
41
  - Use circle appearance for avatar placeholders.
41
42
  - Override width or height only when the preset size is not enough.
43
+ avoid:
44
+ - Do not use for errors or empty states; skeletons mean content is still expected.
45
+
46
+ behavior:
47
+ notes:
48
+ - appearance should approximate the eventual content shape.
49
+ - animation communicates loading; avoid excessive animated skeletons in dense screens.
50
+
51
+ composition:
52
+ works_well_with:
53
+ - UiAvatar
54
+ - UiTable
55
+ - UiLoader
56
+ patterns:
57
+ - title: Loading rows
58
+ notes: Use text or rectangle skeletons where table or list rows will appear.
59
+ - title: Loading identity
60
+ notes: Use circle skeletons where avatars will appear.
61
+
62
+ accessibility:
63
+ notes:
64
+ - Keep rendered text concise and meaningful for screen-reader users.
65
+ - Do not use this component as the only carrier of critical state if the state also needs form-level validation or focus management.
66
+
67
+ styling:
68
+ notes:
69
+ - Use documented props and slots as the primary styling API.
70
+ - Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
71
+ - Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
72
+ root_classes:
73
+ - .ui-v1-skeleton
@@ -2,6 +2,7 @@ component: UiSlider
2
2
  summary: >
3
3
  UiSlider is a range-selection control for single values or ranges on a numeric track.
4
4
  It supports single-handle and range-handle modes.
5
+ usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uislider--docs
5
6
 
6
7
  public_import:
7
8
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -36,3 +37,42 @@ geometry:
36
37
  layout: horizontal slider track
37
38
  root_display: flex
38
39
  width_behavior: stretches to container width by default
40
+
41
+ behavior:
42
+ notes:
43
+ - Use when approximate adjustment is acceptable.
44
+ - For exact numeric input, prefer UiTextbox with numeric inputmode or UiNumberStepper.
45
+
46
+ composition:
47
+ works_well_with:
48
+ - UiField
49
+ - UiNumberStepper
50
+ patterns:
51
+ - title: Bounded adjustment
52
+ notes: Wrap in UiField and show min, max, or current value nearby when precision matters.
53
+ - title: Slider plus exact value
54
+ notes: Pair with UiNumberStepper when users need both quick dragging and exact entry.
55
+
56
+ ai_notes:
57
+ do:
58
+ - Use only for bounded numeric ranges.
59
+ - Make the current value visible when the slider affects important settings.
60
+ avoid:
61
+ - Do not use for open-ended numbers, money amounts, or identifiers.
62
+
63
+ accessibility:
64
+ notes:
65
+ - Prefer visible text labels for interactive controls.
66
+ - For icon-only or custom visual content, provide an accessible name through the supported label, title, or ARIA attributes exposed by the component.
67
+ - Preserve native keyboard semantics by using the component root instead of recreating the control with arbitrary markup.
68
+ keyboard:
69
+ - Tab moves focus to the control when it is focusable.
70
+ - Enter or Space activates native button-like controls when the host implementation renders a button.
71
+
72
+ styling:
73
+ notes:
74
+ - Use documented props and slots as the primary styling API.
75
+ - Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
76
+ - Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
77
+ root_classes:
78
+ - .ui-v1-slider
@@ -2,6 +2,7 @@ component: UiSwitch
2
2
  summary: >
3
3
  UiSwitch is a compact boolean toggle control. It is the most concise choice for on or off state
4
4
  when checkbox semantics would feel visually heavy.
5
+ usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uiswitch--docs
5
6
 
6
7
  public_import:
7
8
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -35,3 +36,40 @@ geometry:
35
36
  layout: inline switch control
36
37
  root_display: inline-block
37
38
  width_behavior: content-sized by default
39
+
40
+ behavior:
41
+ notes:
42
+ - Best for immediate boolean settings, not for long-form confirmation choices.
43
+ - Disabled blocks interaction while preserving the current state visually.
44
+
45
+ composition:
46
+ works_well_with:
47
+ - UiField
48
+ patterns:
49
+ - title: Settings row
50
+ notes: Pair with a visible label and optional description so the on or off state is unambiguous.
51
+ avoid:
52
+ - Do not use without a nearby label; the switch alone does not explain what will change.
53
+
54
+ ai_notes:
55
+ do:
56
+ - Use for compact feature toggles and enable or disable settings.
57
+ avoid:
58
+ - Do not use for multi-select lists or legal acknowledgements; use UiCheckbox.
59
+
60
+ accessibility:
61
+ notes:
62
+ - Prefer visible text labels for interactive controls.
63
+ - For icon-only or custom visual content, provide an accessible name through the supported label, title, or ARIA attributes exposed by the component.
64
+ - Preserve native keyboard semantics by using the component root instead of recreating the control with arbitrary markup.
65
+ keyboard:
66
+ - Tab moves focus to the control when it is focusable.
67
+ - Enter or Space activates native button-like controls when the host implementation renders a button.
68
+
69
+ styling:
70
+ notes:
71
+ - Use documented props and slots as the primary styling API.
72
+ - Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
73
+ - Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
74
+ root_classes:
75
+ - .ui-v1-switch
@@ -3,6 +3,7 @@ summary: >
3
3
  UiTab is a declarative child node for UiTabGroup. It does not render meaningful
4
4
  standalone UI by itself; instead, UiTabGroup consumes its props and slots to build
5
5
  tab buttons, overflow menu items, and optional tab panel content.
6
+ usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uitab--docs
6
7
 
7
8
  public_import:
8
9
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -93,22 +94,6 @@ composition:
93
94
  - title: Rich tab declaration
94
95
  notes: Keep icon, counter, and content close to the tab declaration inside UiTabGroup.
95
96
 
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
97
 
113
98
  ai_notes:
114
99
  do:
@@ -117,3 +102,9 @@ ai_notes:
117
102
  avoid:
118
103
  - Do not expect UiTab to render useful DOM outside a group.
119
104
  - Do not rely on an undocumented default slot for header rendering.
105
+
106
+ styling:
107
+ notes:
108
+ - Use documented props and slots as the primary styling API.
109
+ - Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
110
+ - Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
@@ -3,6 +3,7 @@ summary: >
3
3
  UiTabGroup is the navigation container for UiTab children or simple tab items.
4
4
  It manages active tab selection by string id, keyboard navigation, optional overflow
5
5
  into a dropdown menu, and optional tabpanel rendering from the active UiTab content slot.
6
+ usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uitab--docs
6
7
 
7
8
  public_import:
8
9
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -197,36 +198,6 @@ composition:
197
198
  - title: Rich tabs from UiTab
198
199
  notes: Use UiTab children when tabs need icon, custom label, counter, or tabpanel content.
199
200
 
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
201
 
231
202
  ai_notes:
232
203
  do: