@codemonster-ru/vueforge 0.59.0 → 0.61.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
@@ -27,6 +27,8 @@ import {
27
27
  DefaultTheme,
28
28
  Button,
29
29
  Input,
30
+ InputGroup,
31
+ InputAddon,
30
32
  InlineEdit,
31
33
  SearchInput,
32
34
  MentionInput,
@@ -56,6 +58,7 @@ import {
56
58
  Switch,
57
59
  SegmentedControl,
58
60
  Alert,
61
+ EmptyState,
59
62
  Skeleton,
60
63
  Progress,
61
64
  Badge,
@@ -107,6 +110,11 @@ app.use(VueForge, {
107
110
  <FormField label="Name" hint="Required field">
108
111
  <Input v-model="name" placeholder="Your name" />
109
112
  </FormField>
113
+ <InputGroup>
114
+ <InputAddon>$</InputAddon>
115
+ <NumberInput v-model="price" :min="0" :step="0.5" />
116
+ <InputAddon>.00</InputAddon>
117
+ </InputGroup>
110
118
  <InlineEdit v-model="name" placeholder="No name" />
111
119
  <SearchInput v-model="query" placeholder="Search components" clearable />
112
120
  <MentionInput v-model="message" :suggestions="mentionSuggestions" placeholder="Type @name" />
@@ -140,6 +148,7 @@ app.use(VueForge, {
140
148
  ]"
141
149
  />
142
150
  <Alert severity="info" title="Heads up" message="Project settings were updated." />
151
+ <EmptyState title="No projects yet" description="Create your first project to get started." icon="📂" />
143
152
  <Skeleton height="12px" width="140px" />
144
153
  <Progress :value="64" />
145
154
  <Badge label="Beta" />
@@ -224,7 +233,10 @@ app.use(VueForge, {
224
233
  - Toast
225
234
  - ToastContainer
226
235
  - Alert
236
+ - EmptyState
227
237
  - Input
238
+ - InputGroup
239
+ - InputAddon
228
240
  - InlineEdit
229
241
  - SearchInput
230
242
  - MentionInput
@@ -276,9 +288,11 @@ app.use(VueForge, {
276
288
  - TreeSelect
277
289
  - VirtualScroller
278
290
 
279
- Input / Search / Password / Textarea (quick API):
291
+ Input / InputGroup / Search / Password / Textarea (quick API):
280
292
 
281
293
  - `Input`: single-line control, supports `v-model`, `size`, `variant`, `disabled`, `readonly`.
294
+ - `InputGroup`: horizontal control combiner for field/addon/button layouts with unified corners and borders.
295
+ - `EmptyState`: reusable empty-data block with icon/title/description/actions for table/list/search blank states.
282
296
  - `InlineEdit`: inline value editing with view/edit states, save/cancel actions, and text/number modes.
283
297
  - `SearchInput`: search-focused control with `debounce`, `clearable`, `loading`, `size`, and `variant`.
284
298
  - `MentionInput`: text input with `@`/`#` triggers, suggestions panel, keyboard selection, and mention insertion events.
@@ -378,6 +392,43 @@ Example:
378
392
  When `error` is set, `FormField` applies invalid-state border highlighting to nested form controls.
379
393
  Customize these colors via `theme.overrides.components.formField.errorBorderColor` and `errorFocusBorderColor`.
380
394
 
395
+ ## InputGroup / InputAddon
396
+
397
+ Props (`InputGroup`):
398
+
399
+ - `size?: 'small' | 'normal' | 'large'` (default `normal`)
400
+ - `variant?: 'filled' | 'outlined'` (default `filled`)
401
+ - `disabled?: boolean` (default `false`)
402
+
403
+ Props (`InputAddon`):
404
+
405
+ - `as?: string` (default `span`)
406
+
407
+ Slots:
408
+
409
+ - `default` - group controls/addons content
410
+
411
+ Example:
412
+
413
+ ```vue
414
+ <InputGroup>
415
+ <InputAddon>$</InputAddon>
416
+ <NumberInput v-model="price" :min="0" :step="0.5" />
417
+ <Button label="Apply" />
418
+ </InputGroup>
419
+ ```
420
+
421
+ ### InputGroup tokens
422
+
423
+ Component tokens (override via `theme.overrides.components.inputGroup`):
424
+
425
+ - `gap`, `borderRadius`
426
+ - `addonPadding`, `addonFontSize`
427
+ - `addonBackgroundColor`, `addonOutlinedBackgroundColor`
428
+ - `addonTextColor`, `addonBorderColor`, `disabledOpacity`
429
+ - `small.addonPadding`, `small.addonFontSize`
430
+ - `large.addonPadding`, `large.addonFontSize`
431
+
381
432
  ## InlineEdit
382
433
 
383
434
  Props:
@@ -1619,6 +1670,47 @@ Component tokens (override via `theme.overrides.components.alert`):
1619
1670
  - `actionsGap`, `closeSize`, `closeRadius`, `closeFontSize`, `closeHoverBackgroundColor`
1620
1671
  - `info.*`, `success.*`, `warn.*`, `danger.*` (backgroundColor/borderColor/textColor)
1621
1672
 
1673
+ ## EmptyState
1674
+
1675
+ Props:
1676
+
1677
+ - `title?: string`
1678
+ - `description?: string`
1679
+ - `icon?: string`
1680
+ - `size?: 'small' | 'normal' | 'large'` (default `normal`)
1681
+ - `variant?: 'filled' | 'outlined'` (default `filled`)
1682
+
1683
+ Slots:
1684
+
1685
+ - `default` - description content (fallbacks to `description`)
1686
+ - `title` (optional)
1687
+ - `icon` (optional)
1688
+ - `actions` (optional)
1689
+
1690
+ Example:
1691
+
1692
+ ```vue
1693
+ <EmptyState title="No projects yet" description="Create your first project to get started." icon="📂">
1694
+ <template #actions>
1695
+ <Button label="Create project" size="small" />
1696
+ <Button label="Import" size="small" severity="secondary" />
1697
+ </template>
1698
+ </EmptyState>
1699
+ ```
1700
+
1701
+ ### EmptyState tokens
1702
+
1703
+ Component tokens (override via `theme.overrides.components.emptyState`):
1704
+
1705
+ - `gap`, `bodyGap`, `padding`, `borderRadius`
1706
+ - `borderColor`, `backgroundColor`, `textColor`, `maxWidth`
1707
+ - `iconSize`, `iconColor`
1708
+ - `titleFontSize`, `titleLineHeight`, `titleFontWeight`, `titleColor`
1709
+ - `descriptionFontSize`, `descriptionLineHeight`, `descriptionColor`
1710
+ - `actionsGap`
1711
+ - `small.padding`, `small.iconSize`, `small.titleFontSize`, `small.descriptionFontSize`
1712
+ - `large.padding`, `large.iconSize`, `large.titleFontSize`, `large.descriptionFontSize`
1713
+
1622
1714
  ### Textarea tokens
1623
1715
 
1624
1716
  Component tokens (override via `theme.overrides.components.textarea`):
@@ -2512,7 +2604,7 @@ VueForge exposes design tokens as CSS variables generated from the theme preset.
2512
2604
  Typed tokens:
2513
2605
 
2514
2606
  - `ThemeTokens`/`ThemeOptions`/`ThemePreset` are exported for type-safe theming in TS.
2515
- - `components.*` accepts component-specific tokens (typed keys: button/card/checkbox/radio/tabs/accordion/toast/alert/input/inlineEdit/searchInput/mentionInput/passwordInput/otpInput/colorPicker/maskedInput/numberInput/form/formField/textarea/link/breadcrumbs/menu/modal/confirmDialog/drawer/popover/dropdown/contextMenu/commandPalette/select/autocomplete/combobox/multiselect/taginput/datepicker/calendar/daterangepicker/timepicker/datetimepicker/pagination/switch/segmentedControl/tooltip/skeleton/progress/badge/chip/filterChips/avatar/datatable/slider/stepper/rating/tree/treeselect/virtualScroller).
2607
+ - `components.*` accepts component-specific tokens (typed keys: button/card/checkbox/radio/tabs/accordion/toast/alert/emptyState/input/inputGroup/inlineEdit/searchInput/mentionInput/passwordInput/otpInput/colorPicker/maskedInput/numberInput/form/formField/textarea/link/breadcrumbs/menu/modal/confirmDialog/drawer/popover/dropdown/contextMenu/commandPalette/select/autocomplete/combobox/multiselect/taginput/datepicker/calendar/daterangepicker/timepicker/datetimepicker/pagination/switch/segmentedControl/tooltip/skeleton/progress/badge/chip/filterChips/avatar/datatable/slider/stepper/rating/tree/treeselect/virtualScroller).
2516
2608
 
2517
2609
  Default core values (from `DefaultTheme`):
2518
2610