@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,40 @@
1
+ component: UiCollapse
2
+ summary: >
3
+ UiCollapse is a low-level show and hide container for expandable content. It controls
4
+ whether content is hidden or disposed and how the transition behaves.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiCollapse
10
+
11
+ use_when:
12
+ - You need conditional expandable content.
13
+ - You need to choose between hidden and disposed collapsed states.
14
+
15
+ avoid_when:
16
+ - You need a ready-to-use disclosure box with header UI, use UiCollapseBox instead.
17
+
18
+ api:
19
+ key_props:
20
+ - name: expanded
21
+ - name: collapseBehaviour
22
+ - name: duration
23
+
24
+ rendered_structure:
25
+ descriptive_only: true
26
+ root:
27
+ shape: div.ui-v1-collapse
28
+ tag: div
29
+ notes: The animated container is wrapped in a native transition and exists only while shown or expanded.
30
+
31
+ geometry:
32
+ layout: block-like animated container
33
+ root_display: block
34
+ width_behavior: stretches to container width by default
35
+
36
+ ai_notes:
37
+ do:
38
+ - Use UiCollapse as a primitive for expandable content regions.
39
+ avoid:
40
+ - Do not use it when a full disclosure component is the actual need.
@@ -0,0 +1,51 @@
1
+ component: UiCollapseBox
2
+ summary: >
3
+ UiCollapseBox is a structured expandable container with built-in header, state handling,
4
+ and visual treatment. It is a higher-level companion to UiCollapse.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiCollapseBox
10
+
11
+ related_components:
12
+ - UiCollapse
13
+ - UiCollapseGroup
14
+
15
+ use_when:
16
+ - You need a ready-to-use collapsible box.
17
+ - You need grouped expandable sections with consistent visuals.
18
+
19
+ avoid_when:
20
+ - You need a bare collapse primitive without box chrome.
21
+
22
+ api:
23
+ key_props:
24
+ - name: expanded
25
+ - name: expandable
26
+ - name: collapsible
27
+ - name: toggleable
28
+ - name: disabled
29
+ - name: color
30
+
31
+ rendered_structure:
32
+ descriptive_only: true
33
+ root:
34
+ shape: section.ui-v1-collapse-box
35
+ tag: section
36
+ notes: Renders one section root with a header button and a collapsible body region.
37
+
38
+ geometry:
39
+ layout: block-like collapsible section
40
+ root_display: flex
41
+ width_behavior: stretches to container width by default
42
+
43
+ behavior:
44
+ notes:
45
+ - Supports controlled expanded state and grouped interaction.
46
+
47
+ ai_notes:
48
+ do:
49
+ - Use UiCollapseBox for structured disclosure UI.
50
+ avoid:
51
+ - Do not rebuild collapse header UI manually when this component already fits.
@@ -0,0 +1,39 @@
1
+ component: UiCollapseGroup
2
+ summary: >
3
+ UiCollapseGroup coordinates several collapse boxes and tracks which box is active.
4
+ It is useful when multiple disclosures should behave as one grouped unit.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiCollapseGroup
10
+
11
+ related_components:
12
+ - UiCollapseBox
13
+
14
+ use_when:
15
+ - You need several collapse boxes to coordinate state.
16
+ - You need one active box pattern.
17
+
18
+ avoid_when:
19
+ - You only have one collapsible section.
20
+
21
+ api:
22
+ key_props:
23
+ - name: activeBoxId
24
+
25
+ rendered_structure:
26
+ descriptive_only: true
27
+ root:
28
+ shape: div
29
+ tag: div
30
+ notes: Current implementation is an unstyled wrapper that coordinates child UiCollapseBox nodes.
31
+
32
+ geometry:
33
+ layout: block wrapper for stacked collapse boxes
34
+ root_display: block
35
+ width_behavior: stretches to container width by default
36
+
37
+ ai_notes:
38
+ do:
39
+ - Use with UiCollapseBox when grouped expansion matters.
@@ -0,0 +1,52 @@
1
+ component: UiCopyButton
2
+ summary: >
3
+ UiCopyButton is an action component for copying text values with tooltip feedback.
4
+ It wraps copy behavior and copied-state hinting into one compact UI.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiCopyButton
10
+
11
+ related_components:
12
+ - UiTooltip
13
+ - UiButton
14
+
15
+ use_when:
16
+ - You need a copy-to-clipboard action for a value.
17
+ - You need built-in hint and copied-state tooltip text.
18
+
19
+ avoid_when:
20
+ - You need a generic button with no copy semantics.
21
+
22
+ api:
23
+ key_props:
24
+ - name: text
25
+ - name: size
26
+ - name: tooltipOptions
27
+ slots:
28
+ - name: trigger
29
+ zone: trigger
30
+ creates: Visible trigger content.
31
+ - name: hint
32
+ zone: tooltip
33
+ creates: Default tooltip content.
34
+ - name: hint-copied
35
+ zone: tooltip
36
+ creates: Tooltip content after copy succeeds.
37
+
38
+ rendered_structure:
39
+ descriptive_only: true
40
+ root:
41
+ shape: div.ui-v1-copy-button
42
+ tag: div
43
+ notes: The root wraps the trigger, tooltip, and fallback input for clipboard support.
44
+
45
+ geometry:
46
+ layout: inline trigger wrapper
47
+ root_display: inline-block
48
+ width_behavior: content-sized by default
49
+
50
+ ai_notes:
51
+ do:
52
+ - Use for copy-specific flows instead of recreating copy state manually.
@@ -0,0 +1,38 @@
1
+ component: UiDate
2
+ summary: >
3
+ UiDate is a display component for formatted date or date-time output. It is for presenting
4
+ date values, not for editing them.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiDate
10
+
11
+ use_when:
12
+ - You need to display a date value.
13
+ - You need optional time display with locale-aware formatting.
14
+
15
+ avoid_when:
16
+ - You need editable date input.
17
+
18
+ api:
19
+ key_props:
20
+ - name: date
21
+ - name: withTime
22
+ - name: locale
23
+
24
+ rendered_structure:
25
+ descriptive_only: true
26
+ root:
27
+ shape: time
28
+ tag: time
29
+ notes: Renders one semantic time element with formatted date text.
30
+
31
+ geometry:
32
+ layout: inline date text
33
+ root_display: inline
34
+ width_behavior: content-sized by content
35
+
36
+ ai_notes:
37
+ do:
38
+ - Use UiDate for formatted output and UiDatePicker for input.
@@ -0,0 +1,59 @@
1
+ component: UiDatePicker
2
+ summary: >
3
+ UiDatePicker combines textbox-like date display, popper behavior, and calendar selection.
4
+ It supports single-date and range flows, constraints, and quick options.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiDatePicker
10
+
11
+ related_components:
12
+ - UiCalendar
13
+ - UiTextbox
14
+ - UiPopper
15
+
16
+ use_when:
17
+ - You need editable date input.
18
+ - You need date-range selection through a textbox-plus-popup flow.
19
+
20
+ avoid_when:
21
+ - You need always-visible inline calendar selection only.
22
+
23
+ api:
24
+ key_props:
25
+ - name: value
26
+ - name: type
27
+ - name: minDate
28
+ - name: maxDate
29
+ - name: nullable
30
+ - name: synchronization
31
+ - name: quickOptions
32
+ - name: textboxOptions
33
+ methods:
34
+ - name: open
35
+ - name: close
36
+ - name: toggle
37
+
38
+ rendered_structure:
39
+ descriptive_only: true
40
+ root:
41
+ shape: span.ui-v1-date-picker
42
+ tag: span
43
+ notes: The visible trigger behaves like an inline date control that opens a floating calendar.
44
+
45
+ geometry:
46
+ layout: inline date input trigger
47
+ root_display: inline-block
48
+ width_behavior: content-sized by default
49
+
50
+ behavior:
51
+ notes:
52
+ - Supports single-date and range flows.
53
+ - synchronization controls instant versus confirmed behavior.
54
+
55
+ ai_notes:
56
+ do:
57
+ - Prefer UiDatePicker for typed or popup date input.
58
+ avoid:
59
+ - Do not use UiCalendar directly if a textbox trigger is expected.
@@ -0,0 +1,32 @@
1
+ component: UiError
2
+ summary: >
3
+ UiError is a compact error-state component for short error messages or fallback states.
4
+ It is intended for concise inline error display rather than large alert copy.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiError
10
+
11
+ use_when:
12
+ - You need a compact error block.
13
+ - You need inline error text with standard styling.
14
+
15
+ avoid_when:
16
+ - You need a richer feedback block, use UiAlert or UiInfobox instead.
17
+
18
+ rendered_structure:
19
+ descriptive_only: true
20
+ root:
21
+ shape: div.ui-v1-error
22
+ tag: div
23
+ notes: Renders one text container for error content.
24
+
25
+ geometry:
26
+ layout: block-like error text container
27
+ root_display: block
28
+ width_behavior: stretches to container width by default
29
+
30
+ ai_notes:
31
+ do:
32
+ - Use for compact error presentation.
@@ -0,0 +1,233 @@
1
+ component: UiField
2
+ summary: >
3
+ UiField is a remote-only form field wrapper. It connects a label and an inner control through
4
+ id and ARIA data, supports a hint tooltip near the label, and exposes an addon zone on the
5
+ right side of the headline.
6
+
7
+ public_import:
8
+ from: '@retailcrm/embed-ui-v1-components/remote'
9
+ named:
10
+ - UiField
11
+
12
+ related_components:
13
+ - UiTextbox
14
+ - UiSelect
15
+ - UiCheckbox
16
+ - UiDatePicker
17
+
18
+ use_when:
19
+ - You need a labeled form control with consistent field semantics.
20
+ - You need to pass id, aria-labelledby, and aria-invalid into an inner control.
21
+ - You need a hint tooltip near the field label.
22
+ - You want required, invalid, disabled, or readonly state at the field level.
23
+
24
+ avoid_when:
25
+ - You need a standalone control without label semantics.
26
+ - You need a generic layout container.
27
+ - You need to wrap several unrelated controls under one visual block.
28
+
29
+ api:
30
+ key_props:
31
+ - name: id
32
+ required: true
33
+ notes: Required identifier used to connect label and control.
34
+ - name: label
35
+ notes: Field label text.
36
+ - name: hint
37
+ notes: Hint tooltip text near the label.
38
+ - name: invalid
39
+ notes: Affects label styling and slot prop ariaInvalid.
40
+ - name: required
41
+ notes: Adds an asterisk to the label and is forwarded through slot props.
42
+ props:
43
+ - name: hintAriaLabel
44
+ notes: aria-label for the hint trigger.
45
+ - name: disabled
46
+ notes: Visually dims the field and is forwarded through slot props.
47
+ - name: readonly
48
+ notes: Forwarded through slot props to the inner control.
49
+ slots:
50
+ - name: default
51
+ zone: control
52
+ creates: The main control area of the field.
53
+ provides:
54
+ - id
55
+ - required
56
+ - disabled
57
+ - readonly
58
+ - invalid
59
+ - ariaLabelledby
60
+ - ariaInvalid
61
+ accepts:
62
+ recommended:
63
+ - one form control
64
+ - UiTextbox
65
+ - UiSelect
66
+ - UiDatePicker
67
+ avoid:
68
+ - several unrelated controls
69
+ - decorative layout only
70
+ - raw content without using slot props
71
+ layout_effect: The control sits below the headline and inherits field-level semantics through slot props.
72
+ notes: >
73
+ Place the actual form control here. In most cases, slot props should be forwarded into the control.
74
+ - name: label
75
+ zone: headline-label
76
+ creates: The label area inside the headline row.
77
+ accepts:
78
+ recommended:
79
+ - plain text
80
+ - short inline markup
81
+ - span
82
+ avoid:
83
+ - nested form controls
84
+ - large block layout
85
+ layout_effect: Replaces the default text label but stays in the label position.
86
+ notes: Custom label content.
87
+ - name: hint
88
+ zone: hint-tooltip
89
+ creates: Tooltip content for the hint trigger.
90
+ accepts:
91
+ recommended:
92
+ - plain text
93
+ - short helper markup
94
+ - compact rich content
95
+ avoid:
96
+ - interactive forms
97
+ - large composite layouts
98
+ layout_effect: Does not change field layout; only changes tooltip body content.
99
+ notes: Custom tooltip content instead of plain hint text.
100
+ - name: addon
101
+ zone: headline-addon
102
+ creates: An inline addon area on the right side of the headline.
103
+ accepts:
104
+ recommended:
105
+ - short text
106
+ - UiLink
107
+ - UiButton
108
+ - compact status badge
109
+ avoid:
110
+ - full form groups
111
+ - wide content blocks
112
+ layout_effect: Lives in the headline row and is pushed to the right.
113
+ notes: Extra inline content on the right side of the headline.
114
+
115
+ rendered_structure:
116
+ descriptive_only: true
117
+ notes: >
118
+ This is a debugging and reasoning model, not a public styling contract.
119
+ root:
120
+ shape: div.ui-v1-field
121
+ tag: div
122
+ zones:
123
+ - .ui-v1-field__headline
124
+ - .ui-v1-field__label
125
+ - hint trigger and tooltip
126
+ - .ui-v1-field__addon
127
+ - .ui-v1-field__control
128
+
129
+ geometry:
130
+ layout: grid
131
+ root_display: grid
132
+ width: 100%
133
+ min_width: 0
134
+ width_behavior: stretches to container width by default
135
+ notes:
136
+ - Root uses grid with a 4px gap.
137
+ - The headline is a flex row.
138
+ - The addon is pushed to the right with margin-left auto.
139
+ - The control zone keeps min-width 0 and shrinks correctly in flex and grid layouts.
140
+
141
+ styling:
142
+ notes:
143
+ - UiField styling mostly affects label, hint, and headline layout around the inner control.
144
+ - The inner control keeps its own styling system; UiField does not restyle it deeply.
145
+ - Classes are descriptive and should not be treated as a stable selector contract.
146
+ root_classes:
147
+ - .ui-v1-field
148
+ state_classes:
149
+ - .ui-v1-field_disabled
150
+ - .ui-v1-field_invalid
151
+ zones:
152
+ - .ui-v1-field__headline
153
+ - .ui-v1-field__label
154
+ - .ui-v1-field__required-mark
155
+ - .ui-v1-field__hint
156
+ - .ui-v1-field__hint-trigger
157
+ - .ui-v1-field__hint-icon
158
+ - .ui-v1-field__hint-tooltip
159
+ - .ui-v1-field__addon
160
+ - .ui-v1-field__control
161
+ css_variables:
162
+ public_theme_variables:
163
+ - name: --ui-v1-popper-background
164
+ effect: Hint tooltip background.
165
+ - name: --ui-v1-popper-padding
166
+ effect: Hint tooltip padding.
167
+ - name: --ui-v1-popper-roundings
168
+ effect: Hint tooltip corner radius.
169
+ typography:
170
+ label:
171
+ mixin: text-small-accent
172
+ size: 14px
173
+ line_height: 20px
174
+ weight: 500
175
+ addon:
176
+ mixin: text-small
177
+ size: 14px
178
+ line_height: 20px
179
+ weight: 400
180
+
181
+ behavior:
182
+ states:
183
+ - name: required
184
+ notes: Adds an asterisk to the label.
185
+ - name: invalid
186
+ notes: Tints the label and exposes ariaInvalid in slot props.
187
+ - name: disabled
188
+ notes: Visually dims the field.
189
+ - name: readonly
190
+ notes: Is forwarded to the inner control through slot props.
191
+ notes:
192
+ - If label is missing, ariaLabelledby in slot props is undefined.
193
+ - The hint is shown on hover and focus.
194
+
195
+ accessibility:
196
+ notes:
197
+ - The component does not render a control itself, so ARIA wiring must be completed in the default slot.
198
+ - A common pattern is field.id -> control id and field.ariaLabelledby or field.ariaInvalid -> input attributes.
199
+ - The hint trigger renders with role=button and tabindex=0.
200
+
201
+ composition:
202
+ works_well_with:
203
+ - UiTextbox
204
+ - UiSelect
205
+ - UiDatePicker
206
+ - UiTimePicker
207
+ patterns:
208
+ - title: Safe field wiring
209
+ notes: Use slot props for semantics, not just for visual wrapping.
210
+
211
+ examples:
212
+ - title: Text field with propagated semantics
213
+ goal: Build a text field with correct ARIA wiring.
214
+ code: |
215
+ <UiField id="comment" label="Comment" hint="Visible to managers">
216
+ <template #default="field">
217
+ <UiTextbox
218
+ :id="field.id"
219
+ :input-attributes="{
220
+ 'aria-labelledby': field.ariaLabelledby,
221
+ 'aria-invalid': field.ariaInvalid,
222
+ }"
223
+ />
224
+ </template>
225
+ </UiField>
226
+
227
+ ai_notes:
228
+ do:
229
+ - Forward slot props into the actual control in most form scenarios.
230
+ - Use UiField as a semantic wrapper for a single control.
231
+ avoid:
232
+ - Do not use UiField as a generic visual container without control semantics.
233
+ - Do not ignore id and ariaLabelledby when accessibility matters.
@@ -0,0 +1,39 @@
1
+ component: UiImage
2
+ summary: >
3
+ UiImage is a generic image display component with optional resize and crop hints.
4
+ Use it for regular visual content rather than identity avatars.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiImage
10
+
11
+ use_when:
12
+ - You need to render an image asset.
13
+ - You need resize or crop hints for image output.
14
+
15
+ avoid_when:
16
+ - You need identity-focused avatar UI.
17
+
18
+ api:
19
+ key_props:
20
+ - name: src
21
+ - name: alt
22
+ - name: resize
23
+ - name: crop
24
+
25
+ rendered_structure:
26
+ descriptive_only: true
27
+ root:
28
+ shape: img
29
+ tag: img
30
+ notes: The component renders a single image element.
31
+
32
+ geometry:
33
+ layout: replaced media element
34
+ root_display: inline-block
35
+ width_behavior: intrinsic by image source or explicit dimensions
36
+
37
+ ai_notes:
38
+ do:
39
+ - Use UiImage for general media and UiAvatar for people or identity.
@@ -0,0 +1,45 @@
1
+ component: UiInfobox
2
+ summary: >
3
+ UiInfobox is a richer explanatory block for inline product, warning, or helper content.
4
+ It can be closable and expandable.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiInfobox
10
+
11
+ use_when:
12
+ - You need a highlighted explanatory block.
13
+ - You need closable or expandable helper content.
14
+
15
+ avoid_when:
16
+ - You need a one-line alert only.
17
+
18
+ api:
19
+ key_props:
20
+ - name: title
21
+ - name: shown
22
+ - name: expanded
23
+ - name: expandable
24
+ - name: closable
25
+ - name: warning
26
+ methods:
27
+ - name: show
28
+ - name: hide
29
+ - name: toggle
30
+
31
+ rendered_structure:
32
+ descriptive_only: true
33
+ root:
34
+ shape: div.ui-v1-infobox
35
+ tag: div
36
+ notes: The visible infobox body is wrapped in UiTransition and uses one flex row for media, content, and optional closer.
37
+
38
+ geometry:
39
+ layout: block-like message panel
40
+ root_display: flex
41
+ width_behavior: stretches to container width by default
42
+
43
+ ai_notes:
44
+ do:
45
+ - Use UiInfobox for richer guidance blocks, not tiny alerts.
@@ -0,0 +1,51 @@
1
+ component: UiLink
2
+ summary: >
3
+ UiLink is the main text-link component for inline navigation and inline actions that should
4
+ still read as links rather than buttons.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiLink
10
+
11
+ use_when:
12
+ - You need inline navigation or linked text.
13
+ - You need a compact action that should still read as a link.
14
+
15
+ avoid_when:
16
+ - You need button semantics, use UiButton instead.
17
+
18
+ api:
19
+ key_props:
20
+ - name: href
21
+ - name: external
22
+ - name: appearance
23
+ - name: size
24
+ - name: accent
25
+ - name: ellipsis
26
+ slots:
27
+ - name: icon
28
+ zone: inline-icon
29
+ creates: Optional icon zone inside the link.
30
+ emits:
31
+ - name: click
32
+ - name: focus
33
+ - name: blur
34
+
35
+ rendered_structure:
36
+ descriptive_only: true
37
+ root:
38
+ shape: a.ui-v1-link
39
+ tag: a
40
+ notes: The root is one anchor element with inline icon and text zones.
41
+
42
+ geometry:
43
+ layout: inline link root
44
+ root_display: inline-flex
45
+ width_behavior: content-sized by default
46
+
47
+ ai_notes:
48
+ do:
49
+ - Use UiLink for real link semantics and inline navigation.
50
+ avoid:
51
+ - Do not use UiLink where the action should read as a button.