@temp-spotwork/ui 1.4.8 → 1.5.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.
@@ -0,0 +1,11 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { RichTextarea } from './rich-textarea';
3
+
4
+ declare const meta: Meta<typeof RichTextarea>;
5
+ export default meta;
6
+ type Story = StoryObj<typeof meta>;
7
+ export declare const Primary: Story;
8
+ export declare const WithInitialFormatting: Story;
9
+ export declare const ErrorState: Story;
10
+ export declare const WarningState: Story;
11
+ export declare const DisabledState: Story;
@@ -0,0 +1,67 @@
1
+ import n, { useState as l } from "react";
2
+ import { RichTextarea as a } from "./rich-textarea.js";
3
+ const c = {
4
+ title: "@spotwork-ui/RichTextarea",
5
+ component: a,
6
+ parameters: {
7
+ layout: "centered"
8
+ },
9
+ tags: ["autodocs"],
10
+ args: {
11
+ value: "",
12
+ label: "Description",
13
+ placeholder: "Add content description",
14
+ helperText: "Use the toolbar to format text",
15
+ rows: 6,
16
+ onChange: () => {
17
+ }
18
+ }
19
+ }, e = {
20
+ render: (t) => {
21
+ const [o, i] = l(t.value ?? "");
22
+ return n.createElement(
23
+ "div",
24
+ { style: { width: 520 } },
25
+ n.createElement(a, {
26
+ ...t,
27
+ value: o,
28
+ onChange: (r) => {
29
+ i(r), t.onChange(r);
30
+ }
31
+ })
32
+ );
33
+ }
34
+ }, p = {
35
+ args: {
36
+ value: "<p><strong>Highlights</strong></p><ul><li>Rich text content</li><li><em>Italic details</em></li></ul>",
37
+ helperText: "Initial HTML content is supported."
38
+ },
39
+ render: e.render
40
+ }, u = {
41
+ args: {
42
+ error: !0,
43
+ helperText: "Description is required"
44
+ },
45
+ render: e.render
46
+ }, h = {
47
+ args: {
48
+ warning: !0,
49
+ helperText: "Description is getting too long"
50
+ },
51
+ render: e.render
52
+ }, g = {
53
+ args: {
54
+ disabled: !0,
55
+ value: "<p>This content is read-only</p>",
56
+ helperText: "Disabled inputs cannot be edited"
57
+ },
58
+ render: e.render
59
+ };
60
+ export {
61
+ g as DisabledState,
62
+ u as ErrorState,
63
+ e as Primary,
64
+ h as WarningState,
65
+ p as WithInitialFormatting,
66
+ c as default
67
+ };
@@ -5,3 +5,7 @@ declare const meta: Meta<typeof Textarea>;
5
5
  export default meta;
6
6
  type Story = StoryObj<typeof meta>;
7
7
  export declare const Primary: Story;
8
+ export declare const WithInitialFormatting: Story;
9
+ export declare const ErrorState: Story;
10
+ export declare const WarningState: Story;
11
+ export declare const DisabledState: Story;
@@ -1,22 +1,67 @@
1
- import { f as o } from "../../../../index-CktvVE7I.js";
2
- import { Textarea as a } from "./textarea.js";
3
- const e = {
1
+ import a, { useState as s } from "react";
2
+ import { Textarea as n } from "./textarea.js";
3
+ const c = {
4
4
  title: "@spotwork-ui/Textarea",
5
- component: a,
5
+ component: n,
6
6
  parameters: {
7
7
  layout: "centered"
8
8
  },
9
9
  tags: ["autodocs"],
10
- argTypes: {
11
- backgroundColor: { control: "color" }
12
- },
13
- args: { onClick: o() }
14
- }, s = {
15
10
  args: {
16
- label: "Textarea"
11
+ value: "",
12
+ label: "Description",
13
+ placeholder: "Add content description",
14
+ helperText: "Add helpful details",
15
+ rows: 6,
16
+ onChange: () => {
17
+ }
18
+ }
19
+ }, e = {
20
+ render: (t) => {
21
+ const [o, i] = s(t.value ?? "");
22
+ return a.createElement(
23
+ "div",
24
+ { style: { width: 520 } },
25
+ a.createElement(n, {
26
+ ...t,
27
+ value: o,
28
+ onChange: (r) => {
29
+ i(r), t.onChange(r);
30
+ }
31
+ })
32
+ );
17
33
  }
34
+ }, p = {
35
+ args: {
36
+ value: "This starts with pre-filled content.",
37
+ helperText: "Textarea accepts plain text values."
38
+ },
39
+ render: e.render
40
+ }, u = {
41
+ args: {
42
+ error: !0,
43
+ helperText: "Description is required"
44
+ },
45
+ render: e.render
46
+ }, h = {
47
+ args: {
48
+ warning: !0,
49
+ helperText: "Description is getting too long"
50
+ },
51
+ render: e.render
52
+ }, g = {
53
+ args: {
54
+ disabled: !0,
55
+ value: "<p>This content is read-only</p>",
56
+ helperText: "Disabled inputs cannot be edited"
57
+ },
58
+ render: e.render
18
59
  };
19
60
  export {
20
- s as Primary,
21
- e as default
61
+ g as DisabledState,
62
+ u as ErrorState,
63
+ e as Primary,
64
+ h as WarningState,
65
+ p as WithInitialFormatting,
66
+ c as default
22
67
  };
@@ -1,2 +1,4 @@
1
1
  export { Textarea } from './textarea';
2
2
  export type { TextareaProps } from './textarea';
3
+ export { RichTextarea } from './rich-textarea';
4
+ export type { RichTextareaProps } from './rich-textarea';
@@ -1,4 +1,6 @@
1
1
  import { Textarea as a } from "./textarea.js";
2
+ import { RichTextarea as t } from "./rich-textarea.js";
2
3
  export {
4
+ t as RichTextarea,
3
5
  a as Textarea
4
6
  };
@@ -0,0 +1,53 @@
1
+ import { default as React } from 'react';
2
+
3
+ export type RichTextareaProps = {
4
+ /**
5
+ * HTML value for rich text content
6
+ */
7
+ value: string;
8
+ /**
9
+ * placeholder
10
+ */
11
+ placeholder?: string;
12
+ /**
13
+ * inital amount of rows wants for the textarea
14
+ */
15
+ rows?: number;
16
+ /**
17
+ * The inital amount of columns wanted for the textarea
18
+ */
19
+ cols?: number;
20
+ /**
21
+ * the hint text that is at the bottom of the component
22
+ */
23
+ helperText?: string;
24
+ /**
25
+ * variable to determine error state
26
+ */
27
+ error?: boolean;
28
+ /**
29
+ * variable to determine warning state
30
+ */
31
+ warning?: boolean;
32
+ /**
33
+ * variable to determine disabled state
34
+ */
35
+ disabled?: boolean;
36
+ /**
37
+ * Returns editor content as HTML string
38
+ */
39
+ onChange: (value: string) => void;
40
+ /**
41
+ * The label that is placed at the top of the component
42
+ */
43
+ label?: string;
44
+ /**
45
+ * pass onBlur func
46
+ */
47
+ onBlur?: () => void;
48
+ /**
49
+ * optional?: autoFocus
50
+ */
51
+ autoFocus?: boolean;
52
+ };
53
+ export declare const RichTextarea: React.ForwardRefExoticComponent<RichTextareaProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,275 @@
1
+ import { jsxs as i, jsx as e } from "react/jsx-runtime";
2
+ import R, { useState as L, useRef as A, useImperativeHandle as _, useEffect as w, useCallback as k } from "react";
3
+ import { Icons as q } from "../../icons/icons.js";
4
+ import "../../icons/iconsSVGs/Large/Profile.js";
5
+ import "../../icons/iconsSVGs/Small/Profile.js";
6
+ import { styles as O } from "./styles.js";
7
+ import { c as p } from "../../../../index-fN7hCOo3.js";
8
+ import { Typography as T } from "../../../styles/typography/typography.js";
9
+ import { styleMap as E } from "../../../styles/typography/style.js";
10
+ import { getLabelColor as D, getBorderClasses as j, getHelperTextColor as W } from "../utils-for-forms/state-functions.js";
11
+ const d = ({
12
+ onClick: l,
13
+ active: c,
14
+ title: x,
15
+ children: u
16
+ }) => /* @__PURE__ */ e(
17
+ "button",
18
+ {
19
+ type: "button",
20
+ title: x,
21
+ onMouseDown: (n) => {
22
+ n.preventDefault(), l();
23
+ },
24
+ style: {
25
+ width: 28,
26
+ height: 28,
27
+ border: "none",
28
+ borderRadius: 5,
29
+ cursor: "pointer",
30
+ display: "flex",
31
+ alignItems: "center",
32
+ justifyContent: "center",
33
+ fontSize: 13,
34
+ fontFamily: "inherit",
35
+ background: c ? "#EEEDFE" : "transparent",
36
+ color: c ? "#534AB7" : "var(--color-text-secondary, #888)",
37
+ padding: 0,
38
+ flexShrink: 0
39
+ },
40
+ children: u
41
+ }
42
+ ), K = () => /* @__PURE__ */ e("b", { style: { fontWeight: 700, fontSize: 13 }, children: "B" }), G = () => /* @__PURE__ */ e("i", { style: { fontStyle: "italic", fontSize: 13 }, children: "I" }), J = () => /* @__PURE__ */ e("u", { style: { textDecoration: "underline", fontSize: 13 }, children: "U" }), P = () => /* @__PURE__ */ i("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: [
43
+ /* @__PURE__ */ e("circle", { cx: "2", cy: "4", r: "1.5", fill: "currentColor" }),
44
+ /* @__PURE__ */ e("rect", { x: "5", y: "3", width: "8", height: "2", rx: "1", fill: "currentColor" }),
45
+ /* @__PURE__ */ e("circle", { cx: "2", cy: "9", r: "1.5", fill: "currentColor" }),
46
+ /* @__PURE__ */ e("rect", { x: "5", y: "8", width: "8", height: "2", rx: "1", fill: "currentColor" })
47
+ ] }), Q = () => /* @__PURE__ */ i("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: [
48
+ /* @__PURE__ */ e("text", { x: "0", y: "6", fontSize: "6", fill: "currentColor", children: "1." }),
49
+ /* @__PURE__ */ e("rect", { x: "5", y: "3", width: "8", height: "2", rx: "1", fill: "currentColor" }),
50
+ /* @__PURE__ */ e("text", { x: "0", y: "11", fontSize: "6", fill: "currentColor", children: "2." }),
51
+ /* @__PURE__ */ e("rect", { x: "5", y: "8", width: "8", height: "2", rx: "1", fill: "currentColor" })
52
+ ] }), oe = R.forwardRef(
53
+ ({
54
+ value: l,
55
+ placeholder: c,
56
+ rows: x = 6,
57
+ helperText: u,
58
+ error: n = !1,
59
+ warning: f = !1,
60
+ disabled: t = !1,
61
+ label: H,
62
+ onChange: y,
63
+ onBlur: v,
64
+ autoFocus: g = !1
65
+ }, U) => {
66
+ const [C, b] = L(!1), [s, B] = L({
67
+ bold: !1,
68
+ italic: !1,
69
+ underline: !1,
70
+ insertUnorderedList: !1,
71
+ insertOrderedList: !1
72
+ }), o = A(null);
73
+ _(U, () => o.current, []);
74
+ const m = O(t), N = D(C, f, n, t), S = W(f, n, t), z = j(C, f, n, t);
75
+ w(() => {
76
+ const r = o.current;
77
+ r && r.innerHTML !== l && (r.innerHTML = l);
78
+ }, [l]), w(() => {
79
+ var r;
80
+ g && ((r = o.current) == null || r.focus());
81
+ }, [g]);
82
+ const h = k(() => {
83
+ B({
84
+ bold: document.queryCommandState("bold"),
85
+ italic: document.queryCommandState("italic"),
86
+ underline: document.queryCommandState("underline"),
87
+ insertUnorderedList: document.queryCommandState("insertUnorderedList"),
88
+ insertOrderedList: document.queryCommandState("insertOrderedList")
89
+ });
90
+ }, []), a = k(
91
+ (r) => {
92
+ var I;
93
+ t || ((I = o.current) == null || I.focus(), document.execCommand(r, !1, void 0), h(), o.current && y(o.current.innerHTML));
94
+ },
95
+ [t, y, h]
96
+ ), F = x * 24, M = l.replace(/<br\s*\/?>/gi, "").trim().length === 0;
97
+ return /* @__PURE__ */ i("div", { className: m.container, children: [
98
+ /* @__PURE__ */ e(
99
+ T,
100
+ {
101
+ swStyle: 3,
102
+ "data-testid": "labelTextarea",
103
+ color: N,
104
+ children: H
105
+ }
106
+ ),
107
+ /* @__PURE__ */ i("div", { className: p(m.subContainer), children: [
108
+ /* @__PURE__ */ i(
109
+ "div",
110
+ {
111
+ className: p(z, "w-full self-stretch"),
112
+ style: { borderRadius: "var(--border-radius-md, 6px)", overflow: "hidden" },
113
+ children: [
114
+ /* @__PURE__ */ i(
115
+ "div",
116
+ {
117
+ style: {
118
+ display: "flex",
119
+ alignItems: "center",
120
+ gap: 2,
121
+ padding: "6px 8px",
122
+ borderBottom: "1px solid var(--color-border-tertiary, #d9d9d9)",
123
+ background: "var(--color-background-secondary)",
124
+ opacity: t ? 0.4 : 1,
125
+ pointerEvents: t ? "none" : "auto"
126
+ },
127
+ children: [
128
+ /* @__PURE__ */ e(
129
+ d,
130
+ {
131
+ title: "Bold",
132
+ active: s.bold,
133
+ onClick: () => a("bold"),
134
+ children: /* @__PURE__ */ e(K, {})
135
+ }
136
+ ),
137
+ /* @__PURE__ */ e(
138
+ d,
139
+ {
140
+ title: "Italic",
141
+ active: s.italic,
142
+ onClick: () => a("italic"),
143
+ children: /* @__PURE__ */ e(G, {})
144
+ }
145
+ ),
146
+ /* @__PURE__ */ e(
147
+ d,
148
+ {
149
+ title: "Underline",
150
+ active: s.underline,
151
+ onClick: () => a("underline"),
152
+ children: /* @__PURE__ */ e(J, {})
153
+ }
154
+ ),
155
+ /* @__PURE__ */ e(
156
+ "div",
157
+ {
158
+ style: {
159
+ width: 1,
160
+ height: 18,
161
+ background: "var(--color-border-tertiary)",
162
+ margin: "0 4px",
163
+ flexShrink: 0
164
+ }
165
+ }
166
+ ),
167
+ /* @__PURE__ */ e(
168
+ d,
169
+ {
170
+ title: "Bullet list",
171
+ active: s.insertUnorderedList,
172
+ onClick: () => a("insertUnorderedList"),
173
+ children: /* @__PURE__ */ e(P, {})
174
+ }
175
+ ),
176
+ /* @__PURE__ */ e(
177
+ d,
178
+ {
179
+ title: "Numbered list",
180
+ active: s.insertOrderedList,
181
+ onClick: () => a("insertOrderedList"),
182
+ children: /* @__PURE__ */ e(Q, {})
183
+ }
184
+ )
185
+ ]
186
+ }
187
+ ),
188
+ /* @__PURE__ */ i(
189
+ "div",
190
+ {
191
+ style: {
192
+ position: "relative"
193
+ },
194
+ children: [
195
+ M && c && /* @__PURE__ */ e(
196
+ "div",
197
+ {
198
+ "aria-hidden": "true",
199
+ className: p(E[5]),
200
+ style: {
201
+ position: "absolute",
202
+ inset: "10px 12px auto 12px",
203
+ color: "var(--color-text-tertiary)",
204
+ pointerEvents: "none",
205
+ lineHeight: 1.6
206
+ },
207
+ children: c
208
+ }
209
+ ),
210
+ /* @__PURE__ */ e(
211
+ "div",
212
+ {
213
+ ref: o,
214
+ contentEditable: !t,
215
+ "data-testid": "textarea",
216
+ suppressContentEditableWarning: !0,
217
+ className: p(
218
+ m.textarea,
219
+ E[5],
220
+ "[&_ul]:list-disc [&_ol]:list-decimal [&_ul]:pl-6 [&_ol]:pl-6"
221
+ ),
222
+ style: {
223
+ minHeight: F,
224
+ padding: "10px 12px",
225
+ outline: "none",
226
+ border: "none",
227
+ boxSizing: "border-box",
228
+ lineHeight: 1.6,
229
+ cursor: t ? "not-allowed" : "text",
230
+ opacity: t ? 0.5 : 1
231
+ },
232
+ onFocus: () => b(!0),
233
+ onBlur: () => {
234
+ b(!1), v == null || v();
235
+ },
236
+ onInput: (r) => {
237
+ t || y(r.target.innerHTML);
238
+ },
239
+ onKeyUp: h,
240
+ onMouseUp: h
241
+ }
242
+ )
243
+ ]
244
+ }
245
+ )
246
+ ]
247
+ }
248
+ ),
249
+ u && /* @__PURE__ */ i("div", { className: m.helperContainer, children: [
250
+ (n || f) && /* @__PURE__ */ e(
251
+ q,
252
+ {
253
+ disabled: !0,
254
+ icon: n ? "AlertSmall" : "WarningSmall",
255
+ color: S,
256
+ id: "IconHintTextarea"
257
+ }
258
+ ),
259
+ /* @__PURE__ */ e(
260
+ T,
261
+ {
262
+ "data-testid": "hintTextarea",
263
+ color: S,
264
+ children: u,
265
+ swStyle: 1
266
+ }
267
+ )
268
+ ] })
269
+ ] })
270
+ ] });
271
+ }
272
+ );
273
+ export {
274
+ oe as RichTextarea
275
+ };
@@ -51,11 +51,7 @@ const J = A.forwardRef(
51
51
  onChange: (N) => {
52
52
  !e && v(N.target.value);
53
53
  },
54
- className: f(
55
- g,
56
- o.textarea,
57
- H[5]
58
- ),
54
+ className: f(g, o.textarea, H[5]),
59
55
  value: d,
60
56
  placeholder: x,
61
57
  rows: h,
@@ -17,13 +17,14 @@ import "../../../index-CYyrKZeH.js";
17
17
  import "../form/textfield/textfield.js";
18
18
  import "../form/stepper/stepper.js";
19
19
  import "../form/textarea/textarea.js";
20
+ import "../form/textarea/rich-textarea.js";
20
21
  import "../form/timeselect/timeselect.js";
21
22
  import "../../molecules/datatables/cell/cell.js";
22
23
  import "../../molecules/dataviz/donut-chart/donut-chart.js";
23
24
  import "../../../react-spring_web.modern-BLL8Qmtg.js";
24
25
  import "../../molecules/form/radiogroup/radiogroup.js";
25
26
  import "../../../card-Cc2Qkiqr.js";
26
- function F({ text: r, size: o = 300, isSmall: m = !0 }) {
27
+ function G({ text: r, size: o = 300, isSmall: m = !0 }) {
27
28
  const [t, p] = c(m);
28
29
  return /* @__PURE__ */ n("div", { children: [
29
30
  /* @__PURE__ */ i(l, { swStyle: 3, color: "default", children: t ? `${r.slice(0, o)}${r.length > o ? "..." : ""}` : r }),
@@ -31,5 +32,5 @@ function F({ text: r, size: o = 300, isSmall: m = !0 }) {
31
32
  ] });
32
33
  }
33
34
  export {
34
- F as SmallLargeText
35
+ G as SmallLargeText
35
36
  };
@@ -19,6 +19,7 @@ import "../../../index-CYyrKZeH.js";
19
19
  import "../../atoms/form/textfield/textfield.js";
20
20
  import "../../atoms/form/stepper/stepper.js";
21
21
  import "../../atoms/form/textarea/textarea.js";
22
+ import "../../atoms/form/textarea/rich-textarea.js";
22
23
  import "../../atoms/form/timeselect/timeselect.js";
23
24
  import { Button as b } from "../button/button.js";
24
25
  import "../datatables/cell/cell.js";
@@ -26,7 +27,7 @@ import "../dataviz/donut-chart/donut-chart.js";
26
27
  import "../../../react-spring_web.modern-BLL8Qmtg.js";
27
28
  import "../form/radiogroup/radiogroup.js";
28
29
  import "../../../card-Cc2Qkiqr.js";
29
- function rr({
30
+ function er({
30
31
  children: p,
31
32
  width: c,
32
33
  open: d,
@@ -74,5 +75,5 @@ function rr({
74
75
  ] }) });
75
76
  }
76
77
  export {
77
- rr as Alert
78
+ er as Alert
78
79
  };
@@ -19,6 +19,7 @@ import "../../../index-CYyrKZeH.js";
19
19
  import "../../atoms/form/textfield/textfield.js";
20
20
  import "../../atoms/form/stepper/stepper.js";
21
21
  import "../../atoms/form/textarea/textarea.js";
22
+ import "../../atoms/form/textarea/rich-textarea.js";
22
23
  import "../../atoms/form/timeselect/timeselect.js";
23
24
  import { Button as d } from "../button/button.js";
24
25
  import "../datatables/cell/cell.js";
@@ -43,7 +44,7 @@ function sr({
43
44
  contentMaxHeight: y,
44
45
  heightSpacingRem: N = 15
45
46
  }) {
46
- const { ref: w, height: s } = n(), { ref: C, height: H } = n(), i = N;
47
+ const { ref: w, height: p } = n(), { ref: C, height: H } = n(), i = N;
47
48
  return /* @__PURE__ */ r($, { open: x, onOpenChange: t, children: /* @__PURE__ */ e(I, { children: [
48
49
  /* @__PURE__ */ r(_, { className: "fixed inset-0 bg-surface-subduedInverted bg-opacity-50 " }),
49
50
  /* @__PURE__ */ e(
@@ -66,7 +67,7 @@ function sr({
66
67
  {
67
68
  style: {
68
69
  // Calculate max height based on viewport height minus spacing and measured header/footer heights
69
- maxHeight: y ?? (o ? `calc(100vh - ${i}rem - ${s}px - ${H}px)` : `calc(100vh - ${i}rem - ${s}px)`)
70
+ maxHeight: y ?? (o ? `calc(100vh - ${i}rem - ${p}px - ${H}px)` : `calc(100vh - ${i}rem - ${p}px)`)
70
71
  },
71
72
  className: c("overflow-auto", g && "p-xl", !o && "rounded-b-xl"),
72
73
  children: f
@@ -88,7 +89,7 @@ function sr({
88
89
  onClick: t
89
90
  }
90
91
  ),
91
- l && /* @__PURE__ */ r("div", { className: "flex gap-xl", children: l.map((p) => /* @__PURE__ */ r(d, { size: "large", ...p }, p.text)) })
92
+ l && /* @__PURE__ */ r("div", { className: "flex gap-xl", children: l.map((s) => /* @__PURE__ */ r(d, { size: "large", ...s }, s.text)) })
92
93
  ]
93
94
  }
94
95
  )
@@ -19,17 +19,18 @@ import "../../../index-CYyrKZeH.js";
19
19
  import "../../atoms/form/textfield/textfield.js";
20
20
  import "../../atoms/form/stepper/stepper.js";
21
21
  import "../../atoms/form/textarea/textarea.js";
22
+ import "../../atoms/form/textarea/rich-textarea.js";
22
23
  import "../../atoms/form/timeselect/timeselect.js";
23
24
  import { Button as L } from "../button/button.js";
24
25
  import "../datatables/cell/cell.js";
25
26
  import "../dataviz/donut-chart/donut-chart.js";
26
27
  import "../form/radiogroup/radiogroup.js";
27
28
  import "../../../card-Cc2Qkiqr.js";
28
- function vr({
29
+ function gr({
29
30
  children: N,
30
31
  actionBox: b,
31
32
  title: l,
32
- open: e,
33
+ open: o,
33
34
  setOpen: i,
34
35
  width: a,
35
36
  transitionDuration: c = 500,
@@ -42,7 +43,7 @@ function vr({
42
43
  scrollBehavior: D = "auto",
43
44
  enableScroll: s = !0
44
45
  }) {
45
- const [n, T] = I(c), o = y(null), h = y(0), R = X(
46
+ const [n, T] = I(c), e = y(null), h = y(0), R = X(
46
47
  () => ({
47
48
  from: { opacity: 0, transform: `translateX(${a})` },
48
49
  enter: { opacity: 1, transform: "translateX(0%)" },
@@ -52,21 +53,21 @@ function vr({
52
53
  }
53
54
  }),
54
55
  [a, n]
55
- ), B = E(e, R);
56
+ ), B = E(o, R);
56
57
  v(() => {
57
58
  T(c);
58
59
  }, [c]);
59
60
  const _ = F({
60
- width: e ? a : 0,
61
+ width: o ? a : 0,
61
62
  config: { duration: n }
62
63
  });
63
64
  v(() => {
64
- e && m && s && o.current && (o.current.scrollTop = h.current);
65
- }, [e, m, s]);
65
+ o && m && s && e.current && (e.current.scrollTop = h.current);
66
+ }, [o, m, s]);
66
67
  const $ = () => {
67
- m && s && o.current && (h.current = o.current.scrollTop), i == null || i(!1);
68
+ m && s && e.current && (h.current = e.current.scrollTop), i == null || i(!1);
68
69
  };
69
- return /* @__PURE__ */ r(M, { open: e, onOpenChange: i, children: /* @__PURE__ */ r(q, { children: B(
70
+ return /* @__PURE__ */ r(M, { open: o, onOpenChange: i, children: /* @__PURE__ */ r(q, { children: B(
70
71
  (x, j) => j ? /* @__PURE__ */ t(k, { children: [
71
72
  /* @__PURE__ */ r(g.div, { style: { opacity: x.opacity }, children: /* @__PURE__ */ r(
72
73
  z,
@@ -105,10 +106,10 @@ function vr({
105
106
  u && /* @__PURE__ */ r("div", { children: /* @__PURE__ */ r(L, { ...u }) })
106
107
  ] })
107
108
  ] }),
108
- e && /* @__PURE__ */ r(
109
+ o && /* @__PURE__ */ r(
109
110
  "div",
110
111
  {
111
- ref: o,
112
+ ref: e,
112
113
  className: `flex-1 ${s ? "overflow-y-auto overflow-x-hidden" : "overflow-hidden"}`,
113
114
  style: { scrollBehavior: D },
114
115
  children: N
@@ -122,5 +123,5 @@ function vr({
122
123
  ) }) });
123
124
  }
124
125
  export {
125
- vr as Drawer
126
+ gr as Drawer
126
127
  };
@@ -1,6 +1,6 @@
1
1
  import { jsx as t, jsxs as a } from "react/jsx-runtime";
2
2
  import { useState as l } from "react";
3
- import { S as r, P as c, V as d } from "../../../snackbar-BaF8Ts3S.js";
3
+ import { S as r, P as c, V as d } from "../../../snackbar-CgqDB5xn.js";
4
4
  import { Button as h } from "../button/button.js";
5
5
  const w = {
6
6
  title: "@spotwork-ui/Snackbar",
@@ -1,4 +1,4 @@
1
- import { S as o } from "../../../snackbar-BaF8Ts3S.js";
1
+ import { S as o } from "../../../snackbar-CgqDB5xn.js";
2
2
  export {
3
3
  o as Snackbar
4
4
  };
@@ -1,5 +1,5 @@
1
1
  import "react/jsx-runtime";
2
- import { S as C } from "../../../snackbar-BaF8Ts3S.js";
2
+ import { S as D } from "../../../snackbar-CgqDB5xn.js";
3
3
  import "../../styles/tailwind-config/index.js";
4
4
  import "../../styles/typography/typography.js";
5
5
  import "../../styles/colors/colors.js";
@@ -18,6 +18,7 @@ import "../../../index-CYyrKZeH.js";
18
18
  import "../../atoms/form/textfield/textfield.js";
19
19
  import "../../atoms/form/stepper/stepper.js";
20
20
  import "../../atoms/form/textarea/textarea.js";
21
+ import "../../atoms/form/textarea/rich-textarea.js";
21
22
  import "../../atoms/form/timeselect/timeselect.js";
22
23
  import "../button/button.js";
23
24
  import "../datatables/cell/cell.js";
@@ -27,5 +28,5 @@ import "../form/radiogroup/radiogroup.js";
27
28
  import "../../../card-Cc2Qkiqr.js";
28
29
  import "./styles.js";
29
30
  export {
30
- C as Snackbar
31
+ D as Snackbar
31
32
  };
package/dist/main.d.ts CHANGED
@@ -46,6 +46,8 @@ export type { StepperProps } from './components/atoms/form/stepper';
46
46
  export { Tab } from './components/atoms/tab';
47
47
  export { Textarea } from './components/atoms/form/textarea';
48
48
  export type { TextareaProps } from './components/atoms/form/textarea';
49
+ export { RichTextarea } from './components/atoms/form/textarea';
50
+ export type { RichTextareaProps } from './components/atoms/form/textarea';
49
51
  export { Textfield } from './components/atoms/form/textfield';
50
52
  export type { TextfieldProps } from './components/atoms/form/textfield';
51
53
  export { Timeselect } from './components/atoms/form/timeselect';
package/dist/main.js CHANGED
@@ -5,11 +5,11 @@ import { Badge as l } from "./components/atoms/badge/badge.js";
5
5
  import { LabelValuePair as d } from "./components/atoms/card-content/label-value-pair/label-value-pair.js";
6
6
  import { Note as b } from "./components/atoms/card-content/note/note.js";
7
7
  import { Chatheader as u } from "./components/atoms/conversation/chatheader/chatheader.js";
8
- import { ContextMenu as S } from "./components/molecules/navigation/context-menu/context-menu.js";
8
+ import { ContextMenu as h } from "./components/molecules/navigation/context-menu/context-menu.js";
9
9
  import { Dateselect as T } from "./components/atoms/form/dateselect/dateselect.js";
10
10
  import { TimePicker as M } from "./components/atoms/form/time-picker/time-picker.js";
11
11
  import { RecurrenceDay as y } from "./components/atoms/daybubble/recurrence-day/recurrence-day.js";
12
- import { RecurrenceWeek as R } from "./components/atoms/form/recurrence-week/recurrence-week.js";
12
+ import { RecurrenceWeek as k } from "./components/atoms/form/recurrence-week/recurrence-week.js";
13
13
  import { Checkbox as N } from "./components/atoms/form/checkbox/checkbox.js";
14
14
  import { Chips as L } from "./components/atoms/form/chips/chips.js";
15
15
  import { Dropdown as F } from "./components/atoms/form/dropdown/dropdown.js";
@@ -31,136 +31,138 @@ import { Switch as to } from "./components/atoms/form/switch/switch.js";
31
31
  import { Stepper as mo } from "./components/atoms/form/stepper/stepper.js";
32
32
  import { Tab as xo } from "./components/atoms/tab/tab.js";
33
33
  import { Textarea as io } from "./components/atoms/form/textarea/textarea.js";
34
- import { Textfield as lo } from "./components/atoms/form/textfield/textfield.js";
35
- import { Timeselect as co } from "./components/atoms/form/timeselect/timeselect.js";
36
- import { Typeahead as go } from "./components/atoms/form/typeahead/typeahead.js";
37
- import { Button as Co } from "./components/molecules/button/button.js";
38
- import { NotesAndHistory as ho } from "./components/molecules/card-content/notes-and-history/notes-and-history.js";
39
- import { CollapsibleCard as Do } from "./components/molecules/collapsible-card/collapsible-card.js";
40
- import { Contact as wo } from "./components/molecules/conversation/contact/contact.js";
41
- import { MessageEditor as ko } from "./components/molecules/conversation/message-editor/message-editor.js";
42
- import { MessageGroupComposer as Bo } from "./components/molecules/conversation/message-group-composer/message-group-composer.js";
43
- import { Cell as vo } from "./components/molecules/datatables/cell/cell.js";
44
- import { Row as Po } from "./components/molecules/datatables/row/row.js";
45
- import { RowHeader as Go } from "./components/molecules/datatables/row-header/row-header.js";
46
- import { DonutChart as Ao } from "./components/molecules/dataviz/donut-chart/donut-chart.js";
47
- import { DotMatrix as Io } from "./components/molecules/dataviz/dot-matrix/dot-matrix.js";
48
- import { ProgressBar as Wo } from "./components/molecules/dataviz/progress-bar/progress-bar.js";
49
- import { SingleStackedBar as _o } from "./components/molecules/dataviz/single-stacked-bar/single-stacked-bar.js";
50
- import { Legend as qo } from "./components/molecules/dataviz/legend/legend.js";
51
- import { Drawer as Ko } from "./components/molecules/drawer/drawer.js";
52
- import { DateSelector as Qo } from "./components/molecules/filter/date-selector/date-selector.js";
53
- import { DateRangeSelector as Xo } from "./components/molecules/filter/date-range-selector/date-range-selector.js";
54
- import { RangeSelector as Zo } from "./components/molecules/filter/range-selector/range-selector.js";
55
- import { Radiogroup as or } from "./components/molecules/form/radiogroup/radiogroup.js";
56
- import { Link as er } from "./components/molecules/link/link.js";
57
- import { Header as pr } from "./components/molecules/navigation/header/header.js";
58
- import { Sidebar as ar } from "./components/molecules/navigation/sidebar/sidebar.js";
59
- import { Content as fr } from "./components/molecules/notifications/content/content.js";
60
- import { S as nr, i as lr } from "./snackbar-BaF8Ts3S.js";
61
- import { Tooltip as dr } from "./components/atoms/tooltip/tooltip.js";
62
- import { TabGroup as br } from "./components/molecules/tab-group/tab-group.js";
63
- import { Menubar as ur } from "./components/molecules/navigation/menubar/menubar.js";
64
- import { ContextSearch as Sr } from "./components/molecules/filter/context-search/context-search.js";
65
- import { SmallLargeText as Tr } from "./components/atoms/small-large-text/small-large-text.js";
66
- import { HorizontalBorder as Mr } from "./components/atoms/horizontal-border/horizontal-border.js";
67
- import { Dialog as yr } from "./components/molecules/dialog/dialog.js";
68
- import { Alert as Rr } from "./components/molecules/alert/alert.js";
69
- import { c as Nr } from "./card-Cc2Qkiqr.js";
70
- import { Colors as Lr } from "./components/styles/colors/colors.js";
71
- import { apple as Fr, blueRibbon as Gr, borderColor as Hr, buttonBorder as Ar, buttonGlyph as zr, buttonSurface as Ir, cinnabar as Vr, crusta as Wr, glyph as Er, linkColors as _r, progressBar as jr, shadow as qr, sun as Jr, surface as Kr, woodsmoke as Or } from "./components/styles/colors/colormap.js";
72
- import { Typography as Ur } from "./components/styles/typography/typography.js";
73
- import { fontFamilyMap as Yr, fontSizeMap as Zr, fontWeightMap as $r, styleMap as oe, textTypeMap as re } from "./components/styles/typography/style.js";
74
- import { DashedLineSVG as te } from "./components/styles/dashedBorder/DashedLineSVG.js";
34
+ import { RichTextarea as lo } from "./components/atoms/form/textarea/rich-textarea.js";
35
+ import { Textfield as co } from "./components/atoms/form/textfield/textfield.js";
36
+ import { Timeselect as go } from "./components/atoms/form/timeselect/timeselect.js";
37
+ import { Typeahead as Co } from "./components/atoms/form/typeahead/typeahead.js";
38
+ import { Button as So } from "./components/molecules/button/button.js";
39
+ import { NotesAndHistory as Do } from "./components/molecules/card-content/notes-and-history/notes-and-history.js";
40
+ import { CollapsibleCard as wo } from "./components/molecules/collapsible-card/collapsible-card.js";
41
+ import { Contact as Ro } from "./components/molecules/conversation/contact/contact.js";
42
+ import { MessageEditor as Bo } from "./components/molecules/conversation/message-editor/message-editor.js";
43
+ import { MessageGroupComposer as vo } from "./components/molecules/conversation/message-group-composer/message-group-composer.js";
44
+ import { Cell as Po } from "./components/molecules/datatables/cell/cell.js";
45
+ import { Row as Go } from "./components/molecules/datatables/row/row.js";
46
+ import { RowHeader as Ao } from "./components/molecules/datatables/row-header/row-header.js";
47
+ import { DonutChart as Io } from "./components/molecules/dataviz/donut-chart/donut-chart.js";
48
+ import { DotMatrix as Wo } from "./components/molecules/dataviz/dot-matrix/dot-matrix.js";
49
+ import { ProgressBar as _o } from "./components/molecules/dataviz/progress-bar/progress-bar.js";
50
+ import { SingleStackedBar as qo } from "./components/molecules/dataviz/single-stacked-bar/single-stacked-bar.js";
51
+ import { Legend as Ko } from "./components/molecules/dataviz/legend/legend.js";
52
+ import { Drawer as Qo } from "./components/molecules/drawer/drawer.js";
53
+ import { DateSelector as Xo } from "./components/molecules/filter/date-selector/date-selector.js";
54
+ import { DateRangeSelector as Zo } from "./components/molecules/filter/date-range-selector/date-range-selector.js";
55
+ import { RangeSelector as or } from "./components/molecules/filter/range-selector/range-selector.js";
56
+ import { Radiogroup as er } from "./components/molecules/form/radiogroup/radiogroup.js";
57
+ import { Link as pr } from "./components/molecules/link/link.js";
58
+ import { Header as ar } from "./components/molecules/navigation/header/header.js";
59
+ import { Sidebar as fr } from "./components/molecules/navigation/sidebar/sidebar.js";
60
+ import { Content as nr } from "./components/molecules/notifications/content/content.js";
61
+ import { S as sr, i as dr } from "./snackbar-CgqDB5xn.js";
62
+ import { Tooltip as br } from "./components/atoms/tooltip/tooltip.js";
63
+ import { TabGroup as ur } from "./components/molecules/tab-group/tab-group.js";
64
+ import { Menubar as hr } from "./components/molecules/navigation/menubar/menubar.js";
65
+ import { ContextSearch as Tr } from "./components/molecules/filter/context-search/context-search.js";
66
+ import { SmallLargeText as Mr } from "./components/atoms/small-large-text/small-large-text.js";
67
+ import { HorizontalBorder as yr } from "./components/atoms/horizontal-border/horizontal-border.js";
68
+ import { Dialog as kr } from "./components/molecules/dialog/dialog.js";
69
+ import { Alert as Nr } from "./components/molecules/alert/alert.js";
70
+ import { c as Lr } from "./card-Cc2Qkiqr.js";
71
+ import { Colors as Fr } from "./components/styles/colors/colors.js";
72
+ import { apple as Hr, blueRibbon as Ar, borderColor as zr, buttonBorder as Ir, buttonGlyph as Vr, buttonSurface as Wr, cinnabar as Er, crusta as _r, glyph as jr, linkColors as qr, progressBar as Jr, shadow as Kr, sun as Or, surface as Qr, woodsmoke as Ur } from "./components/styles/colors/colormap.js";
73
+ import { Typography as Yr } from "./components/styles/typography/typography.js";
74
+ import { fontFamilyMap as $r, fontSizeMap as oe, fontWeightMap as re, styleMap as ee, textTypeMap as te } from "./components/styles/typography/style.js";
75
+ import { DashedLineSVG as me } from "./components/styles/dashedBorder/DashedLineSVG.js";
75
76
  export {
76
- Rr as Alert,
77
+ Nr as Alert,
77
78
  i as Avatar,
78
79
  l as Badge,
79
- Co as Button,
80
+ So as Button,
80
81
  V as Calendar,
81
- Nr as Card,
82
- vo as Cell,
82
+ Lr as Card,
83
+ Po as Cell,
83
84
  u as Chatheader,
84
85
  N as Checkbox,
85
86
  E as CheckboxFilter,
86
87
  L as Chips,
87
- Do as CollapsibleCard,
88
- Lr as Colors,
89
- wo as Contact,
90
- S as ContextMenu,
91
- Sr as ContextSearch,
92
- te as DashedLineSVG,
93
- Xo as DateRangeSelector,
94
- Qo as DateSelector,
88
+ wo as CollapsibleCard,
89
+ Fr as Colors,
90
+ Ro as Contact,
91
+ h as ContextMenu,
92
+ Tr as ContextSearch,
93
+ me as DashedLineSVG,
94
+ Zo as DateRangeSelector,
95
+ Xo as DateSelector,
95
96
  T as Dateselect,
96
- yr as Dialog,
97
- Ao as DonutChart,
98
- Io as DotMatrix,
99
- Ko as Drawer,
97
+ kr as Dialog,
98
+ Io as DonutChart,
99
+ Wo as DotMatrix,
100
+ Qo as Drawer,
100
101
  F as Dropdown,
101
102
  H as DropdownFilter,
102
103
  z as DropdownSearch,
103
104
  j as FormNavigation,
104
- pr as Header,
105
- Mr as HorizontalBorder,
105
+ ar as Header,
106
+ yr as HorizontalBorder,
106
107
  J as Icons,
107
108
  d as LabelValuePair,
108
- qo as Legend,
109
- er as Link,
110
- ur as Menubar,
109
+ Ko as Legend,
110
+ pr as Link,
111
+ hr as Menubar,
111
112
  O as Message,
112
- ko as MessageEditor,
113
- Bo as MessageGroupComposer,
113
+ Bo as MessageEditor,
114
+ vo as MessageGroupComposer,
114
115
  U as Multiselect,
115
116
  Y as NavigationItem,
116
117
  b as Note,
117
- ho as NotesAndHistory,
118
- fr as NotificationContent,
119
- Wo as ProgressBar,
118
+ Do as NotesAndHistory,
119
+ nr as NotificationContent,
120
+ _o as ProgressBar,
120
121
  $ as Radiobutton,
121
- or as Radiogroup,
122
- Zo as RangeSelector,
122
+ er as Radiogroup,
123
+ or as RangeSelector,
123
124
  y as RecurrenceDay,
124
- R as RecurrenceWeek,
125
- Po as Row,
126
- Go as RowHeader,
125
+ k as RecurrenceWeek,
126
+ lo as RichTextarea,
127
+ Go as Row,
128
+ Ao as RowHeader,
127
129
  ro as SegmentedControl,
128
- ar as Sidebar,
129
- _o as SingleStackedBar,
130
- Tr as SmallLargeText,
131
- nr as Snackbar,
130
+ fr as Sidebar,
131
+ qo as SingleStackedBar,
132
+ Mr as SmallLargeText,
133
+ sr as Snackbar,
132
134
  mo as Stepper,
133
135
  to as Switch,
134
136
  xo as Tab,
135
- br as TabGroup,
137
+ ur as TabGroup,
136
138
  io as Textarea,
137
- lo as Textfield,
139
+ co as Textfield,
138
140
  M as TimePicker,
139
- co as Timeselect,
140
- lr as Toast,
141
- dr as Tooltip,
141
+ go as Timeselect,
142
+ dr as Toast,
143
+ br as Tooltip,
142
144
  x as TooltipProvider,
143
- go as Typeahead,
144
- Ur as Typography,
145
- Fr as apple,
146
- Gr as blue_ribbon,
147
- Hr as borderColor,
148
- Ar as buttonBorder,
149
- zr as buttonGlyph,
150
- Ir as buttonSurface,
151
- Vr as cinnabar,
152
- Wr as crusta,
153
- Yr as fontFamilyMap,
154
- Zr as fontSizeMap,
155
- $r as fontWeightMap,
156
- Er as glyph,
157
- _r as linkColors,
158
- jr as progressBar,
159
- qr as shadow,
160
- oe as styleMap,
161
- Jr as sun,
162
- Kr as surface,
145
+ Co as Typeahead,
146
+ Yr as Typography,
147
+ Hr as apple,
148
+ Ar as blue_ribbon,
149
+ zr as borderColor,
150
+ Ir as buttonBorder,
151
+ Vr as buttonGlyph,
152
+ Wr as buttonSurface,
153
+ Er as cinnabar,
154
+ _r as crusta,
155
+ $r as fontFamilyMap,
156
+ oe as fontSizeMap,
157
+ re as fontWeightMap,
158
+ jr as glyph,
159
+ qr as linkColors,
160
+ Jr as progressBar,
161
+ Kr as shadow,
162
+ ee as styleMap,
163
+ Or as sun,
164
+ Qr as surface,
163
165
  m as tailwindConfig,
164
- re as textTypeMap,
165
- Or as woodsmoke
166
+ te as textTypeMap,
167
+ Ur as woodsmoke
166
168
  };
@@ -20,6 +20,7 @@ import "./index-CYyrKZeH.js";
20
20
  import "./components/atoms/form/textfield/textfield.js";
21
21
  import "./components/atoms/form/stepper/stepper.js";
22
22
  import "./components/atoms/form/textarea/textarea.js";
23
+ import "./components/atoms/form/textarea/rich-textarea.js";
23
24
  import "./components/atoms/form/timeselect/timeselect.js";
24
25
  import { Button as De } from "./components/molecules/button/button.js";
25
26
  import "./components/molecules/datatables/cell/cell.js";
@@ -448,7 +449,7 @@ function z(t) {
448
449
  return t.some((o) => o === r ? !0 : (o.focus(), document.activeElement !== r));
449
450
  }
450
451
  var Ze = te, et = oe, ye = re, tt = ne, ot = se, rt = ae, nt = $;
451
- const Lt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
452
+ const Mt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
452
453
  __proto__: null,
453
454
  Action: rt,
454
455
  Close: nt,
@@ -466,7 +467,7 @@ const Lt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
466
467
  Viewport: et,
467
468
  createToastScope: Oe
468
469
  }, Symbol.toStringTag, { value: "Module" }));
469
- function Mt({
470
+ function kt({
470
471
  title: t,
471
472
  open: r = !0,
472
473
  setOpen: o,
@@ -499,7 +500,7 @@ function Mt({
499
500
  }
500
501
  export {
501
502
  Ze as P,
502
- Mt as S,
503
+ kt as S,
503
504
  et as V,
504
- Lt as i
505
+ Mt as i
505
506
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@temp-spotwork/ui",
3
3
  "private": false,
4
- "version": "1.4.8",
4
+ "version": "1.5.0",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",
7
7
  "types": "dist/main.d.ts",