@codemonster-ru/vueforge 0.69.0 → 0.71.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
@@ -26,6 +26,7 @@ import {
26
26
  VueForge,
27
27
  DefaultTheme,
28
28
  Button,
29
+ ButtonGroup,
29
30
  Input,
30
31
  InputGroup,
31
32
  InputAddon,
@@ -63,6 +64,7 @@ import {
63
64
  EmptyState,
64
65
  Skeleton,
65
66
  Progress,
67
+ Spinner,
66
68
  Badge,
67
69
  Chip,
68
70
  FilterChips,
@@ -103,6 +105,11 @@ app.use(VueForge, {
103
105
 
104
106
  ```vue
105
107
  <Button label="Hello" severity="primary" />
108
+ <ButtonGroup attached variant="outlined" size="small">
109
+ <Button label="Day" />
110
+ <Button label="Week" />
111
+ <Button label="Month" />
112
+ </ButtonGroup>
106
113
  <Form v-model="formValues" :validate="validateForm" @submit="onSubmit">
107
114
  <template #default="{ values, errors, touched, setFieldValue, setFieldTouched }">
108
115
  <FormField label="Email" :error="touched.email ? errors.email : ''">
@@ -163,6 +170,7 @@ app.use(VueForge, {
163
170
  <EmptyState title="No projects yet" description="Create your first project to get started." icon="📂" />
164
171
  <Skeleton height="12px" width="140px" />
165
172
  <Progress :value="64" />
173
+ <Spinner label="Loading..." />
166
174
  <Badge label="Beta" />
167
175
  <Chip label="New" />
168
176
  <FilterChips
@@ -248,6 +256,7 @@ app.use(VueForge, {
248
256
  ## Components
249
257
 
250
258
  - Button
259
+ - ButtonGroup
251
260
  - Card
252
261
  - Checkbox
253
262
  - RadioGroup
@@ -310,6 +319,7 @@ app.use(VueForge, {
310
319
  - Tooltip
311
320
  - Skeleton
312
321
  - Progress
322
+ - Spinner
313
323
  - Badge
314
324
  - Chip
315
325
  - FilterChips
@@ -329,6 +339,7 @@ app.use(VueForge, {
329
339
  Input / InputGroup / Search / Password / Textarea (quick API):
330
340
 
331
341
  - `Input`: single-line control, supports `v-model`, `size`, `variant`, `disabled`, `readonly`.
342
+ - `ButtonGroup`: grouped button actions with shared size/variant/severity and attached/stacked layouts.
332
343
  - `InputGroup`: horizontal control combiner for field/addon/button layouts with unified corners and borders.
333
344
  - `EmptyState`: reusable empty-data block with icon/title/description/actions for table/list/search blank states.
334
345
  - `InlineEdit`: inline value editing with view/edit states, save/cancel actions, and text/number modes.
@@ -346,6 +357,7 @@ Input / InputGroup / Search / Password / Textarea (quick API):
346
357
  - `KanbanBoard`: task board with draggable cards, customizable column/card slots, and move events.
347
358
  - `RichTextEditor`: formatting editor with toolbar actions and Markdown/HTML output.
348
359
  - `Divider`: horizontal/vertical visual separator with optional label and style variants.
360
+ - `Spinner`: lightweight loading indicator with inline/overlay variants and severity colors.
349
361
  - `Wizard`: multi-step flow container with linear navigation, per-step validation, and completion events.
350
362
  - `Textarea`: multi-line control, same as Input plus `rows`.
351
363
  - `TagInput`: token/tag control, supports `v-model` (array), suggestions, custom tags, `maxTags`, `clearable`, `size`, `variant`.
@@ -1504,6 +1516,37 @@ Example:
1504
1516
  </RadioGroup>
1505
1517
  ```
1506
1518
 
1519
+ ## ButtonGroup
1520
+
1521
+ Props:
1522
+
1523
+ - `size?: 'small' | 'normal' | 'large'` (inherits to nested `Button`/`SplitButton` when child props are not set)
1524
+ - `variant?: 'filled' | 'outlined' | 'text'` (inherits to nested `Button`/`SplitButton`)
1525
+ - `severity?: 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'danger'` (inherits to nested `Button`/`SplitButton`)
1526
+ - `disabled?: boolean` (default `false`)
1527
+ - `orientation?: 'horizontal' | 'vertical'` (default `horizontal`)
1528
+ - `attached?: boolean` (default `false`)
1529
+
1530
+ Slots:
1531
+
1532
+ - `default` - place `Button` / `SplitButton` items
1533
+
1534
+ Example:
1535
+
1536
+ ```vue
1537
+ <ButtonGroup attached size="small" variant="outlined" severity="primary">
1538
+ <Button label="Day" />
1539
+ <Button label="Week" />
1540
+ <Button label="Month" />
1541
+ </ButtonGroup>
1542
+ ```
1543
+
1544
+ ### ButtonGroup tokens
1545
+
1546
+ Component tokens (override via `theme.overrides.components.buttonGroup`):
1547
+
1548
+ - `gap`, `borderRadius`, `disabledOpacity`
1549
+
1507
1550
  ## Breadcrumbs
1508
1551
 
1509
1552
  Props:
@@ -2632,6 +2675,40 @@ Component tokens (override via `theme.overrides.components.progress`):
2632
2675
  - `small.height`, `small.labelFontSize`, `small.circularSize`, `small.circularThickness`
2633
2676
  - `large.height`, `large.labelFontSize`, `large.circularSize`, `large.circularThickness`
2634
2677
 
2678
+ ## Spinner
2679
+
2680
+ Props:
2681
+
2682
+ - `variant?: 'inline' | 'overlay'` (default `inline`)
2683
+ - `size?: 'small' | 'normal' | 'large'` (default `normal`)
2684
+ - `severity?: 'neutral' | 'info' | 'success' | 'warn' | 'danger'` (default `neutral`)
2685
+ - `label?: string`
2686
+ - `ariaLabel?: string` (default `Loading`)
2687
+
2688
+ Slots:
2689
+
2690
+ - `default` (optional) - custom label content
2691
+
2692
+ Example:
2693
+
2694
+ ```vue
2695
+ <Spinner />
2696
+ <Spinner label="Loading users..." size="small" />
2697
+ <Spinner variant="overlay" severity="info" label="Sync in progress" />
2698
+ ```
2699
+
2700
+ ### Spinner tokens
2701
+
2702
+ Component tokens (override via `theme.overrides.components.spinner`):
2703
+
2704
+ - `size`, `thickness`, `color`, `trackColor`
2705
+ - `gap`, `labelColor`, `labelFontSize`
2706
+ - `animationDuration`
2707
+ - `overlayMinHeight`, `overlayPadding`, `overlayBorderRadius`, `overlayBackgroundColor`
2708
+ - `info.color`, `success.color`, `warn.color`, `danger.color`
2709
+ - `small.size`, `small.thickness`, `small.labelFontSize`
2710
+ - `large.size`, `large.thickness`, `large.labelFontSize`
2711
+
2635
2712
  ## Slider
2636
2713
 
2637
2714
  Props:
@@ -3069,7 +3146,7 @@ VueForge exposes design tokens as CSS variables generated from the theme preset.
3069
3146
  Typed tokens:
3070
3147
 
3071
3148
  - `ThemeTokens`/`ThemeOptions`/`ThemePreset` are exported for type-safe theming in TS.
3072
- - `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/richTextEditor/link/breadcrumbs/divider/menu/modal/confirmDialog/drawer/popover/dropdown/contextMenu/commandPalette/notificationCenter/appShell/kanbanBoard/tour/select/autocomplete/combobox/multiselect/taginput/datepicker/calendar/daterangepicker/timepicker/datetimepicker/pagination/switch/segmentedControl/tooltip/skeleton/progress/badge/chip/filterChips/avatar/datatable/slider/splitter/stepper/wizard/rating/tree/treeselect/virtualScroller).
3149
+ - `components.*` accepts component-specific tokens (typed keys: button/buttonGroup/card/checkbox/radio/tabs/accordion/toast/alert/emptyState/input/inputGroup/inlineEdit/searchInput/mentionInput/passwordInput/otpInput/colorPicker/maskedInput/numberInput/form/formField/textarea/richTextEditor/link/breadcrumbs/divider/menu/modal/confirmDialog/drawer/popover/dropdown/contextMenu/commandPalette/notificationCenter/appShell/kanbanBoard/tour/select/autocomplete/combobox/multiselect/taginput/datepicker/calendar/daterangepicker/timepicker/datetimepicker/pagination/switch/segmentedControl/tooltip/skeleton/progress/spinner/badge/chip/filterChips/avatar/datatable/slider/splitter/stepper/wizard/rating/tree/treeselect/virtualScroller).
3073
3150
 
3074
3151
  Default core values (from `DefaultTheme`):
3075
3152