@retailcrm/embed-ui-v1-components 0.9.15 → 0.9.17

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 (71) hide show
  1. package/assets/sprites/map-and-places/navigate.svg +3 -0
  2. package/dist/host.cjs +1229 -616
  3. package/dist/host.css +346 -0
  4. package/dist/host.d.ts +300 -118
  5. package/dist/host.js +1229 -616
  6. package/dist/remote.cjs +501 -61
  7. package/dist/remote.d.ts +667 -81
  8. package/dist/remote.js +502 -62
  9. package/docs/COMPONENTS.md +4 -0
  10. package/docs/FORMAT.md +19 -0
  11. package/docs/PROFILES.md +2 -0
  12. package/docs/profiles/UiAddButton.yml +12 -0
  13. package/docs/profiles/UiAlert.yml +12 -0
  14. package/docs/profiles/UiAvatar.yml +12 -0
  15. package/docs/profiles/UiAvatarList.yml +12 -0
  16. package/docs/profiles/UiButton.yml +8 -0
  17. package/docs/profiles/UiCalendar.yml +12 -0
  18. package/docs/profiles/UiCheckbox.yml +12 -0
  19. package/docs/profiles/UiCollapse.yml +12 -0
  20. package/docs/profiles/UiCollapseBox.yml +12 -0
  21. package/docs/profiles/UiCollapseGroup.yml +12 -0
  22. package/docs/profiles/UiCopyButton.yml +12 -0
  23. package/docs/profiles/UiDate.yml +12 -0
  24. package/docs/profiles/UiDatePicker.yml +12 -0
  25. package/docs/profiles/UiError.yml +12 -0
  26. package/docs/profiles/UiField.yml +5 -1
  27. package/docs/profiles/UiImage.yml +12 -0
  28. package/docs/profiles/UiInfobox.yml +12 -0
  29. package/docs/profiles/UiLink.yml +12 -0
  30. package/docs/profiles/UiLoader.yml +12 -0
  31. package/docs/profiles/UiMenuItem.yml +12 -0
  32. package/docs/profiles/UiMenuItemGroup.yml +12 -0
  33. package/docs/profiles/UiModalSidebar.yml +12 -0
  34. package/docs/profiles/UiModalWindow.yml +12 -0
  35. package/docs/profiles/UiModalWindowSurface.yml +12 -0
  36. package/docs/profiles/UiNumberStepper.yml +12 -0
  37. package/docs/profiles/UiPageHeader.yml +5 -1
  38. package/docs/profiles/UiPopper.yml +5 -1
  39. package/docs/profiles/UiPopperConnector.yml +6 -0
  40. package/docs/profiles/UiPopperTarget.yml +6 -0
  41. package/docs/profiles/UiRadio.yml +12 -0
  42. package/docs/profiles/UiRadioSwitch.yml +7 -0
  43. package/docs/profiles/UiRadioSwitchOption.yml +8 -0
  44. package/docs/profiles/UiScrollBox.yml +12 -0
  45. package/docs/profiles/UiSelect.yml +9 -0
  46. package/docs/profiles/UiSelectOption.yml +12 -0
  47. package/docs/profiles/UiSelectOptionGroup.yml +12 -0
  48. package/docs/profiles/UiSkeleton.yml +41 -0
  49. package/docs/profiles/UiSlider.yml +12 -0
  50. package/docs/profiles/UiSwitch.yml +12 -0
  51. package/docs/profiles/UiTab.yml +5 -0
  52. package/docs/profiles/UiTabGroup.yml +5 -0
  53. package/docs/profiles/UiTable.yml +5 -1
  54. package/docs/profiles/UiTableBodyCell.yml +12 -0
  55. package/docs/profiles/UiTableColumn.yml +12 -0
  56. package/docs/profiles/UiTableFooterButton.yml +12 -0
  57. package/docs/profiles/UiTableFooterSection.yml +12 -0
  58. package/docs/profiles/UiTableHeadCell.yml +12 -0
  59. package/docs/profiles/UiTableSorter.yml +12 -0
  60. package/docs/profiles/UiTag.yml +12 -0
  61. package/docs/profiles/UiTextbox.yml +5 -1
  62. package/docs/profiles/UiTimePicker.yml +12 -0
  63. package/docs/profiles/UiToggleButton.yml +211 -0
  64. package/docs/profiles/UiToggleGroup.yml +211 -0
  65. package/docs/profiles/UiToggleGroupOption.yml +116 -0
  66. package/docs/profiles/UiToolbarButton.yml +12 -0
  67. package/docs/profiles/UiToolbarLink.yml +12 -0
  68. package/docs/profiles/UiTooltip.yml +12 -0
  69. package/docs/profiles/UiTransition.yml +12 -0
  70. package/docs/profiles/UiYandexMap.yml +12 -0
  71. package/package.json +2 -2
@@ -0,0 +1,211 @@
1
+ component: UiToggleGroup
2
+ summary: >
3
+ UiToggleGroup is a segmented multi-select control built from toggle buttons. It is
4
+ designed for short always-visible choice sets such as weekdays, filters, or compact
5
+ mode flags where classic checkboxes would feel visually heavy. For richer option
6
+ markup, compose it with UiToggleGroupOption instead of relying only on the options array.
7
+
8
+ public_import:
9
+ from: '@retailcrm/embed-ui-v1-components/remote'
10
+ named:
11
+ - UiToggleGroup
12
+ - UiToggleGroupOption
13
+
14
+ related_components:
15
+ - UiToggleButton
16
+ - UiCheckbox
17
+ - UiRadioSwitch
18
+
19
+ use_when:
20
+ - You need multiple independent selections from a short fixed set.
21
+ - You want checkbox-like semantics with segmented button visuals.
22
+ - You need a compact weekday picker, filter strip, or channel selector.
23
+ - You need object values and must compare them through equalFn.
24
+
25
+ avoid_when:
26
+ - You need exactly one selected value, use UiRadioSwitch or UiRadio instead.
27
+ - You need long lists, search, or popper-based selection, use UiSelect instead.
28
+ - You need classic visible checkbox affordances rather than segmented buttons.
29
+
30
+ api:
31
+ key_props:
32
+ - name: model
33
+ notes: Array of selected values.
34
+ - name: options
35
+ notes: Quick array-based declaration for simple label and value pairs.
36
+ - name: equalFn
37
+ notes: Important when option values are objects or other non-primitives.
38
+ - name: size
39
+ values:
40
+ - lg
41
+ - md
42
+ - sm
43
+ - xs
44
+ notes: Controls segment geometry through UiToggleButton sizing.
45
+ - name: rubber
46
+ notes: Keeps the root content-sized instead of stretching.
47
+ - name: disabled
48
+ notes: Disables the whole group.
49
+ props:
50
+ - name: ariaLabel
51
+ notes: Accessible name for the group root.
52
+ - name: ariaLabelledby
53
+ notes: External label reference for the group root.
54
+ - name: ariaDescribedby
55
+ notes: External description reference for the group root.
56
+ - name: ariaOrientation
57
+ values:
58
+ - horizontal
59
+ - vertical
60
+ notes: Orientation hint exposed on the root, defaults to horizontal.
61
+ child_components:
62
+ - name: UiToggleGroupOption
63
+ key_props:
64
+ - value
65
+ - label
66
+ - disabled
67
+ notes: Use it for manual option declaration, per-option slots, or richer values.
68
+ slots:
69
+ - name: default
70
+ zone: option tree
71
+ creates: Replaces array-based options with manually declared UiToggleGroupOption nodes.
72
+ accepts:
73
+ recommended:
74
+ - UiToggleGroupOption
75
+ avoid:
76
+ - arbitrary interactive descendants
77
+ - unrelated wrappers
78
+ notes: Use for richer per-option composition than the plain options array allows.
79
+ - name: icon
80
+ zone: shared option icon in options mode
81
+ notes: Used only when the options array mode renders generated options.
82
+ emits:
83
+ - name: change
84
+ payload: unknown[]
85
+ notes: Fired when the selected model changes.
86
+ - name: update:model
87
+ payload: unknown[]
88
+ notes: Main v-model channel for selected values.
89
+
90
+ rendered_structure:
91
+ descriptive_only: true
92
+ notes: >
93
+ UiToggleGroup currently renders one span root and a list of button-based option
94
+ shells. This section is for reasoning and debugging, not as a stable selector contract.
95
+ composition:
96
+ - span.ui-v1-toggle-group with role=toolbar by default
97
+ - UiToggleGroupOption children rendered as button roots with grouped toggle-button styling
98
+ - each option exposes checkbox-like role and checked state
99
+ root:
100
+ shape: span.ui-v1-toggle-group
101
+ tag: span
102
+ classes:
103
+ - .ui-v1-toggle-group
104
+ - .ui-v1-toggle-group_rubber
105
+ - .ui-v1-toggle-group_disabled
106
+ - .ui-v1-toggle-group_lg
107
+ - .ui-v1-toggle-group_md
108
+ - .ui-v1-toggle-group_sm
109
+ - .ui-v1-toggle-group_xs
110
+
111
+ geometry:
112
+ layout: inline-flex capable segmented row
113
+ root_display:
114
+ default: flex
115
+ rubber: inline-flex
116
+ width_behavior: stretches by default, content-sized with rubber
117
+ notes:
118
+ - The root uses a span tag, but its computed layout is flex-based rather than text-like.
119
+ - The root is flex-based and keeps adjacent segments visually merged.
120
+ - rubber keeps the group content-sized.
121
+ - Without rubber, the root behaves like a stretchable flex container.
122
+ - Size is shared across all segments through root-level CSS variables.
123
+
124
+ styling:
125
+ notes:
126
+ - Prefer size, rubber, disabled, and option-level props over selector overrides.
127
+ - The group root mainly controls shared sizing variables; per-segment visuals live in UiToggleButton.
128
+ root_classes:
129
+ - .ui-v1-toggle-group
130
+ state_classes:
131
+ - .ui-v1-toggle-group_rubber
132
+ - .ui-v1-toggle-group_disabled
133
+ - .ui-v1-toggle-group_lg
134
+ - .ui-v1-toggle-group_md
135
+ - .ui-v1-toggle-group_sm
136
+ - .ui-v1-toggle-group_xs
137
+ css_variables:
138
+ shared_segment_variables:
139
+ - name: --ui-v1-toggle-button-height
140
+ effect: Shared segment height for the selected group size.
141
+ - name: --ui-v1-toggle-button-min-width
142
+ effect: Shared segment minimum width.
143
+ - name: --ui-v1-toggle-button-padding-x
144
+ effect: Shared horizontal padding of each segment.
145
+ - name: --ui-v1-toggle-button-radius
146
+ effect: Shared edge radius for the grouped row.
147
+ - name: --ui-v1-toggle-button-icon-size
148
+ effect: Shared icon size of group options.
149
+ - name: --ui-v1-toggle-button-content-gap
150
+ effect: Shared gap between option icon and label.
151
+
152
+ behavior:
153
+ states:
154
+ - name: disabled
155
+ notes: Disables the whole group and all options.
156
+ - name: rubber
157
+ notes: Keeps the group sized to content.
158
+ - name: option disabled
159
+ notes: Individual disabled options stay visible but are not interactive.
160
+ selection_and_matching:
161
+ - The component is always multi-select.
162
+ - Clicking an enabled option toggles its presence in model.
163
+ - update:model and change are emitted together on every toggle.
164
+ - equalFn should usually be provided when values are objects.
165
+ - In options mode the component generates UiToggleGroupOption nodes internally.
166
+ keyboard:
167
+ - One tab stop is used for the whole group through roving tabindex.
168
+ - ArrowLeft, ArrowRight, ArrowUp, and ArrowDown move focus across enabled options.
169
+ - Home and End jump to the first or last enabled option.
170
+ - Space and Enter toggle the currently focused option.
171
+ - Disabled options are skipped by keyboard navigation.
172
+
173
+ accessibility:
174
+ notes:
175
+ - The root exposes role=toolbar by default and supports aria-label, aria-labelledby, aria-describedby, and aria-orientation.
176
+ - Each option exposes role=checkbox together with aria-checked and aria-disabled.
177
+ - The current implementation uses roving tabindex so only one option is tabbable at a time.
178
+
179
+ composition:
180
+ works_well_with:
181
+ - UiField
182
+ - UiToggleGroupOption
183
+ - compact filter rows
184
+ patterns:
185
+ - title: Weekday picker
186
+ notes: Use a short visible set of seven options with multi-select model.
187
+ - title: Filter chips with icon
188
+ notes: Use manual option composition or the shared icon slot for compact filters.
189
+
190
+ examples:
191
+ - title: Weekday selection
192
+ goal: Build a segmented multi-select weekday picker.
193
+ code: |
194
+ <UiToggleGroup
195
+ v-model:model="days"
196
+ aria-label="Weekdays"
197
+ rubber
198
+ >
199
+ <UiToggleGroupOption label="Mon" value="monday" />
200
+ <UiToggleGroupOption label="Tue" value="tuesday" />
201
+ <UiToggleGroupOption label="Wed" value="wednesday" />
202
+ </UiToggleGroup>
203
+
204
+ ai_notes:
205
+ do:
206
+ - Prefer options for simple text-only sets.
207
+ - Switch to UiToggleGroupOption when an option needs icon, custom label, or richer value handling.
208
+ - Add an accessible name through ariaLabel or ariaLabelledby.
209
+ avoid:
210
+ - Do not use UiToggleGroup for single-select flows.
211
+ - Do not treat internal .ui-v1-* classes as a stable extension styling API.
@@ -0,0 +1,116 @@
1
+ component: UiToggleGroupOption
2
+ summary: >
3
+ UiToggleGroupOption is the declarative option child of UiToggleGroup. It is the
4
+ richer alternative to the plain options array and is used when one segment needs
5
+ custom icon, custom label markup, or a non-trivial value.
6
+
7
+ public_import:
8
+ from: '@retailcrm/embed-ui-v1-components/remote'
9
+ named:
10
+ - UiToggleGroupOption
11
+ - UiToggleGroup
12
+
13
+ related_components:
14
+ - UiToggleGroup
15
+ - UiToggleButton
16
+
17
+ use_when:
18
+ - You need one manually declared option inside UiToggleGroup.
19
+ - One option needs icon slot or custom label markup.
20
+ - You need explicit per-option disabled state or rich values.
21
+
22
+ avoid_when:
23
+ - A simple options array on UiToggleGroup is enough.
24
+ - You need a standalone checkbox-like control outside UiToggleGroup.
25
+
26
+ api:
27
+ key_props:
28
+ - name: value
29
+ notes: Required option value.
30
+ - name: label
31
+ notes: Plain-text fallback label.
32
+ - name: disabled
33
+ notes: Marks this option as non-interactive.
34
+ props:
35
+ - name: id
36
+ notes: Optional explicit id, otherwise generated automatically.
37
+ - name: value
38
+ notes: Required and toggled in the parent group model.
39
+ - name: label
40
+ notes: Optional when label slot is used.
41
+ - name: disabled
42
+ notes: Excluded from toggling and keyboard navigation.
43
+ slots:
44
+ - name: default
45
+ zone: full option content
46
+ notes: Replaces the default icon plus label composition.
47
+ - name: icon
48
+ zone: leading icon
49
+ notes: Adds a custom icon before the label.
50
+ - name: label
51
+ zone: main label
52
+ notes: Overrides the plain label prop.
53
+
54
+ rendered_structure:
55
+ descriptive_only: true
56
+ notes: >
57
+ UiToggleGroupOption does not own the selection model. It is rendered inside
58
+ UiToggleGroup and becomes one grouped UiToggleButton with checkbox-like semantics.
59
+ root:
60
+ shape: button.ui-v1-toggle-button.ui-v1-toggle-button_grouped
61
+ tag: button
62
+
63
+ geometry:
64
+ layout: inline-flex grouped segment inside a flex row
65
+ root_display: inline-flex
66
+ width_behavior: flexible within the parent group row
67
+ notes:
68
+ - The option is not intended as a standalone layout primitive.
69
+ - Final width and edge radii are defined by the parent group composition.
70
+
71
+ behavior:
72
+ states:
73
+ - name: disabled
74
+ notes: Cannot be toggled and is skipped by keyboard navigation.
75
+ - name: checked
76
+ notes: Managed by the parent UiToggleGroup.
77
+ - name: focused
78
+ notes: Managed through the parent roving tabindex logic.
79
+ notes:
80
+ - Click toggles the option through the parent group.
81
+ - Space and Enter toggle the focused option.
82
+ - Arrow keys, Home, and End delegate focus movement through the parent group.
83
+
84
+ accessibility:
85
+ notes:
86
+ - The rendered option uses a native button root.
87
+ - The parent composition applies role=checkbox together with aria-checked and aria-disabled.
88
+ - The current implementation participates in roving tabindex managed by UiToggleGroup.
89
+
90
+ composition:
91
+ works_well_with:
92
+ - UiToggleGroup
93
+ patterns:
94
+ - title: Icon segment
95
+ notes: Use icon slot when one segment needs an icon before the label.
96
+ - title: Custom label content
97
+ notes: Use label or default slot when the option needs richer inline markup.
98
+
99
+ examples:
100
+ - title: Icon option inside a group
101
+ goal: Define one rich segmented option with icon content.
102
+ code: |
103
+ <UiToggleGroup v-model:model="filters" aria-label="Filters">
104
+ <UiToggleGroupOption label="Files" value="files">
105
+ <template #icon>
106
+ <IconFile />
107
+ </template>
108
+ </UiToggleGroupOption>
109
+ </UiToggleGroup>
110
+
111
+ ai_notes:
112
+ do:
113
+ - Use inside UiToggleGroup when one option needs richer content than the options array allows.
114
+ - Prefer label prop for plain text and slots for richer content.
115
+ avoid:
116
+ - Do not use it as a standalone control outside UiToggleGroup.
@@ -23,3 +23,15 @@ api:
23
23
  - name: click
24
24
  - name: focus
25
25
  - name: blur
26
+
27
+ rendered_structure:
28
+ descriptive_only: true
29
+ root:
30
+ shape: button.ui-v1-button or a.ui-v1-button via UiButton
31
+ tag: button or a
32
+ notes: The component delegates its actual root element and layout behavior to UiButton.
33
+
34
+ geometry:
35
+ layout: compact toolbar action
36
+ root_display: inline-block
37
+ width_behavior: content-sized by default
@@ -18,3 +18,15 @@ api:
18
18
  - name: click
19
19
  - name: focus
20
20
  - name: blur
21
+
22
+ rendered_structure:
23
+ descriptive_only: true
24
+ root:
25
+ shape: a.ui-v1-link via UiLink
26
+ tag: a
27
+ notes: The component delegates its actual root element and layout behavior to UiLink.
28
+
29
+ geometry:
30
+ layout: compact toolbar link
31
+ root_display: inline-flex
32
+ width_behavior: content-sized by default
@@ -26,6 +26,18 @@ api:
26
26
  - name: targetTriggers
27
27
  - name: popperTriggers
28
28
 
29
+ rendered_structure:
30
+ descriptive_only: true
31
+ root:
32
+ shape: div.ui-v1-popper via UiPopper
33
+ tag: div
34
+ notes: The component delegates the actual floating root to UiPopper and renders its content inside the popper body.
35
+
36
+ geometry:
37
+ layout: floating tooltip layer outside normal document flow
38
+ root_display: block
39
+ width_behavior: content-sized by tooltip content
40
+
29
41
  ai_notes:
30
42
  do:
31
43
  - Use UiTooltip for tooltip semantics and UiPopper for lower-level floating behavior.
@@ -13,3 +13,15 @@ use_when:
13
13
 
14
14
  avoid_when:
15
15
  - You need static content with no transition behavior.
16
+
17
+ rendered_structure:
18
+ descriptive_only: true
19
+ root:
20
+ shape: no persistent DOM root
21
+ tag: none
22
+ notes: The component is a thin wrapper around the native Vue transition and forwards its slot content.
23
+
24
+ geometry:
25
+ layout: no standalone layout of its own
26
+ root_display: none
27
+ width_behavior: defined entirely by the transitioned child
@@ -15,3 +15,15 @@ use_when:
15
15
  avoid_when:
16
16
  - You can solve the task without an embedded map and do not want to depend on an unstable component.
17
17
  - You only need text address output.
18
+
19
+ rendered_structure:
20
+ descriptive_only: true
21
+ root:
22
+ shape: div.ui-v1-yandex-map
23
+ tag: div
24
+ notes: The root is one map container that hosts the Yandex map instance.
25
+
26
+ geometry:
27
+ layout: block-like map container
28
+ root_display: flex
29
+ width_behavior: stretches to container width by default
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.15",
5
+ "version": "0.9.17",
6
6
  "license": "MIT",
7
7
  "author": "RetailDriverLLC <integration@retailcrm.ru>",
8
8
  "repository": "git@github.com:retailcrm/embed-ui.git",
@@ -83,7 +83,7 @@
83
83
  "@vitest/browser-playwright": "4.0.15",
84
84
  "@vue/compiler-sfc": "^3.5.25",
85
85
  "@vue/test-utils": "^2.4.6",
86
- "@yandex/ymaps3-types": "^0.0.21",
86
+ "@yandex/ymaps3-types": "^1.0.19072130",
87
87
  "highlight.js": "^11.11.1",
88
88
  "less": "^4.4.2",
89
89
  "playwright": "1.58.2",