@bambamboole/pdf-ua-template-builder 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ :root{--bg: #fafaf9;--surface: #ffffff;--surface-2: #f4f4f3;--surface-sunk: #eeeeec;--border: #eaeaea;--border-strong: #d4d4d2;--border-focus: #4f46e5;--ink: #1a1a1a;--ink-muted: #6b6b6b;--ink-subtle: #9a9a98;--accent: #2e2e2e;--accent-ink: #ffffff;--accent-hover: #0a0a0a;--indigo: #4f46e5;--indigo-soft: #eef0ff;--danger: #b42318;--danger-soft: #fff4f2;--font-sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--text-xs: 11px;--text-sm: 12px;--text-base: 14px;--text-md: 15px;--text-lg: 17px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px;--radius-sm: 4px;--radius: 6px;--radius-md: 8px;--radius-lg: 12px;--shadow-page: 0 1px 2px rgba(0, 0, 0, .04), 0 8px 24px -12px rgba(0, 0, 0, .1);--shadow-drag: 0 12px 24px -8px rgba(0, 0, 0, .18);--shadow-pop: 0 4px 12px -4px rgba(0, 0, 0, .12);--ease: cubic-bezier(.2, .8, .2, 1);--dur-fast: .12s;--dur: .2s;--dur-slow: .28s;color:var(--ink);background:var(--bg);font-family:var(--font-sans);font-size:var(--text-base);font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}html{min-width:320px;min-height:100%}body{min-width:320px;min-height:100vh;margin:0}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--indigo);font-weight:500;text-decoration:none}a:hover{text-decoration:underline}:focus-visible{outline:2px solid var(--border-focus);outline-offset:2px;border-radius:var(--radius-sm)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition-duration:.001ms!important;animation-duration:.001ms!important}}.template-builder-page{display:grid;min-height:100vh;grid-template-columns:minmax(40rem,1.55fr) minmax(28rem,.95fr);background:var(--bg);color:var(--ink)}.template-builder-page__authoring{display:grid;min-width:0;min-height:100vh;grid-template-columns:220px minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);border-right:1px solid var(--border);background:var(--bg)}.builder-topbar{display:flex;grid-column:1 / -1;min-width:0;align-items:center;gap:var(--space-3);height:56px;border-bottom:1px solid var(--border);background:var(--surface);padding:0 var(--space-4)}.builder-topbar__brand{display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-lg);font-weight:600;color:var(--ink);letter-spacing:-.01em;white-space:nowrap}.builder-topbar__brand-mark{display:inline-grid;width:22px;height:22px;place-items:center;border-radius:var(--radius-sm);background:var(--accent);color:var(--accent-ink);font-size:11px;font-weight:600;letter-spacing:0}.builder-topbar__brand-sub{color:var(--ink-muted);font-size:var(--text-md);font-weight:500}.builder-topbar__spacer{flex:1 1 auto}.builder-topbar__group{display:flex;align-items:center;gap:var(--space-2)}.builder-topbar__settings{position:relative}.builder-topbar__settings-panel{position:absolute;top:calc(100% + var(--space-2));right:0;display:grid;width:320px;gap:var(--space-2);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-pop);padding:var(--space-3);z-index:10}.builder-topbar__settings-panel label{display:grid;gap:var(--space-1);color:var(--ink-muted);font-size:var(--text-xs);font-weight:500;text-transform:uppercase;letter-spacing:.04em}.builder-input,.builder-select{height:32px;min-width:0;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--ink);padding:0 var(--space-3);transition:border-color var(--dur-fast) var(--ease)}.builder-input:hover,.builder-select:hover{border-color:var(--border-strong)}.builder-input:focus-visible,.builder-select:focus-visible{outline:none;border-color:var(--border-focus);box-shadow:0 0 0 3px #4f46e52e}.builder-select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--ink-muted) 50%),linear-gradient(135deg,var(--ink-muted) 50%,transparent 50%);background-position:calc(100% - 14px) 50%,calc(100% - 9px) 50%;background-size:5px 5px;background-repeat:no-repeat;padding-right:26px}.builder-button{display:inline-flex;height:32px;align-items:center;gap:var(--space-2);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--ink);cursor:pointer;font-weight:500;padding:0 var(--space-3);white-space:nowrap;transition:background var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease)}.builder-button:hover{background:var(--surface-2);border-color:var(--border-strong)}.builder-button:disabled{color:var(--ink-subtle);background:var(--surface);cursor:not-allowed}.builder-button--primary{border-color:var(--accent);background:var(--accent);color:var(--accent-ink);font-weight:600}.builder-button--primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.builder-button--primary:disabled{border-color:var(--border-strong);background:var(--surface-2);color:var(--ink-subtle)}.builder-button--ghost{border-color:transparent;background:transparent}.builder-button--ghost:hover{background:var(--surface-2);border-color:var(--border)}.builder-button--icon{width:32px;padding:0;justify-content:center}.builder-button--danger{color:var(--danger)}.builder-button--danger:hover{background:var(--danger-soft);border-color:var(--danger)}.builder-palette{grid-column:1;grid-row:2;display:flex;min-width:0;min-height:0;flex-direction:column;gap:var(--space-5);overflow:auto;border-right:1px solid var(--border);background:var(--surface);padding:var(--space-4)}.builder-palette__section-title{margin:0 0 var(--space-2);color:var(--ink-subtle);font-size:var(--text-xs);font-weight:500;text-transform:uppercase;letter-spacing:.06em}.builder-palette__list{display:grid;gap:var(--space-1)}.builder-palette__item{display:flex;width:100%;align-items:center;gap:var(--space-3);border:1px solid transparent;border-radius:var(--radius);background:transparent;color:var(--ink);cursor:grab;font-size:var(--text-sm);font-weight:500;padding:var(--space-2) var(--space-2);text-align:left;transition:background var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease)}.builder-palette__item:hover{background:var(--surface-2);border-color:var(--border)}.builder-palette__item:active{cursor:grabbing;background:var(--surface-2);transform:scale(.98)}.builder-palette__settings{display:grid;gap:var(--space-3)}.builder-palette__field{display:grid;gap:var(--space-1);color:var(--ink-muted);font-size:var(--text-xs);font-weight:500;text-transform:uppercase;letter-spacing:.04em}.builder-chip{display:inline-grid;width:22px;height:22px;flex:0 0 22px;place-items:center;border-radius:var(--radius-sm);background:var(--surface-2);color:var(--ink-muted);font-family:var(--font-mono);font-size:11px;font-weight:600}.builder-canvas{grid-column:2;grid-row:2;min-width:0;min-height:0;overflow:auto;background:var(--surface-sunk);padding:var(--space-5) var(--space-4) var(--space-6)}.builder-canvas__empty{display:grid;height:100%;place-items:center;color:var(--ink-muted);font-size:var(--text-sm)}.builder-page-sheet{display:grid;width:100%;max-width:var(--page-width, 794px);margin:0 auto;gap:var(--space-3);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-page);padding:var(--space-5);transition:max-width var(--dur) var(--ease)}.builder-canvas__area{display:grid;gap:var(--space-3)}.builder-footer-section{display:grid;gap:var(--space-3);margin-top:var(--space-5);padding-top:var(--space-4);border-top:1px dashed var(--border)}.builder-footer-section__header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3)}.builder-footer-section__title{margin:0;color:var(--ink-subtle);font-size:var(--text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.06em}.builder-footer-section__hint{margin:2px 0 0;color:var(--ink-subtle);font-size:var(--text-xs)}.builder-footer-section__repeat{display:inline-flex;align-items:center;gap:var(--space-2);color:var(--ink-muted);font-size:var(--text-sm);font-weight:500}.builder-footer-section__repeat input{width:14px;height:14px;accent-color:var(--indigo)}.builder-footer-section__page-numbers{display:flex;justify-content:center;margin-top:var(--space-2);padding-top:var(--space-3);border-top:1px dashed var(--border)}.builder-footer-section__page-numbers label{display:inline-flex;align-items:center;gap:var(--space-3);color:var(--ink-muted);font-size:var(--text-xs);font-weight:500;text-transform:uppercase;letter-spacing:.06em}.builder-footer-section__page-numbers select{text-transform:none;font-size:var(--text-sm);font-weight:400;letter-spacing:0}.builder-page-sheet__meta{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-2);color:var(--ink-subtle);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.06em}.builder-row{display:grid;min-width:0;gap:var(--space-2);border-radius:var(--radius-md);transition:background var(--dur-fast) var(--ease)}.builder-row.is-dragging{opacity:.5}.builder-row__header{display:flex;align-items:center;gap:var(--space-2);height:22px;margin-bottom:-2px;opacity:0;transition:opacity var(--dur-fast) var(--ease)}.builder-row:hover .builder-row__header,.builder-row__header:focus-within{opacity:1}.builder-row__handle{display:inline-flex;align-items:center;height:22px;border:0;background:transparent;color:var(--ink-subtle);cursor:grab;font-family:var(--font-mono);font-size:var(--text-xs);padding:0 var(--space-2)}.builder-row__handle:hover{color:var(--ink)}.builder-row__grid{position:relative;display:grid;min-width:0;align-items:stretch;gap:var(--space-2)}.builder-card{display:grid;min-width:0;overflow:hidden;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);transition:border-color var(--dur-fast) var(--ease),box-shadow var(--dur-fast) var(--ease),background var(--dur-fast) var(--ease)}.builder-card:hover{border-color:var(--border-strong)}.builder-card.is-dragging{opacity:.45;border-style:dashed}.builder-card.is-expanded{border-color:var(--ink-subtle)}.builder-card.is-landing{box-shadow:0 0 0 2px var(--indigo-soft);animation:builder-card-land var(--dur-slow) var(--ease)}@keyframes builder-card-land{0%{box-shadow:0 0 #4f46e500}40%{box-shadow:0 0 0 4px #4f46e540}to{box-shadow:0 0 #4f46e500}}.builder-card__header{display:flex;align-items:center;gap:var(--space-2);min-height:40px;background:var(--surface);padding:var(--space-2) var(--space-2) var(--space-2) var(--space-1);cursor:pointer}.builder-card__handle{display:inline-grid;width:20px;height:28px;flex:0 0 20px;place-items:center;border:0;background:transparent;color:var(--ink-subtle);cursor:grab;font-family:var(--font-mono);font-size:12px;opacity:0;padding:0;transition:opacity var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}.builder-card:hover .builder-card__handle,.builder-card__handle:focus-visible,.builder-card.is-dragging .builder-card__handle{opacity:1}.builder-card__handle:hover{color:var(--ink)}.builder-card__handle:active{cursor:grabbing}.builder-card__title{display:flex;min-width:0;flex:1 1 auto;align-items:baseline;gap:var(--space-2)}.builder-card__label{color:var(--ink);font-size:var(--text-sm);font-weight:500;white-space:nowrap}.builder-card__summary{color:var(--ink-muted);font-size:var(--text-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.builder-card__actions{display:inline-flex;flex:0 0 auto;align-items:center;gap:var(--space-1);opacity:0;transition:opacity var(--dur-fast) var(--ease)}.builder-card:hover .builder-card__actions,.builder-card__actions:focus-within{opacity:1}.builder-card.is-expanded .builder-card__actions{opacity:1}.builder-card__icon-button{display:inline-grid;width:24px;height:24px;place-items:center;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--ink-muted);cursor:pointer;font-size:14px;padding:0;transition:background var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}.builder-card__icon-button:hover{background:var(--surface-2);color:var(--ink)}.builder-card__icon-button--danger:hover{background:var(--danger-soft);color:var(--danger)}.builder-card__form{border-top:1px solid var(--border);background:var(--surface);padding:var(--space-4);animation:builder-card-fade-in var(--dur-fast) var(--ease)}.builder-card__warning{margin:0;color:var(--ink-muted);font-size:var(--text-sm)}.builder-card__warning code{background:var(--surface-2);border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:var(--text-xs);padding:1px 6px}@keyframes builder-card-fade-in{0%{opacity:0;transform:translateY(-2px)}to{opacity:1;transform:translateY(0)}}.builder-new-row{display:grid;min-height:40px;place-items:center;border:1px dashed var(--border-strong);border-radius:var(--radius-md);background:transparent;color:var(--ink-subtle);font-size:var(--text-sm);padding:var(--space-3);transition:border-color var(--dur-fast) var(--ease),background var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}.builder-new-row.is-over{border-color:var(--indigo);background:var(--indigo-soft);color:var(--indigo)}.builder-drop-line{height:2px;margin:-1px 0;border-radius:999px;background:var(--indigo);box-shadow:0 0 0 4px #4f46e51f}.column-resizer,.builder-column-resizer{width:6px;min-height:100%;align-self:stretch;border:0;border-radius:999px;background:transparent;cursor:col-resize;padding:0;transition:background var(--dur-fast) var(--ease)}.column-resizer:before,.builder-column-resizer:before{display:block;width:2px;height:100%;margin:0 auto;border-radius:999px;background:var(--border-strong);content:"";transition:background var(--dur-fast) var(--ease)}.column-resizer:hover:before,.builder-column-resizer:hover:before{background:var(--indigo)}.inline-block-form{display:grid;gap:var(--space-3)}.inline-block-form label{display:grid;grid-template-columns:110px minmax(0,1fr);align-items:center;gap:var(--space-3);color:var(--ink-muted);font-size:var(--text-xs);font-weight:500;text-transform:uppercase;letter-spacing:.04em}.inline-block-form>label>input,.inline-block-form>label>select,.inline-block-form>label>textarea{width:100%;min-width:0;min-height:32px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--ink);font-size:var(--text-base);font-weight:400;letter-spacing:0;text-transform:none;padding:var(--space-2) var(--space-3);transition:border-color var(--dur-fast) var(--ease)}.inline-block-form>label>textarea{min-height:96px;font-family:var(--font-mono);font-size:var(--text-sm)}.inline-block-form>label>input:hover,.inline-block-form>label>select:hover,.inline-block-form>label>textarea:hover{border-color:var(--border-strong)}.inline-block-form>label>input:focus-visible,.inline-block-form>label>select:focus-visible,.inline-block-form>label>textarea:focus-visible{outline:none;border-color:var(--border-focus);box-shadow:0 0 0 3px #4f46e52e}.inline-block-form>label>select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--ink-muted) 50%),linear-gradient(135deg,var(--ink-muted) 50%,transparent 50%);background-position:calc(100% - 14px) 50%,calc(100% - 9px) 50%;background-size:5px 5px;background-repeat:no-repeat;padding-right:28px}.inline-block-form .builder-field--checkbox{grid-template-columns:110px max-content;gap:var(--space-2)}.builder-array-field{display:grid;grid-column:1 / -1;gap:var(--space-2);border:1px solid var(--border);border-radius:var(--radius);margin:0;padding:var(--space-3)}.builder-array-field>legend{padding:0 var(--space-2);color:var(--ink-muted);font-size:var(--text-xs);font-weight:500;text-transform:uppercase;letter-spacing:.04em}.builder-array-field__item{display:grid;gap:var(--space-2);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-2);padding:var(--space-3)}.builder-array-field__item button{width:fit-content;height:28px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--ink-muted);cursor:pointer;font-size:var(--text-xs);padding:0 var(--space-3)}.builder-array-field__add{width:fit-content;height:28px;border:1px dashed var(--border-strong);border-radius:var(--radius);background:transparent;color:var(--ink-muted);cursor:pointer;font-size:var(--text-xs);padding:0 var(--space-3)}.builder-array-field__add:hover{border-color:var(--indigo);color:var(--indigo)}.pdf-pane{display:grid;min-width:0;min-height:100vh;grid-template-rows:56px auto minmax(0,1fr) auto;background:var(--surface-sunk)}.pdf-pane__header{grid-row:1;display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);border-bottom:1px solid var(--border);background:var(--surface);padding:0 var(--space-4)}.pdf-pane__header h2{margin:0;color:var(--ink);font-size:var(--text-md);font-weight:600;letter-spacing:-.01em}.pdf-pane__status-pill{display:inline-flex;align-items:center;gap:var(--space-2);border-radius:999px;background:var(--surface-2);color:var(--ink-muted);font-size:var(--text-xs);font-weight:500;padding:4px var(--space-3)}.pdf-pane__status-pill:before{content:"";width:6px;height:6px;border-radius:999px;background:currentColor;opacity:.6}.pdf-pane__status-pill[data-status=ready]{color:#1f7a3a;background:#e6f4ec}.pdf-pane__status-pill[data-status=rendering]{color:var(--indigo);background:var(--indigo-soft)}.pdf-pane__body{grid-row:3;display:grid;min-height:0;padding:var(--space-4)}.pdf-pane__object{width:100%;height:100%;min-height:0;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-page)}.pdf-pane__empty{display:grid;height:100%;place-items:center;border:1px dashed var(--border-strong);border-radius:var(--radius-md);background:var(--surface);color:var(--ink-muted);font-size:var(--text-sm);padding:var(--space-5);text-align:center}.pdf-pane__error{grid-row:2;margin:var(--space-3) var(--space-4) 0;border-left:3px solid var(--danger);border-radius:var(--radius-sm);background:var(--danger-soft);color:var(--danger);font-size:var(--text-sm);padding:var(--space-3) var(--space-3)}.pdf-pane__footer{grid-row:4;display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);border-top:1px solid var(--border);background:var(--surface);padding:var(--space-3) var(--space-4)}.builder-drag-overlay{cursor:grabbing;filter:drop-shadow(0 12px 24px rgba(0,0,0,.18));transform:rotate(1.5deg) scale(1.02);transform-origin:0 0;pointer-events:none}.builder-drag-overlay__card{display:inline-flex;min-width:180px;max-width:360px;align-items:center;gap:var(--space-2);border:1px solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);font-size:var(--text-sm);font-weight:500;padding:var(--space-2) var(--space-3)}@media(max-width:1080px){.template-builder-page{grid-template-columns:1fr}.template-builder-page__authoring,.pdf-pane{min-height:auto}.pdf-pane__object,.pdf-pane__empty{height:34rem}}@media(max-width:760px){.template-builder-page__authoring{grid-template-columns:1fr}.builder-palette{grid-column:1;grid-row:auto;border-right:0;border-bottom:1px solid var(--border)}.builder-canvas{grid-column:1;grid-row:auto}.builder-palette__list{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}.inline-block-form label{grid-template-columns:1fr;gap:var(--space-1)}}@media(max-width:480px){.builder-row__grid{grid-template-columns:1fr!important}.column-resizer,.builder-column-resizer{display:none}}
@@ -0,0 +1,33 @@
1
+ export type { Template } from './generated/template';
2
+ export type JsonObject = Record<string, unknown>;
3
+ export type TemplateData = Record<string, unknown>;
4
+ export interface RenderOptions {
5
+ title?: string;
6
+ baseUrl?: string;
7
+ }
8
+ export interface TemplatePageFormat {
9
+ name: string;
10
+ widthMm: number;
11
+ heightMm: number;
12
+ }
13
+ export interface TemplateSchemaMetadata {
14
+ kind: "template";
15
+ templateVersion: number;
16
+ renderEndpoint: string;
17
+ templateFields: string[];
18
+ attachmentFields: string[];
19
+ externalFontFields: string[];
20
+ bundledFonts: string[];
21
+ blockOrder: string[];
22
+ pageFormats: TemplatePageFormat[];
23
+ }
24
+ export interface TemplateSchemaResponse {
25
+ $schema?: string;
26
+ $id?: string;
27
+ title?: string;
28
+ type?: string;
29
+ properties?: JsonObject;
30
+ $defs?: JsonObject;
31
+ "x-pdfUa": TemplateSchemaMetadata;
32
+ }
33
+ export declare function getTemplateSchemaMetadata(schema: TemplateSchemaResponse): TemplateSchemaMetadata;
package/package.json ADDED
@@ -0,0 +1,89 @@
1
+ {
2
+ "name": "@bambamboole/pdf-ua-template-builder",
3
+ "version": "0.1.1",
4
+ "private": false,
5
+ "description": "Embeddable React template builder for the pdf-ua-api PDF/UA renderer.",
6
+ "author": "Manuel Christlieb",
7
+ "license": "MIT",
8
+ "type": "module",
9
+ "sideEffects": [
10
+ "**/*.css"
11
+ ],
12
+ "main": "./dist/index.js",
13
+ "module": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.js"
19
+ },
20
+ "./style.css": "./dist/style.css"
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "README.md",
25
+ "LICENSE"
26
+ ],
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/bambamboole/pdf-ua-template-builder.git"
30
+ },
31
+ "homepage": "https://github.com/bambamboole/pdf-ua-template-builder#readme",
32
+ "bugs": {
33
+ "url": "https://github.com/bambamboole/pdf-ua-template-builder/issues"
34
+ },
35
+ "keywords": [
36
+ "pdf",
37
+ "pdf-ua",
38
+ "pdfua",
39
+ "accessibility",
40
+ "template",
41
+ "builder",
42
+ "react",
43
+ "drag-and-drop",
44
+ "wysiwyg"
45
+ ],
46
+ "scripts": {
47
+ "dev": "vite",
48
+ "build": "tsc --noEmit && vite build --mode lib",
49
+ "build:app": "tsc --noEmit && vite build",
50
+ "preview": "vite preview",
51
+ "sync:schema": "curl -fsS ${PDF_UA_SCHEMA_URL:-http://localhost:8080/schema} -o schemas/template.schema.json",
52
+ "generate:types": "json2ts --input schemas/template.schema.json --output src/types/generated/template.d.ts --unreachableDefinitions",
53
+ "typecheck": "tsc --noEmit",
54
+ "lint": "oxlint",
55
+ "lint:fix": "oxlint --fix",
56
+ "lint:github": "oxlint --format=github",
57
+ "fmt": "oxfmt",
58
+ "fmt:check": "oxfmt --check",
59
+ "test": "vitest run",
60
+ "prepublishOnly": "npm run build"
61
+ },
62
+ "peerDependencies": {
63
+ "react": "^18.0.0 || ^19.0.0",
64
+ "react-dom": "^18.0.0 || ^19.0.0"
65
+ },
66
+ "dependencies": {
67
+ "@dnd-kit/core": "^6.3.1",
68
+ "@dnd-kit/sortable": "^10.0.0",
69
+ "@dnd-kit/utilities": "^3.2.2",
70
+ "@rjsf/core": "^6.5.3",
71
+ "@rjsf/utils": "^6.5.3",
72
+ "@rjsf/validator-ajv8": "^6.5.3",
73
+ "ajv": "^8.20.0"
74
+ },
75
+ "devDependencies": {
76
+ "@types/react": "^19.2.15",
77
+ "@types/react-dom": "^19.2.3",
78
+ "@vitejs/plugin-react": "^5.0.0",
79
+ "json-schema-to-typescript": "^15.0.4",
80
+ "oxfmt": "^0.51.0",
81
+ "oxlint": "^1.66.0",
82
+ "react": "^19.0.0",
83
+ "react-dom": "^19.0.0",
84
+ "typescript": "^5.9.3",
85
+ "vite": "^7.0.0",
86
+ "vite-plugin-dts": "^5.0.1",
87
+ "vitest": "^4.1.7"
88
+ }
89
+ }