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

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 (36) hide show
  1. package/dist/_shared/{ButtonBase-CQjlJ85F.js → ButtonBase-DfkwHIhN.js} +10 -10
  2. package/dist/_shared/Modal-BXOR8t7c.js +199 -0
  3. package/dist/_shared/{Tooltip-BKXJoJ1x.js → Tooltip-B93ZF7IF.js} +16 -16
  4. package/dist/combobox/combobox.css +65 -34
  5. package/dist/combobox/index.js +46 -46
  6. package/dist/core/accordion.css +21 -10
  7. package/dist/core/alert.css +26 -20
  8. package/dist/core/badge.css +10 -10
  9. package/dist/core/button.css +31 -19
  10. package/dist/core/checkbox.css +14 -10
  11. package/dist/core/empty-state.css +6 -6
  12. package/dist/core/index.js +341 -335
  13. package/dist/core/input.css +13 -13
  14. package/dist/core/pagination.css +68 -9
  15. package/dist/core/radio.css +14 -10
  16. package/dist/core/select.css +15 -16
  17. package/dist/core/styles.css +3 -35
  18. package/dist/core/table.css +66 -5
  19. package/dist/core/tabs.css +20 -9
  20. package/dist/core/textarea.css +10 -10
  21. package/dist/core/utilities.css +12 -0
  22. package/dist/dialogs/drawer.css +140 -4
  23. package/dist/dialogs/index.js +93 -96
  24. package/dist/dialogs/modal.css +118 -22
  25. package/dist/dialogs/styles.css +20 -0
  26. package/dist/dropdown/dropdown.css +79 -49
  27. package/dist/dropdown/index.js +38 -38
  28. package/dist/lightswitch/lightswitch.css +8 -8
  29. package/dist/rich-text-editor/index.js +9 -9
  30. package/dist/rich-text-editor/rich-text.css +15 -10
  31. package/dist/toast/index.js +35 -34
  32. package/dist/toast/toast.css +54 -28
  33. package/dist/tooltip/index.js +1 -1
  34. package/dist/tooltip/tooltip.css +18 -16
  35. package/package.json +9 -2
  36. package/dist/_shared/Modal-CsI5mZlJ.js +0 -202
@@ -1,8 +1,8 @@
1
- import { watchEffect as u, createBlock as l, openBlock as t, resolveDynamicComponent as c, mergeProps as y, withCtx as d, createElementBlock as b, renderSlot as i, createCommentVNode as a, createTextVNode as r, toDisplayString as s, unref as f } from "vue";
1
+ import { watchEffect as u, createBlock as i, openBlock as t, resolveDynamicComponent as c, mergeProps as b, withCtx as d, createElementBlock as y, renderSlot as l, createCommentVNode as a, createTextVNode as r, toDisplayString as s, unref as f } from "vue";
2
2
  import { S as g } from "./icon-spinner-CmxIOqaK.js";
3
3
  const m = {
4
4
  key: 0,
5
- class: "sr-only"
5
+ class: "rvc-button-label"
6
6
  }, O = {
7
7
  __name: "ButtonBase",
8
8
  props: {
@@ -47,31 +47,31 @@ const m = {
47
47
  const o = n;
48
48
  return u(() => {
49
49
  o.iconOnly && !o.icon && console.warn("[ButtonBase] Using iconOnly prop without providing an icon may result in an empty button.");
50
- }), (e, h) => (t(), l(c(n.as), y(n.bindAs ? { as: n.bindAs } : {}, {
50
+ }), (e, v) => (t(), i(c(n.as), b(n.bindAs ? { as: n.bindAs } : {}, {
51
51
  class: ["rvc-button", `rvc-button-${n.color}`, `rvc-button-${n.size}`, { "rvc-button-reverse": n.iconLeft }, { "rvc-button-icon-only": n.iconOnly }],
52
52
  "aria-label": n.iconOnly ? n.label : null,
53
53
  "aria-busy": n.spinning
54
54
  }), {
55
55
  default: d(() => [
56
- n.iconOnly && n.label ? (t(), b("span", m, [
57
- i(e.$slots, "default", { label: n.label }, () => [
56
+ n.iconOnly && n.label ? (t(), y("span", m, [
57
+ l(e.$slots, "default", { label: n.label }, () => [
58
58
  r(s(n.label), 1)
59
59
  ])
60
- ])) : n.label ? i(e.$slots, "default", {
60
+ ])) : n.label ? l(e.$slots, "default", {
61
61
  key: 1,
62
62
  label: n.label
63
63
  }, () => [
64
64
  r(s(n.label), 1)
65
65
  ]) : a("", !0),
66
- i(e.$slots, "icon", { icon: n.icon }, () => [
67
- n.icon && !n.spinning ? (t(), l(c(n.icon), {
66
+ l(e.$slots, "icon", { icon: n.icon }, () => [
67
+ n.icon && !n.spinning ? (t(), i(c(n.icon), {
68
68
  key: 0,
69
69
  class: "rvc-button-icon",
70
70
  "aria-hidden": !n.iconOnly
71
71
  }, null, 8, ["aria-hidden"])) : a("", !0)
72
72
  ]),
73
- i(e.$slots, "spinner", { spinning: n.spinning }, () => [
74
- n.spinning ? (t(), l(f(g), {
73
+ l(e.$slots, "spinner", { spinning: n.spinning }, () => [
74
+ n.spinning ? (t(), i(f(g), {
75
75
  key: 0,
76
76
  class: "rvc-button-icon rvc-button-icon-loading",
77
77
  "aria-hidden": "true"
@@ -0,0 +1,199 @@
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";
3
+ import { _ as k } from "./ButtonBase-DfkwHIhN.js";
4
+ import { r as S } from "./XMarkIcon-90mcPzBs.js";
5
+ function h(o) {
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
+ var s;
8
+ return (s = v.value) == null ? void 0 : s.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
9
+ });
10
+ return {
11
+ contentRef: v,
12
+ ready: r,
13
+ isForm: b,
14
+ titleId: p,
15
+ descriptionId: m,
16
+ initialFocusElement: u
17
+ };
18
+ }
19
+ const q = {
20
+ role: "presentation",
21
+ class: "rvc-modal-presentation"
22
+ }, M = { class: "rvc-modal-container" }, x = { class: "rvc-modal-header" }, z = { class: "rvc-modal-header-inner" }, A = { class: "rvc-modal-close-wrapper" }, P = ["id"], j = { class: "rvc-modal-footer" }, O = {
23
+ __name: "Modal",
24
+ props: {
25
+ as: {
26
+ type: String,
27
+ default: "div"
28
+ },
29
+ id: {
30
+ type: String,
31
+ required: !0
32
+ },
33
+ title: {
34
+ type: String,
35
+ required: !0
36
+ },
37
+ showClose: {
38
+ type: Boolean
39
+ },
40
+ spinning: {
41
+ type: Boolean
42
+ },
43
+ submitLabel: {
44
+ type: String,
45
+ default: "Confirm"
46
+ },
47
+ cancelLabel: {
48
+ type: String,
49
+ default: "Cancel"
50
+ },
51
+ panelClass: {
52
+ type: String,
53
+ default: "sm:max-w-lg"
54
+ }
55
+ },
56
+ emits: ["modal:open", "modal:close", "modal:save", "modal:closed"],
57
+ setup(o, { emit: v }) {
58
+ const r = v, b = o, {
59
+ contentRef: p,
60
+ ready: m,
61
+ isForm: u,
62
+ titleId: s,
63
+ descriptionId: y,
64
+ initialFocusElement: w
65
+ } = h(b);
66
+ return (a, e) => (D(), B(t(N), { as: "template" }, {
67
+ default: d(() => [
68
+ i(t(R), {
69
+ as: o.as,
70
+ class: "rvc-modal",
71
+ static: "",
72
+ "aria-modal": "true",
73
+ role: "dialog",
74
+ "initial-focus": t(w),
75
+ "aria-labelledby": t(s),
76
+ onClose: e[6] || (e[6] = (n) => a.$emit("modal:close")),
77
+ onSubmit: e[7] || (e[7] = E((n) => r("modal:save", n), ["prevent"]))
78
+ }, {
79
+ default: d(() => [
80
+ i(t($), {
81
+ as: "template",
82
+ enter: "rvc-modal-backdrop-transition-enter",
83
+ "enter-from": "rvc-modal-backdrop-transition-enter-from",
84
+ "enter-to": "rvc-modal-backdrop-transition-enter-to",
85
+ leave: "rvc-modal-backdrop-transition-leave",
86
+ "leave-from": "rvc-modal-backdrop-transition-leave-from",
87
+ "leave-to": "rvc-modal-backdrop-transition-leave-to",
88
+ onBeforeEnter: e[0] || (e[0] = (n) => r("modal:open"))
89
+ }, {
90
+ default: d(() => e[8] || (e[8] = [
91
+ l("div", {
92
+ "aria-hidden": "true",
93
+ class: "rvc-modal-backdrop"
94
+ }, null, -1)
95
+ ])),
96
+ _: 1
97
+ }),
98
+ l("div", q, [
99
+ l("div", M, [
100
+ i(t($), {
101
+ as: "template",
102
+ enter: "rvc-modal-transition-enter",
103
+ "enter-from": "rvc-modal-transition-enter-from",
104
+ "enter-to": "rvc-modal-transition-enter-to",
105
+ leave: "rvc-modal-transition-leave",
106
+ "leave-from": "rvc-modal-transition-leave-from",
107
+ "leave-to": "rvc-modal-transition-leave-to",
108
+ onBeforeEnter: e[4] || (e[4] = (n) => m.value = !0),
109
+ onAfterLeave: e[5] || (e[5] = (n) => (m.value = !1, r("modal:closed")))
110
+ }, {
111
+ default: d(() => [
112
+ i(t(V), {
113
+ class: L(["rvc-modal-panel", o.panelClass]),
114
+ "aria-busy": o.spinning,
115
+ "aria-describedby": t(y)
116
+ }, {
117
+ default: d(() => [
118
+ l("header", x, [
119
+ c(a.$slots, "header", { title: o.title }, () => [
120
+ l("div", z, [
121
+ c(a.$slots, "title", {
122
+ id: t(s),
123
+ dialogTitle: t(C),
124
+ title: o.title
125
+ }, () => [
126
+ i(t(C), {
127
+ id: t(s),
128
+ class: "rvc-modal-title"
129
+ }, {
130
+ default: d(() => [
131
+ F(I(o.title), 1)
132
+ ]),
133
+ _: 1
134
+ }, 8, ["id"])
135
+ ]),
136
+ o.showClose ? c(a.$slots, "close", {
137
+ key: 0,
138
+ icon: t(S),
139
+ emitClose: () => r("drawer:close")
140
+ }, () => [
141
+ l("div", A, [
142
+ l("button", {
143
+ type: "button",
144
+ class: "rvc-modal-close",
145
+ "aria-label": "Close panel",
146
+ onClick: e[1] || (e[1] = (n) => r("modal:close"))
147
+ }, [
148
+ i(t(S), { "aria-hidden": "true" })
149
+ ])
150
+ ])
151
+ ]) : T("", !0)
152
+ ])
153
+ ])
154
+ ]),
155
+ l("div", {
156
+ id: t(y),
157
+ ref_key: "contentRef",
158
+ ref: p,
159
+ class: "rvc-modal-content"
160
+ }, [
161
+ c(a.$slots, "default", { ready: t(m) })
162
+ ], 8, P),
163
+ l("footer", j, [
164
+ c(a.$slots, "footer", { loading: o.spinning }, () => [
165
+ i(k, {
166
+ type: t(u) ? "submit" : "button",
167
+ label: o.submitLabel,
168
+ spinning: o.spinning,
169
+ disabled: o.spinning,
170
+ onClick: e[2] || (e[2] = (n) => !t(u) && a.$emit("modal:save"))
171
+ }, null, 8, ["type", "label", "spinning", "disabled"]),
172
+ i(k, {
173
+ type: "button",
174
+ color: "light",
175
+ label: o.cancelLabel,
176
+ onClick: e[3] || (e[3] = (n) => a.$emit("modal:close"))
177
+ }, null, 8, ["label"])
178
+ ])
179
+ ])
180
+ ]),
181
+ _: 3
182
+ }, 8, ["class", "aria-busy", "aria-describedby"])
183
+ ]),
184
+ _: 3
185
+ })
186
+ ])
187
+ ])
188
+ ]),
189
+ _: 3
190
+ }, 8, ["as", "initial-focus", "aria-labelledby"])
191
+ ]),
192
+ _: 3
193
+ }));
194
+ }
195
+ };
196
+ export {
197
+ O as _,
198
+ h as u
199
+ };
@@ -1,4 +1,4 @@
1
- import { shallowRef as a, createElementBlock as d, openBlock as u, renderSlot as f, createElementVNode as g, normalizeStyle as x, normalizeClass as S, unref as h, createCommentVNode as $, mergeProps as R } from "vue";
1
+ import { shallowRef as a, createElementBlock as p, openBlock as f, renderSlot as u, createElementVNode as g, normalizeStyle as x, normalizeClass as S, unref as h, createCommentVNode as $, mergeProps as R } from "vue";
2
2
  import { useFloating as k, autoUpdate as z, autoPlacement as P, offset as W, shift as C, arrow as M, size as A } from "@floating-ui/vue";
3
3
  const B = ["innerHTML"], N = {
4
4
  __name: "Tooltip",
@@ -46,7 +46,7 @@ const B = ["innerHTML"], N = {
46
46
  setup(t) {
47
47
  const o = t, i = a(), s = a(), l = a(), {
48
48
  floatingStyles: y,
49
- middlewareData: b,
49
+ middlewareData: w,
50
50
  placement: c
51
51
  } = k(i, s, {
52
52
  middleware: [
@@ -65,13 +65,13 @@ const B = ["innerHTML"], N = {
65
65
  ],
66
66
  whileElementsMounted: z,
67
67
  placement: o.placement
68
- }), v = (e) => ({
68
+ }), b = (e) => ({
69
69
  top: 0,
70
70
  bottom: 180,
71
71
  left: -90,
72
72
  right: 90
73
- })[e.split("-")[0]] || 0, w = (e) => {
74
- var p, m;
73
+ })[e.split("-")[0]] || 0, v = (e) => {
74
+ var m, d;
75
75
  const r = c.value.split("-")[0], n = {
76
76
  left: "right",
77
77
  right: "left",
@@ -80,34 +80,34 @@ const B = ["innerHTML"], N = {
80
80
  }[r];
81
81
  return {
82
82
  style: {
83
- left: (p = e.arrow) != null && p.x ? `${e.arrow.x}px` : "",
84
- top: (m = e.arrow) != null && m.y ? `${e.arrow.y}px` : "",
83
+ left: (m = e.arrow) != null && m.x ? `${e.arrow.x}px` : "",
84
+ top: (d = e.arrow) != null && d.y ? `${e.arrow.y}px` : "",
85
85
  bottom: "",
86
86
  right: "",
87
87
  [n]: l.value ? `${l.value.offsetWidth * -1}px` : "",
88
- transform: `rotate(${v(c.value)}deg)`
88
+ transform: `rotate(${b(c.value)}deg)`
89
89
  }
90
90
  };
91
91
  };
92
- return (e, r) => (u(), d("div", {
92
+ return (e, r) => (f(), p("div", {
93
93
  ref_key: "wrapperRef",
94
94
  ref: i,
95
- class: "group/tooltip"
95
+ class: "rvc-tooltip-wrapper"
96
96
  }, [
97
- f(e.$slots, "default"),
97
+ u(e.$slots, "default"),
98
98
  g("div", {
99
99
  ref_key: "tooltipRef",
100
100
  ref: s,
101
101
  class: S([
102
- "rvc-tooltip group-hover/tooltip:opacity-100 group-hover/tooltip:visible invisible opacity-0",
102
+ "rvc-tooltip",
103
103
  t.tooltipClass,
104
104
  `rvc-tooltip-${t.size}`,
105
105
  { "rvc-tooltip-blur": t.blur }
106
106
  ]),
107
107
  style: x(h(y))
108
108
  }, [
109
- f(e.$slots, "content", { content: t.content }, () => [
110
- t.content ? (u(), d("div", {
109
+ u(e.$slots, "content", { content: t.content }, () => [
110
+ t.content ? (f(), p("div", {
111
111
  key: 0,
112
112
  innerHTML: t.content
113
113
  }, null, 8, B)) : $("", !0)
@@ -115,8 +115,8 @@ const B = ["innerHTML"], N = {
115
115
  g("div", R({
116
116
  ref_key: "arrowRef",
117
117
  ref: l,
118
- class: "absolute rvc-tooltip-arrow"
119
- }, w(h(b))), null, 16)
118
+ class: "rvc-tooltip-arrow"
119
+ }, v(h(w))), null, 16)
120
120
  ], 6)
121
121
  ], 512));
122
122
  }
@@ -42,10 +42,19 @@
42
42
  .rvc-combobox {
43
43
  display: block;
44
44
 
45
+ .rvc-combobox-container {
46
+ position: relative;
47
+ }
48
+
45
49
  .rvc-combobox-wrapper {
50
+ display: flex;
51
+ column-gap: calc(var(--spacing) * 1);
52
+ }
53
+
54
+ .rvc-combobox-field {
46
55
  display: grid;
47
- grid-template-columns: 1fr;
48
56
  position: relative;
57
+ grid-template-columns: 1fr;
49
58
  width: 100%;
50
59
 
51
60
  /* Extra right padding */
@@ -60,24 +69,24 @@
60
69
  }
61
70
 
62
71
  input {
63
- border-radius: var(--rvc-combobox-border-radius);
64
- border-width: var(--rvc-combobox-border-width);
65
- border-color: var(--rvc-combobox-border-color);
72
+ position: relative;
73
+ grid-column-start: 1;
74
+ grid-row-start: 1;
75
+ width: 100%;
76
+ height: var(--rvc-combobox-height);
66
77
  padding-right: var(--rvc-combobox-padding-x);
67
78
  padding-left: var(--rvc-combobox-padding-x);
79
+ border-width: var(--rvc-combobox-border-width);
80
+ border-radius: var(--rvc-combobox-border-radius);
81
+ border-color: var(--rvc-combobox-border-color);
82
+ outline-width: 0;
68
83
  background-color: var(--rvc-combobox-bg-color);
84
+ background-image: none;
85
+ box-shadow: var(--rvc-combobox-box-shadow);
86
+ color: var(--rvc-combobox-color);
69
87
  font-size: var(--rvc-combobox-font-size);
70
88
  font-weight: var(--rvc-combobox-font-weight);
71
- color: var(--rvc-combobox-color);
72
- box-shadow: var(--rvc-combobox-box-shadow);
73
- height: var(--rvc-combobox-height);
74
- background-image: none;
75
- width: 100%;
76
- position: relative;
77
- grid-column-start: 1;
78
- grid-row-start: 1;
79
89
  appearance: none;
80
- outline-width: 0;
81
90
 
82
91
  /* Extra left padding */
83
92
  &:nth-child(2) {
@@ -89,13 +98,13 @@
89
98
  }
90
99
  }
91
100
 
92
- .rvc-combobox-button, .rvc-combobox-wrapper > svg {
93
- color: var(--rvc-combobox-icon-color);
101
+ .rvc-combobox-button, .rvc-combobox-field > svg {
94
102
  position: relative;
103
+ z-index: 1;
95
104
  grid-column-start: 1;
96
105
  grid-row-start: 1;
97
106
  align-self: center;
98
- z-index: 1;
107
+ color: var(--rvc-combobox-icon-color);
99
108
  }
100
109
 
101
110
  .rvc-combobox-button {
@@ -128,10 +137,10 @@
128
137
  }
129
138
 
130
139
  .rvc-combobox-chips {
131
- margin-top: var(--rvc-combobox-chips-spacing);
132
- gap: var(--rvc-combobox-chips-spacing);
133
140
  display: flex;
134
141
  flex-wrap: wrap;
142
+ margin-top: var(--rvc-combobox-chips-spacing);
143
+ gap: var(--rvc-combobox-chips-spacing);
135
144
  }
136
145
 
137
146
  .rvc-combobox-chip {
@@ -148,34 +157,34 @@
148
157
  }
149
158
 
150
159
  .rvc-combobox-options {
151
- padding-inline: var(--rvc-combobox-options-padding-x);
152
- padding-block: var(--rvc-combobox-options-padding-y);
160
+ position: absolute;
161
+ z-index: var(--rvc-combobox-options-z-index);
153
162
  top: calc(var(--rvc-combobox-height) + var(--rvc-combobox-options-offset));
154
- border-radius: var(--rvc-combobox-border-radius);
163
+ width: 100%;
164
+ max-height: var(--rvc-combobox-options-max-height);
165
+ margin-top: var(--rvc-combobox-options-offset);
166
+ padding-block: var(--rvc-combobox-options-padding-y);
167
+ padding-inline: var(--rvc-combobox-options-padding-x);
168
+ overflow-y: auto;
155
169
  border-width: var(--rvc-combobox-border-width);
170
+ border-radius: var(--rvc-combobox-border-radius);
156
171
  border-color: var(--rvc-combobox-border-color);
157
172
  background-color: var(--rvc-combobox-bg-color);
158
- font-size: var(--rvc-combobox-font-size);
159
- color: var(--rvc-combobox-color);
160
173
  box-shadow: var(--rvc-combobox-box-shadow);
161
- margin-top: var(--rvc-combobox-options-offset);
162
- z-index: var(--rvc-combobox-options-z-index);
163
- max-height: var(--rvc-combobox-options-max-height);
164
- position: absolute;
165
- width: 100%;
166
- overflow-y: auto;
174
+ color: var(--rvc-combobox-color);
175
+ font-size: var(--rvc-combobox-font-size);
167
176
  }
168
177
 
169
178
  .rvc-combobox-option {
179
+ display: flex;
180
+ position: relative;
181
+ align-items: center;
170
182
  padding: var(--rvc-combobox-option-padding-y) var(--rvc-combobox-option-padding-x);
171
183
  border-radius: var(--rvc-combobox-border-radius);
172
184
  color: var(--rvc-combobox-color);
173
- gap: calc(var(--spacing) * 2);
174
- align-items: center;
175
- position: relative;
176
- display: flex;
177
- user-select: none;
178
185
  cursor: pointer;
186
+ user-select: none;
187
+ gap: calc(var(--spacing) * 2);
179
188
 
180
189
  &.rvc-combobox-option-hover {
181
190
  background-color: var(--rvc-combobox-option-bg-color-hover);
@@ -192,6 +201,28 @@
192
201
  }
193
202
  }
194
203
 
204
+ .rvc-combobox-option-text {
205
+ display: block;
206
+ overflow: hidden;
207
+ text-overflow: ellipsis;
208
+ white-space: nowrap;
209
+ }
210
+
211
+ .rvc-combobox-content {
212
+ position: relative;
213
+ padding-right: calc(var(--spacing) * 9);
214
+ padding-left: calc(var(--spacing) * 3);
215
+ padding-block: calc(var(--spacing) * 2);
216
+ color: var(--color-slate-500);
217
+ cursor: default;
218
+ user-select: none;
219
+
220
+ > * {
221
+ display: flex;
222
+ align-items: center;
223
+ }
224
+ }
225
+
195
226
  /* Size variants */
196
227
  &.rvc-combobox-sm {
197
228
  --rvc-combobox-height: var(--rvc-combobox-height-sm);