@retailcrm/embed-ui-v1-components 0.9.21 → 0.9.22-alpha.1

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 (96) hide show
  1. package/AGENTS.md +3 -3
  2. package/README.md +3 -4
  3. package/assets/sprites/actions/add-square-outlined.svg +8 -0
  4. package/assets/sprites/actions/drag.svg +8 -0
  5. package/bin/embed-ui-v1-components.mjs +227 -50
  6. package/bin/postinstall.mjs +2 -1
  7. package/dist/host.cjs +1204 -488
  8. package/dist/host.css +629 -0
  9. package/dist/host.d.ts +100 -20
  10. package/dist/host.js +1205 -489
  11. package/dist/remote.cjs +1210 -153
  12. package/dist/remote.d.ts +786 -36
  13. package/dist/remote.js +1212 -155
  14. package/docs/AI.md +19 -20
  15. package/docs/COMPONENTS.md +58 -59
  16. package/docs/FORMAT.md +6 -8
  17. package/docs/PROFILES.md +34 -21
  18. package/docs/README.md +3 -6
  19. package/docs/profiles/{UiAddButton.yml → components/UiAddButton.yml} +49 -2
  20. package/docs/profiles/{UiAlert.yml → components/UiAlert.yml} +32 -2
  21. package/docs/profiles/{UiAvatar.yml → components/UiAvatar.yml} +17 -3
  22. package/docs/profiles/{UiAvatarList.yml → components/UiAvatarList.yml} +0 -2
  23. package/docs/profiles/{UiButton.yml → components/UiButton.yml} +14 -1
  24. package/docs/profiles/components/UiCalendar.yml +190 -0
  25. package/docs/profiles/{UiCheckbox.yml → components/UiCheckbox.yml} +28 -2
  26. package/docs/profiles/{UiCollapse.yml → components/UiCollapse.yml} +57 -2
  27. package/docs/profiles/{UiCollapseBox.yml → components/UiCollapseBox.yml} +64 -2
  28. package/docs/profiles/{UiCollapseGroup.yml → components/UiCollapseGroup.yml} +0 -2
  29. package/docs/profiles/{UiCopyButton.yml → components/UiCopyButton.yml} +19 -2
  30. package/docs/profiles/{UiDate.yml → components/UiDate.yml} +20 -2
  31. package/docs/profiles/{UiDatePicker.yml → components/UiDatePicker.yml} +51 -2
  32. package/docs/profiles/{UiError.yml → components/UiError.yml} +48 -2
  33. package/docs/profiles/{UiField.yml → components/UiField.yml} +46 -1
  34. package/docs/profiles/{UiInfobox.yml → components/UiInfobox.yml} +54 -2
  35. package/docs/profiles/{UiLink.yml → components/UiLink.yml} +22 -2
  36. package/docs/profiles/{UiLoader.yml → components/UiLoader.yml} +0 -2
  37. package/docs/profiles/{UiMenuItem.yml → components/UiMenuItem.yml} +0 -2
  38. package/docs/profiles/{UiMenuItemGroup.yml → components/UiMenuItemGroup.yml} +0 -2
  39. package/docs/profiles/{UiModalSidebar.yml → components/UiModalSidebar.yml} +80 -2
  40. package/docs/profiles/components/UiModalWindow.yml +181 -0
  41. package/docs/profiles/{UiModalWindowSurface.yml → components/UiModalWindowSurface.yml} +0 -2
  42. package/docs/profiles/{UiNumberStepper.yml → components/UiNumberStepper.yml} +14 -2
  43. package/docs/profiles/{UiPageHeader.yml → components/UiPageHeader.yml} +39 -1
  44. package/docs/profiles/components/UiPopconfirm.yml +164 -0
  45. package/docs/profiles/{UiPopper.yml → components/UiPopper.yml} +66 -1
  46. package/docs/profiles/{UiPopperConnector.yml → components/UiPopperConnector.yml} +0 -2
  47. package/docs/profiles/{UiPopperTarget.yml → components/UiPopperTarget.yml} +0 -2
  48. package/docs/profiles/{UiRadio.yml → components/UiRadio.yml} +15 -2
  49. package/docs/profiles/{UiRadioSwitch.yml → components/UiRadioSwitch.yml} +55 -1
  50. package/docs/profiles/{UiRadioSwitchOption.yml → components/UiRadioSwitchOption.yml} +0 -2
  51. package/docs/profiles/{UiScrollBox.yml → components/UiScrollBox.yml} +45 -2
  52. package/docs/profiles/{UiSelect.yml → components/UiSelect.yml} +133 -1
  53. package/docs/profiles/{UiSelectOption.yml → components/UiSelectOption.yml} +0 -2
  54. package/docs/profiles/{UiSelectOptionGroup.yml → components/UiSelectOptionGroup.yml} +0 -2
  55. package/docs/profiles/{UiSkeleton.yml → components/UiSkeleton.yml} +11 -2
  56. package/docs/profiles/{UiSlider.yml → components/UiSlider.yml} +85 -2
  57. package/docs/profiles/{UiSwitch.yml → components/UiSwitch.yml} +50 -2
  58. package/docs/profiles/{UiTab.yml → components/UiTab.yml} +126 -2
  59. package/docs/profiles/{UiTabGroup.yml → components/UiTabGroup.yml} +0 -1
  60. package/docs/profiles/components/UiTable.yml +622 -0
  61. package/docs/profiles/{UiTableBodyCell.yml → components/UiTableBodyCell.yml} +0 -2
  62. package/docs/profiles/{UiTableColumn.yml → components/UiTableColumn.yml} +0 -2
  63. package/docs/profiles/{UiTableFooterButton.yml → components/UiTableFooterButton.yml} +0 -2
  64. package/docs/profiles/{UiTableFooterSection.yml → components/UiTableFooterSection.yml} +0 -2
  65. package/docs/profiles/{UiTableHeadCell.yml → components/UiTableHeadCell.yml} +0 -2
  66. package/docs/profiles/{UiTableSorter.yml → components/UiTableSorter.yml} +0 -2
  67. package/docs/profiles/{UiTag.yml → components/UiTag.yml} +13 -2
  68. package/docs/profiles/{UiTextbox.yml → components/UiTextbox.yml} +20 -1
  69. package/docs/profiles/{UiTimePicker.yml → components/UiTimePicker.yml} +60 -2
  70. package/docs/profiles/{UiToggleButton.yml → components/UiToggleButton.yml} +16 -1
  71. package/docs/profiles/{UiToggleGroup.yml → components/UiToggleGroup.yml} +25 -1
  72. package/docs/profiles/{UiToggleGroupOption.yml → components/UiToggleGroupOption.yml} +0 -2
  73. package/docs/profiles/{UiToolbarButton.yml → components/UiToolbarButton.yml} +15 -2
  74. package/docs/profiles/{UiToolbarLink.yml → components/UiToolbarLink.yml} +13 -2
  75. package/docs/profiles/{UiTooltip.yml → components/UiTooltip.yml} +18 -2
  76. package/docs/profiles/{UiTransition.yml → components/UiTransition.yml} +0 -2
  77. package/docs/profiles/{UiYandexMap.yml → components/UiYandexMap.yml} +24 -2
  78. package/docs/profiles/pages/CardSettingsPage.yml +58 -0
  79. package/docs/profiles/pages/CollapseBlockPage.yml +46 -0
  80. package/docs/profiles/pages/EntityListPage.yml +66 -0
  81. package/docs/profiles/pages/ModalSidebar.yml +158 -0
  82. package/docs/profiles/pages/ModalWindow.yml +55 -0
  83. package/docs/profiles/pages/MultiColumnPage.yml +27 -0
  84. package/docs/profiles/pages/PageComposition.yml +56 -0
  85. package/package.json +1 -1
  86. package/docs/AGENT-DESIGN-GUIDELINES.md +0 -463
  87. package/docs/assets/page-guidelines/card-settings-page.png +0 -0
  88. package/docs/assets/page-guidelines/collapse-block-page.png +0 -0
  89. package/docs/assets/page-guidelines/entity-list-page.png +0 -0
  90. package/docs/assets/page-guidelines/modal-sidebar.png +0 -0
  91. package/docs/assets/page-guidelines/modal-window.png +0 -0
  92. package/docs/assets/page-guidelines/multi-column-page.png +0 -0
  93. package/docs/profiles/UiCalendar.yml +0 -76
  94. package/docs/profiles/UiImage.yml +0 -67
  95. package/docs/profiles/UiModalWindow.yml +0 -86
  96. package/docs/profiles/UiTable.yml +0 -300
@@ -3,7 +3,6 @@ summary: >
3
3
  UiField is a remote-only form field wrapper. It connects a label and an inner control through
4
4
  id and ARIA data, supports a hint tooltip near the label, and exposes an addon zone on the
5
5
  right side of the headline.
6
- usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uifield--docs
7
6
 
8
7
  public_import:
9
8
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -16,6 +15,52 @@ related_components:
16
15
  - UiCheckbox
17
16
  - UiDatePicker
18
17
 
18
+ examples:
19
+ - title: Basic usage
20
+ code: |
21
+ <template>
22
+ <UiField id="name-field" label="Name" hint="At least 3 characters">
23
+ <template #default="field">
24
+ <UiTextbox
25
+ :id="field.id"
26
+ :input-attributes="{
27
+ 'aria-labelledby': field.ariaLabelledby,
28
+ 'aria-invalid': field.ariaInvalid,
29
+ }"
30
+ />
31
+ </template>
32
+ </UiField>
33
+ </template>
34
+
35
+ <script lang="ts" setup>
36
+ import {
37
+ UiField,
38
+ UiTextbox,
39
+ } from '@retailcrm/embed-ui-v1-components/remote'
40
+ </script>
41
+ - title: Addon next to label
42
+ code: |
43
+ <template>
44
+ <UiField id="name-field" label="Name">
45
+ <template #addon>
46
+ Up to 32 characters
47
+ </template>
48
+
49
+ <template #default="field">
50
+ <UiTextbox
51
+ :id="field.id"
52
+ :input-attributes="{
53
+ 'aria-labelledby': field.ariaLabelledby,
54
+ 'aria-invalid': field.ariaInvalid,
55
+ }"
56
+ />
57
+ </template>
58
+ </UiField>
59
+ </template>
60
+
61
+ <script lang="ts" setup>
62
+ import { UiField, UiTextbox } from '@retailcrm/embed-ui-v1-components/remote'
63
+ </script>
19
64
  use_when:
20
65
  - You need a labeled form control with consistent field semantics.
21
66
  - You need to pass id, aria-labelledby, and aria-invalid into an inner control.
@@ -2,13 +2,66 @@ component: UiInfobox
2
2
  summary: >
3
3
  UiInfobox is a richer explanatory block for inline product, warning, or helper content.
4
4
  It can be closable and expandable.
5
- usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uiinfobox--docs
6
5
 
7
6
  public_import:
8
7
  from: '@retailcrm/embed-ui-v1-components/remote'
9
8
  named:
10
9
  - UiInfobox
11
10
 
11
+ examples:
12
+ - title: Example
13
+ code: |
14
+ <template>
15
+ <UiInfobox title="Important information">
16
+ Content
17
+ </UiInfobox>
18
+ </template>
19
+
20
+ <script lang="ts" setup>
21
+ import { UiInfobox } from '@retailcrm/embed-ui-v1-components/remote'
22
+ </script>
23
+ - title: Warning
24
+ code: |
25
+ <template>
26
+ <UiInfobox warning title="Warning">
27
+ Content
28
+ </UiInfobox>
29
+ </template>
30
+
31
+ <script lang="ts" setup>
32
+ import { UiInfobox } from '@retailcrm/embed-ui-v1-components/remote'
33
+ </script>
34
+ - title: Expandable
35
+ code: |
36
+ <template>
37
+ <UiInfobox
38
+ v-model:expanded="expanded"
39
+ expandable
40
+ />
41
+ </template>
42
+
43
+ <script lang="ts" setup>
44
+ import { ref } from 'vue'
45
+ import { UiInfobox } from '@retailcrm/embed-ui-v1-components/remote'
46
+
47
+ const expanded = ref(false)
48
+ </script>
49
+ - title: Closable
50
+ code: |
51
+ <template>
52
+ <UiInfobox
53
+ v-model:shown="shown"
54
+ closable
55
+ />
56
+
57
+ </template>
58
+
59
+ <script lang="ts" setup>
60
+ import { ref } from 'vue'
61
+ import { UiInfobox } from '@retailcrm/embed-ui-v1-components/remote'
62
+
63
+ const shown = ref(true)
64
+ </script>
12
65
  use_when:
13
66
  - You need a highlighted explanatory block.
14
67
  - You need closable or expandable helper content.
@@ -73,6 +126,5 @@ styling:
73
126
  notes:
74
127
  - Use documented props and slots as the primary styling API.
75
128
  - 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
129
  root_classes:
78
130
  - .ui-v1-infobox
@@ -2,13 +2,34 @@ component: UiLink
2
2
  summary: >
3
3
  UiLink is the main text-link component for inline navigation and inline actions that should
4
4
  still read as links rather than buttons.
5
- usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uilink--docs
6
5
 
7
6
  public_import:
8
7
  from: '@retailcrm/embed-ui-v1-components/remote'
9
8
  named:
10
9
  - UiLink
11
10
 
11
+ examples:
12
+ - title: Example
13
+ code: |
14
+ <template>
15
+ <UiLink v-bind="$attrs">
16
+ <template v-if="text.length">
17
+ {{ text }}
18
+ </template>
19
+ </UiLink>
20
+ </template>
21
+
22
+ <script lang="ts" setup>
23
+ import { UiLink } from '@retailcrm/embed-ui-v1-components/remote'
24
+
25
+ defineProps({
26
+ text: {
27
+ type: String,
28
+ default: '',
29
+ },
30
+ })
31
+ </script>
32
+
12
33
  use_when:
13
34
  - You need inline navigation or linked text.
14
35
  - You need a compact action that should still read as a link.
@@ -86,6 +107,5 @@ styling:
86
107
  notes:
87
108
  - Use documented props and slots as the primary styling API.
88
109
  - Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
89
- - Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
90
110
  root_classes:
91
111
  - .ui-v1-link
@@ -1,7 +1,6 @@
1
1
  component: UiLoader
2
2
  summary: >
3
3
  UiLoader displays loading progress or waiting state. It can be used inline or as an overlay.
4
- usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uiskeleton--docs
5
4
 
6
5
  public_import:
7
6
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -68,6 +67,5 @@ styling:
68
67
  notes:
69
68
  - Use documented props and slots as the primary styling API.
70
69
  - 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
70
  root_classes:
73
71
  - .ui-v1-loader
@@ -2,7 +2,6 @@ component: UiMenuItem
2
2
  summary: >
3
3
  UiMenuItem is a structured menu row component with support for icons, avatar, description,
4
4
  counters, and active or danger styling.
5
- usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/uimenuitem--docs
6
5
 
7
6
  public_import:
8
7
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -90,6 +89,5 @@ styling:
90
89
  notes:
91
90
  - Use documented props and slots as the primary styling API.
92
91
  - Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
93
- - Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
94
92
  root_classes:
95
93
  - .ui-v1-menu-item
@@ -2,7 +2,6 @@ component: UiMenuItemGroup
2
2
  summary: >
3
3
  UiMenuItemGroup groups related menu items and exposes dedicated zones for group label
4
4
  and quantity metadata.
5
- usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/uimenuitem--docs
6
5
 
7
6
  public_import:
8
7
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -72,6 +71,5 @@ styling:
72
71
  notes:
73
72
  - Use documented props and slots as the primary styling API.
74
73
  - Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
75
- - Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
76
74
  root_classes:
77
75
  - .ui-v1-menu-item-group
@@ -2,13 +2,92 @@ component: UiModalSidebar
2
2
  summary: >
3
3
  UiModalSidebar is a side-docked modal surface with open state, direction, size, and
4
4
  scrolling control. Use it when the UI should slide from an edge instead of opening as a centered dialog.
5
- usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uimodalsidebar--docs
6
5
 
7
6
  public_import:
8
7
  from: '@retailcrm/embed-ui-v1-components/remote'
9
8
  named:
10
9
  - UiModalSidebar
11
10
 
11
+ examples:
12
+ - title: Example
13
+ code: |
14
+ <template>
15
+ <div>
16
+ <UiButton @click="open = true">
17
+ {{ buttonTitle }}
18
+ </UiButton>
19
+
20
+ <UiModalSidebar v-model:opened="open" v-bind="$attrs">
21
+ <template #title>
22
+ Title
23
+ </template>
24
+
25
+ <div style="height: 1500px;">
26
+ <div>Content with a height of 1500px</div>
27
+
28
+ <div v-if="hasNesting" style="margin-top: 16px">
29
+ <UiButton @click="modalSidebarInner = true">
30
+ Nested sidebar
31
+ </UiButton>
32
+
33
+ <UiModalSidebar
34
+ v-model:opened="modalSidebarInner"
35
+ @close-sidebar="modalSidebarInner = false"
36
+ >
37
+ <template #title>
38
+ Header
39
+ </template>
40
+
41
+ <div style="height: 1500px;">
42
+ <div>Some content</div>
43
+ <div>Nested sidebar</div>
44
+ </div>
45
+
46
+ <template #footer>
47
+ <UiButton @click="modalSidebarInner = false">
48
+ Close
49
+ </UiButton>
50
+ </template>
51
+ </UiModalSidebar>
52
+ </div>
53
+ </div>
54
+
55
+ <template v-if="footer" #footer>
56
+ <UiButton @click="open = false">
57
+ Close
58
+ </UiButton>
59
+ </template>
60
+ </UiModalSidebar>
61
+ </div>
62
+ </template>
63
+
64
+ <script lang="ts" setup>
65
+ import { ref } from 'vue'
66
+
67
+ import { UiButton } from '@retailcrm/embed-ui-v1-components/remote'
68
+ import { UiModalSidebar } from '@retailcrm/embed-ui-v1-components/remote'
69
+
70
+ defineProps({
71
+ buttonTitle: {
72
+ type: String,
73
+ default: '',
74
+ },
75
+
76
+ hasNesting: {
77
+ type: Boolean,
78
+ default: false,
79
+ },
80
+
81
+ footer: {
82
+ type: Boolean,
83
+ default: false,
84
+ },
85
+ })
86
+
87
+ const open = ref(false)
88
+ const modalSidebarInner = ref(false)
89
+ </script>
90
+
12
91
  use_when:
13
92
  - You need side-panel modal UI.
14
93
  - You need left or right docked modal content.
@@ -73,6 +152,5 @@ styling:
73
152
  notes:
74
153
  - Use documented props and slots as the primary styling API.
75
154
  - 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
155
  root_classes:
78
156
  - .ui-v1-modal-sidebar-overlay
@@ -0,0 +1,181 @@
1
+ component: UiModalWindow
2
+ summary: >
3
+ UiModalWindow is the main centered modal container. It supports open state, closability,
4
+ appearance variants, fullscreen and responsive behavior, and dialog roles.
5
+
6
+ public_import:
7
+ from: '@retailcrm/embed-ui-v1-components/remote'
8
+ named:
9
+ - UiModalWindow
10
+
11
+ related_components:
12
+ - UiModalWindowSurface
13
+
14
+ examples:
15
+ - title: Example
16
+ code: |
17
+ <template>
18
+ <div>
19
+ <UiButton appearance="secondary" @click="open = true">
20
+ {{ buttonTitle }}
21
+ </UiButton>
22
+
23
+ <UiModalWindow v-model:opened="open" v-bind="$attrs">
24
+ <template #title>
25
+ Title
26
+ </template>
27
+
28
+ <div :style="$attrs.appearance == 'popup' ? { height: '1500px' } : {}">
29
+ <div>Some content</div>
30
+
31
+ <div v-if="hasNesting" style="margin-top: 16px">
32
+ <UiButton appearance="secondary" @click="openNesting = true">
33
+ Open nested window
34
+ </UiButton>
35
+
36
+ <UiModalWindow
37
+ v-if="!nestedOnSameLevel"
38
+ v-model:opened="openNesting"
39
+ responsive
40
+ >
41
+ <template #title>
42
+ Nested window
43
+ </template>
44
+
45
+ <p>Some content</p>
46
+
47
+ <template #footer>
48
+ <UiButton appearance="secondary" @click="openNesting = false">
49
+ Close
50
+ </UiButton>
51
+ </template>
52
+ </UiModalWindow>
53
+ </div>
54
+ </div>
55
+
56
+ <template #footer>
57
+ <UiButton appearance="secondary" @click="open = false">
58
+ Close
59
+ </UiButton>
60
+ </template>
61
+ </UiModalWindow>
62
+
63
+ <UiModalWindow
64
+ v-if="nestedOnSameLevel"
65
+ v-model:opened="openNesting"
66
+ v-bind="$attrs"
67
+ responsive
68
+ >
69
+ <template #title>
70
+ Nested same-level window
71
+ </template>
72
+
73
+ <p>Some content</p>
74
+
75
+ <template #footer>
76
+ <UiButton appearance="secondary" @click="openNesting = false">
77
+ Close
78
+ </UiButton>
79
+ </template>
80
+ </UiModalWindow>
81
+ </div>
82
+ </template>
83
+
84
+ <script lang="ts" setup>
85
+ import { ref } from 'vue'
86
+
87
+ import { UiButton } from '@retailcrm/embed-ui-v1-components/remote'
88
+ import { UiModalWindow } from '@retailcrm/embed-ui-v1-components/remote'
89
+
90
+ defineProps({
91
+ buttonTitle: {
92
+ type: String,
93
+ default: '',
94
+ },
95
+
96
+ hasNesting: {
97
+ type: Boolean,
98
+ default: false,
99
+ },
100
+
101
+ nestedOnSameLevel: {
102
+ type: Boolean,
103
+ default: false,
104
+ },
105
+ })
106
+
107
+ const open = ref(false)
108
+ const openNesting = ref(false)
109
+ </script>
110
+
111
+ use_when:
112
+ - You need a centered dialog.
113
+ - You need modal interaction with standard dialog semantics.
114
+
115
+ avoid_when:
116
+ - You need a side-docked modal, use UiModalSidebar instead.
117
+
118
+ api:
119
+ key_props:
120
+ - name: opened
121
+ - name: closable
122
+ - name: appearance
123
+ - name: fullscreen
124
+ - name: responsive
125
+ - name: scrolling
126
+ - name: role
127
+ methods:
128
+ - name: open
129
+ - name: close
130
+
131
+ rendered_structure:
132
+ descriptive_only: true
133
+ root:
134
+ shape: div.ui-v1-modal-window via UiModalWindowSurface
135
+ tag: div
136
+ notes: The component delegates the actual teleported modal root to UiModalWindowSurface and renders header, content, and footer inside it.
137
+
138
+ geometry:
139
+ layout: teleported modal layer with centered surface
140
+ root_display: flex
141
+ width_behavior: viewport-covering overlay with content-sized or responsive surface
142
+
143
+ behavior:
144
+ notes:
145
+ - opened controls modal visibility.
146
+ - closable should be false only when the user must complete or acknowledge a blocking flow.
147
+ - fullscreen and responsive affect surface sizing rather than modal semantics.
148
+
149
+ composition:
150
+ works_well_with:
151
+ - UiButton
152
+ - UiField
153
+ - UiModalWindowSurface
154
+ patterns:
155
+ - title: Confirmation dialog
156
+ notes: Keep copy concise and put primary and secondary actions in the footer.
157
+ - title: Focused form
158
+ notes: Use for short forms that should not navigate away from the current page.
159
+
160
+ ai_notes:
161
+ do:
162
+ - Use for focused blocking tasks and confirmations.
163
+ - Provide clear title, body, and footer actions when the modal asks the user to decide.
164
+ avoid:
165
+ - Do not use as a general page layout or for long workflows that deserve a full page or sidebar.
166
+
167
+ accessibility:
168
+ notes:
169
+ - Prefer visible text labels for interactive controls.
170
+ - For icon-only or custom visual content, provide an accessible name through the supported label, title, or ARIA attributes exposed by the component.
171
+ - Preserve native keyboard semantics by using the component root instead of recreating the control with arbitrary markup.
172
+ keyboard:
173
+ - Tab moves focus to the control when it is focusable.
174
+ - Enter or Space activates native button-like controls when the host implementation renders a button.
175
+
176
+ styling:
177
+ notes:
178
+ - Use documented props and slots as the primary styling API.
179
+ - Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
180
+ root_classes:
181
+ - .ui-v1-modal-window
@@ -2,7 +2,6 @@ component: UiModalWindowSurface
2
2
  summary: >
3
3
  UiModalWindowSurface is the lower-level modal surface API behind modal window flows.
4
4
  Use it when you need modal surface behavior with more explicit composition control.
5
- usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uimodalwindow--docs
6
5
 
7
6
  public_import:
8
7
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -68,6 +67,5 @@ styling:
68
67
  notes:
69
68
  - Use documented props and slots as the primary styling API.
70
69
  - 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
70
  root_classes:
73
71
  - .ui-v1-modal-window
@@ -2,7 +2,6 @@ component: UiNumberStepper
2
2
  summary: >
3
3
  UiNumberStepper is a numeric input with increase and decrease controls. It is built for
4
4
  constrained numeric entry where arrowing and step-based changes matter.
5
- usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uinumberstepper--docs
6
5
 
7
6
  public_import:
8
7
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -12,6 +11,20 @@ public_import:
12
11
  related_components:
13
12
  - UiTextbox
14
13
 
14
+ examples:
15
+ - title: Example
16
+ code: |
17
+ <template>
18
+ <UiNumberStepper v-model:value="value" :min="0" :max="100" />
19
+ </template>
20
+
21
+ <script lang="ts" setup>
22
+ import { ref } from 'vue'
23
+ import { UiNumberStepper } from '@retailcrm/embed-ui-v1-components/remote'
24
+
25
+ const value = ref<number | null>(10)
26
+ </script>
27
+
15
28
  use_when:
16
29
  - You need numeric input with explicit step controls.
17
30
  - You need range constraints and nullable numeric state.
@@ -83,6 +96,5 @@ styling:
83
96
  notes:
84
97
  - Use documented props and slots as the primary styling API.
85
98
  - Internal .ui-v1-* classes are descriptive implementation details for reasoning and debugging unless a profile marks them as public theme hooks.
86
- - Use Storybook from the usage link to verify visual variants before generating custom layout around the component.
87
99
  root_classes:
88
100
  - .ui-v1-number-stepper
@@ -3,7 +3,6 @@ summary: >
3
3
  UiPageHeader is a page or major section header with an optional inline addon next to the title
4
4
  and an optional actions area on the right. In display state it renders the title as a semantic h1;
5
5
  in edit state it switches to UiTextbox.
6
- usage: https://retailcrm.github.io/embed-ui/v1-components/0.9.18/?path=/docs/components-uipageheader--docs
7
6
 
8
7
  public_import:
9
8
  from: '@retailcrm/embed-ui-v1-components/remote'
@@ -17,6 +16,45 @@ related_components:
17
16
  - UiPopperConnector
18
17
  - UiPopperTarget
19
18
 
19
+ examples:
20
+ - title: Example
21
+ code: |
22
+ <template>
23
+ <UiPageHeader
24
+ v-model:value="title"
25
+ :error="title ? '' : 'Title is required'"
26
+ :invalid="!title"
27
+ editable
28
+ placeholder="Enter a title"
29
+ >
30
+ <template #addon>
31
+ <UiLink>
32
+ Collapse filter
33
+ </UiLink>
34
+ </template>
35
+
36
+ <template #actions>
37
+ <UiButton appearance="tertiary">
38
+ Actions
39
+ <IconCaretDown aria-hidden="true" />
40
+ </UiButton>
41
+ </template>
42
+ </UiPageHeader>
43
+ </template>
44
+
45
+ <script lang="ts" setup>
46
+ import { ref } from 'vue'
47
+
48
+ import IconCaretDown from '@retailcrm/embed-ui-v1-components/assets/sprites/arrows/caret-down.svg'
49
+ import {
50
+ UiButton,
51
+ UiLink,
52
+ UiPageHeader,
53
+ } from '@retailcrm/embed-ui-v1-components/remote'
54
+
55
+ const title = ref('Returns')
56
+ </script>
57
+
20
58
  use_when:
21
59
  - You need the main title of an extension page.
22
60
  - You need inline title editing.