@duke333/builder-ui 0.2.3 → 0.2.5

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.
@@ -1,30 +1,20 @@
1
- type BuilderRuntimeFieldLike = {
2
- key: string;
3
- type: string;
4
- };
5
- type BuilderRuntimePresentation = "dialog" | "drawer";
6
- type BuilderRuntimeFormSchemaLike = {
7
- presentation?: BuilderRuntimePresentation;
8
- fields: readonly BuilderRuntimeFieldLike[];
9
- };
10
- type BuilderRuntimeViewLike = {
11
- form?: {
12
- schema: BuilderRuntimeFormSchemaLike;
13
- } | null;
14
- };
15
- type BuilderRuntimeEntryLike = {
16
- id: string;
17
- values: Record<string, unknown>;
18
- version: number;
1
+ export { b as BuilderRuntimeEntryLike, c as BuilderRuntimeEntryValues, f as BuilderRuntimeFieldLike, a as BuilderRuntimeFormSchemaLike, d as BuilderRuntimeFormValues, B as BuilderRuntimePresentation, e as BuilderRuntimeViewLike, g as createBuilderEntryDefaultValues, h as createBuilderFormDefaultValues, i as formatBuilderRuntimeValue } from '../runtimeUtils-CCtLyIf1.js';
2
+
3
+ type RichTextMark = {
4
+ type: "bold" | "italic" | "strike";
19
5
  };
20
- type BuilderRuntimeFormValues = {
21
- values: Record<string, unknown>;
6
+ type RichTextNode = {
7
+ attrs?: Record<string, unknown>;
8
+ content?: RichTextNode[];
9
+ marks?: RichTextMark[];
10
+ text?: string;
11
+ type: string;
22
12
  };
23
- type BuilderRuntimeEntryValues = BuilderRuntimeFormValues & {
24
- version: number;
13
+ type RichTextDocument = {
14
+ content?: RichTextNode[];
15
+ type: "doc";
25
16
  };
26
- declare function createBuilderFormDefaultValues(schema?: BuilderRuntimeFormSchemaLike): BuilderRuntimeFormValues;
27
- declare function createBuilderEntryDefaultValues(view: BuilderRuntimeViewLike, editing: BuilderRuntimeEntryLike | null): BuilderRuntimeEntryValues;
28
- declare function formatBuilderRuntimeValue(value: unknown, locale?: string): string;
17
+ declare function toRichTextDocument(value: unknown): RichTextDocument;
18
+ declare function richTextToPlainText(value: unknown): string;
29
19
 
30
- export { type BuilderRuntimeEntryLike, type BuilderRuntimeEntryValues, type BuilderRuntimeFieldLike, type BuilderRuntimeFormSchemaLike, type BuilderRuntimeFormValues, type BuilderRuntimePresentation, type BuilderRuntimeViewLike, createBuilderEntryDefaultValues, createBuilderFormDefaultValues, formatBuilderRuntimeValue };
20
+ export { richTextToPlainText, toRichTextDocument };
@@ -1,5 +1,43 @@
1
+ // src/richText.ts
2
+ var emptyDocument = { type: "doc", content: [{ type: "paragraph" }] };
3
+ function isRichTextDocument(value) {
4
+ return typeof value === "object" && value !== null && "type" in value && value.type === "doc";
5
+ }
6
+ function plainTextDocument(value) {
7
+ const lines = value.split(/\r?\n/);
8
+ return {
9
+ type: "doc",
10
+ content: lines.map(
11
+ (line) => line ? { type: "paragraph", content: [{ type: "text", text: line }] } : { type: "paragraph" }
12
+ )
13
+ };
14
+ }
15
+ function toRichTextDocument(value) {
16
+ if (isRichTextDocument(value)) return value;
17
+ if (typeof value !== "string" || !value.trim()) return emptyDocument;
18
+ try {
19
+ const parsed = JSON.parse(value);
20
+ if (isRichTextDocument(parsed)) return parsed;
21
+ } catch {
22
+ }
23
+ return plainTextDocument(value);
24
+ }
25
+ function collectPlainText(node, output) {
26
+ if (node.type === "text" && typeof node.text === "string") output.push(node.text);
27
+ if (node.type === "hardBreak") output.push("\n");
28
+ for (const child of node.content ?? []) collectPlainText(child, output);
29
+ if (["paragraph", "heading", "listItem", "blockquote"].includes(node.type)) output.push("\n");
30
+ }
31
+ function richTextToPlainText(value) {
32
+ const output = [];
33
+ for (const node of toRichTextDocument(value).content ?? []) collectPlainText(node, output);
34
+ return output.join("").replace(/\n{3,}/g, "\n\n").trim();
35
+ }
36
+
1
37
  // src/runtime/runtimeUtils.ts
2
38
  function emptyFieldValue(field) {
39
+ if (field.defaultValue !== void 0) return field.defaultValue;
40
+ if (field.type === "file" && field.multiple) return [];
3
41
  return field.type === "checkbox" ? false : "";
4
42
  }
5
43
  function createBuilderFormDefaultValues(schema) {
@@ -26,6 +64,8 @@ function formatBuilderRuntimeValue(value, locale = "mn-MN") {
26
64
  export {
27
65
  createBuilderEntryDefaultValues,
28
66
  createBuilderFormDefaultValues,
29
- formatBuilderRuntimeValue
67
+ formatBuilderRuntimeValue,
68
+ richTextToPlainText,
69
+ toRichTextDocument
30
70
  };
31
71
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/runtime/runtimeUtils.ts"],"sourcesContent":["export type BuilderRuntimeFieldLike = {\n key: string;\n type: string;\n};\n\nexport type BuilderRuntimePresentation = \"dialog\" | \"drawer\";\n\nexport type BuilderRuntimeFormSchemaLike = {\n presentation?: BuilderRuntimePresentation;\n fields: readonly BuilderRuntimeFieldLike[];\n};\n\nexport type BuilderRuntimeViewLike = {\n form?: {\n schema: BuilderRuntimeFormSchemaLike;\n } | null;\n};\n\nexport type BuilderRuntimeEntryLike = {\n id: string;\n values: Record<string, unknown>;\n version: number;\n};\n\nexport type BuilderRuntimeFormValues = {\n values: Record<string, unknown>;\n};\n\nexport type BuilderRuntimeEntryValues = BuilderRuntimeFormValues & {\n version: number;\n};\n\nfunction emptyFieldValue(field: BuilderRuntimeFieldLike) {\n return field.type === \"checkbox\" ? false : \"\";\n}\n\nexport function createBuilderFormDefaultValues(\n schema?: BuilderRuntimeFormSchemaLike,\n): BuilderRuntimeFormValues {\n const values: Record<string, unknown> = {};\n for (const field of schema?.fields ?? []) {\n values[field.key] = emptyFieldValue(field);\n }\n return { values };\n}\n\nexport function createBuilderEntryDefaultValues(\n view: BuilderRuntimeViewLike,\n editing: BuilderRuntimeEntryLike | null,\n): BuilderRuntimeEntryValues {\n const values: Record<string, unknown> = {};\n for (const field of view.form?.schema.fields ?? []) {\n const existing = editing?.values[field.key];\n values[field.key] = existing === undefined ? emptyFieldValue(field) : existing;\n }\n return { values, version: editing?.version ?? 0 };\n}\n\nexport function formatBuilderRuntimeValue(value: unknown, locale = \"mn-MN\") {\n if (value === null || value === undefined || value === \"\") return \"—\";\n if (typeof value === \"boolean\") return value ? \"Тийм\" : \"Үгүй\";\n if (typeof value === \"number\") return new Intl.NumberFormat(locale).format(value);\n return String(value);\n}\n"],"mappings":";AAgCA,SAAS,gBAAgB,OAAgC;AACvD,SAAO,MAAM,SAAS,aAAa,QAAQ;AAC7C;AAEO,SAAS,+BACd,QAC0B;AAC1B,QAAM,SAAkC,CAAC;AACzC,aAAW,SAAS,QAAQ,UAAU,CAAC,GAAG;AACxC,WAAO,MAAM,GAAG,IAAI,gBAAgB,KAAK;AAAA,EAC3C;AACA,SAAO,EAAE,OAAO;AAClB;AAEO,SAAS,gCACd,MACA,SAC2B;AAC3B,QAAM,SAAkC,CAAC;AACzC,aAAW,SAAS,KAAK,MAAM,OAAO,UAAU,CAAC,GAAG;AAClD,UAAM,WAAW,SAAS,OAAO,MAAM,GAAG;AAC1C,WAAO,MAAM,GAAG,IAAI,aAAa,SAAY,gBAAgB,KAAK,IAAI;AAAA,EACxE;AACA,SAAO,EAAE,QAAQ,SAAS,SAAS,WAAW,EAAE;AAClD;AAEO,SAAS,0BAA0B,OAAgB,SAAS,SAAS;AAC1E,MAAI,UAAU,QAAQ,UAAU,UAAa,UAAU,GAAI,QAAO;AAClE,MAAI,OAAO,UAAU,UAAW,QAAO,QAAQ,6BAAS;AACxD,MAAI,OAAO,UAAU,SAAU,QAAO,IAAI,KAAK,aAAa,MAAM,EAAE,OAAO,KAAK;AAChF,SAAO,OAAO,KAAK;AACrB;","names":[]}
1
+ {"version":3,"sources":["../../src/richText.ts","../../src/runtime/runtimeUtils.ts"],"sourcesContent":["export type RichTextMark = {\n type: \"bold\" | \"italic\" | \"strike\";\n};\n\nexport type RichTextNode = {\n attrs?: Record<string, unknown>;\n content?: RichTextNode[];\n marks?: RichTextMark[];\n text?: string;\n type: string;\n};\n\nexport type RichTextDocument = {\n content?: RichTextNode[];\n type: \"doc\";\n};\n\nconst emptyDocument: RichTextDocument = { type: \"doc\", content: [{ type: \"paragraph\" }] };\n\nfunction isRichTextDocument(value: unknown): value is RichTextDocument {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"type\" in value &&\n (value as { type?: unknown }).type === \"doc\"\n );\n}\n\nfunction plainTextDocument(value: string): RichTextDocument {\n const lines = value.split(/\\r?\\n/);\n return {\n type: \"doc\",\n content: lines.map((line) =>\n line ? { type: \"paragraph\", content: [{ type: \"text\", text: line }] } : { type: \"paragraph\" },\n ),\n };\n}\n\nexport function toRichTextDocument(value: unknown): RichTextDocument {\n if (isRichTextDocument(value)) return value;\n if (typeof value !== \"string\" || !value.trim()) return emptyDocument;\n\n try {\n const parsed: unknown = JSON.parse(value);\n if (isRichTextDocument(parsed)) return parsed;\n } catch {\n // Existing textarea content remains readable and becomes paragraphs when edited.\n }\n\n return plainTextDocument(value);\n}\n\nfunction collectPlainText(node: RichTextNode, output: string[]) {\n if (node.type === \"text\" && typeof node.text === \"string\") output.push(node.text);\n if (node.type === \"hardBreak\") output.push(\"\\n\");\n for (const child of node.content ?? []) collectPlainText(child, output);\n if ([\"paragraph\", \"heading\", \"listItem\", \"blockquote\"].includes(node.type)) output.push(\"\\n\");\n}\n\nexport function richTextToPlainText(value: unknown): string {\n const output: string[] = [];\n for (const node of toRichTextDocument(value).content ?? []) collectPlainText(node, output);\n return output.join(\"\").replace(/\\n{3,}/g, \"\\n\\n\").trim();\n}\n","export type BuilderRuntimeFieldLike = {\n key: string;\n type: string;\n multiple?: boolean;\n defaultValue?: string | number | boolean;\n};\n\nexport { richTextToPlainText, toRichTextDocument } from \"../richText\";\n\nexport type BuilderRuntimePresentation = \"dialog\" | \"drawer\";\n\nexport type BuilderRuntimeFormSchemaLike = {\n presentation?: BuilderRuntimePresentation;\n fields: readonly BuilderRuntimeFieldLike[];\n};\n\nexport type BuilderRuntimeViewLike = {\n form?: {\n schema: BuilderRuntimeFormSchemaLike;\n } | null;\n};\n\nexport type BuilderRuntimeEntryLike = {\n id: string;\n values: Record<string, unknown>;\n version: number;\n};\n\nexport type BuilderRuntimeFormValues = {\n values: Record<string, unknown>;\n};\n\nexport type BuilderRuntimeEntryValues = BuilderRuntimeFormValues & {\n version: number;\n};\n\nfunction emptyFieldValue(field: BuilderRuntimeFieldLike) {\n if (field.defaultValue !== undefined) return field.defaultValue;\n if (field.type === \"file\" && field.multiple) return [];\n return field.type === \"checkbox\" ? false : \"\";\n}\n\nexport function createBuilderFormDefaultValues(\n schema?: BuilderRuntimeFormSchemaLike,\n): BuilderRuntimeFormValues {\n const values: Record<string, unknown> = {};\n for (const field of schema?.fields ?? []) {\n values[field.key] = emptyFieldValue(field);\n }\n return { values };\n}\n\nexport function createBuilderEntryDefaultValues(\n view: BuilderRuntimeViewLike,\n editing: BuilderRuntimeEntryLike | null,\n): BuilderRuntimeEntryValues {\n const values: Record<string, unknown> = {};\n for (const field of view.form?.schema.fields ?? []) {\n const existing = editing?.values[field.key];\n values[field.key] = existing === undefined ? emptyFieldValue(field) : existing;\n }\n return { values, version: editing?.version ?? 0 };\n}\n\nexport function formatBuilderRuntimeValue(value: unknown, locale = \"mn-MN\") {\n if (value === null || value === undefined || value === \"\") return \"—\";\n if (typeof value === \"boolean\") return value ? \"Тийм\" : \"Үгүй\";\n if (typeof value === \"number\") return new Intl.NumberFormat(locale).format(value);\n return String(value);\n}\n"],"mappings":";AAiBA,IAAM,gBAAkC,EAAE,MAAM,OAAO,SAAS,CAAC,EAAE,MAAM,YAAY,CAAC,EAAE;AAExF,SAAS,mBAAmB,OAA2C;AACrE,SACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACT,MAA6B,SAAS;AAE3C;AAEA,SAAS,kBAAkB,OAAiC;AAC1D,QAAM,QAAQ,MAAM,MAAM,OAAO;AACjC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,MAAM;AAAA,MAAI,CAAC,SAClB,OAAO,EAAE,MAAM,aAAa,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,YAAY;AAAA,IAC9F;AAAA,EACF;AACF;AAEO,SAAS,mBAAmB,OAAkC;AACnE,MAAI,mBAAmB,KAAK,EAAG,QAAO;AACtC,MAAI,OAAO,UAAU,YAAY,CAAC,MAAM,KAAK,EAAG,QAAO;AAEvD,MAAI;AACF,UAAM,SAAkB,KAAK,MAAM,KAAK;AACxC,QAAI,mBAAmB,MAAM,EAAG,QAAO;AAAA,EACzC,QAAQ;AAAA,EAER;AAEA,SAAO,kBAAkB,KAAK;AAChC;AAEA,SAAS,iBAAiB,MAAoB,QAAkB;AAC9D,MAAI,KAAK,SAAS,UAAU,OAAO,KAAK,SAAS,SAAU,QAAO,KAAK,KAAK,IAAI;AAChF,MAAI,KAAK,SAAS,YAAa,QAAO,KAAK,IAAI;AAC/C,aAAW,SAAS,KAAK,WAAW,CAAC,EAAG,kBAAiB,OAAO,MAAM;AACtE,MAAI,CAAC,aAAa,WAAW,YAAY,YAAY,EAAE,SAAS,KAAK,IAAI,EAAG,QAAO,KAAK,IAAI;AAC9F;AAEO,SAAS,oBAAoB,OAAwB;AAC1D,QAAM,SAAmB,CAAC;AAC1B,aAAW,QAAQ,mBAAmB,KAAK,EAAE,WAAW,CAAC,EAAG,kBAAiB,MAAM,MAAM;AACzF,SAAO,OAAO,KAAK,EAAE,EAAE,QAAQ,WAAW,MAAM,EAAE,KAAK;AACzD;;;AC3BA,SAAS,gBAAgB,OAAgC;AACvD,MAAI,MAAM,iBAAiB,OAAW,QAAO,MAAM;AACnD,MAAI,MAAM,SAAS,UAAU,MAAM,SAAU,QAAO,CAAC;AACrD,SAAO,MAAM,SAAS,aAAa,QAAQ;AAC7C;AAEO,SAAS,+BACd,QAC0B;AAC1B,QAAM,SAAkC,CAAC;AACzC,aAAW,SAAS,QAAQ,UAAU,CAAC,GAAG;AACxC,WAAO,MAAM,GAAG,IAAI,gBAAgB,KAAK;AAAA,EAC3C;AACA,SAAO,EAAE,OAAO;AAClB;AAEO,SAAS,gCACd,MACA,SAC2B;AAC3B,QAAM,SAAkC,CAAC;AACzC,aAAW,SAAS,KAAK,MAAM,OAAO,UAAU,CAAC,GAAG;AAClD,UAAM,WAAW,SAAS,OAAO,MAAM,GAAG;AAC1C,WAAO,MAAM,GAAG,IAAI,aAAa,SAAY,gBAAgB,KAAK,IAAI;AAAA,EACxE;AACA,SAAO,EAAE,QAAQ,SAAS,SAAS,WAAW,EAAE;AAClD;AAEO,SAAS,0BAA0B,OAAgB,SAAS,SAAS;AAC1E,MAAI,UAAU,QAAQ,UAAU,UAAa,UAAU,GAAI,QAAO;AAClE,MAAI,OAAO,UAAU,UAAW,QAAO,QAAQ,6BAAS;AACxD,MAAI,OAAO,UAAU,SAAU,QAAO,IAAI,KAAK,aAAa,MAAM,EAAE,OAAO,KAAK;AAChF,SAAO,OAAO,KAAK;AACrB;","names":[]}
@@ -0,0 +1,33 @@
1
+ type BuilderRuntimeFieldLike = {
2
+ key: string;
3
+ type: string;
4
+ multiple?: boolean;
5
+ defaultValue?: string | number | boolean;
6
+ };
7
+
8
+ type BuilderRuntimePresentation = "dialog" | "drawer";
9
+ type BuilderRuntimeFormSchemaLike = {
10
+ presentation?: BuilderRuntimePresentation;
11
+ fields: readonly BuilderRuntimeFieldLike[];
12
+ };
13
+ type BuilderRuntimeViewLike = {
14
+ form?: {
15
+ schema: BuilderRuntimeFormSchemaLike;
16
+ } | null;
17
+ };
18
+ type BuilderRuntimeEntryLike = {
19
+ id: string;
20
+ values: Record<string, unknown>;
21
+ version: number;
22
+ };
23
+ type BuilderRuntimeFormValues = {
24
+ values: Record<string, unknown>;
25
+ };
26
+ type BuilderRuntimeEntryValues = BuilderRuntimeFormValues & {
27
+ version: number;
28
+ };
29
+ declare function createBuilderFormDefaultValues(schema?: BuilderRuntimeFormSchemaLike): BuilderRuntimeFormValues;
30
+ declare function createBuilderEntryDefaultValues(view: BuilderRuntimeViewLike, editing: BuilderRuntimeEntryLike | null): BuilderRuntimeEntryValues;
31
+ declare function formatBuilderRuntimeValue(value: unknown, locale?: string): string;
32
+
33
+ export { type BuilderRuntimePresentation as B, type BuilderRuntimeFormSchemaLike as a, type BuilderRuntimeEntryLike as b, type BuilderRuntimeEntryValues as c, type BuilderRuntimeFormValues as d, type BuilderRuntimeViewLike as e, type BuilderRuntimeFieldLike as f, createBuilderEntryDefaultValues as g, createBuilderFormDefaultValues as h, formatBuilderRuntimeValue as i };
package/dist/styles.css CHANGED
@@ -55,6 +55,49 @@
55
55
  padding: 0 .35rem;
56
56
  font-weight: 650;
57
57
  }
58
+ .builder-form-tabs {
59
+ display: grid;
60
+ gap: 1rem;
61
+ }
62
+ .builder-form-tabs__list {
63
+ display: flex;
64
+ gap: .25rem;
65
+ overflow-x: auto;
66
+ border-bottom: 1px solid var(--builder-border);
67
+ }
68
+ .builder-form-tabs__trigger {
69
+ position: relative;
70
+ min-height: 2.5rem;
71
+ flex: 0 0 auto;
72
+ border: 0;
73
+ background: transparent;
74
+ color: var(--builder-muted);
75
+ cursor: pointer;
76
+ font: inherit;
77
+ font-weight: 650;
78
+ padding: .5rem .75rem;
79
+ }
80
+ .builder-form-tabs__trigger::after {
81
+ position: absolute;
82
+ right: .5rem;
83
+ bottom: -1px;
84
+ left: .5rem;
85
+ height: 2px;
86
+ background: var(--builder-primary);
87
+ content: "";
88
+ opacity: 0;
89
+ }
90
+ .builder-form-tabs__trigger[aria-selected=true] {
91
+ color: var(--builder-text);
92
+ }
93
+ .builder-form-tabs__trigger[aria-selected=true]::after {
94
+ opacity: 1;
95
+ }
96
+ .builder-form-tabs__trigger:focus-visible {
97
+ border-radius: 6px;
98
+ outline: 2px solid var(--builder-primary);
99
+ outline-offset: -2px;
100
+ }
58
101
  .builder-field {
59
102
  display: grid;
60
103
  gap: .4rem;
@@ -101,6 +144,161 @@
101
144
  height: 1.15rem;
102
145
  accent-color: var(--builder-primary);
103
146
  }
147
+ .builder-file-input {
148
+ height: 1px;
149
+ margin: -1px;
150
+ opacity: 0;
151
+ overflow: hidden;
152
+ position: absolute;
153
+ width: 1px;
154
+ }
155
+ .builder-file-choose {
156
+ justify-self: start;
157
+ }
158
+ .builder-file-list {
159
+ display: flex;
160
+ flex-wrap: wrap;
161
+ gap: .75rem;
162
+ }
163
+ .builder-file-item {
164
+ position: relative;
165
+ }
166
+ .builder-file-preview {
167
+ display: block;
168
+ width: 7rem;
169
+ height: 7rem;
170
+ overflow: hidden;
171
+ border: 1px solid var(--builder-border);
172
+ border-radius: 9px;
173
+ background: var(--builder-surface);
174
+ box-shadow: 0 1px 2px rgb(0 0 0 / 8%);
175
+ }
176
+ .builder-file-preview img {
177
+ display: block;
178
+ width: 100%;
179
+ height: 100%;
180
+ object-fit: cover;
181
+ }
182
+ .builder-file-preview:hover {
183
+ border-color: var(--builder-primary);
184
+ }
185
+ .builder-file-remove {
186
+ position: absolute;
187
+ top: -.45rem;
188
+ right: -.45rem;
189
+ display: grid;
190
+ width: 1.65rem;
191
+ height: 1.65rem;
192
+ place-items: center;
193
+ border: 1px solid var(--builder-border);
194
+ border-radius: 999px;
195
+ background: var(--builder-bg);
196
+ color: var(--builder-danger);
197
+ box-shadow: 0 1px 3px rgb(0 0 0 / 16%);
198
+ cursor: pointer;
199
+ font-size: 1.2rem;
200
+ line-height: 1;
201
+ }
202
+ .builder-file-remove:disabled {
203
+ cursor: not-allowed;
204
+ opacity: .5;
205
+ }
206
+ .builder-file-document {
207
+ display: inline-flex;
208
+ min-height: 2.75rem;
209
+ align-items: center;
210
+ border: 1px solid var(--builder-border);
211
+ border-radius: 9px;
212
+ background: var(--builder-surface);
213
+ color: var(--builder-text);
214
+ padding: 0 .85rem;
215
+ text-decoration: none;
216
+ }
217
+ .builder-file-document:hover {
218
+ border-color: var(--builder-primary);
219
+ }
220
+ .builder-richtext {
221
+ overflow: hidden;
222
+ border: 1px solid var(--builder-border);
223
+ border-radius: 9px;
224
+ background: var(--builder-bg);
225
+ }
226
+ .builder-richtext:focus-within {
227
+ border-color: var(--builder-primary);
228
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--builder-primary) 18%, transparent);
229
+ }
230
+ .builder-richtext__toolbar {
231
+ display: flex;
232
+ flex-wrap: wrap;
233
+ gap: .25rem;
234
+ padding: .4rem;
235
+ border-bottom: 1px solid var(--builder-border);
236
+ background: var(--builder-surface);
237
+ }
238
+ .builder-richtext__button {
239
+ min-width: 2.15rem;
240
+ height: 2rem;
241
+ border: 1px solid transparent;
242
+ border-radius: 6px;
243
+ background: transparent;
244
+ color: var(--builder-text);
245
+ cursor: pointer;
246
+ font: inherit;
247
+ font-size: .82rem;
248
+ font-weight: 700;
249
+ }
250
+ .builder-richtext__button[aria-pressed=true] {
251
+ border-color: color-mix(in srgb, var(--builder-primary) 45%, var(--builder-border));
252
+ background: color-mix(in srgb, var(--builder-primary) 13%, transparent);
253
+ color: var(--builder-primary);
254
+ }
255
+ .builder-richtext__button:disabled {
256
+ cursor: not-allowed;
257
+ opacity: .45;
258
+ }
259
+ .builder-richtext__content {
260
+ min-height: 10rem;
261
+ padding: .8rem;
262
+ color: var(--builder-text);
263
+ line-height: 1.6;
264
+ outline: none;
265
+ }
266
+ .builder-richtext__content p,
267
+ .builder-richtext__content h2,
268
+ .builder-richtext__content h3,
269
+ .builder-richtext__content ul,
270
+ .builder-richtext__content ol,
271
+ .builder-richtext__content blockquote {
272
+ margin: 0 0 .75rem;
273
+ }
274
+ .builder-richtext__content h2 {
275
+ font-size: 1.25rem;
276
+ line-height: 1.35;
277
+ }
278
+ .builder-richtext__content h3 {
279
+ font-size: 1.05rem;
280
+ line-height: 1.35;
281
+ }
282
+ .builder-richtext__content ul {
283
+ padding-left: 1.35rem;
284
+ list-style: disc;
285
+ }
286
+ .builder-richtext__content ol {
287
+ padding-left: 1.35rem;
288
+ list-style: decimal;
289
+ }
290
+ .builder-richtext__content blockquote {
291
+ border-left: 3px solid var(--builder-border);
292
+ color: var(--builder-muted);
293
+ padding-left: .75rem;
294
+ }
295
+ .builder-richtext__content p.is-editor-empty:first-child::before {
296
+ color: var(--builder-muted);
297
+ content: attr(data-placeholder);
298
+ float: left;
299
+ height: 0;
300
+ pointer-events: none;
301
+ }
104
302
  .builder-actions {
105
303
  display: flex;
106
304
  justify-content: flex-end;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/styles.css"],"sourcesContent":[":where(.builder-runtime, .builder-card, .builder-overlay) {\n --builder-bg: #ffffff;\n --builder-surface: #f6f7f8;\n --builder-text: #171717;\n --builder-muted: #666a70;\n --builder-border: #d9dce1;\n --builder-primary: #078a35;\n --builder-primary-text: #ffffff;\n --builder-danger: #b42318;\n --builder-radius: 12px;\n color: var(--builder-text);\n font: inherit;\n}\n\n.builder-card { background: var(--builder-bg); border: 1px solid var(--builder-border); border-radius: var(--builder-radius); padding: 1.25rem; }\n.builder-title { margin: 0; color: var(--builder-text); font-size: 1.25rem; font-weight: 700; line-height: 1.3; }\n.builder-description { margin: .25rem 0 0; color: var(--builder-muted); font-size: .875rem; }\n.builder-form { display: grid; gap: 1.25rem; margin-top: 1rem; }\n.builder-form-fields { display: grid; gap: 1rem; }\n.builder-form-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 1rem; }\n.builder-fieldset { min-width: 0; margin: 0; padding: 1rem; border: 1px solid var(--builder-border); border-radius: var(--builder-radius); }\n.builder-fieldset legend { padding: 0 .35rem; font-weight: 650; }\n.builder-field { display: grid; gap: .4rem; min-width: 0; }\n.builder-field__label { color: var(--builder-text); font-size: .875rem; font-weight: 650; }\n.builder-field__description { color: var(--builder-muted); }\n.builder-field__error { color: var(--builder-danger); }\n.builder-input { box-sizing: border-box; width: 100%; min-height: 2.5rem; border: 1px solid var(--builder-border); border-radius: 9px; background: var(--builder-bg); color: var(--builder-text); padding: .55rem .7rem; font: inherit; outline: none; }\n.builder-input:focus { border-color: var(--builder-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--builder-primary) 18%, transparent); }\n.builder-input:disabled { cursor: not-allowed; opacity: .65; background: var(--builder-surface); }\n.builder-textarea { min-height: 6rem; resize: vertical; }\n.builder-checkbox { width: 1.15rem; height: 1.15rem; accent-color: var(--builder-primary); }\n.builder-actions { display: flex; justify-content: flex-end; gap: .625rem; }\n.builder-actions--sticky { position: sticky; bottom: 0; z-index: 2; margin: 0 -1rem -1rem; padding: .8rem 1rem; border-top: 1px solid var(--builder-border); background: color-mix(in srgb, var(--builder-bg) 94%, transparent); backdrop-filter: blur(8px); }\n.builder-button { min-height: 2.4rem; border: 1px solid transparent; border-radius: 9px; padding: .5rem .85rem; font: inherit; font-weight: 650; cursor: pointer; }\n.builder-button:disabled { cursor: not-allowed; opacity: .5; }\n.builder-button--primary { background: var(--builder-primary); color: var(--builder-primary-text); }\n.builder-button--secondary { border-color: var(--builder-border); background: var(--builder-surface); color: var(--builder-text); }\n.builder-button--ghost { border-color: var(--builder-border); background: transparent; color: var(--builder-text); }\n.builder-button--danger { background: var(--builder-danger); color: #fff; }\n.builder-icon-button { width: 2.25rem; height: 2.25rem; border: 0; border-radius: 999px; background: var(--builder-surface); color: var(--builder-text); font-size: 1.5rem; cursor: pointer; }\n.builder-grid { padding: 0; overflow: hidden; }\n.builder-grid__header { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 1.1rem 1.25rem; border-bottom: 1px solid var(--builder-border); }\n.builder-grid__toolbar { display: flex; align-items: center; justify-content: flex-end; gap: .65rem; }\n.builder-grid__search { width: min(18rem, 45vw); }\n.builder-table-wrap { width: 100%; overflow: auto; }\n.builder-table { width: 100%; border-collapse: collapse; white-space: nowrap; }\n.builder-table th, .builder-table td { padding: .8rem 1rem; border-bottom: 1px solid var(--builder-border); text-align: left; }\n.builder-table th { background: var(--builder-surface); color: var(--builder-muted); font-size: .78rem; font-weight: 700; text-transform: uppercase; }\n.builder-table .builder-align-right { text-align: right; }\n.builder-sort { border: 0; background: transparent; color: inherit; font: inherit; cursor: pointer; text-transform: inherit; }\n.builder-row-clickable { cursor: pointer; }\n.builder-row-clickable:hover { background: color-mix(in srgb, var(--builder-primary) 5%, transparent); }\n.builder-row-actions { display: flex; justify-content: flex-end; gap: .4rem; }\n.builder-pagination { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: .8rem 1.25rem; color: var(--builder-muted); font-size: .875rem; }\n.builder-pagination > div { display: flex; align-items: center; gap: .65rem; }\n.builder-state { display: grid; justify-items: center; gap: .35rem; padding: 2.5rem 1rem; color: var(--builder-muted); text-align: center; }\n.builder-state--error { color: var(--builder-danger); }\n.builder-overlay { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; padding: 1rem; background: rgba(0, 0, 0, .52); }\n.builder-overlay__panel { display: flex; flex-direction: column; width: min(48rem, 100%); max-height: calc(100dvh - 2rem); border: 1px solid var(--builder-border); border-radius: var(--builder-radius); background: var(--builder-bg); box-shadow: 0 24px 70px rgba(0, 0, 0, .25); outline: none; animation: builder-enter .16s ease-out; }\n.builder-overlay__panel--drawer { width: min(48rem, 100%); height: 100dvh; max-height: 100dvh; margin-left: auto; border-radius: 0; animation-name: builder-drawer-enter; }\n.builder-overlay:has(.builder-overlay__panel--drawer) { justify-content: flex-end; padding: 0; }\n.builder-overlay__header { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; padding: 1rem 1.25rem; border-bottom: 1px solid var(--builder-border); }\n.builder-overlay__body { min-height: 0; overflow: auto; padding: 1rem; }\n.builder-subform { display: grid; gap: .75rem; padding-top: 1rem; border-top: 1px solid var(--builder-border); }\n.builder-subform__header { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }\n.builder-link { border: 0; background: transparent; padding: 0; text-align: left; cursor: pointer; }\n.builder-link--danger { color: var(--builder-danger); }\n.builder-notifications { position: fixed; right: 1rem; bottom: 1rem; z-index: 1100; display: grid; gap: .5rem; width: min(22rem, calc(100vw - 2rem)); }\n.builder-notification { display: flex; align-items: flex-start; justify-content: space-between; gap: .75rem; border: 1px solid var(--builder-border, #d9dce1); border-left: 4px solid var(--builder-primary, #078a35); border-radius: 9px; background: var(--builder-bg, #fff); color: var(--builder-text, #171717); padding: .75rem; box-shadow: 0 10px 30px rgba(0, 0, 0, .16); }\n.builder-notification--error { border-left-color: var(--builder-danger, #b42318); }\n.builder-notification--warning { border-left-color: #b26a00; }\n.builder-notification button { border: 0; background: transparent; color: inherit; font-size: 1.1rem; cursor: pointer; }\n\n@keyframes builder-enter { from { opacity: 0; transform: translateY(8px) scale(.99); } }\n@keyframes builder-drawer-enter { from { transform: translateX(24px); opacity: .7; } }\n\n@media (max-width: 640px) {\n .builder-card { padding: 1rem; }\n .builder-grid { padding: 0; }\n .builder-grid__header { align-items: stretch; flex-direction: column; }\n .builder-grid__toolbar { justify-content: stretch; }\n .builder-grid__search { width: 100%; }\n .builder-form-grid > * { grid-column: span 12 !important; }\n .builder-actions { display: grid; grid-template-columns: 1fr 1fr; }\n .builder-overlay { align-items: flex-end; padding: 0; }\n .builder-overlay__panel { width: 100%; max-height: 94dvh; border-radius: var(--builder-radius) var(--builder-radius) 0 0; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .builder-overlay__panel { animation: none; }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/styles.css"],"sourcesContent":[":where(.builder-runtime, .builder-card, .builder-overlay) {\n --builder-bg: #ffffff;\n --builder-surface: #f6f7f8;\n --builder-text: #171717;\n --builder-muted: #666a70;\n --builder-border: #d9dce1;\n --builder-primary: #078a35;\n --builder-primary-text: #ffffff;\n --builder-danger: #b42318;\n --builder-radius: 12px;\n color: var(--builder-text);\n font: inherit;\n}\n\n.builder-card { background: var(--builder-bg); border: 1px solid var(--builder-border); border-radius: var(--builder-radius); padding: 1.25rem; }\n.builder-title { margin: 0; color: var(--builder-text); font-size: 1.25rem; font-weight: 700; line-height: 1.3; }\n.builder-description { margin: .25rem 0 0; color: var(--builder-muted); font-size: .875rem; }\n.builder-form { display: grid; gap: 1.25rem; margin-top: 1rem; }\n.builder-form-fields { display: grid; gap: 1rem; }\n.builder-form-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 1rem; }\n.builder-fieldset { min-width: 0; margin: 0; padding: 1rem; border: 1px solid var(--builder-border); border-radius: var(--builder-radius); }\n.builder-fieldset legend { padding: 0 .35rem; font-weight: 650; }\n.builder-form-tabs { display: grid; gap: 1rem; }\n.builder-form-tabs__list { display: flex; gap: .25rem; overflow-x: auto; border-bottom: 1px solid var(--builder-border); }\n.builder-form-tabs__trigger { position: relative; min-height: 2.5rem; flex: 0 0 auto; border: 0; background: transparent; color: var(--builder-muted); cursor: pointer; font: inherit; font-weight: 650; padding: .5rem .75rem; }\n.builder-form-tabs__trigger::after { position: absolute; right: .5rem; bottom: -1px; left: .5rem; height: 2px; background: var(--builder-primary); content: \"\"; opacity: 0; }\n.builder-form-tabs__trigger[aria-selected=\"true\"] { color: var(--builder-text); }\n.builder-form-tabs__trigger[aria-selected=\"true\"]::after { opacity: 1; }\n.builder-form-tabs__trigger:focus-visible { border-radius: 6px; outline: 2px solid var(--builder-primary); outline-offset: -2px; }\n.builder-field { display: grid; gap: .4rem; min-width: 0; }\n.builder-field__label { color: var(--builder-text); font-size: .875rem; font-weight: 650; }\n.builder-field__description { color: var(--builder-muted); }\n.builder-field__error { color: var(--builder-danger); }\n.builder-input { box-sizing: border-box; width: 100%; min-height: 2.5rem; border: 1px solid var(--builder-border); border-radius: 9px; background: var(--builder-bg); color: var(--builder-text); padding: .55rem .7rem; font: inherit; outline: none; }\n.builder-input:focus { border-color: var(--builder-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--builder-primary) 18%, transparent); }\n.builder-input:disabled { cursor: not-allowed; opacity: .65; background: var(--builder-surface); }\n.builder-textarea { min-height: 6rem; resize: vertical; }\n.builder-checkbox { width: 1.15rem; height: 1.15rem; accent-color: var(--builder-primary); }\n.builder-file-input { height: 1px; margin: -1px; opacity: 0; overflow: hidden; position: absolute; width: 1px; }\n.builder-file-choose { justify-self: start; }\n.builder-file-list { display: flex; flex-wrap: wrap; gap: .75rem; }\n.builder-file-item { position: relative; }\n.builder-file-preview { display: block; width: 7rem; height: 7rem; overflow: hidden; border: 1px solid var(--builder-border); border-radius: 9px; background: var(--builder-surface); box-shadow: 0 1px 2px rgb(0 0 0 / 8%); }\n.builder-file-preview img { display: block; width: 100%; height: 100%; object-fit: cover; }\n.builder-file-preview:hover { border-color: var(--builder-primary); }\n.builder-file-remove { position: absolute; top: -.45rem; right: -.45rem; display: grid; width: 1.65rem; height: 1.65rem; place-items: center; border: 1px solid var(--builder-border); border-radius: 999px; background: var(--builder-bg); color: var(--builder-danger); box-shadow: 0 1px 3px rgb(0 0 0 / 16%); cursor: pointer; font-size: 1.2rem; line-height: 1; }\n.builder-file-remove:disabled { cursor: not-allowed; opacity: .5; }\n.builder-file-document { display: inline-flex; min-height: 2.75rem; align-items: center; border: 1px solid var(--builder-border); border-radius: 9px; background: var(--builder-surface); color: var(--builder-text); padding: 0 .85rem; text-decoration: none; }\n.builder-file-document:hover { border-color: var(--builder-primary); }\n.builder-richtext { overflow: hidden; border: 1px solid var(--builder-border); border-radius: 9px; background: var(--builder-bg); }\n.builder-richtext:focus-within { border-color: var(--builder-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--builder-primary) 18%, transparent); }\n.builder-richtext__toolbar { display: flex; flex-wrap: wrap; gap: .25rem; padding: .4rem; border-bottom: 1px solid var(--builder-border); background: var(--builder-surface); }\n.builder-richtext__button { min-width: 2.15rem; height: 2rem; border: 1px solid transparent; border-radius: 6px; background: transparent; color: var(--builder-text); cursor: pointer; font: inherit; font-size: .82rem; font-weight: 700; }\n.builder-richtext__button[aria-pressed=\"true\"] { border-color: color-mix(in srgb, var(--builder-primary) 45%, var(--builder-border)); background: color-mix(in srgb, var(--builder-primary) 13%, transparent); color: var(--builder-primary); }\n.builder-richtext__button:disabled { cursor: not-allowed; opacity: .45; }\n.builder-richtext__content { min-height: 10rem; padding: .8rem; color: var(--builder-text); line-height: 1.6; outline: none; }\n.builder-richtext__content p, .builder-richtext__content h2, .builder-richtext__content h3, .builder-richtext__content ul, .builder-richtext__content ol, .builder-richtext__content blockquote { margin: 0 0 .75rem; }\n.builder-richtext__content h2 { font-size: 1.25rem; line-height: 1.35; }\n.builder-richtext__content h3 { font-size: 1.05rem; line-height: 1.35; }\n.builder-richtext__content ul { padding-left: 1.35rem; list-style: disc; }\n.builder-richtext__content ol { padding-left: 1.35rem; list-style: decimal; }\n.builder-richtext__content blockquote { border-left: 3px solid var(--builder-border); color: var(--builder-muted); padding-left: .75rem; }\n.builder-richtext__content p.is-editor-empty:first-child::before { color: var(--builder-muted); content: attr(data-placeholder); float: left; height: 0; pointer-events: none; }\n.builder-actions { display: flex; justify-content: flex-end; gap: .625rem; }\n.builder-actions--sticky { position: sticky; bottom: 0; z-index: 2; margin: 0 -1rem -1rem; padding: .8rem 1rem; border-top: 1px solid var(--builder-border); background: color-mix(in srgb, var(--builder-bg) 94%, transparent); backdrop-filter: blur(8px); }\n.builder-button { min-height: 2.4rem; border: 1px solid transparent; border-radius: 9px; padding: .5rem .85rem; font: inherit; font-weight: 650; cursor: pointer; }\n.builder-button:disabled { cursor: not-allowed; opacity: .5; }\n.builder-button--primary { background: var(--builder-primary); color: var(--builder-primary-text); }\n.builder-button--secondary { border-color: var(--builder-border); background: var(--builder-surface); color: var(--builder-text); }\n.builder-button--ghost { border-color: var(--builder-border); background: transparent; color: var(--builder-text); }\n.builder-button--danger { background: var(--builder-danger); color: #fff; }\n.builder-icon-button { width: 2.25rem; height: 2.25rem; border: 0; border-radius: 999px; background: var(--builder-surface); color: var(--builder-text); font-size: 1.5rem; cursor: pointer; }\n.builder-grid { padding: 0; overflow: hidden; }\n.builder-grid__header { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 1.1rem 1.25rem; border-bottom: 1px solid var(--builder-border); }\n.builder-grid__toolbar { display: flex; align-items: center; justify-content: flex-end; gap: .65rem; }\n.builder-grid__search { width: min(18rem, 45vw); }\n.builder-table-wrap { width: 100%; overflow: auto; }\n.builder-table { width: 100%; border-collapse: collapse; white-space: nowrap; }\n.builder-table th, .builder-table td { padding: .8rem 1rem; border-bottom: 1px solid var(--builder-border); text-align: left; }\n.builder-table th { background: var(--builder-surface); color: var(--builder-muted); font-size: .78rem; font-weight: 700; text-transform: uppercase; }\n.builder-table .builder-align-right { text-align: right; }\n.builder-sort { border: 0; background: transparent; color: inherit; font: inherit; cursor: pointer; text-transform: inherit; }\n.builder-row-clickable { cursor: pointer; }\n.builder-row-clickable:hover { background: color-mix(in srgb, var(--builder-primary) 5%, transparent); }\n.builder-row-actions { display: flex; justify-content: flex-end; gap: .4rem; }\n.builder-pagination { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: .8rem 1.25rem; color: var(--builder-muted); font-size: .875rem; }\n.builder-pagination > div { display: flex; align-items: center; gap: .65rem; }\n.builder-state { display: grid; justify-items: center; gap: .35rem; padding: 2.5rem 1rem; color: var(--builder-muted); text-align: center; }\n.builder-state--error { color: var(--builder-danger); }\n.builder-overlay { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; padding: 1rem; background: rgba(0, 0, 0, .52); }\n.builder-overlay__panel { display: flex; flex-direction: column; width: min(48rem, 100%); max-height: calc(100dvh - 2rem); border: 1px solid var(--builder-border); border-radius: var(--builder-radius); background: var(--builder-bg); box-shadow: 0 24px 70px rgba(0, 0, 0, .25); outline: none; animation: builder-enter .16s ease-out; }\n.builder-overlay__panel--drawer { width: min(48rem, 100%); height: 100dvh; max-height: 100dvh; margin-left: auto; border-radius: 0; animation-name: builder-drawer-enter; }\n.builder-overlay:has(.builder-overlay__panel--drawer) { justify-content: flex-end; padding: 0; }\n.builder-overlay__header { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; padding: 1rem 1.25rem; border-bottom: 1px solid var(--builder-border); }\n.builder-overlay__body { min-height: 0; overflow: auto; padding: 1rem; }\n.builder-subform { display: grid; gap: .75rem; padding-top: 1rem; border-top: 1px solid var(--builder-border); }\n.builder-subform__header { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }\n.builder-link { border: 0; background: transparent; padding: 0; text-align: left; cursor: pointer; }\n.builder-link--danger { color: var(--builder-danger); }\n.builder-notifications { position: fixed; right: 1rem; bottom: 1rem; z-index: 1100; display: grid; gap: .5rem; width: min(22rem, calc(100vw - 2rem)); }\n.builder-notification { display: flex; align-items: flex-start; justify-content: space-between; gap: .75rem; border: 1px solid var(--builder-border, #d9dce1); border-left: 4px solid var(--builder-primary, #078a35); border-radius: 9px; background: var(--builder-bg, #fff); color: var(--builder-text, #171717); padding: .75rem; box-shadow: 0 10px 30px rgba(0, 0, 0, .16); }\n.builder-notification--error { border-left-color: var(--builder-danger, #b42318); }\n.builder-notification--warning { border-left-color: #b26a00; }\n.builder-notification button { border: 0; background: transparent; color: inherit; font-size: 1.1rem; cursor: pointer; }\n\n@keyframes builder-enter { from { opacity: 0; transform: translateY(8px) scale(.99); } }\n@keyframes builder-drawer-enter { from { transform: translateX(24px); opacity: .7; } }\n\n@media (max-width: 640px) {\n .builder-card { padding: 1rem; }\n .builder-grid { padding: 0; }\n .builder-grid__header { align-items: stretch; flex-direction: column; }\n .builder-grid__toolbar { justify-content: stretch; }\n .builder-grid__search { width: 100%; }\n .builder-form-grid > * { grid-column: span 12 !important; }\n .builder-actions { display: grid; grid-template-columns: 1fr 1fr; }\n .builder-overlay { align-items: flex-end; padding: 0; }\n .builder-overlay__panel { width: 100%; max-height: 94dvh; border-radius: var(--builder-radius) var(--builder-radius) 0 0; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .builder-overlay__panel { animation: none; }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duke333/builder-ui",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "description": "React UI, hooks, and runtime helpers for Winu Builder.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -64,7 +64,10 @@
64
64
  }
65
65
  },
66
66
  "dependencies": {
67
- "@duke333/builder-contracts": "0.2.1"
67
+ "@tiptap/pm": "^3.32.0",
68
+ "@tiptap/react": "^3.32.0",
69
+ "@tiptap/starter-kit": "^3.32.0",
70
+ "@duke333/builder-contracts": "0.2.3"
68
71
  },
69
72
  "devDependencies": {
70
73
  "@tanstack/react-query": "^5.101.4",