@robuust-digital/vue-components 2.0.0-rc.6 → 2.0.0-rc.7

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/CHANGELOG.md ADDED
@@ -0,0 +1,242 @@
1
+ ## 2.0.0-rc.7 (27-02-2025)
2
+
3
+ ### Added
4
+
5
+ * `Radio` and `Checkbox` `modelValue` now allows `Number` type
6
+ * `wrapperClass` prop to `DataTable` component
7
+ * Introduced `--rvc-table-wrapper-border-radius` variable for `DataTable` component
8
+ * `Radio`: background color is now customizable with `--rvc-radio-bg-color` CSS variable
9
+ * `Checkbox`: background color is now customizable with `--rvc-checkbox-input-bg-color` CSS variable
10
+
11
+ ### Changed
12
+
13
+ * `Toast`: `open` prop is now `show`
14
+ * `DataTable`: `items` slot is renamed to `item` and added a parent `items` slot to customize the whole row
15
+ * `DataTable`: `headers` slot is renamed to `header` and added a parent `headers` slot to customize the whole row
16
+
17
+ ### Updated
18
+
19
+ * Upgraded to **Tailwind v4.0.0** 🚀
20
+ * Customize RVC components with CSS variables
21
+ * Improved `Drawer` and `Modal` slots: Added `title` and `close` slots
22
+ * `FormSelect`: `modelValue` now allows `Boolean` type
23
+ * Improved zIndex order for Dialogs and Toast
24
+
25
+ ### Deprecated
26
+
27
+ * ⚠️ **Nuxt 3** module support. You can manually integrate the components into your Nuxt 3 project now.
28
+
29
+ ## 1.3.2 (24-01-2025)
30
+
31
+ ### Updated
32
+
33
+ * Fixed `FormInput` modelValue type to allow `Number` type
34
+
35
+ ## 1.3.1 (17-01-2025)
36
+
37
+ ### Added
38
+
39
+ * Introduced `peerDependenciesMeta` to the `package.json` file to prevent installation issues
40
+
41
+ ## 1.3.0 (16-01-2025)
42
+
43
+ ### Added
44
+
45
+ * `RichTextEditor` component
46
+ * `--rvc-base-input-font-weight` to inputs
47
+ * `Tooltip` `size` prop. `sm` is now supported
48
+ * Added a `fullWidth` prop to the `Dropdown` Component
49
+
50
+ ### Changed
51
+
52
+ * `@floating-ui/vue`, `@headlessui/vue`, and `vue` are now peer dependencies
53
+
54
+ ### Updated
55
+
56
+ * This library only supports ES format builds now
57
+
58
+ ## 1.2.10 (13-01-2025)
59
+
60
+ ### Updated
61
+
62
+ * Fixed `Combobox` `searchOnly`: prevent firing the request if no value is present
63
+ * Respect the `Combobox` `minLength` prop
64
+ * Combobox `onSearch` params order: `searchValue` first, `params` second and last `endpoint`
65
+
66
+ ## 1.2.9 (10-01-2025)
67
+
68
+ ### Changed
69
+
70
+ * For `Combobox`, `FormInput`, `FormSelect` renamed `iconLeft` prop to `prefixIcon`
71
+
72
+ ## 1.2.8 (10-01-2025)
73
+
74
+ ### Added
75
+
76
+ * `FormTextarea` component
77
+ * `Combobox` component
78
+ * `rvc-radio` to Tailwind safelist
79
+
80
+ ### Updated
81
+
82
+ * `Drawer` fixed docs slots section
83
+
84
+ ## 1.2.7 (08-01-2025)
85
+
86
+ ### Added
87
+
88
+ * `FormInput` component
89
+
90
+ ### Changed
91
+
92
+ * Renamed `--rvc-input-*` CSS variables to `--rvc-base-input-*`
93
+
94
+ ## 1.2.6 (07-01-2025)
95
+
96
+ ### Updated
97
+
98
+ * Bugfix for nesting in tabs.js, empty-state.js and dropdown.js
99
+ * Refactor `Dropdown` component
100
+ * Added the icon-left prop to the `FormSelect` component
101
+
102
+ ## 1.2.5 (06-01-2025)
103
+
104
+ ### Added
105
+
106
+ * `Dropdown` component
107
+ * `EmptyState` component
108
+ * `Toast` component
109
+ * `Pagination` component
110
+ * `Tabs` component
111
+
112
+ ## 1.2.4 (21-12-2024)
113
+
114
+ ### Added
115
+
116
+ * Bind `header` data to `DataTable` `<th>` element
117
+ * `FormSelect` component
118
+ * `Checkbox`: introduced `rootClass` prop
119
+ * Do not map `id` from `DataTable` component items
120
+
121
+ ### Updated
122
+
123
+ * Improved `DataTable` `headers` prop validators
124
+ * `Checkbox`: `id` prop is not required anymore
125
+
126
+ ## 1.2.3 (18-12-2024)
127
+
128
+ ### Added
129
+
130
+ * Global CSS variables and Tailwind config. See the [docs](https://robuust.github.io/vue-components/base/) for more information.
131
+
132
+ ## 1.2.2 (17-12-2024)
133
+
134
+ ### Added
135
+
136
+ * Added `loading` prop to Modal footer slot
137
+
138
+ ## 1.2.1 (12-12-2024)
139
+
140
+ ### Added
141
+
142
+ * `Modal` component
143
+ * `Tooltip` component
144
+ * `Accordion` component
145
+ * `@drawer:closed` event to `Drawer` component
146
+ * `@modal:closed` event to `Modal` component
147
+ * `Checkbox` component
148
+ * `Radio` component
149
+ * `Lightswitch` component
150
+ * Added crucial safelisting for component library
151
+
152
+ ### Updated
153
+
154
+ * Improved customizability for all components
155
+
156
+ ## 1.2.0 (11-12-2024)
157
+
158
+ ### Added
159
+
160
+ * Introduced CSS variables for component customization
161
+ * `Modal` component
162
+ * `Tooltip` component
163
+ * `Accordion` component
164
+ * `Checkbox` component
165
+ * `Lightswitch` component
166
+ * `DataTable` component
167
+ * `@drawer:closed` event to `Drawer` component
168
+ * `@modal:closed` event to `Modal` component
169
+ * Added hover color for the `Alert` component
170
+
171
+ ### Changed
172
+
173
+ * `rvc-` prefix for all components
174
+ * Changed the colors of the `Badge` component
175
+ * `fontSize` `base` to 15px and `sm` to 13px
176
+ * `xs` and `lg` from `size` prop in `Badge` component
177
+ * `ButtonBase` default color variants
178
+
179
+ ## 1.1.1 (27-11-2024)
180
+
181
+ ### Added
182
+
183
+ * `Alert` component
184
+ * `iconOnly` prop to `ButtonBase` component for icon-only button variant
185
+ * a11y attributes to `ButtonBase` component
186
+
187
+ ### Updated
188
+
189
+ * Added slot bindings to `ButtonBase` component:
190
+ * Default slot: Access to `label` prop
191
+ * Icon slot: Access to `icon` prop
192
+ * Spinner slot: Access to `spinning` state
193
+
194
+ ### Deprecated
195
+
196
+ * `xs` and `lg` from `size` prop in `ButtonBase` component
197
+
198
+ ## 1.1.0-rc.0 (25-11-2024)
199
+
200
+ ### Added
201
+
202
+ * `Badge` component
203
+ * `Drawer` component
204
+ * Export component library utilities CSS
205
+ * Library Tailwind `prefix: 'rvc-'` so it doesn't conflict with the consuming application
206
+ * `bindAs` prop to `ButtonBase` component to have more flexible component rendering [#30](https://github.com/robuust/vue-components/issues/30)
207
+
208
+ ### Changed
209
+
210
+ * Removed `@apply` style classes from `./tailwind/components/button` to prevent conflicts with the consuming application. Added native CSS props instead.
211
+
212
+ ### Updated
213
+
214
+ * Added CSS section to docs guide
215
+ * Added docs for `ButtonBase` slots
216
+
217
+ ## 1.0.1-rc.3 (15-11-2024)
218
+
219
+ ### Added
220
+
221
+ * `disabled` and `icon` customizations for `custom` `ButtonBase` component
222
+
223
+ ### Changed
224
+
225
+ * Improved `custom` button Tailwind CSS configuration see [#22](https://github.com/robuust/vue-components/issues/22)
226
+
227
+ ### Deprecated
228
+
229
+ * `hoverBackgroundColor`, `hoverColor`, `styles`, and `hoverStyles` properties for `custom` `ButtonBase` component
230
+
231
+ ## 1.0.1-rc.2 (14-11-2024)
232
+
233
+ ### Changed
234
+
235
+ * `ButtonBase` component improvements
236
+ * Updated docs
237
+
238
+ ## 1.0.1-rc.1 (12-11-2024)
239
+
240
+ ### Added
241
+
242
+ * `ButtonBase` component
@@ -1,8 +1,8 @@
1
- import { ref as g, computed as f, createBlock as B, openBlock as D, unref as t, withCtx as d, createVNode as i, withModifiers as E, createElementVNode as l, normalizeClass as L, renderSlot as c, createCommentVNode as T, createTextVNode as F, toDisplayString as I } from "vue";
2
- import { TransitionRoot as N, Dialog as R, TransitionChild as $, DialogPanel as V, DialogTitle as C } from "@headlessui/vue";
1
+ import { ref as g, computed as f, createBlock as B, openBlock as D, unref as t, withCtx as d, createVNode as i, withModifiers as E, createElementVNode as a, normalizeClass as L, renderSlot as c, createCommentVNode as T, createTextVNode as h, toDisplayString as F } from "vue";
2
+ import { TransitionRoot as I, Dialog as N, TransitionChild as $, DialogPanel as R, DialogTitle as C } from "@headlessui/vue";
3
3
  import { _ as k } from "./ButtonBase-DfkwHIhN.js";
4
4
  import { r as S } from "./XMarkIcon-90mcPzBs.js";
5
- function h(o) {
5
+ function V(o) {
6
6
  const v = g(null), r = g(!1), b = f(() => o.as === "form"), p = f(() => `${o.id}-title`), m = f(() => `${o.id}-content`), u = f(() => {
7
7
  var s;
8
8
  return (s = v.value) == null ? void 0 : s.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
@@ -50,7 +50,7 @@ const q = {
50
50
  },
51
51
  panelClass: {
52
52
  type: String,
53
- default: "sm:max-w-lg"
53
+ default: "rvc-modal-panel-max-width"
54
54
  }
55
55
  },
56
56
  emits: ["modal:open", "modal:close", "modal:save", "modal:closed"],
@@ -62,10 +62,10 @@ const q = {
62
62
  titleId: s,
63
63
  descriptionId: y,
64
64
  initialFocusElement: w
65
- } = h(b);
66
- return (a, e) => (D(), B(t(N), { as: "template" }, {
65
+ } = V(b);
66
+ return (l, e) => (D(), B(t(I), { as: "template" }, {
67
67
  default: d(() => [
68
- i(t(R), {
68
+ i(t(N), {
69
69
  as: o.as,
70
70
  class: "rvc-modal",
71
71
  static: "",
@@ -73,7 +73,7 @@ const q = {
73
73
  role: "dialog",
74
74
  "initial-focus": t(w),
75
75
  "aria-labelledby": t(s),
76
- onClose: e[6] || (e[6] = (n) => a.$emit("modal:close")),
76
+ onClose: e[6] || (e[6] = (n) => l.$emit("modal:close")),
77
77
  onSubmit: e[7] || (e[7] = E((n) => r("modal:save", n), ["prevent"]))
78
78
  }, {
79
79
  default: d(() => [
@@ -88,15 +88,15 @@ const q = {
88
88
  onBeforeEnter: e[0] || (e[0] = (n) => r("modal:open"))
89
89
  }, {
90
90
  default: d(() => e[8] || (e[8] = [
91
- l("div", {
91
+ a("div", {
92
92
  "aria-hidden": "true",
93
93
  class: "rvc-modal-backdrop"
94
94
  }, null, -1)
95
95
  ])),
96
96
  _: 1
97
97
  }),
98
- l("div", q, [
99
- l("div", M, [
98
+ a("div", q, [
99
+ a("div", M, [
100
100
  i(t($), {
101
101
  as: "template",
102
102
  enter: "rvc-modal-transition-enter",
@@ -109,16 +109,16 @@ const q = {
109
109
  onAfterLeave: e[5] || (e[5] = (n) => (m.value = !1, r("modal:closed")))
110
110
  }, {
111
111
  default: d(() => [
112
- i(t(V), {
112
+ i(t(R), {
113
113
  class: L(["rvc-modal-panel", o.panelClass]),
114
114
  "aria-busy": o.spinning,
115
115
  "aria-describedby": t(y)
116
116
  }, {
117
117
  default: d(() => [
118
- l("header", x, [
119
- c(a.$slots, "header", { title: o.title }, () => [
120
- l("div", z, [
121
- c(a.$slots, "title", {
118
+ a("header", x, [
119
+ c(l.$slots, "header", { title: o.title }, () => [
120
+ a("div", z, [
121
+ c(l.$slots, "title", {
122
122
  id: t(s),
123
123
  dialogTitle: t(C),
124
124
  title: o.title
@@ -128,18 +128,18 @@ const q = {
128
128
  class: "rvc-modal-title"
129
129
  }, {
130
130
  default: d(() => [
131
- F(I(o.title), 1)
131
+ h(F(o.title), 1)
132
132
  ]),
133
133
  _: 1
134
134
  }, 8, ["id"])
135
135
  ]),
136
- o.showClose ? c(a.$slots, "close", {
136
+ o.showClose ? c(l.$slots, "close", {
137
137
  key: 0,
138
138
  icon: t(S),
139
139
  emitClose: () => r("drawer:close")
140
140
  }, () => [
141
- l("div", A, [
142
- l("button", {
141
+ a("div", A, [
142
+ a("button", {
143
143
  type: "button",
144
144
  class: "rvc-modal-close",
145
145
  "aria-label": "Close panel",
@@ -152,28 +152,28 @@ const q = {
152
152
  ])
153
153
  ])
154
154
  ]),
155
- l("div", {
155
+ a("div", {
156
156
  id: t(y),
157
157
  ref_key: "contentRef",
158
158
  ref: p,
159
159
  class: "rvc-modal-content"
160
160
  }, [
161
- c(a.$slots, "default", { ready: t(m) })
161
+ c(l.$slots, "default", { ready: t(m) })
162
162
  ], 8, P),
163
- l("footer", j, [
164
- c(a.$slots, "footer", { loading: o.spinning }, () => [
163
+ a("footer", j, [
164
+ c(l.$slots, "footer", { loading: o.spinning }, () => [
165
165
  i(k, {
166
166
  type: t(u) ? "submit" : "button",
167
167
  label: o.submitLabel,
168
168
  spinning: o.spinning,
169
169
  disabled: o.spinning,
170
- onClick: e[2] || (e[2] = (n) => !t(u) && a.$emit("modal:save"))
170
+ onClick: e[2] || (e[2] = (n) => !t(u) && l.$emit("modal:save"))
171
171
  }, null, 8, ["type", "label", "spinning", "disabled"]),
172
172
  i(k, {
173
173
  type: "button",
174
174
  color: "light",
175
175
  label: o.cancelLabel,
176
- onClick: e[3] || (e[3] = (n) => a.$emit("modal:close"))
176
+ onClick: e[3] || (e[3] = (n) => l.$emit("modal:close"))
177
177
  }, null, 8, ["label"])
178
178
  ])
179
179
  ])
@@ -195,5 +195,5 @@ const q = {
195
195
  };
196
196
  export {
197
197
  O as _,
198
- h as u
198
+ V as u
199
199
  };
@@ -7,6 +7,8 @@
7
7
  --rvc-combobox-box-shadow: var(--rvc-base-box-shadow);
8
8
  --rvc-combobox-color: var(--rvc-base-input-color);
9
9
  --rvc-combobox-bg-color: var(--rvc-base-input-bg-color);
10
+ --rvc-combobox-bg-color-disabled: var(--rvc-base-input-bg-color-disabled);
11
+ --rvc-combobox-disabled-opacity: var(--rvc-base-input-disabled-opacity);
10
12
  --rvc-combobox-padding-x: var(--rvc-base-input-padding-x);
11
13
  --rvc-combobox-height: var(--rvc-base-input-height);
12
14
  --rvc-combobox-icon-size: var(--rvc-base-input-icon-size);
@@ -49,6 +51,11 @@
49
51
  .rvc-combobox-wrapper {
50
52
  display: flex;
51
53
  column-gap: calc(var(--spacing) * 1);
54
+
55
+ &:has(:disabled) {
56
+ opacity: var(--rvc-combobox-disabled-opacity);
57
+ pointer-events: none;
58
+ }
52
59
  }
53
60
 
54
61
  .rvc-combobox-field {
@@ -96,6 +103,10 @@
96
103
  &::placeholder {
97
104
  color: var(--rvc-combobox-placeholder-color);
98
105
  }
106
+
107
+ &:disabled {
108
+ background-color: var(--rvc-combobox-bg-color-disabled);
109
+ }
99
110
  }
100
111
 
101
112
  .rvc-combobox-button, .rvc-combobox-field > svg {
@@ -6,6 +6,9 @@
6
6
  --rvc-checkbox-font-size: var(--text-base);
7
7
  --rvc-checkbox-font-weight: var(--font-weight-medium);
8
8
  --rvc-checkbox-color: var(--color-slate-950);
9
+ --rvc-checkbox-input-bg-color: var(--rvc-base-input-bg-color);
10
+ --rvc-checkbox-input-bg-color-disabled: var(--rvc-base-input-bg-color-disabled);
11
+ --rvc-checkbox-input-disabled-opacity: var(--rvc-base-input-disabled-opacity);
9
12
  --rvc-checkbox-input-size: calc(var(--spacing) * 4);
10
13
  --rvc-checkbox-input-border-radius: var(--radius-sm);
11
14
  --rvc-checkbox-input-border-width: 1px;
@@ -39,6 +42,7 @@
39
42
  border-width: var(--rvc-checkbox-input-border-width);
40
43
  border-radius: var(--rvc-checkbox-input-border-radius);
41
44
  border-color: var(--rvc-checkbox-input-border-color);
45
+ background-color: var(--rvc-checkbox-input-bg-color);
42
46
  box-shadow: var(--rvc-checkbox-input-box-shadow);
43
47
 
44
48
  svg {
@@ -48,6 +52,17 @@
48
52
  }
49
53
  }
50
54
 
55
+ input {
56
+ position: absolute;
57
+ opacity: 0;
58
+ inset: 0;
59
+ cursor: pointer;
60
+
61
+ &:disabled {
62
+ cursor: default;
63
+ }
64
+ }
65
+
51
66
  input:checked + .rvc-checkbox-input {
52
67
  border-color: var(--rvc-checkbox-input-checked-border-color);
53
68
  background-color: var(--rvc-checkbox-input-checked-bg-color);
@@ -57,6 +72,12 @@
57
72
  }
58
73
  }
59
74
 
75
+ input:disabled + .rvc-checkbox-input {
76
+ opacity: var(--rvc-checkbox-input-disabled-opacity);
77
+ background-color: var(--rvc-checkbox-input-bg-color-disabled);
78
+ cursor: default;
79
+ }
80
+
60
81
  input:focus + .rvc-checkbox-input {
61
82
  @apply rvc-focus;
62
83
  }