@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.
- package/AGENTS.md +126 -0
- package/README.md +24 -0
- package/assets/sprites/map-and-places/navigate.svg +3 -0
- package/assets/stylesheets/palette.less +11 -6
- package/bin/embed-ui-v1-components.mjs +209 -0
- package/bin/postinstall.mjs +37 -0
- package/dist/host.cjs +2443 -657
- package/dist/host.css +920 -6
- package/dist/host.d.ts +2440 -6
- package/dist/host.js +2444 -658
- package/dist/remote.cjs +1009 -46
- package/dist/remote.d.ts +1240 -67
- package/dist/remote.js +1011 -48
- package/docs/AI.md +106 -0
- package/docs/COMPONENTS.md +99 -0
- package/docs/FORMAT.md +267 -0
- package/docs/PROFILES.md +66 -0
- package/docs/README.md +65 -0
- package/docs/STYLING.md +156 -0
- package/docs/profiles/UiAddButton.yml +57 -0
- package/docs/profiles/UiAlert.yml +48 -0
- package/docs/profiles/UiAvatar.yml +48 -0
- package/docs/profiles/UiAvatarList.yml +42 -0
- package/docs/profiles/UiButton.yml +229 -0
- package/docs/profiles/UiCalendar.yml +48 -0
- package/docs/profiles/UiCheckbox.yml +53 -0
- package/docs/profiles/UiCollapse.yml +40 -0
- package/docs/profiles/UiCollapseBox.yml +51 -0
- package/docs/profiles/UiCollapseGroup.yml +39 -0
- package/docs/profiles/UiCopyButton.yml +52 -0
- package/docs/profiles/UiDate.yml +38 -0
- package/docs/profiles/UiDatePicker.yml +59 -0
- package/docs/profiles/UiError.yml +32 -0
- package/docs/profiles/UiField.yml +233 -0
- package/docs/profiles/UiImage.yml +39 -0
- package/docs/profiles/UiInfobox.yml +45 -0
- package/docs/profiles/UiLink.yml +51 -0
- package/docs/profiles/UiLoader.yml +38 -0
- package/docs/profiles/UiMenuItem.yml +57 -0
- package/docs/profiles/UiMenuItemGroup.yml +50 -0
- package/docs/profiles/UiModalSidebar.yml +46 -0
- package/docs/profiles/UiModalWindow.yml +44 -0
- package/docs/profiles/UiModalWindowSurface.yml +41 -0
- package/docs/profiles/UiNumberStepper.yml +52 -0
- package/docs/profiles/UiPageHeader.yml +244 -0
- package/docs/profiles/UiPopper.yml +201 -0
- package/docs/profiles/UiPopperConnector.yml +115 -0
- package/docs/profiles/UiPopperTarget.yml +118 -0
- package/docs/profiles/UiRadio.yml +38 -0
- package/docs/profiles/UiRadioSwitch.yml +231 -0
- package/docs/profiles/UiRadioSwitchOption.yml +121 -0
- package/docs/profiles/UiScrollBox.yml +31 -0
- package/docs/profiles/UiSelect.yml +327 -0
- package/docs/profiles/UiSelectOption.yml +44 -0
- package/docs/profiles/UiSelectOptionGroup.yml +38 -0
- package/docs/profiles/UiSlider.yml +38 -0
- package/docs/profiles/UiSwitch.yml +37 -0
- package/docs/profiles/UiTab.yml +119 -0
- package/docs/profiles/UiTabGroup.yml +238 -0
- package/docs/profiles/UiTable.yml +152 -0
- package/docs/profiles/UiTableBodyCell.yml +47 -0
- package/docs/profiles/UiTableColumn.yml +50 -0
- package/docs/profiles/UiTableFooterButton.yml +44 -0
- package/docs/profiles/UiTableFooterSection.yml +38 -0
- package/docs/profiles/UiTableHeadCell.yml +44 -0
- package/docs/profiles/UiTableSorter.yml +45 -0
- package/docs/profiles/UiTag.yml +41 -0
- package/docs/profiles/UiTextbox.yml +392 -0
- package/docs/profiles/UiTimePicker.yml +46 -0
- package/docs/profiles/UiToggleButton.yml +211 -0
- package/docs/profiles/UiToggleGroup.yml +211 -0
- package/docs/profiles/UiToggleGroupOption.yml +116 -0
- package/docs/profiles/UiToolbarButton.yml +37 -0
- package/docs/profiles/UiToolbarLink.yml +32 -0
- package/docs/profiles/UiTooltip.yml +43 -0
- package/docs/profiles/UiTransition.yml +27 -0
- package/docs/profiles/UiYandexMap.yml +29 -0
- 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.
|