@codemonster-ru/vueforge 0.42.0 → 0.44.0

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/README.md CHANGED
@@ -54,11 +54,13 @@ import {
54
54
  Rating,
55
55
  Tree,
56
56
  TreeSelect,
57
+ VirtualScroller,
57
58
  Drawer,
58
59
  ConfirmDialog,
59
60
  Dropdown,
60
61
  SplitButton,
61
62
  ContextMenu,
63
+ CommandPalette,
62
64
  } from '@codemonster-ru/vueforge';
63
65
  import '@codemonster-ru/vueforge/dist/index.css';
64
66
 
@@ -100,6 +102,11 @@ app.use(VueForge, {
100
102
  <Rating v-model="rating" allow-half />
101
103
  <Tree v-model="selectedNode" v-model:expandedKeys="expandedKeys" :items="treeItems" />
102
104
  <TreeSelect v-model="selectedNode" v-model:expandedKeys="expandedKeys" :items="treeItems" placeholder="Select node" />
105
+ <VirtualScroller :items="largeItems" :item-height="40" height="320px">
106
+ <template #default="{ item, index }">
107
+ {{ index + 1 }}. {{ item.label }}
108
+ </template>
109
+ </VirtualScroller>
103
110
  <Accordion v-model="faq">
104
111
  <AccordionItem value="shipping" title="Shipping">
105
112
  Shipping details
@@ -136,6 +143,13 @@ app.use(VueForge, {
136
143
  <ContextMenu :items="menuItems">
137
144
  <div>Right-click here</div>
138
145
  </ContextMenu>
146
+ <CommandPalette
147
+ v-model="commandPaletteOpen"
148
+ :items="[
149
+ { label: 'Open docs', value: 'docs', group: 'Navigation' },
150
+ { label: 'Save as draft', value: 'draft', group: 'Actions' },
151
+ ]"
152
+ />
139
153
  ```
140
154
 
141
155
  ## Components
@@ -167,6 +181,7 @@ app.use(VueForge, {
167
181
  - Dropdown
168
182
  - SplitButton
169
183
  - ContextMenu
184
+ - CommandPalette
170
185
  - Popover
171
186
  - Select
172
187
  - Autocomplete
@@ -188,6 +203,7 @@ app.use(VueForge, {
188
203
  - Rating
189
204
  - Tree
190
205
  - TreeSelect
206
+ - VirtualScroller
191
207
 
192
208
  Input / Textarea (quick API):
193
209
 
@@ -1131,6 +1147,63 @@ Component tokens (override via `theme.overrides.components.contextMenu`):
1131
1147
  - `panelBackgroundColor`, `panelShadow`, `zIndex`
1132
1148
  - `disabledOpacity`, `itemPadding`
1133
1149
 
1150
+ ## CommandPalette
1151
+
1152
+ Props:
1153
+
1154
+ - `modelValue?: boolean` (v-model)
1155
+ - `items?: Array<{ label: string; value?: string | number; description?: string; shortcut?: string; group?: string; disabled?: boolean; keywords?: Array<string>; command?: () => void }>`
1156
+ - `placeholder?: string` (default `Type a command or search...`)
1157
+ - `emptyText?: string` (default `No commands found`)
1158
+ - `ariaLabel?: string` (default `Command palette`)
1159
+ - `closeOnOverlay?: boolean` (default `true`)
1160
+ - `closeOnEsc?: boolean` (default `true`)
1161
+ - `closeOnSelect?: boolean` (default `true`)
1162
+ - `filter?: boolean` (default `true`)
1163
+ - `enableShortcut?: boolean` (default `true`)
1164
+ - `shortcutKey?: string` (default `k`)
1165
+
1166
+ Events:
1167
+
1168
+ - `update:modelValue`
1169
+ - `open`
1170
+ - `close`
1171
+ - `select`
1172
+ - `search`
1173
+
1174
+ Example:
1175
+
1176
+ ```vue
1177
+ <CommandPalette
1178
+ v-model="open"
1179
+ :items="[
1180
+ { label: 'Open docs', value: 'docs', group: 'Navigation' },
1181
+ { label: 'Save and publish', value: 'publish', group: 'Actions', shortcut: 'Ctrl+Enter' },
1182
+ ]"
1183
+ @select="onCommand"
1184
+ />
1185
+ ```
1186
+
1187
+ ### CommandPalette tokens
1188
+
1189
+ Component tokens (override via `theme.overrides.components.commandPalette`):
1190
+
1191
+ - `width`, `maxWidth`, `maxHeight`
1192
+ - `padding`, `borderRadius`, `borderColor`
1193
+ - `backgroundColor`, `textColor`, `overlayBackgroundColor`
1194
+ - `shadow`, `zIndex`, `headerGap`
1195
+ - `inputPadding`, `inputBorderRadius`, `inputBorderColor`
1196
+ - `inputBackgroundColor`, `inputTextColor`, `inputPlaceholderColor`
1197
+ - `inputFocusBorderColor`, `inputFocusRingShadow`
1198
+ - `listGap`, `groupGap`
1199
+ - `groupLabelPadding`, `groupLabelColor`, `groupLabelFontSize`
1200
+ - `itemPadding`, `itemBorderRadius`, `itemGap`
1201
+ - `itemTextColor`, `itemDescriptionColor`, `itemDescriptionFontSize`
1202
+ - `itemActiveBackgroundColor`, `itemActiveTextColor`, `itemDisabledOpacity`
1203
+ - `shortcutPadding`, `shortcutBorderRadius`, `shortcutBorderColor`
1204
+ - `shortcutBackgroundColor`, `shortcutTextColor`, `shortcutFontSize`
1205
+ - `emptyPadding`, `emptyColor`
1206
+
1134
1207
  ## Tooltip
1135
1208
 
1136
1209
  Props:
@@ -1543,6 +1616,51 @@ Component tokens (override via `theme.overrides.components.treeselect`):
1543
1616
  - `small.fontSize`, `small.padding`
1544
1617
  - `large.fontSize`, `large.padding`
1545
1618
 
1619
+ ## VirtualScroller
1620
+
1621
+ Props:
1622
+
1623
+ - `items?: Array<unknown>` (default `[]`)
1624
+ - `itemHeight?: number` (default `36`)
1625
+ - `height?: string` (default `18rem`)
1626
+ - `overscan?: number` (default `4`)
1627
+ - `keyField?: string` (default `id`)
1628
+ - `virtual?: boolean` (default `true`)
1629
+ - `ariaLabel?: string` (default `Virtual list`)
1630
+ - `emptyText?: string` (default `No items`)
1631
+
1632
+ Events:
1633
+
1634
+ - `scroll`
1635
+ - `rangeChange` (payload: `{ start: number; end: number }`)
1636
+ - `reachEnd`
1637
+
1638
+ Slots:
1639
+
1640
+ - `default` - item content with slot props `{ item, index }`
1641
+ - `empty` - empty state content
1642
+
1643
+ Example:
1644
+
1645
+ ```vue
1646
+ <VirtualScroller :items="users" :item-height="44" height="320px" :overscan="6" key-field="id">
1647
+ <template #default="{ item, index }">
1648
+ <div>{{ index + 1 }}. {{ item.name }}</div>
1649
+ </template>
1650
+ </VirtualScroller>
1651
+ ```
1652
+
1653
+ ### VirtualScroller tokens
1654
+
1655
+ Component tokens (override via `theme.overrides.components.virtualScroller`):
1656
+
1657
+ - `fontSize`
1658
+ - `borderColor`, `borderRadius`
1659
+ - `backgroundColor`, `textColor`
1660
+ - `focusRingShadow`
1661
+ - `itemPadding`, `itemBorderColor`
1662
+ - `emptyPadding`, `emptyColor`
1663
+
1546
1664
  ## Tokens
1547
1665
 
1548
1666
  VueForge exposes design tokens as CSS variables generated from the theme preset. Core groups:
@@ -1557,7 +1675,7 @@ VueForge exposes design tokens as CSS variables generated from the theme preset.
1557
1675
  Typed tokens:
1558
1676
 
1559
1677
  - `ThemeTokens`/`ThemeOptions`/`ThemePreset` are exported for type-safe theming in TS.
1560
- - `components.*` accepts component-specific tokens (typed keys: button/card/checkbox/radio/tabs/accordion/toast/alert/input/numberInput/formField/textarea/link/breadcrumbs/menu/modal/confirmDialog/drawer/popover/dropdown/contextMenu/select/autocomplete/multiselect/datepicker/daterangepicker/timepicker/pagination/switch/tooltip/skeleton/progress/badge/chip/avatar/datatable/slider/stepper/rating/tree/treeselect).
1678
+ - `components.*` accepts component-specific tokens (typed keys: button/card/checkbox/radio/tabs/accordion/toast/alert/input/numberInput/formField/textarea/link/breadcrumbs/menu/modal/confirmDialog/drawer/popover/dropdown/contextMenu/commandPalette/select/autocomplete/multiselect/datepicker/daterangepicker/timepicker/pagination/switch/tooltip/skeleton/progress/badge/chip/avatar/datatable/slider/stepper/rating/tree/treeselect/virtualScroller).
1561
1679
 
1562
1680
  Default core values (from `DefaultTheme`):
1563
1681