@francistinao/formiq-sdk 1.0.6 → 1.1.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.
- package/dist/components/board/BoardPropertiesPanel.d.ts +6 -0
- package/dist/components/board/BoardSidebar.d.ts +6 -0
- package/dist/components/board/BoardWorkspaceLayout.d.ts +8 -0
- package/dist/components/board/atoms/FileUploadInput.d.ts +8 -0
- package/dist/components/board/atoms/IconLabel.d.ts +8 -0
- package/dist/components/board/atoms/InputField.d.ts +7 -0
- package/dist/components/board/atoms/MutedText.d.ts +6 -0
- package/dist/components/board/atoms/SectionChip.d.ts +6 -0
- package/dist/components/board/atoms/SectionTitle.d.ts +7 -0
- package/dist/components/board/atoms/SelectInput.d.ts +14 -0
- package/dist/components/board/atoms/SliderControl.d.ts +11 -0
- package/dist/components/board/atoms/ToolButton.d.ts +9 -0
- package/dist/constants/fontFamilies.d.ts +4 -0
- package/dist/formiq-sdk.css +1 -1
- package/dist/index.cjs +5 -5
- package/dist/index.d.ts +4 -0
- package/dist/index.js +2578 -977
- package/dist/services/integration.service.d.ts +41 -0
- package/package.json +1 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
type BoardWorkspaceLayoutProps = {
|
|
3
|
+
boardId: string;
|
|
4
|
+
canEdit?: boolean;
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
};
|
|
7
|
+
export declare function BoardWorkspaceLayout({ boardId, canEdit, children }: BoardWorkspaceLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface FileUploadInputProps {
|
|
2
|
+
label?: string;
|
|
3
|
+
helperText?: string;
|
|
4
|
+
onFileChange?: (file: File | null) => void;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function FileUploadInput({ label, helperText, onFileChange, disabled, }: FileUploadInputProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
interface IconLabelProps {
|
|
3
|
+
icon: React.ReactNode;
|
|
4
|
+
label: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function IconLabel({ icon, label, description }: IconLabelProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
interface InputFieldProps extends React.InputHTMLAttributes<HTMLInputElement> {
|
|
3
|
+
label?: string;
|
|
4
|
+
helperText?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function InputField({ label, helperText, className, style, ...props }: InputFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface SelectInputProps {
|
|
2
|
+
label?: string;
|
|
3
|
+
value: string;
|
|
4
|
+
options: {
|
|
5
|
+
label: string;
|
|
6
|
+
value: string;
|
|
7
|
+
}[];
|
|
8
|
+
placeholder?: string;
|
|
9
|
+
helperText?: string;
|
|
10
|
+
onValueChange: (value: string) => void;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function SelectInput({ label, value, options, placeholder, helperText, onValueChange, disabled, }: SelectInputProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface SliderControlProps {
|
|
2
|
+
label: string;
|
|
3
|
+
value: number;
|
|
4
|
+
min?: number;
|
|
5
|
+
max?: number;
|
|
6
|
+
helperText?: string;
|
|
7
|
+
onChange: (value: number) => void;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function SliderControl({ label, value, min, max, helperText, onChange, disabled, }: SliderControlProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
interface ToolButtonProps {
|
|
3
|
+
label: string;
|
|
4
|
+
icon: React.ReactNode;
|
|
5
|
+
onClick?: () => void;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function ToolButton({ label, icon, onClick, disabled }: ToolButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
package/dist/formiq-sdk.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@import"https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,700&family=Manrope:wght@400;500;600;700;800&display=swap";@layer components;@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@layer theme{:root,:host{--font-sans:"Manrope", ui-sans-serif, system-ui, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-white:#fff;--spacing:.25rem;--container-2xl:42rem;--container-3xl:48rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--radius-xl:.75rem;--radius-2xl:1rem;--blur-lg:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pointer-events-none{pointer-events:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-top-24{top:calc(var(--spacing) * -24)}.top-0{top:calc(var(--spacing) * 0)}.-right-20{right:calc(var(--spacing) * -20)}.-bottom-20{bottom:calc(var(--spacing) * -20)}.-left-20{left:calc(var(--spacing) * -20)}.z-50{z-index:50}.order-3{order:3}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-20{margin-top:calc(var(--spacing) * 20)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-auto{margin-left:auto}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.h-2{height:calc(var(--spacing) * 2)}.h-56{height:calc(var(--spacing) * 56)}.w-2{width:calc(var(--spacing) * 2)}.w-56{width:calc(var(--spacing) * 56)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.flex-shrink-0{flex-shrink:0}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1{row-gap:calc(var(--spacing) * 1)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.overflow-hidden{overflow:hidden}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[2rem\]{border-radius:2rem}.rounded-full{border-radius:3.40282e38px}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[rgba\(23\,58\,64\,0\.2\)\]{border-color:#173a4033}.border-\[rgba\(50\,143\,151\,0\.3\)\]{border-color:#328f974d}.border-\[var\(--chip-line\)\]{border-color:var(--chip-line)}.border-\[var\(--line\)\]{border-color:var(--line)}.bg-\[rgba\(79\,184\,178\,0\.14\)\]{background-color:#4fb8b224}.bg-\[var\(--chip-bg\)\]{background-color:var(--chip-bg)}.bg-\[var\(--header-bg\)\]{background-color:var(--header-bg)}.bg-white\/50{background-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.bg-white\/50{background-color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.bg-\[linear-gradient\(90deg\,\#56c6be\,\#7ed3bf\)\]{background-image:linear-gradient(90deg,#56c6be,#7ed3bf)}.bg-\[radial-gradient\(circle\,rgba\(47\,106\,74\,0\.18\)\,transparent_66\%\)\]{background-image:radial-gradient(circle,#2f6a4a2e,#0000 66%)}.bg-\[radial-gradient\(circle\,rgba\(79\,184\,178\,0\.32\)\,transparent_66\%\)\]{background-image:radial-gradient(circle,#4fb8b252,#0000 66%)}.p-2{padding:calc(var(--spacing) * 2)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pt-14{padding-top:calc(var(--spacing) * 14)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pb-14{padding-bottom:calc(var(--spacing) * 14)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.font-sans{font-family:var(--font-sans)}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.leading-8{--tw-leading:calc(var(--spacing) * 8);line-height:calc(var(--spacing) * 8)}.leading-\[1\.02\]{--tw-leading:1.02;line-height:1.02}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.text-\[var\(--lagoon-deep\)\]{color:var(--lagoon-deep)}.text-\[var\(--sea-ink\)\]{color:var(--sea-ink)}.text-\[var\(--sea-ink-soft\)\]{color:var(--sea-ink-soft)}.italic{font-style:italic}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shadow-\[0_8px_22px_rgba\(30\,90\,72\,0\.08\)\]{--tw-shadow:0 8px 22px var(--tw-shadow-color,#1e5a4814);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_8px_24px_rgba\(30\,90\,72\,0\.08\)\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#1e5a4814);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.selection\:bg-\[rgba\(79\,184\,178\,0\.24\)\] ::selection{background-color:#4fb8b23d}.selection\:bg-\[rgba\(79\,184\,178\,0\.24\)\]::selection{background-color:#4fb8b23d}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-\[rgba\(23\,58\,64\,0\.35\)\]:hover{border-color:#173a4059}.hover\:bg-\[rgba\(79\,184\,178\,0\.24\)\]:hover{background-color:#4fb8b23d}.hover\:bg-\[var\(--link-bg-hover\)\]:hover{background-color:var(--link-bg-hover)}.hover\:text-\[var\(--sea-ink\)\]:hover{color:var(--sea-ink)}}@media(min-width:40rem){.sm\:order-2{order:2}.sm\:ml-0{margin-left:calc(var(--spacing) * 0)}.sm\:block{display:block}.sm\:w-auto{width:auto}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:gap-2{gap:calc(var(--spacing) * 2)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-4{padding-inline:calc(var(--spacing) * 4)}.sm\:px-10{padding-inline:calc(var(--spacing) * 10)}.sm\:py-2{padding-block:calc(var(--spacing) * 2)}.sm\:py-4{padding-block:calc(var(--spacing) * 4)}.sm\:py-14{padding-block:calc(var(--spacing) * 14)}.sm\:pb-0{padding-bottom:calc(var(--spacing) * 0)}.sm\:text-left{text-align:left}.sm\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.sm\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}@media(min-width:64rem){.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}}:root{--sea-ink:#173a40;--sea-ink-soft:#416166;--lagoon:#4fb8b2;--lagoon-deep:#328f97;--palm:#2f6a4a;--sand:#e7f0e8;--foam:#f3faf5;--surface:#ffffffbd;--surface-strong:#ffffffe6;--line:#173a4024;--inset-glint:#ffffffd1;--kicker:#2f6a4ae6;--bg-base:#e7f3ec;--header-bg:#fbfff8d6;--chip-bg:#fffc;--chip-line:#2f6a4a2e;--link-bg-hover:#ffffffe6;--hero-a:#4fb8b25c;--hero-b:#2f6a4a33}:root[data-theme=dark]{--sea-ink:#d7ece8;--sea-ink-soft:#afcdc8;--lagoon:#60d7cf;--lagoon-deep:#8de5db;--palm:#6ec89a;--sand:#0f1a1e;--foam:#101d22;--surface:#101e22cc;--surface-strong:#0f1b1feb;--line:#8de5db2e;--inset-glint:#c2f7ee24;--kicker:#b8efe5;--bg-base:#0a1418;--header-bg:#0a1418cc;--chip-bg:#0d1c20e6;--chip-line:#8de5db3d;--link-bg-hover:#182c31cc;--hero-a:#60d7cf2e;--hero-b:#6ec89a1f}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--sea-ink:#d7ece8;--sea-ink-soft:#afcdc8;--lagoon:#60d7cf;--lagoon-deep:#8de5db;--palm:#6ec89a;--sand:#0f1a1e;--foam:#101d22;--surface:#101e22cc;--surface-strong:#0f1b1feb;--line:#8de5db2e;--inset-glint:#c2f7ee24;--kicker:#b8efe5;--bg-base:#0a1418;--header-bg:#0a1418cc;--chip-bg:#0d1c20e6;--chip-line:#8de5db3d;--link-bg-hover:#182c31cc;--hero-a:#60d7cf2e;--hero-b:#6ec89a1f}}*{box-sizing:border-box}html,body,#app{min-height:100%}body{color:var(--sea-ink);font-family:var(--font-sans);background-color:var(--bg-base);background:radial-gradient(1100px 620px at -8% -10%,var(--hero-a),transparent 58%),radial-gradient(1050px 620px at 112% -12%,var(--hero-b),transparent 62%),radial-gradient(720px 380px at 50% 115%,#4fb8b21a,transparent 68%),linear-gradient(180deg,var(--sand) 0%,var(--foam) 44%,var(--bg-base) 100%);margin:0}@supports (color:color-mix(in lab,red,red)){body{background:radial-gradient(1100px 620px at -8% -10%,var(--hero-a),transparent 58%),radial-gradient(1050px 620px at 112% -12%,var(--hero-b),transparent 62%),radial-gradient(720px 380px at 50% 115%,#4fb8b21a,transparent 68%),linear-gradient(180deg,color-mix(in oklab,var(--sand) 68%,white) 0%,var(--foam) 44%,var(--bg-base) 100%)}}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden}body:before{content:"";pointer-events:none;z-index:-1;opacity:.28;background:radial-gradient(circle at 20% 15%,#fffc,#0000 34%),radial-gradient(circle at 78% 26%,#4fb8b233,#0000 42%),radial-gradient(circle at 42% 82%,#2f6a4a24,#0000 36%);position:fixed;inset:0}body:after{content:"";pointer-events:none;z-index:-1;opacity:.14;background-image:linear-gradient(#ffffff12 1px,#0000 1px),linear-gradient(90deg,#ffffff0f 1px,#0000 1px);background-size:28px 28px;position:fixed;inset:0;-webkit-mask-image:radial-gradient(circle at 50% 30%,#000,#0000 78%);mask-image:radial-gradient(circle at 50% 30%,#000,#0000 78%)}a{color:var(--lagoon-deep);text-underline-offset:2px;text-decoration-color:#328f9766;text-decoration-thickness:1px}a:hover{color:#246f76}code{border:1px solid var(--line);background:var(--surface-strong);font-size:.9em}@supports (color:color-mix(in lab,red,red)){code{background:color-mix(in oklab,var(--surface-strong) 82%,white 18%)}}code{border-radius:7px;padding:2px 7px}pre code{font-size:inherit;color:inherit;background:0 0;border:0;border-radius:0;padding:0}.page-wrap{width:min(1080px,100% - 2rem);margin-inline:auto}.display-title{font-family:Fraunces,Georgia,serif}.island-shell{border:1px solid var(--line);background:linear-gradient(165deg,var(--surface-strong),var(--surface));box-shadow:0 1px 0 var(--inset-glint) inset,0 22px 44px #1e5a481a,0 6px 18px #173a4014;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.feature-card{background:linear-gradient(165deg,var(--surface-strong),var(--surface))}@supports (color:color-mix(in lab,red,red)){.feature-card{background:linear-gradient(165deg,color-mix(in oklab,var(--surface-strong) 93%,white 7%),var(--surface))}}.feature-card{box-shadow:0 1px 0 var(--inset-glint) inset,0 18px 34px #1e5a481a,0 4px 14px #173a400f}.feature-card:hover{border-color:var(--lagoon-deep);transform:translateY(-2px)}@supports (color:color-mix(in lab,red,red)){.feature-card:hover{border-color:color-mix(in oklab,var(--lagoon-deep) 35%,var(--line))}}button,.island-shell,a{transition:background-color .18s,color .18s,border-color .18s,transform .18s}.island-kicker{letter-spacing:.16em;text-transform:uppercase;color:var(--kicker);font-size:.69rem;font-weight:700}.nav-link{color:var(--sea-ink-soft);align-items:center;text-decoration:none;display:inline-flex;position:relative}.nav-link:after{content:"";transform-origin:0;background:linear-gradient(90deg,var(--lagoon),#7ed3bf);width:100%;height:2px;transition:transform .17s;position:absolute;bottom:-6px;left:0;transform:scaleX(0)}.nav-link:hover,.nav-link.is-active{color:var(--sea-ink)}.nav-link:hover:after,.nav-link.is-active:after{transform:scaleX(1)}@media(max-width:640px){.nav-link:after{bottom:-4px}}.site-footer{border-top:1px solid var(--line);background:var(--header-bg)}@supports (color:color-mix(in lab,red,red)){.site-footer{background:color-mix(in oklab,var(--header-bg) 84%,transparent 16%)}}.rise-in{animation:.7s cubic-bezier(.16,1,.3,1) both rise-in}@keyframes rise-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.formiq-board{flex-direction:column;gap:16px;padding:20px;display:flex}.formiq-board__header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.formiq-board__title{color:var(--sea-ink);font-size:1.25rem;font-weight:700}.formiq-board__actions{align-items:center;gap:10px;display:flex}.formiq-board__button{border:1px solid var(--line);background:var(--lagoon);color:#fff;cursor:pointer;border-radius:999px;padding:10px 16px;font-weight:600}.formiq-board__button:disabled{opacity:.6;cursor:not-allowed}.formiq-board__button--ghost{color:var(--sea-ink);background:0 0}.formiq-board__error{color:#9f1239;background:#d23a3a1a;border:1px solid #d23a3a4d;border-radius:12px;padding:12px 14px;font-weight:600}.formiq-board__empty{border:1px dashed var(--line);color:var(--sea-ink-soft);border-radius:16px;padding:16px}.formiq-board__canvas{border:1px solid var(--line);background:var(--surface);border-radius:18px;min-height:520px;overflow:hidden}.formiq-board-canvas{flex:1;min-height:0;display:flex}.formiq-board-canvas__stage{background:0 0;flex:1;min-height:600px;overflow:auto}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}
|
|
1
|
+
@import"https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,700&family=Manrope:wght@400;500;600;700;800&display=swap";@layer components;@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@layer theme{:root,:host{--font-sans:"Manrope", ui-sans-serif, system-ui, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-white:#fff;--spacing:.25rem;--container-2xl:42rem;--container-3xl:48rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--radius-xl:.75rem;--radius-2xl:1rem;--blur-lg:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pointer-events-none{pointer-events:none}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-top-24{top:calc(var(--spacing) * -24)}.top-0{top:calc(var(--spacing) * 0)}.-right-20{right:calc(var(--spacing) * -20)}.-bottom-20{bottom:calc(var(--spacing) * -20)}.-left-20{left:calc(var(--spacing) * -20)}.z-50{z-index:50}.order-3{order:3}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-20{margin-top:calc(var(--spacing) * 20)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-2{height:calc(var(--spacing) * 2)}.h-56{height:calc(var(--spacing) * 56)}.w-2{width:calc(var(--spacing) * 2)}.w-56{width:calc(var(--spacing) * 56)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.flex-shrink-0{flex-shrink:0}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1{row-gap:calc(var(--spacing) * 1)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.overflow-hidden{overflow:hidden}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[2rem\]{border-radius:2rem}.rounded-full{border-radius:3.40282e38px}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[rgba\(23\,58\,64\,0\.2\)\]{border-color:#173a4033}.border-\[rgba\(50\,143\,151\,0\.3\)\]{border-color:#328f974d}.border-\[var\(--chip-line\)\]{border-color:var(--chip-line)}.border-\[var\(--line\)\]{border-color:var(--line)}.bg-\[rgba\(79\,184\,178\,0\.14\)\]{background-color:#4fb8b224}.bg-\[var\(--chip-bg\)\]{background-color:var(--chip-bg)}.bg-\[var\(--header-bg\)\]{background-color:var(--header-bg)}.bg-white\/50{background-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.bg-white\/50{background-color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.bg-\[linear-gradient\(90deg\,\#56c6be\,\#7ed3bf\)\]{background-image:linear-gradient(90deg,#56c6be,#7ed3bf)}.bg-\[radial-gradient\(circle\,rgba\(47\,106\,74\,0\.18\)\,transparent_66\%\)\]{background-image:radial-gradient(circle,#2f6a4a2e,#0000 66%)}.bg-\[radial-gradient\(circle\,rgba\(79\,184\,178\,0\.32\)\,transparent_66\%\)\]{background-image:radial-gradient(circle,#4fb8b252,#0000 66%)}.p-2{padding:calc(var(--spacing) * 2)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pt-14{padding-top:calc(var(--spacing) * 14)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pb-14{padding-bottom:calc(var(--spacing) * 14)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.font-sans{font-family:var(--font-sans)}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.leading-8{--tw-leading:calc(var(--spacing) * 8);line-height:calc(var(--spacing) * 8)}.leading-\[1\.02\]{--tw-leading:1.02;line-height:1.02}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.text-\[var\(--lagoon-deep\)\]{color:var(--lagoon-deep)}.text-\[var\(--sea-ink\)\]{color:var(--sea-ink)}.text-\[var\(--sea-ink-soft\)\]{color:var(--sea-ink-soft)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shadow-\[0_8px_22px_rgba\(30\,90\,72\,0\.08\)\]{--tw-shadow:0 8px 22px var(--tw-shadow-color,#1e5a4814);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_8px_24px_rgba\(30\,90\,72\,0\.08\)\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#1e5a4814);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.selection\:bg-\[rgba\(79\,184\,178\,0\.24\)\] ::selection{background-color:#4fb8b23d}.selection\:bg-\[rgba\(79\,184\,178\,0\.24\)\]::selection{background-color:#4fb8b23d}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-\[rgba\(23\,58\,64\,0\.35\)\]:hover{border-color:#173a4059}.hover\:bg-\[rgba\(79\,184\,178\,0\.24\)\]:hover{background-color:#4fb8b23d}.hover\:bg-\[var\(--link-bg-hover\)\]:hover{background-color:var(--link-bg-hover)}.hover\:text-\[var\(--sea-ink\)\]:hover{color:var(--sea-ink)}}@media(min-width:40rem){.sm\:order-2{order:2}.sm\:ml-0{margin-left:calc(var(--spacing) * 0)}.sm\:block{display:block}.sm\:w-auto{width:auto}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:gap-2{gap:calc(var(--spacing) * 2)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-4{padding-inline:calc(var(--spacing) * 4)}.sm\:px-10{padding-inline:calc(var(--spacing) * 10)}.sm\:py-2{padding-block:calc(var(--spacing) * 2)}.sm\:py-4{padding-block:calc(var(--spacing) * 4)}.sm\:py-14{padding-block:calc(var(--spacing) * 14)}.sm\:pb-0{padding-bottom:calc(var(--spacing) * 0)}.sm\:text-left{text-align:left}.sm\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.sm\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}@media(min-width:64rem){.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}}:root{--sea-ink:#173a40;--sea-ink-soft:#416166;--lagoon:#4fb8b2;--lagoon-deep:#328f97;--palm:#2f6a4a;--sand:#e7f0e8;--foam:#f3faf5;--surface:#ffffffbd;--surface-strong:#ffffffe6;--line:#173a4024;--inset-glint:#ffffffd1;--kicker:#2f6a4ae6;--bg-base:#e7f3ec;--header-bg:#fbfff8d6;--chip-bg:#fffc;--chip-line:#2f6a4a2e;--link-bg-hover:#ffffffe6;--hero-a:#4fb8b25c;--hero-b:#2f6a4a33}:root[data-theme=dark]{--sea-ink:#d7ece8;--sea-ink-soft:#afcdc8;--lagoon:#60d7cf;--lagoon-deep:#8de5db;--palm:#6ec89a;--sand:#0f1a1e;--foam:#101d22;--surface:#101e22cc;--surface-strong:#0f1b1feb;--line:#8de5db2e;--inset-glint:#c2f7ee24;--kicker:#b8efe5;--bg-base:#0a1418;--header-bg:#0a1418cc;--chip-bg:#0d1c20e6;--chip-line:#8de5db3d;--link-bg-hover:#182c31cc;--hero-a:#60d7cf2e;--hero-b:#6ec89a1f}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--sea-ink:#d7ece8;--sea-ink-soft:#afcdc8;--lagoon:#60d7cf;--lagoon-deep:#8de5db;--palm:#6ec89a;--sand:#0f1a1e;--foam:#101d22;--surface:#101e22cc;--surface-strong:#0f1b1feb;--line:#8de5db2e;--inset-glint:#c2f7ee24;--kicker:#b8efe5;--bg-base:#0a1418;--header-bg:#0a1418cc;--chip-bg:#0d1c20e6;--chip-line:#8de5db3d;--link-bg-hover:#182c31cc;--hero-a:#60d7cf2e;--hero-b:#6ec89a1f}}*{box-sizing:border-box}html,body,#app{min-height:100%}body{color:var(--sea-ink);font-family:var(--font-sans);background-color:var(--bg-base);background:radial-gradient(1100px 620px at -8% -10%,var(--hero-a),transparent 58%),radial-gradient(1050px 620px at 112% -12%,var(--hero-b),transparent 62%),radial-gradient(720px 380px at 50% 115%,#4fb8b21a,transparent 68%),linear-gradient(180deg,var(--sand) 0%,var(--foam) 44%,var(--bg-base) 100%);margin:0}@supports (color:color-mix(in lab,red,red)){body{background:radial-gradient(1100px 620px at -8% -10%,var(--hero-a),transparent 58%),radial-gradient(1050px 620px at 112% -12%,var(--hero-b),transparent 62%),radial-gradient(720px 380px at 50% 115%,#4fb8b21a,transparent 68%),linear-gradient(180deg,color-mix(in oklab,var(--sand) 68%,white) 0%,var(--foam) 44%,var(--bg-base) 100%)}}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden}body:before{content:"";pointer-events:none;z-index:-1;opacity:.28;background:radial-gradient(circle at 20% 15%,#fffc,#0000 34%),radial-gradient(circle at 78% 26%,#4fb8b233,#0000 42%),radial-gradient(circle at 42% 82%,#2f6a4a24,#0000 36%);position:fixed;inset:0}body:after{content:"";pointer-events:none;z-index:-1;opacity:.14;background-image:linear-gradient(#ffffff12 1px,#0000 1px),linear-gradient(90deg,#ffffff0f 1px,#0000 1px);background-size:28px 28px;position:fixed;inset:0;-webkit-mask-image:radial-gradient(circle at 50% 30%,#000,#0000 78%);mask-image:radial-gradient(circle at 50% 30%,#000,#0000 78%)}a{color:var(--lagoon-deep);text-underline-offset:2px;text-decoration-color:#328f9766;text-decoration-thickness:1px}a:hover{color:#246f76}code{border:1px solid var(--line);background:var(--surface-strong);font-size:.9em}@supports (color:color-mix(in lab,red,red)){code{background:color-mix(in oklab,var(--surface-strong) 82%,white 18%)}}code{border-radius:7px;padding:2px 7px}pre code{font-size:inherit;color:inherit;background:0 0;border:0;border-radius:0;padding:0}.page-wrap{width:min(1080px,100% - 2rem);margin-inline:auto}.display-title{font-family:Fraunces,Georgia,serif}.island-shell{border:1px solid var(--line);background:linear-gradient(165deg,var(--surface-strong),var(--surface));box-shadow:0 1px 0 var(--inset-glint) inset,0 22px 44px #1e5a481a,0 6px 18px #173a4014;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.feature-card{background:linear-gradient(165deg,var(--surface-strong),var(--surface))}@supports (color:color-mix(in lab,red,red)){.feature-card{background:linear-gradient(165deg,color-mix(in oklab,var(--surface-strong) 93%,white 7%),var(--surface))}}.feature-card{box-shadow:0 1px 0 var(--inset-glint) inset,0 18px 34px #1e5a481a,0 4px 14px #173a400f}.feature-card:hover{border-color:var(--lagoon-deep);transform:translateY(-2px)}@supports (color:color-mix(in lab,red,red)){.feature-card:hover{border-color:color-mix(in oklab,var(--lagoon-deep) 35%,var(--line))}}button,.island-shell,a{transition:background-color .18s,color .18s,border-color .18s,transform .18s}.island-kicker{letter-spacing:.16em;text-transform:uppercase;color:var(--kicker);font-size:.69rem;font-weight:700}.nav-link{color:var(--sea-ink-soft);align-items:center;text-decoration:none;display:inline-flex;position:relative}.nav-link:after{content:"";transform-origin:0;background:linear-gradient(90deg,var(--lagoon),#7ed3bf);width:100%;height:2px;transition:transform .17s;position:absolute;bottom:-6px;left:0;transform:scaleX(0)}.nav-link:hover,.nav-link.is-active{color:var(--sea-ink)}.nav-link:hover:after,.nav-link.is-active:after{transform:scaleX(1)}@media(max-width:640px){.nav-link:after{bottom:-4px}}.site-footer{border-top:1px solid var(--line);background:var(--header-bg)}@supports (color:color-mix(in lab,red,red)){.site-footer{background:color-mix(in oklab,var(--header-bg) 84%,transparent 16%)}}.rise-in{animation:.7s cubic-bezier(.16,1,.3,1) both rise-in}@keyframes rise-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.formiq-board{flex-direction:column;height:100%;min-height:0;display:flex}.formiq-board__header{border-bottom:1px solid var(--line);background:#fff;flex-wrap:wrap;flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:12px 20px;display:flex}.formiq-board__title{color:var(--sea-ink);font-size:1.25rem;font-weight:700}.formiq-board__actions{align-items:center;gap:10px;display:flex}.formiq-board__button{border:1px solid var(--line);background:var(--lagoon);color:#fff;cursor:pointer;border-radius:999px;padding:10px 16px;font-weight:600}.formiq-board__button:disabled{opacity:.6;cursor:not-allowed}.formiq-board__button--ghost{color:var(--sea-ink);background:0 0}.formiq-board__error{color:#9f1239;background:#d23a3a1a;border:1px solid #d23a3a4d;border-radius:12px;padding:12px 14px;font-weight:600}.formiq-board__empty{border:1px dashed var(--line);color:var(--sea-ink-soft);border-radius:16px;padding:16px}.formiq-board__canvas{flex:1;min-height:0;overflow:hidden}.formiq-board__error,.formiq-board__empty{padding:12px 20px}.formiq-board-workspace{flex:1;min-height:0;display:flex;overflow:hidden}.formiq-board-workspace__sidebar{background:#fff;border-right:1px solid #e5e7eb;flex-shrink:0;width:300px;overflow-y:auto}.formiq-board-workspace__canvas{flex-direction:column;flex:1;min-width:0;display:flex}.formiq-board-workspace__properties{background:#fff;border-left:1px solid #e5e7eb;flex-shrink:0;width:300px;overflow-y:auto}.formiq-board-canvas{flex:1;min-height:0;display:flex}.formiq-board-canvas__stage{background:0 0;flex:1;min-height:600px;overflow:auto}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}
|
package/dist/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),Q=require("@tanstack/react-query"),st=require("axios"),He=require("lodash"),xe=require("use-image"),lt=require("zustand");var ve={exports:{}},ge={};var Ae;function ct(){if(Ae)return ge;Ae=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function n(i,s,l){var h=null;if(l!==void 0&&(h=""+l),s.key!==void 0&&(h=""+s.key),"key"in s){l={};for(var f in s)f!=="key"&&(l[f]=s[f])}else l=s;return s=l.ref,{$$typeof:t,type:i,key:h,ref:s!==void 0?s:null,props:l}}return ge.Fragment=e,ge.jsx=n,ge.jsxs=n,ge}var ye={};var ze;function dt(){return ze||(ze=1,process.env.NODE_ENV!=="production"&&(function(){function t(a){if(a==null)return null;if(typeof a=="function")return a.$$typeof===U?null:a.displayName||a.name||null;if(typeof a=="string")return a;switch(a){case C:return"Fragment";case T:return"Profiler";case y:return"StrictMode";case p:return"Suspense";case L:return"SuspenseList";case O:return"Activity"}if(typeof a=="object")switch(typeof a.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),a.$$typeof){case N:return"Portal";case K:return a.displayName||"Context";case q:return(a._context.displayName||"Context")+".Consumer";case x:var v=a.render;return a=a.displayName,a||(a=v.displayName||v.name||"",a=a!==""?"ForwardRef("+a+")":"ForwardRef"),a;case w:return v=a.displayName||null,v!==null?v:t(a.type)||"Memo";case R:v=a._payload,a=a._init;try{return t(a(v))}catch{}}return null}function e(a){return""+a}function n(a){try{e(a);var v=!1}catch{v=!0}if(v){v=console;var z=v.error,c=typeof Symbol=="function"&&Symbol.toStringTag&&a[Symbol.toStringTag]||a.constructor.name||"Object";return z.call(v,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",c),e(a)}}function i(a){if(a===C)return"<>";if(typeof a=="object"&&a!==null&&a.$$typeof===R)return"<...>";try{var v=t(a);return v?"<"+v+">":"<...>"}catch{return"<...>"}}function s(){var a=D.A;return a===null?null:a.getOwner()}function l(){return Error("react-stack-top-frame")}function h(a){if(V.call(a,"key")){var v=Object.getOwnPropertyDescriptor(a,"key").get;if(v&&v.isReactWarning)return!1}return a.key!==void 0}function f(a,v){function z(){te||(te=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",v))}z.isReactWarning=!0,Object.defineProperty(a,"key",{get:z,configurable:!0})}function S(){var a=t(this.type);return o[a]||(o[a]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),a=this.props.ref,a!==void 0?a:null}function P(a,v,z,c,g,X){var B=z.ref;return a={$$typeof:k,type:a,key:v,props:z,_owner:c},(B!==void 0?B:null)!==null?Object.defineProperty(a,"ref",{enumerable:!1,get:S}):Object.defineProperty(a,"ref",{enumerable:!1,value:null}),a._store={},Object.defineProperty(a._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(a,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(a,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:g}),Object.defineProperty(a,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:X}),Object.freeze&&(Object.freeze(a.props),Object.freeze(a)),a}function j(a,v,z,c,g,X){var B=v.children;if(B!==void 0)if(c)if(J(B)){for(c=0;c<B.length;c++)A(B[c]);Object.freeze&&Object.freeze(B)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else A(B);if(V.call(v,"key")){B=t(a);var re=Object.keys(v).filter(function(ce){return ce!=="key"});c=0<re.length?"{key: someKey, "+re.join(": ..., ")+": ...}":"{key: someKey}",_[B+c]||(re=0<re.length?"{"+re.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
2
2
|
let props = %s;
|
|
3
3
|
<%s {...props} />
|
|
4
4
|
React keys must be passed directly to JSX without using spread:
|
|
5
5
|
let props = %s;
|
|
6
|
-
<%s key={someKey} {...props} />`,R,k,G,k),b[k+R]=!0)}if(k=null,v!==void 0&&(r(v),k=""+v),d(g)&&(r(g.key),k=""+g.key),"key"in g){v={};for(var X in g)X!=="key"&&(v[X]=g[X])}else v=g;return k&&f(v,typeof n=="function"?n.displayName||n.name||"Unknown":n),E(n,k,v,s(),J,ae)}function _(n){I(n)?n._store&&(n._store.validated=1):typeof n=="object"&&n!==null&&n.$$typeof===x&&(n._payload.status==="fulfilled"?I(n._payload.value)&&n._payload.value._store&&(n._payload.value._store.validated=1):n._store&&(n._store.validated=1))}function I(n){return typeof n=="object"&&n!==null&&n.$$typeof===p}var h=c,p=Symbol.for("react.transitional.element"),C=Symbol.for("react.portal"),y=Symbol.for("react.fragment"),u=Symbol.for("react.strict_mode"),P=Symbol.for("react.profiler"),N=Symbol.for("react.consumer"),W=Symbol.for("react.context"),ee=Symbol.for("react.forward_ref"),l=Symbol.for("react.suspense"),q=Symbol.for("react.suspense_list"),j=Symbol.for("react.memo"),x=Symbol.for("react.lazy"),B=Symbol.for("react.activity"),L=Symbol.for("react.client.reference"),T=h.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,$=Object.prototype.hasOwnProperty,V=Array.isArray,z=console.createTask?console.createTask:function(){return null};h={react_stack_bottom_frame:function(n){return n()}};var oe,se={},te=h.react_stack_bottom_frame.bind(h,a)(),F=z(o(a)),b={};ue.Fragment=y,ue.jsx=function(n,g,v){var R=1e4>T.recentlyCreatedOwnerStacks++;return A(n,g,v,!1,R?Error("react-stack-top-frame"):te,R?z(o(n)):F)},ue.jsxs=function(n,g,v){var R=1e4>T.recentlyCreatedOwnerStacks++;return A(n,g,v,!0,R?Error("react-stack-top-frame"):te,R?z(o(n)):F)}})()),ue}var Se;function Qe(){return Se||(Se=1,process.env.NODE_ENV==="production"?ge.exports=Ke():ge.exports=He()),ge.exports}var w=Qe();let Ie=null;function me(){return Ie}function we(e){Ie=e}function Ge(){we(null)}let je=null;function Oe(e){const t=(e??"").trim();je=t.length?t:null}function De(){return je}function Ve(e){const t=De()??"http://localhost:3000/api/external",r=We.create({baseURL:t,headers:{"Content-Type":"application/json"},withCredentials:!1});return r.interceptors.request.use(o=>{const s=e?.();return s&&(o.headers.Authorization=`Bearer ${s}`),o}),r}const Z=Ve(me),Je=async e=>{if(!e)throw new Error("token must be provided");return(await Z.get("/integrations/validate-pat",{headers:{Authorization:`Bearer ${e}`}})).data},Xe=async e=>{if(!e)throw new Error("boardId must be provided");return(await Z.get(`/boards/${e}`)).data},Ze=async e=>{if(!e)throw new Error("boardId must be provided");return(await Z.get(`/canvas-elements/${e}`)).data.canvasElements},et=async e=>(await Z.post("/canvas-elements",e)).data.canvasElement,tt=async e=>{await Z.delete(`/canvas-elements/${e}`)},rt=async e=>{if(!e)throw new Error("boardId must be provided");return(await Z.post(`/boards/${e}/produce`)).data},nt=async(e,t)=>{if(!e||!t)throw new Error("boardId and jobId must be provided");return(await Z.get(`/boards/${e}/produce/jobs/${t}`)).data};function Ne(e,t){const r=t?.enabled??!0;return K.useQuery({queryKey:["board-editor",e],queryFn:async()=>{if(!e)throw new Error("Missing board id");return Xe(e)},enabled:!!e&&r,retry:(o,s)=>{const a=s.response?.status;return a===401||a===403?!1:a===404?o<3:o<2},retryDelay:(o,s)=>s.response?.status===404?Math.min(300*2**o,2e3):Math.min(1e3*2**o,8e3),refetchOnWindowFocus:!1,refetchOnReconnect:!1,staleTime:3e4})}const it=250;function ot(e){return typeof e.id=="number"?`id:${e.id}`:e.clientId?`client:${e.clientId}`:typeof e.canvasElementConfigId=="number"?`cfg:${e.canvasElementConfigId}`:`fallback:${e.type}:${e.variableName??""}`}function xe(e,t){const r=t?.canEdit??!0,o=t?.enabled??!0,s=K.useQueryClient(),a=c.useRef(new Map),d=c.useRef(new Map),{data:f}=K.useQuery({queryKey:["canvas-elements",e],queryFn:async()=>Ze(e),enabled:!!e&&o,retry:(h,p)=>{const C=p.response?.status;return C===401||C===403||C===404?!1:h<1},refetchOnWindowFocus:!1,refetchOnReconnect:!1}),{mutate:m}=K.useMutation({mutationFn:et,onSuccess:h=>{h.id&&s.setQueryData(["canvas-elements",e],(p=[])=>p.some(y=>y.id===h.id)?p.map(y=>y.id===h.id?h:y):[...p,h])}}),E=c.useCallback(h=>{if(!r){a.current.delete(h);return}const p=a.current.get(h);p&&(a.current.delete(h),m(p.element,{onSuccess:C=>{p.element.id||p.onCreated?.(C.id,C.canvasElementConfigId)}}))},[r,m]),A=c.useCallback((h,p,C)=>{if(!r)return;const y=ot(h);a.current.set(y,{element:h,onCreated:p});let u=d.current.get(y);if(u||(u=$e.debounce(()=>E(y),it),d.current.set(y,u)),C?.immediate){u.cancel(),E(y);return}u()},[r,E]);c.useEffect(()=>{const h=d.current,p=a.current;return()=>{for(const C of h.values())C.cancel();h.clear(),p.clear()}},[]);const{mutate:_}=K.useMutation({mutationFn:tt,onSuccess:()=>{s.invalidateQueries({queryKey:["canvas-elements",e]})}}),I=c.useCallback((h,p)=>{r&&_(h,p)},[r,_]);return{canvasElements:f,upsertCanvasElement:A,deleteCanvasElement:I}}const st=2e3,at=2;function _e(e){return`produce-active-job:${e}`}function Re(e){return e==="QUEUED"||e==="PROCESSING"}function Ce(e){const t=e.response?.data.error;return t&&t.length>0?t:e.message||"Failed to process PDF generation"}function qe(e){const t=K.useQueryClient(),[r,o]=c.useState({}),s=c.useCallback((u,P)=>{if(typeof window>"u")return;const N=_e(u);if(P){window.localStorage.setItem(N,P);return}window.localStorage.removeItem(N)},[]),a=c.useCallback((u,P=e)=>{P&&(o(N=>{const W={...N};return u?W[P]=u:delete W[P],W}),s(P,u))},[e,s]),d=e?r[e]??(typeof window>"u"?null:window.localStorage.getItem(_e(e))):null,f=K.useMutation({onMutate:()=>{a(null)},mutationFn:async()=>{if(!e)throw new Error("Missing board id");return rt(e)},onSuccess:u=>{a(u.jobId)},onSettled:async()=>{await t.invalidateQueries({queryKey:["billing","summary"]})}}),m=K.useQuery({queryKey:["produce-status",e,d],queryFn:async()=>{if(!e||!d)throw new Error("Missing board or job id");const u=await nt(e,d);return u.jobId&&u.jobId!==d&&a(u.jobId),u},enabled:!!(e&&d),refetchInterval:u=>{const P=u.state.data?.status;return P&&Re(P)?st:!1},retry:(u,P)=>{if(P.response?.status===404){const N=u<at;return N||a(null),N}return u<3},retryDelay:(u,P)=>P.response?.status===404?Math.min(500*2**u,4e3):Math.min(1e3*2**u,8e3)});c.useEffect(()=>{const u=m.data?.status;u!=="READY"&&u!=="FAILED"||t.invalidateQueries({queryKey:["billing","summary"]})},[m.data?.status,e,d,t]);const E=m.data?.status??f.data?.status??null,A=(()=>{const u=f.error;return u?u.response?.status!==422?[]:u.response?.data.missing??[]:[]})(),_=(()=>{const u=f.error;return!u||u.response?.status!==409?null:u.response?.data.jobId??null})(),I=c.useMemo(()=>m.error?Ce(m.error):f.error?Ce(f.error):m.data?.errorMessage??null,[m.error,m.data,f.error]),h=Re(E),p=m.data?.progress??f.data?.progress??0,C=c.useCallback(u=>{a(u)},[a]),y=c.useCallback(()=>{a(null)},[a]);return{activeJobId:d,status:E,progress:p,isGenerating:h,isTriggering:f.isPending,isPolling:m.isFetching,downloadUrl:m.data?.downloadUrl,errorMessage:I,missingPrerequisites:A,conflictJobId:_,triggerGeneration:f.mutateAsync,refetchStatus:m.refetch,resumeFromJobId:C,clearActiveJob:y}}function ct(e){const t={id:crypto.randomUUID(),x:220,y:140,width:220,height:40,rotation:0},r={fontFamily:"Poppins",fontWeight:"bold",italic:!1,underline:!1,fontSize:28,textAlign:"left",color:"#ffffff",opacity:1,coordinateSpace:"page"};switch(e){case"text":return{...t,type:e,text:"{{Variable_name}}",width:240,height:36,zIndex:0,properties:{...r,fontWeight:"bold",color:"#000000",bindingKey:"Variable_name"}};case"qr_code":return{...t,type:e,width:100,height:100,zIndex:0,data:"https://upload.wikimedia.org/wikipedia/commons/d/d0/QR_code_for_mobile_English_Wikipedia.svg",properties:{...r,fontWeight:"normal",color:"#000000",bindingKey:"qr_data",data:"https://upload.wikimedia.org/wikipedia/commons/d/d0/QR_code_for_mobile_English_Wikipedia.svg"}};case"bar_code":return{...t,type:e,width:240,height:32,zIndex:0,data:"BULK-0001",properties:{...r,fontWeight:"normal",color:"#000000",bindingKey:"barcode_data",data:"BULK-0001"}};case"image":return{...t,type:e,width:190,height:120,zIndex:0,src:"/logo.png",properties:{...r,fontWeight:"normal",color:"#000000",src:"/logo.png"}}}}const U=Ye.create(e=>({elements:[],selectedId:null,dataSourceMeta:null,colorEyedropped:null,colorEyedropperActive:!1,setColorEyedropped:t=>e({colorEyedropped:t}),setColorEyedropperActive:t=>e({colorEyedropperActive:t}),addElement:t=>{const r=ct(t);e(o=>({elements:[...o.elements,r],selectedId:r.id}))},updateElement:(t,r)=>e(o=>({elements:o.elements.map(s=>s.id===t?{...s,...r}:s)})),updateElementProperties:(t,r)=>e(o=>({elements:o.elements.map(s=>s.id===t?{...s,properties:{...s.properties,...r}}:s)})),updateDimensions:(t,r)=>e(o=>({elements:o.elements.map(s=>s.id===t?{...s,...r}:s)})),removeElement:t=>e(r=>({elements:r.elements.filter(o=>o.id!==t),selectedId:r.selectedId===t?null:r.selectedId})),bringForward:t=>e(r=>({elements:r.elements.map(o=>o.id===t?{...o,zIndex:o.zIndex+1}:o)})),sendBackward:t=>e(r=>({elements:r.elements.map(o=>o.id===t?{...o,zIndex:Math.max(0,o.zIndex-1)}:o)})),setSelectedId:t=>e({selectedId:t}),setDataSourceMeta:t=>e({dataSourceMeta:t}),mergeElements:t=>e(r=>{const o=new Set(r.elements.map(a=>a.dbId).filter(a=>a!==void 0)),s=t.filter(a=>a.dbId!==void 0&&!o.has(a.dbId));return s.length===0?r:{elements:[...r.elements,...s]}}),setElements:t=>e(r=>{if(!r.selectedId)return{elements:t,selectedId:null};const o=t.find(a=>a.id===r.selectedId);if(o)return{elements:t,selectedId:o.id};const s=r.elements.find(a=>a.id===r.selectedId);if(s?.dbId){const a=t.find(d=>d.dbId===s.dbId);return{elements:t,selectedId:a?.id??null}}return{elements:t,selectedId:null}}),assetUrl:null,setAssetUrl:t=>e({assetUrl:t})}));function ze(e,t){const r=t?.canEdit??!0,{upsertCanvasElement:o}=xe(e,{canEdit:r}),s=U(l=>l.updateElement),a=c.useRef(null),d=c.useRef(null),[f,m]=c.useState({width:800,height:600}),[E,A]=c.useState(1),[_,I]=c.useState({x:0,y:0}),h=c.useRef(!1),p=c.useRef(null);c.useEffect(()=>{if(!d.current)return;const l=new ResizeObserver(()=>{const q=Math.max(d.current?.clientWidth??0,400),j=Math.max(d.current?.clientHeight??0,320),x=typeof window<"u"?window.innerHeight:900,B=Math.max(x-220,480);m({width:q,height:Math.min(j,B)})});return l.observe(d.current),()=>l.disconnect()},[]);const C=c.useCallback(l=>{const q=a.current;if(!q)return;l.evt.preventDefault();const j=E,x=q.getPointerPosition();if(!x)return;const B=1.08,L=Math.min(2.4,Math.max(.5,l.evt.deltaY>0?j/B:j*B)),T={x:(x.x-_.x)/j,y:(x.y-_.y)/j},$={x:x.x-T.x*L,y:x.y-T.y*L};A(L),I($)},[E,_]),y=c.useCallback(l=>{l.target===l.target.getStage()&&(h.current=!0,p.current=a.current?.getPointerPosition()??null)},[]),u=c.useCallback(()=>{if(!h.current)return;const l=a.current?.getPointerPosition();if(!l||!p.current)return;const q=l.x-p.current.x,j=l.y-p.current.y;I(x=>({x:x.x+q,y:x.y+j})),p.current=l},[]),P=c.useCallback(()=>{h.current=!1,p.current=null},[]),N=c.useCallback(l=>{d.current=l},[]),W=c.useCallback((l,q,j,x=l.properties)=>{r&&(s(l.id,{x:q,y:j}),o({id:l.dbId,clientId:l.id,canvasElementConfigId:l.configDbId,boardId:e,type:l.type,x:q,y:j,rotation:l.rotation,width:l.width,height:l.height,zIndex:l.zIndex,properties:x},(B,L)=>s(l.id,{dbId:B,configDbId:L}),{immediate:!0}))},[r,o,s,e]),ee=c.useCallback((l,q,j=l.properties)=>{if(!r)return;const{x,y:B,width:L,height:T,rotation:$}=q;s(l.id,{x,y:B,rotation:$,width:L,height:T}),o({id:l.dbId,clientId:l.id,canvasElementConfigId:l.configDbId,boardId:e,type:l.type,x,y:B,rotation:$,width:L,height:T,zIndex:l.zIndex,properties:j},(V,z)=>s(l.id,{dbId:V,configDbId:z}),{immediate:!0})},[r,o,s,e]);return{stageRef:a,registerContainer:N,stageSize:f,stageScale:E,stagePosition:_,handleMouseDown:y,handleMouseMove:u,handleMouseUp:P,handleWheel:C,setStagePosition:I,handleDragEnd:W,handleTransformEnd:ee}}const Pe={width:595.28,height:841.89};function D(e){return!Number.isFinite(e)||e<=0?1:e}function Te(e){return e*72/25.4}function dt(e){let t;if(!e?.paperSize||e.paperSize==="A4")t=Pe;else if(e.paperSize==="Long")t={width:612,height:1008};else if(e.paperSize==="Short")t={width:612,height:792};else if(e.paperSize==="Custom"){const r=e.customWidthMm??210,o=e.customHeightMm??297;t={width:Te(r),height:Te(o)}}else t=Pe;return e?.orientation==="LANDSCAPE"?{width:t.height,height:t.width}:t}function ut(e,t){const r=Math.max(1,Math.min(e.width,t.width)),o=Math.max(1,Math.min(e.height,t.height));return{x:Math.max(0,Math.min(e.x,t.width-r)),y:Math.max(0,Math.min(e.y,t.height-o)),width:r,height:o}}function Me(e,t,r){const o=D(r.width),s=D(r.height),a=D(t.width),d=D(t.height);return{x:t.x+e.x/o*a,y:t.y+e.y/s*d,width:e.width/o*a,height:e.height/s*d}}function ye(e,t,r){const o=D(r.width),s=D(r.height),a=D(t.width),d=D(t.height),f={x:(e.x-t.x)/a*o,y:(e.y-t.y)/d*s,width:e.width/a*o,height:e.height/d*s};return ut(f,r)}function Ae(e,t,r){return ye(e,t,r)}function lt(e,t){const r=e.width*.8,o=e.height*.75,s=D(t.width)/D(t.height);let a=r,d=a/s;d>o&&(d=o,a=d*s);const f=(e.height-d)/2;return{x:(e.width-a)/2,y:Math.max(e.height*.1,f),width:a,height:d}}function ht(e,t){const r=t.width??e.width*.8,o=t.height??e.height*.6,s=e.width*.8/D(r),a=e.height*.75/D(o),d=Math.min(s,a,1),f=r*d,m=o*d,E=(e.height-m)/2;return{x:(e.width-f)/2,y:Math.max(e.height*.1,E),width:f,height:m}}function ft(e,t){const r=t.width??e.width,o=t.height??e.height,s=D(e.width),a=D(e.height),d=D(r),f=D(o),m=Math.min(s/d,a/f),E=d*m,A=f*m;return{x:e.x+(s-E)/2,y:e.y+(a-A)/2,width:E,height:A}}function gt({KonvaImage:e,sharedProps:t,src:r,placeholder:o,width:s,height:a,opacity:d}){const[f]=le(r??"","anonymous");return w.jsx(e,{...t,image:r?f:o,width:s,height:a,opacity:d})}const pt=/\.(png|jpe?g|gif|webp|bmp|svg|avif|tiff?)(\?.*)?$/i;function yt(e){return/^https?:\/\//i.test(e)?pt.test(e):!1}const mt={text:"Text",qr_code:"QR Code",bar_code:"Bar Code",image:"Image"},wt=`data:image/svg+xml;utf8,${encodeURIComponent(`
|
|
6
|
+
<%s key={someKey} {...props} />`,c,B,re,B),_[B+c]=!0)}if(B=null,z!==void 0&&(n(z),B=""+z),h(v)&&(n(v.key),B=""+v.key),"key"in v){z={};for(var ie in v)ie!=="key"&&(z[ie]=v[ie])}else z=v;return B&&f(z,typeof a=="function"?a.displayName||a.name||"Unknown":a),P(a,B,z,s(),g,X)}function A(a){E(a)?a._store&&(a._store.validated=1):typeof a=="object"&&a!==null&&a.$$typeof===R&&(a._payload.status==="fulfilled"?E(a._payload.value)&&a._payload.value._store&&(a._payload.value._store.validated=1):a._store&&(a._store.validated=1))}function E(a){return typeof a=="object"&&a!==null&&a.$$typeof===k}var b=u,k=Symbol.for("react.transitional.element"),N=Symbol.for("react.portal"),C=Symbol.for("react.fragment"),y=Symbol.for("react.strict_mode"),T=Symbol.for("react.profiler"),q=Symbol.for("react.consumer"),K=Symbol.for("react.context"),x=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),L=Symbol.for("react.suspense_list"),w=Symbol.for("react.memo"),R=Symbol.for("react.lazy"),O=Symbol.for("react.activity"),U=Symbol.for("react.client.reference"),D=b.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,V=Object.prototype.hasOwnProperty,J=Array.isArray,W=console.createTask?console.createTask:function(){return null};b={react_stack_bottom_frame:function(a){return a()}};var te,o={},M=b.react_stack_bottom_frame.bind(b,l)(),m=W(i(l)),_={};ye.Fragment=C,ye.jsx=function(a,v,z){var c=1e4>D.recentlyCreatedOwnerStacks++;return j(a,v,z,!1,c?Error("react-stack-top-frame"):M,c?W(i(a)):m)},ye.jsxs=function(a,v,z){var c=1e4>D.recentlyCreatedOwnerStacks++;return j(a,v,z,!0,c?Error("react-stack-top-frame"):M,c?W(i(a)):m)}})()),ye}var Ne;function ut(){return Ne||(Ne=1,process.env.NODE_ENV==="production"?ve.exports=ct():ve.exports=dt()),ve.exports}var r=ut();let Ke=null;function _e(){return Ke}function Te(t){Ke=t}function ht(){Te(null)}function pt(t){const n=st.create({baseURL:"https://api.francistinao.com/api/v1",headers:{"Content-Type":"application/json"},withCredentials:!1});return n.interceptors.request.use(i=>{const s=t?.();return s&&(i.headers.Authorization=`Bearer ${s}`),i}),n}const Z=pt(_e),ft=async t=>{if(!t)throw new Error("token must be provided");return(await Z.get("/integrations/validate-pat",{headers:{Authorization:`Bearer ${t}`}})).data},gt=async t=>{if(!t)throw new Error("boardId must be provided");return(await Z.get(`/boards/${t}`)).data},yt=async t=>{if(!t)throw new Error("boardId must be provided");return(await Z.get(`/canvas-elements/${t}`)).data.canvasElements},mt=async t=>(await Z.post("/canvas-elements",t)).data.canvasElement,xt=async t=>{await Z.delete(`/canvas-elements/${t}`)},bt=async t=>{if(!t)throw new Error("boardId must be provided");return(await Z.post(`/boards/${t}/produce`)).data},wt=async(t,e)=>{if(!t||!e)throw new Error("boardId and jobId must be provided");return(await Z.get(`/boards/${t}/produce/jobs/${e}`)).data},vt=async t=>(await Z.post("/canvas-config",t)).data.config,St=async(t,e)=>{await Z.patch(`/boards/${t}/orientation`,{orientation:e})},jt=async(t,e)=>{const{data:n}=await Z.post(`/boards/${t}/asset/signed-url`,e);return n},Ct=async(t,e,n)=>{const i=t.startsWith("http")?t:`${e}${t}`;if(!(await fetch(i,{method:"PUT",headers:{"Content-Type":n.type,"x-upsert":"true"},body:n})).ok)throw new Error("Failed to upload asset to storage")},kt=async(t,e)=>{const{data:n}=await Z.post(`/boards/${t}/asset/confirm`,e);return n},Mt=async t=>(await Z.get(`/data-source/${t}`)).data,Rt=async(t,e)=>{const n=new FormData;return n.append("file",e),(await Z.post(`/data-source/${t}/upload`,n,{headers:{"Content-Type":"multipart/form-data"}})).data};function Pe(t,e){const n=e?.enabled??!0;return Q.useQuery({queryKey:["board-editor",t],queryFn:async()=>{if(!t)throw new Error("Missing board id");return gt(t)},enabled:!!t&&n,retry:(i,s)=>{const l=s.response?.status;return l===401||l===403?!1:l===404?i<3:i<2},retryDelay:(i,s)=>s.response?.status===404?Math.min(300*2**i,2e3):Math.min(1e3*2**i,8e3),refetchOnWindowFocus:!1,refetchOnReconnect:!1,staleTime:3e4})}const _t=250;function Tt(t){return typeof t.id=="number"?`id:${t.id}`:t.clientId?`client:${t.clientId}`:typeof t.canvasElementConfigId=="number"?`cfg:${t.canvasElementConfigId}`:`fallback:${t.type}:${t.variableName??""}`}function ke(t,e){const n=e?.canEdit??!0,i=e?.enabled??!0,s=Q.useQueryClient(),l=u.useRef(new Map),h=u.useRef(new Map),{data:f}=Q.useQuery({queryKey:["canvas-elements",t],queryFn:async()=>yt(t),enabled:!!t&&i,retry:(b,k)=>{const N=k.response?.status;return N===401||N===403||N===404?!1:b<1},refetchOnWindowFocus:!1,refetchOnReconnect:!1}),{mutate:S}=Q.useMutation({mutationFn:mt,onSuccess:b=>{b.id&&s.setQueryData(["canvas-elements",t],(k=[])=>k.some(C=>C.id===b.id)?k.map(C=>C.id===b.id?b:C):[...k,b])}}),P=u.useCallback(b=>{if(!n){l.current.delete(b);return}const k=l.current.get(b);k&&(l.current.delete(b),S(k.element,{onSuccess:N=>{k.element.id||k.onCreated?.(N.id,N.canvasElementConfigId)}}))},[n,S]),j=u.useCallback((b,k,N)=>{if(!n)return;const C=Tt(b);l.current.set(C,{element:b,onCreated:k});let y=h.current.get(C);if(y||(y=He.debounce(()=>P(C),_t),h.current.set(C,y)),N?.immediate){y.cancel(),P(C);return}y()},[n,P]);u.useEffect(()=>{const b=h.current,k=l.current;return()=>{for(const N of b.values())N.cancel();b.clear(),k.clear()}},[]);const{mutate:A}=Q.useMutation({mutationFn:xt,onSuccess:()=>{s.invalidateQueries({queryKey:["canvas-elements",t]})}}),E=u.useCallback((b,k)=>{n&&A(b,k)},[n,A]);return{canvasElements:f,upsertCanvasElement:j,deleteCanvasElement:E}}const Pt=2e3,It=2;function De(t){return`produce-active-job:${t}`}function Be(t){return t==="QUEUED"||t==="PROCESSING"}function Fe(t){const e=t.response?.data.error;return e&&e.length>0?e:t.message||"Failed to process PDF generation"}function Ve(t){const e=Q.useQueryClient(),[n,i]=u.useState({}),s=u.useCallback((y,T)=>{if(typeof window>"u")return;const q=De(y);if(T){window.localStorage.setItem(q,T);return}window.localStorage.removeItem(q)},[]),l=u.useCallback((y,T=t)=>{T&&(i(q=>{const K={...q};return y?K[T]=y:delete K[T],K}),s(T,y))},[t,s]),h=t?n[t]??(typeof window>"u"?null:window.localStorage.getItem(De(t))):null,f=Q.useMutation({onMutate:()=>{l(null)},mutationFn:async()=>{if(!t)throw new Error("Missing board id");return bt(t)},onSuccess:y=>{l(y.jobId)},onSettled:async()=>{await e.invalidateQueries({queryKey:["billing","summary"]})}}),S=Q.useQuery({queryKey:["produce-status",t,h],queryFn:async()=>{if(!t||!h)throw new Error("Missing board or job id");const y=await wt(t,h);return y.jobId&&y.jobId!==h&&l(y.jobId),y},enabled:!!(t&&h),refetchInterval:y=>{const T=y.state.data?.status;return T&&Be(T)?Pt:!1},retry:(y,T)=>{if(T.response?.status===404){const q=y<It;return q||l(null),q}return y<3},retryDelay:(y,T)=>T.response?.status===404?Math.min(500*2**y,4e3):Math.min(1e3*2**y,8e3)});u.useEffect(()=>{const y=S.data?.status;y!=="READY"&&y!=="FAILED"||e.invalidateQueries({queryKey:["billing","summary"]})},[S.data?.status,t,h,e]);const P=S.data?.status??f.data?.status??null,j=(()=>{const y=f.error;return y?y.response?.status!==422?[]:y.response?.data.missing??[]:[]})(),A=(()=>{const y=f.error;return!y||y.response?.status!==409?null:y.response?.data.jobId??null})(),E=u.useMemo(()=>S.error?Fe(S.error):f.error?Fe(f.error):S.data?.errorMessage??null,[S.error,S.data,f.error]),b=Be(P),k=S.data?.progress??f.data?.progress??0,N=u.useCallback(y=>{l(y)},[l]),C=u.useCallback(()=>{l(null)},[l]);return{activeJobId:h,status:P,progress:k,isGenerating:b,isTriggering:f.isPending,isPolling:S.isFetching,downloadUrl:S.data?.downloadUrl,errorMessage:E,missingPrerequisites:j,conflictJobId:A,triggerGeneration:f.mutateAsync,refetchStatus:S.refetch,resumeFromJobId:N,clearActiveJob:C}}function Et(t){const e={id:crypto.randomUUID(),x:220,y:140,width:220,height:40,rotation:0},n={fontFamily:"Poppins",fontWeight:"bold",italic:!1,underline:!1,fontSize:28,textAlign:"left",color:"#ffffff",opacity:1,coordinateSpace:"page"};switch(t){case"text":return{...e,type:t,text:"{{Variable_name}}",width:240,height:36,zIndex:0,properties:{...n,fontWeight:"bold",color:"#000000",bindingKey:"Variable_name"}};case"qr_code":return{...e,type:t,width:100,height:100,zIndex:0,data:"https://upload.wikimedia.org/wikipedia/commons/d/d0/QR_code_for_mobile_English_Wikipedia.svg",properties:{...n,fontWeight:"normal",color:"#000000",bindingKey:"qr_data",data:"https://upload.wikimedia.org/wikipedia/commons/d/d0/QR_code_for_mobile_English_Wikipedia.svg"}};case"bar_code":return{...e,type:t,width:240,height:32,zIndex:0,data:"BULK-0001",properties:{...n,fontWeight:"normal",color:"#000000",bindingKey:"barcode_data",data:"BULK-0001"}};case"image":return{...e,type:t,width:190,height:120,zIndex:0,src:"/logo.png",properties:{...n,fontWeight:"normal",color:"#000000",src:"/logo.png"}}}}const I=lt.create(t=>({elements:[],selectedId:null,dataSourceMeta:null,colorEyedropped:null,colorEyedropperActive:!1,setColorEyedropped:e=>t({colorEyedropped:e}),setColorEyedropperActive:e=>t({colorEyedropperActive:e}),addElement:e=>{const n=Et(e);t(i=>({elements:[...i.elements,n],selectedId:n.id}))},updateElement:(e,n)=>t(i=>({elements:i.elements.map(s=>s.id===e?{...s,...n}:s)})),updateElementProperties:(e,n)=>t(i=>({elements:i.elements.map(s=>s.id===e?{...s,properties:{...s.properties,...n}}:s)})),updateDimensions:(e,n)=>t(i=>({elements:i.elements.map(s=>s.id===e?{...s,...n}:s)})),removeElement:e=>t(n=>({elements:n.elements.filter(i=>i.id!==e),selectedId:n.selectedId===e?null:n.selectedId})),bringForward:e=>t(n=>({elements:n.elements.map(i=>i.id===e?{...i,zIndex:i.zIndex+1}:i)})),sendBackward:e=>t(n=>({elements:n.elements.map(i=>i.id===e?{...i,zIndex:Math.max(0,i.zIndex-1)}:i)})),setSelectedId:e=>t({selectedId:e}),setDataSourceMeta:e=>t({dataSourceMeta:e}),mergeElements:e=>t(n=>{const i=new Set(n.elements.map(l=>l.dbId).filter(l=>l!==void 0)),s=e.filter(l=>l.dbId!==void 0&&!i.has(l.dbId));return s.length===0?n:{elements:[...n.elements,...s]}}),setElements:e=>t(n=>{if(!n.selectedId)return{elements:e,selectedId:null};const i=e.find(l=>l.id===n.selectedId);if(i)return{elements:e,selectedId:i.id};const s=n.elements.find(l=>l.id===n.selectedId);if(s?.dbId){const l=e.find(h=>h.dbId===s.dbId);return{elements:e,selectedId:l?.id??null}}return{elements:e,selectedId:null}}),assetUrl:null,setAssetUrl:e=>t({assetUrl:e})}));function Ye(t,e){const n=e?.canEdit??!0,{upsertCanvasElement:i}=ke(t,{canEdit:n}),s=I(p=>p.updateElement),l=u.useRef(null),h=u.useRef(null),[f,S]=u.useState({width:800,height:600}),[P,j]=u.useState(1),[A,E]=u.useState({x:0,y:0}),b=u.useRef(!1),k=u.useRef(null);u.useEffect(()=>{if(!h.current)return;const p=new ResizeObserver(()=>{const L=Math.max(h.current?.clientWidth??0,400),w=Math.max(h.current?.clientHeight??0,320),R=typeof window<"u"?window.innerHeight:900,O=Math.max(R-220,480);S({width:L,height:Math.min(w,O)})});return p.observe(h.current),()=>p.disconnect()},[]);const N=u.useCallback(p=>{const L=l.current;if(!L)return;p.evt.preventDefault();const w=P,R=L.getPointerPosition();if(!R)return;const O=1.08,U=Math.min(2.4,Math.max(.5,p.evt.deltaY>0?w/O:w*O)),D={x:(R.x-A.x)/w,y:(R.y-A.y)/w},V={x:R.x-D.x*U,y:R.y-D.y*U};j(U),E(V)},[P,A]),C=u.useCallback(p=>{p.target===p.target.getStage()&&(b.current=!0,k.current=l.current?.getPointerPosition()??null)},[]),y=u.useCallback(()=>{if(!b.current)return;const p=l.current?.getPointerPosition();if(!p||!k.current)return;const L=p.x-k.current.x,w=p.y-k.current.y;E(R=>({x:R.x+L,y:R.y+w})),k.current=p},[]),T=u.useCallback(()=>{b.current=!1,k.current=null},[]),q=u.useCallback(p=>{h.current=p},[]),K=u.useCallback((p,L,w,R=p.properties)=>{n&&(s(p.id,{x:L,y:w}),i({id:p.dbId,clientId:p.id,canvasElementConfigId:p.configDbId,boardId:t,type:p.type,x:L,y:w,rotation:p.rotation,width:p.width,height:p.height,zIndex:p.zIndex,properties:R},(O,U)=>s(p.id,{dbId:O,configDbId:U}),{immediate:!0}))},[n,i,s,t]),x=u.useCallback((p,L,w=p.properties)=>{if(!n)return;const{x:R,y:O,width:U,height:D,rotation:V}=L;s(p.id,{x:R,y:O,rotation:V,width:U,height:D}),i({id:p.dbId,clientId:p.id,canvasElementConfigId:p.configDbId,boardId:t,type:p.type,x:R,y:O,rotation:V,width:U,height:D,zIndex:p.zIndex,properties:w},(J,W)=>s(p.id,{dbId:J,configDbId:W}),{immediate:!0})},[n,i,s,t]);return{stageRef:l,registerContainer:q,stageSize:f,stageScale:P,stagePosition:A,handleMouseDown:C,handleMouseMove:y,handleMouseUp:T,handleWheel:N,setStagePosition:E,handleDragEnd:K,handleTransformEnd:x}}const Le={width:595.28,height:841.89};function G(t){return!Number.isFinite(t)||t<=0?1:t}function Oe(t){return t*72/25.4}function At(t){let e;if(!t?.paperSize||t.paperSize==="A4")e=Le;else if(t.paperSize==="Long")e={width:612,height:1008};else if(t.paperSize==="Short")e={width:612,height:792};else if(t.paperSize==="Custom"){const n=t.customWidthMm??210,i=t.customHeightMm??297;e={width:Oe(n),height:Oe(i)}}else e=Le;return t?.orientation==="LANDSCAPE"?{width:e.height,height:e.width}:e}function zt(t,e){const n=Math.max(1,Math.min(t.width,e.width)),i=Math.max(1,Math.min(t.height,e.height));return{x:Math.max(0,Math.min(t.x,e.width-n)),y:Math.max(0,Math.min(t.y,e.height-i)),width:n,height:i}}function $e(t,e,n){const i=G(n.width),s=G(n.height),l=G(e.width),h=G(e.height);return{x:e.x+t.x/i*l,y:e.y+t.y/s*h,width:t.width/i*l,height:t.height/s*h}}function Ce(t,e,n){const i=G(n.width),s=G(n.height),l=G(e.width),h=G(e.height),f={x:(t.x-e.x)/l*i,y:(t.y-e.y)/h*s,width:t.width/l*i,height:t.height/h*s};return zt(f,n)}function qe(t,e,n){return Ce(t,e,n)}function Nt(t,e){const n=t.width*.8,i=t.height*.75,s=G(e.width)/G(e.height);let l=n,h=l/s;h>i&&(h=i,l=h*s);const f=(t.height-h)/2;return{x:(t.width-l)/2,y:Math.max(t.height*.1,f),width:l,height:h}}function Dt(t,e){const n=e.width??t.width*.8,i=e.height??t.height*.6,s=t.width*.8/G(n),l=t.height*.75/G(i),h=Math.min(s,l,1),f=n*h,S=i*h,P=(t.height-S)/2;return{x:(t.width-f)/2,y:Math.max(t.height*.1,P),width:f,height:S}}function Bt(t,e){const n=e.width??t.width,i=e.height??t.height,s=G(t.width),l=G(t.height),h=G(n),f=G(i),S=Math.min(s/h,l/f),P=h*S,j=f*S;return{x:t.x+(s-P)/2,y:t.y+(l-j)/2,width:P,height:j}}function Ft({KonvaImage:t,sharedProps:e,src:n,placeholder:i,width:s,height:l,opacity:h}){const[f]=xe(n??"","anonymous");return r.jsx(t,{...e,image:n?f:i,width:s,height:l,opacity:h})}const Lt=/\.(png|jpe?g|gif|webp|bmp|svg|avif|tiff?)(\?.*)?$/i;function Ot(t){return/^https?:\/\//i.test(t)?Lt.test(t):!1}const $t={text:"Text",qr_code:"QR Code",bar_code:"Bar Code",image:"Image"},qt=`data:image/svg+xml;utf8,${encodeURIComponent(`
|
|
7
7
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120">
|
|
8
8
|
<rect width="120" height="120" fill="#ffffff"/>
|
|
9
9
|
<rect x="8" y="8" width="32" height="32" fill="#111827"/>
|
|
@@ -24,7 +24,7 @@ React keys must be passed directly to JSX without using spread:
|
|
|
24
24
|
<rect x="74" y="86" width="8" height="8" fill="#111827"/>
|
|
25
25
|
<rect x="94" y="74" width="8" height="8" fill="#111827"/>
|
|
26
26
|
</svg>
|
|
27
|
-
`)}`,
|
|
27
|
+
`)}`,Ut=`data:image/svg+xml;utf8,${encodeURIComponent(`
|
|
28
28
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 80">
|
|
29
29
|
<rect width="240" height="80" fill="#ffffff"/>
|
|
30
30
|
<g fill="#111827">
|
|
@@ -56,7 +56,7 @@ React keys must be passed directly to JSX without using spread:
|
|
|
56
56
|
</g>
|
|
57
57
|
<text x="120" y="74" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" fill="#6b7280">123456789012</text>
|
|
58
58
|
</svg>
|
|
59
|
-
`)}`,
|
|
59
|
+
`)}`,Wt=`data:image/svg+xml;utf8,${encodeURIComponent(`
|
|
60
60
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100">
|
|
61
61
|
<rect width="160" height="100" fill="#f3f4f6"/>
|
|
62
62
|
<rect x="6" y="6" width="148" height="88" rx="8" fill="#ffffff" stroke="#cbd5e1" stroke-width="2"/>
|
|
@@ -64,4 +64,4 @@ React keys must be passed directly to JSX without using spread:
|
|
|
64
64
|
<path d="M20 78 L58 50 L78 66 L98 56 L138 78 Z" fill="#cbd5e1"/>
|
|
65
65
|
<path d="M20 78 L44 62 L62 74 L84 58 L118 78 Z" fill="#9ca3af" opacity="0.9"/>
|
|
66
66
|
</svg>
|
|
67
|
-
`)}`;function vt({boardId:e,board:t,canEdit:r=!0}){const[o,s]=c.useState(null),[a,d]=c.useState(!1);c.useEffect(()=>{let i=!0;return d(!0),Promise.resolve().then(()=>require("./ReactKonva-1JK3FbjU.cjs")).then(O=>{i&&s(O)}),()=>{i=!1}},[]);const f=o?.Image,{registerContainer:m,stageRef:E,stageSize:A,stageScale:_,stagePosition:I,handleMouseDown:h,handleMouseMove:p,handleMouseUp:C,handleWheel:y,handleDragEnd:u,handleTransformEnd:P}=ze(e,{canEdit:r}),N=U(i=>i.elements),W=U(i=>i.selectedId),ee=U(i=>i.setSelectedId),l=U(i=>i.updateElement),q=U(i=>i.assetUrl),j=U(i=>i.dataSourceMeta),x=U(i=>i.colorEyedropperActive),B=U(i=>i.setColorEyedropped),L=U(i=>i.setColorEyedropperActive),T=c.useMemo(()=>N.find(i=>i.id===W)??null,[N,W]),$=c.useRef(0),V=c.useCallback(i=>{ee(i)},[ee]),[z]=le(q??"","anonymous"),[oe]=le(wt,"anonymous"),[se]=le(xt,"anonymous"),[te]=le(bt,"anonymous"),F=c.useMemo(()=>dt({...t?.config,orientation:t?.orientation}),[t?.config,t?.orientation]),b=c.useMemo(()=>lt(A,F),[A,F]),n=c.useMemo(()=>ht(A,{width:z?.width,height:z?.height}),[A,z]),g=c.useMemo(()=>z?ft(b,{width:z.width,height:z.height}):b,[z,b]),v=c.useMemo(()=>{if(!T)return null;const i=T.properties.coordinateSpace==="page"?{x:T.x,y:T.y,width:T.width,height:T.height}:Ae({x:T.x,y:T.y,width:T.width,height:T.height},n,F);return Me(i,b,F)},[T,n,F,b]),R=c.useMemo(()=>({x:b.x+10,y:b.y+10,width:b.width-20,height:b.height-20}),[b]),J=c.useCallback(i=>{if(!x)return!1;const O=E.current,M=O?.getPointerPosition(),Q=O?.getLayers()[0]?.getNativeCanvasElement(),ce=Q?.getContext("2d");if(i.cancelBubble=!0,i.evt.preventDefault(),!O||!M||!Q||!ce)return!0;const be=Math.max(0,Math.min(Q.width-1,Math.round(M.x/Math.max(1,O.width())*Q.width))),Y=Math.max(0,Math.min(Q.height-1,Math.round(M.y/Math.max(1,O.height())*Q.height))),[S,ne,H,fe]=ce.getImageData(be,Y,1,1).data;return fe===0||($.current=Date.now()+250,B(`#${[S,ne,H].map(Le=>Le.toString(16).padStart(2,"0")).join("")}`),L(!1)),!0},[x,B,L,E]),ae=c.useCallback(i=>{if(!f)return null;const O=i.properties.coordinateSpace==="page"?{x:i.x,y:i.y,width:i.width,height:i.height}:Ae({x:i.x,y:i.y,width:i.width,height:i.height},n,F),M=Me(O,b,F),re={id:i.id,x:M.x,y:M.y,width:M.width,height:M.height,draggable:r&&!x,onClick:()=>{Date.now()<$.current||x||V(i.id)},onTap:()=>{Date.now()<$.current||x||V(i.id)},onDragEnd:Y=>{if(!r||x)return;const S=ye({x:Y.target.x(),y:Y.target.y(),width:M.width,height:M.height},b,F),ne={...i.properties,coordinateSpace:"page"};l(i.id,{x:S.x,y:S.y,width:S.width,height:S.height,properties:ne}),u(i,S.x,S.y,ne)},onDragMove:Y=>{if(!r||x)return;const S=ye({x:Y.target.x(),y:Y.target.y(),width:M.width,height:M.height},b,F);l(i.id,{x:S.x,y:S.y,width:S.width,height:S.height,properties:{...i.properties,coordinateSpace:"page"}})},onTransformEnd:Y=>{if(!r||x)return;const S=Y.target,ne={x:S.x(),y:S.y(),width:S.width()*S.scaleX(),height:S.height()*S.scaleY()};S.scaleX(1),S.scaleY(1);const H=ye(ne,b,F),fe={...i.properties,coordinateSpace:"page"};l(i.id,{x:H.x,y:H.y,width:H.width,height:H.height,properties:fe}),P(i,{x:H.x,y:H.y,width:H.width,height:H.height,rotation:S.rotation()},fe)}},Q=typeof i.properties.bindingKey=="string"?i.properties.bindingKey:null,ce=Q?j?.previewRow[Q]??null:null;if(ce?yt(ce):!1)return w.jsx(f,{...re,image:te??void 0,width:M.width,height:M.height,opacity:i.properties.opacity},i.id);if(i.type==="text"){const Y=[i.properties.fontWeight,i.properties.italic?"italic":""].join(" ").trim(),S=i.properties.underline?"underline":"";return w.jsx(he,{...re,text:i.text??"{{Text}}",fontSize:i.properties.fontSize,fontFamily:i.properties.fontFamily,fontStyle:Y,textDecoration:S,fill:i.properties.color,padding:8,align:i.properties.textAlign,verticalAlign:"middle",opacity:i.properties.opacity},i.id)}return i.type==="qr_code"?w.jsx(f,{...re,image:oe??void 0,width:M.width,height:M.height,opacity:i.properties.opacity},i.id):i.type==="bar_code"?w.jsx(f,{...re,image:se??void 0,width:M.width,height:M.height,opacity:i.properties.opacity},i.id):w.jsx(gt,{KonvaImage:f,sharedProps:re,src:i.properties.src??i.src,placeholder:te??void 0,width:M.width,height:M.height,opacity:i.properties.opacity},i.id)},[V,u,P,l,b,F,n,oe,se,te,r,j,x,f]);if(!a||!o||!f)return w.jsx("div",{className:"formiq-board-canvas formiq-board-canvas--loading"});const{Stage:k,Layer:G,Rect:X,Text:he,Label:Ue,Tag:Be,Transformer:Fe}=o;return w.jsx("div",{className:"formiq-board-canvas",children:w.jsx("div",{id:"formiq-board-canvas",ref:m,className:"formiq-board-canvas__stage",style:{backgroundColor:"#f3f5fb",backgroundImage:"radial-gradient(rgba(15,23,42,0.12) 1.7px, transparent 1px)",backgroundSize:"32px 32px",cursor:x?"crosshair":"default"},children:w.jsx(k,{ref:E,width:A.width,height:A.height,x:I.x,y:I.y,scaleX:_,scaleY:_,onWheel:y,onMouseDown:i=>{J(i)||h(i)},onMouseMove:p,onMouseUp:C,onTouchStart:J,onTouchEnd:C,onMouseLeave:C,onTouchMove:p,children:w.jsxs(G,{children:[w.jsx(X,{x:b.x,y:b.y,width:b.width,height:b.height,cornerRadius:20,fill:"#ffffff",shadowColor:"#0f172a",shadowBlur:16,shadowOpacity:.12}),z?w.jsx(f,{image:z,x:g.x,y:g.y,width:g.width,height:g.height,cornerRadius:20}):w.jsx(X,{x:b.x,y:b.y,width:b.width,height:b.height,cornerRadius:20,fillLinearGradientColorStops:[0,"#03072b",.55,"#0b2b64",1,"#031a4c"],shadowColor:"#0f172a",shadowBlur:40}),w.jsx(X,{x:R.x,y:R.y,width:R.width,height:R.height,cornerRadius:18,stroke:"#7dd3fc",strokeWidth:2,dash:[10,6],opacity:.5}),N.slice().sort((i,O)=>i.zIndex-O.zIndex).map(i=>ae(i)),T&&v&&w.jsxs(Ue,{x:Math.max(v.x,0),y:Math.max(v.y-28,0),listening:!1,children:[w.jsx(Be,{fill:"#2563eb",cornerRadius:4}),w.jsx(he,{text:mt[T.type],fontSize:12,fill:"#fff",padding:6})]}),r&&W&&w.jsx(Fe,{ref:i=>{if(!i)return;const M=i.getStage()?.findOne(`#${W}`);i.nodes(M?[M]:[])},boundBoxFunc:(i,O)=>({...O,width:Math.max(O.width,20),height:Math.max(O.height,20)})})]})})})})}const ie={fontFamily:"Poppins",italic:!1,underline:!1,fontSize:24,color:"#ffffff",opacity:1};function Et(e){return e==="center"||e==="right"?e:"left"}function St(e){return e==="bold"?"bold":"normal"}function pe(e,t=!1){return typeof e=="boolean"?e:t}function ke(e){const t=e.properties??{},r={fontFamily:typeof t.fontFamily=="string"?t.fontFamily:ie.fontFamily,fontWeight:St(t.fontWeight),italic:pe(t.italic,pe(t.isItalicText,ie.italic)),underline:pe(t.underline,pe(t.isUnderlineText,ie.underline)),fontSize:typeof t.fontSize=="number"?t.fontSize:ie.fontSize,textAlign:Et(t.textAlign),color:typeof t.color=="string"?t.color:ie.color,opacity:typeof t.opacity=="number"?t.opacity:ie.opacity,coordinateSpace:t.coordinateSpace==="page"?"page":"stage",bindingKey:typeof t.bindingKey=="string"?t.bindingKey:typeof t.bindingKey=="number"?String(t.bindingKey):void 0,data:typeof t.data=="string"?t.data:typeof e.data=="string"?e.data:void 0,src:typeof t.src=="string"?t.src:typeof e.src=="string"?e.src:void 0,isIncrementalVariable:typeof t.isIncrementalVariable=="boolean"?t.isIncrementalVariable:!1,generationType:t.generationType==="alphanumeric"||t.generationType==="integer"?t.generationType:void 0,incrementCount:typeof t.incrementCount=="number"&&Number.isFinite(t.incrementCount)?t.incrementCount:void 0,incrementStart:typeof t.incrementStart=="number"&&Number.isFinite(t.incrementStart)?t.incrementStart:void 0,incrementPadLength:typeof t.incrementPadLength=="number"&&Number.isFinite(t.incrementPadLength)?t.incrementPadLength:void 0,incrementSeed:typeof t.incrementSeed=="string"?t.incrementSeed:void 0};return{id:e.id.toString(),dbId:e.id,configDbId:e.canvasElementConfigId,type:e.type,x:e.x,y:e.y,rotation:e.rotation??0,width:e.width,height:e.height,zIndex:e.zIndex,generationType:r.generationType,text:typeof t.text=="string"?t.text:e.type==="text"&&r.bindingKey?`{{${r.bindingKey}}}`:void 0,data:r.data,src:r.src,properties:r}}function _t(e){if(!e)return null;const t=Array.isArray(e.columnHeaders)?e.columnHeaders:[],r=Array.isArray(e.parsedData)&&e.parsedData.length?e.parsedData[0]:{};return{columnHeaders:t,previewRow:r}}function Rt({boardId:e,canEdit:t=!0}){const[r,o]=c.useState(null),[s,a]=c.useState(!1),d=U(y=>y.setElements),f=U(y=>y.mergeElements),m=U(y=>y.setDataSourceMeta),E=U(y=>y.setAssetUrl),A=c.useRef(!1);c.useEffect(()=>{const y=me();o(y),a(!0)},[]);const _=Ne(e,{enabled:!!(s&&r)}),{canvasElements:I}=xe(e,{enabled:!!(s&&r)}),h=qe(e),p=c.useMemo(()=>_.data?_.data.board.boardName:"Board",[_.data]);c.useEffect(()=>{if(!_.data?.board){d([]),m(null),E(null);return}const{board:y}=_.data;m(_t(y.dataSource)),E(y.asset?.fileUrl??null)},[_.data,d,m,E]),c.useEffect(()=>{if(I){if(!A.current){d(I.map(ke)),A.current=!0;return}f(I.map(ke))}},[I,d,f]);async function C(){if(h.status==="READY"&&h.downloadUrl){window.open(h.downloadUrl,"_blank","noopener,noreferrer");return}await h.triggerGeneration()}return w.jsxs("div",{className:"formiq-board",children:[w.jsxs("div",{className:"formiq-board__header",children:[w.jsx("div",{className:"formiq-board__title",children:p}),w.jsxs("div",{className:"formiq-board__actions",children:[w.jsx("button",{type:"button",className:"formiq-board__button",onClick:C,disabled:h.isTriggering||h.isGenerating||!r,children:h.isGenerating?`Generating ${h.progress}%`:"Generate PDF"}),h.downloadUrl&&h.status==="READY"&&w.jsx("button",{type:"button",className:"formiq-board__button formiq-board__button--ghost",onClick:()=>window.open(h.downloadUrl,"_blank","noopener,noreferrer"),children:"Download PDF"})]})]}),_.isError&&w.jsx("div",{className:"formiq-board__error",children:"Failed to load board. Check your PAT and board id."}),!r&&w.jsxs("div",{className:"formiq-board__empty",children:["No PAT provided. Wrap this component with ",w.jsx("code",{children:'<FormiqProvider token="...">'}),"."]}),r&&w.jsx("div",{className:"formiq-board__canvas",children:w.jsx(vt,{boardId:e,board:_.data?.board,canEdit:t})})]})}function Ct({token:e,apiBaseUrl:t,children:r}){const o=c.useRef(null);o.current||(o.current=new K.QueryClient);const s=c.useMemo(()=>e.trim(),[e]),a=c.useMemo(()=>t?.trim()??"",[t]);return c.useEffect(()=>{s&&we(s)},[s]),c.useEffect(()=>{a&&Oe(a)},[a]),w.jsx(K.QueryClientProvider,{client:o.current,children:r})}function Pt(e){return K.useQuery({queryKey:["validate-pat",e],queryFn:()=>Je(e??""),enabled:!!e,staleTime:6e4})}exports.BoardEditor=Rt;exports.FormiqProvider=Ct;exports.clearPersonalAccessToken=Ge;exports.getApiBaseUrl=De;exports.getPersonalAccessToken=me;exports.setApiBaseUrl=Oe;exports.setPersonalAccessToken=we;exports.useBoardCanvas=ze;exports.useBoardEditor=Ne;exports.useCanvasElement=xe;exports.useCanvasStore=U;exports.useProduce=qe;exports.useValidatePat=Pt;
|
|
67
|
+
`)}`;function Qe({boardId:t,board:e,canEdit:n=!0}){const[i,s]=u.useState(null),[l,h]=u.useState(!1);u.useEffect(()=>{let d=!0;return h(!0),Promise.resolve().then(()=>require("./ReactKonva-1JK3FbjU.cjs")).then(Y=>{d&&s(Y)}),()=>{d=!1}},[]);const f=i?.Image,{registerContainer:S,stageRef:P,stageSize:j,stageScale:A,stagePosition:E,handleMouseDown:b,handleMouseMove:k,handleMouseUp:N,handleWheel:C,handleDragEnd:y,handleTransformEnd:T}=Ye(t,{canEdit:n}),q=I(d=>d.elements),K=I(d=>d.selectedId),x=I(d=>d.setSelectedId),p=I(d=>d.updateElement),L=I(d=>d.assetUrl),w=I(d=>d.dataSourceMeta),R=I(d=>d.colorEyedropperActive),O=I(d=>d.setColorEyedropped),U=I(d=>d.setColorEyedropperActive),D=u.useMemo(()=>q.find(d=>d.id===K)??null,[q,K]),V=u.useRef(0),J=u.useCallback(d=>{x(d)},[x]),[W]=xe(L??"","anonymous"),[te]=xe(qt,"anonymous"),[o]=xe(Ut,"anonymous"),[M]=xe(Wt,"anonymous"),m=u.useMemo(()=>At({...e?.config,orientation:e?.orientation}),[e?.config,e?.orientation]),_=u.useMemo(()=>Nt(j,m),[j,m]),a=u.useMemo(()=>Dt(j,{width:W?.width,height:W?.height}),[j,W]),v=u.useMemo(()=>W?Bt(_,{width:W.width,height:W.height}):_,[W,_]),z=u.useMemo(()=>{if(!D)return null;const d=D.properties.coordinateSpace==="page"?{x:D.x,y:D.y,width:D.width,height:D.height}:qe({x:D.x,y:D.y,width:D.width,height:D.height},a,m);return $e(d,_,m)},[D,a,m,_]),c=u.useMemo(()=>({x:_.x+10,y:_.y+10,width:_.width-20,height:_.height-20}),[_]),g=u.useCallback(d=>{if(!R)return!1;const Y=P.current,$=Y?.getPointerPosition(),se=Y?.getLayers()[0]?.getNativeCanvasElement(),fe=se?.getContext("2d");if(d.cancelBubble=!0,d.evt.preventDefault(),!Y||!$||!se||!fe)return!0;const Ee=Math.max(0,Math.min(se.width-1,Math.round($.x/Math.max(1,Y.width())*se.width))),ne=Math.max(0,Math.min(se.height-1,Math.round($.y/Math.max(1,Y.height())*se.height))),[F,he,oe,we]=fe.getImageData(Ee,ne,1,1).data;return we===0||(V.current=Date.now()+250,O(`#${[F,he,oe].map(at=>at.toString(16).padStart(2,"0")).join("")}`),U(!1)),!0},[R,O,U,P]),X=u.useCallback(d=>{if(!f)return null;const Y=d.properties.coordinateSpace==="page"?{x:d.x,y:d.y,width:d.width,height:d.height}:qe({x:d.x,y:d.y,width:d.width,height:d.height},a,m),$=$e(Y,_,m),ue={id:d.id,x:$.x,y:$.y,width:$.width,height:$.height,draggable:n&&!R,onClick:()=>{Date.now()<V.current||R||J(d.id)},onTap:()=>{Date.now()<V.current||R||J(d.id)},onDragEnd:ne=>{if(!n||R)return;const F=Ce({x:ne.target.x(),y:ne.target.y(),width:$.width,height:$.height},_,m),he={...d.properties,coordinateSpace:"page"};p(d.id,{x:F.x,y:F.y,width:F.width,height:F.height,properties:he}),y(d,F.x,F.y,he)},onDragMove:ne=>{if(!n||R)return;const F=Ce({x:ne.target.x(),y:ne.target.y(),width:$.width,height:$.height},_,m);p(d.id,{x:F.x,y:F.y,width:F.width,height:F.height,properties:{...d.properties,coordinateSpace:"page"}})},onTransformEnd:ne=>{if(!n||R)return;const F=ne.target,he={x:F.x(),y:F.y(),width:F.width()*F.scaleX(),height:F.height()*F.scaleY()};F.scaleX(1),F.scaleY(1);const oe=Ce(he,_,m),we={...d.properties,coordinateSpace:"page"};p(d.id,{x:oe.x,y:oe.y,width:oe.width,height:oe.height,properties:we}),T(d,{x:oe.x,y:oe.y,width:oe.width,height:oe.height,rotation:F.rotation()},we)}},se=typeof d.properties.bindingKey=="string"?d.properties.bindingKey:null,fe=se?w?.previewRow[se]??null:null;if(fe?Ot(fe):!1)return r.jsx(f,{...ue,image:M??void 0,width:$.width,height:$.height,opacity:d.properties.opacity},d.id);if(d.type==="text"){const ne=[d.properties.fontWeight,d.properties.italic?"italic":""].join(" ").trim(),F=d.properties.underline?"underline":"";return r.jsx(ce,{...ue,text:d.text??"{{Text}}",fontSize:d.properties.fontSize,fontFamily:d.properties.fontFamily,fontStyle:ne,textDecoration:F,fill:d.properties.color,padding:8,align:d.properties.textAlign,verticalAlign:"middle",opacity:d.properties.opacity},d.id)}return d.type==="qr_code"?r.jsx(f,{...ue,image:te??void 0,width:$.width,height:$.height,opacity:d.properties.opacity},d.id):d.type==="bar_code"?r.jsx(f,{...ue,image:o??void 0,width:$.width,height:$.height,opacity:d.properties.opacity},d.id):r.jsx(Ft,{KonvaImage:f,sharedProps:ue,src:d.properties.src??d.src,placeholder:M??void 0,width:$.width,height:$.height,opacity:d.properties.opacity},d.id)},[J,y,T,p,_,m,a,te,o,M,n,w,R,f]);if(!l||!i||!f)return r.jsx("div",{className:"formiq-board-canvas formiq-board-canvas--loading"});const{Stage:B,Layer:re,Rect:ie,Text:ce,Label:ae,Tag:Me,Transformer:it}=i;return r.jsx("div",{className:"formiq-board-canvas",children:r.jsx("div",{id:"formiq-board-canvas",ref:S,className:"formiq-board-canvas__stage",style:{backgroundColor:"#f3f5fb",backgroundImage:"radial-gradient(rgba(15,23,42,0.12) 1.7px, transparent 1px)",backgroundSize:"32px 32px",cursor:R?"crosshair":"default"},children:r.jsx(B,{ref:P,width:j.width,height:j.height,x:E.x,y:E.y,scaleX:A,scaleY:A,onWheel:C,onMouseDown:d=>{g(d)||b(d)},onMouseMove:k,onMouseUp:N,onTouchStart:g,onTouchEnd:N,onMouseLeave:N,onTouchMove:k,children:r.jsxs(re,{children:[r.jsx(ie,{x:_.x,y:_.y,width:_.width,height:_.height,cornerRadius:20,fill:"#ffffff",shadowColor:"#0f172a",shadowBlur:16,shadowOpacity:.12}),W?r.jsx(f,{image:W,x:v.x,y:v.y,width:v.width,height:v.height,cornerRadius:20}):r.jsx(ie,{x:_.x,y:_.y,width:_.width,height:_.height,cornerRadius:20,fillLinearGradientColorStops:[0,"#03072b",.55,"#0b2b64",1,"#031a4c"],shadowColor:"#0f172a",shadowBlur:40}),r.jsx(ie,{x:c.x,y:c.y,width:c.width,height:c.height,cornerRadius:18,stroke:"#7dd3fc",strokeWidth:2,dash:[10,6],opacity:.5}),q.slice().sort((d,Y)=>d.zIndex-Y.zIndex).map(d=>X(d)),D&&z&&r.jsxs(ae,{x:Math.max(z.x,0),y:Math.max(z.y-28,0),listening:!1,children:[r.jsx(Me,{fill:"#2563eb",cornerRadius:4}),r.jsx(ce,{text:$t[D.type],fontSize:12,fill:"#fff",padding:6})]}),n&&K&&r.jsx(it,{ref:d=>{if(!d)return;const $=d.getStage()?.findOne(`#${K}`);d.nodes($?[$]:[])},boundBoxFunc:(d,Y)=>({...Y,width:Math.max(Y.width,20),height:Math.max(Y.height,20)})})]})})})})}const Ht=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Kt=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,n,i)=>i?i.toUpperCase():n.toLowerCase()),Ue=t=>{const e=Kt(t);return e.charAt(0).toUpperCase()+e.slice(1)},Ge=(...t)=>t.filter((e,n,i)=>!!e&&e.trim()!==""&&i.indexOf(e)===n).join(" ").trim(),Vt=t=>{for(const e in t)if(e.startsWith("aria-")||e==="role"||e==="title")return!0};var Yt={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const Qt=u.forwardRef(({color:t="currentColor",size:e=24,strokeWidth:n=2,absoluteStrokeWidth:i,className:s="",children:l,iconNode:h,...f},S)=>u.createElement("svg",{ref:S,...Yt,width:e,height:e,stroke:t,strokeWidth:i?Number(n)*24/Number(e):n,className:Ge("lucide",s),...!l&&!Vt(f)&&{"aria-hidden":"true"},...f},[...h.map(([P,j])=>u.createElement(P,j)),...Array.isArray(l)?l:[l]]));const H=(t,e)=>{const n=u.forwardRef(({className:i,...s},l)=>u.createElement(Qt,{ref:l,iconNode:e,className:Ge(`lucide-${Ht(Ue(t))}`,`lucide-${t}`,i),...s}));return n.displayName=Ue(t),n};const Gt=[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]],Jt=H("arrow-down",Gt);const Xt=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],Zt=H("arrow-up",Xt);const er=[["path",{d:"M3 5v14",key:"1nt18q"}],["path",{d:"M8 5v14",key:"1ybrkv"}],["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"M17 5v14",key:"ycjyhj"}],["path",{d:"M21 5v14",key:"nzette"}]],Je=H("barcode",er);const tr=[["path",{d:"M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8",key:"mg9rjx"}]],rr=H("bold",tr);const nr=[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],or=H("file-text",nr);const ir=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]],Xe=H("image",ir);const ar=[["line",{x1:"19",x2:"10",y1:"4",y2:"4",key:"15jd3p"}],["line",{x1:"14",x2:"5",y1:"20",y2:"20",key:"bu0au3"}],["line",{x1:"15",x2:"9",y1:"4",y2:"20",key:"uljnxc"}]],sr=H("italic",ar);const lr=[["path",{d:"m12 9-8.414 8.414A2 2 0 0 0 3 18.828v1.344a2 2 0 0 1-.586 1.414A2 2 0 0 1 3.828 21h1.344a2 2 0 0 0 1.414-.586L15 12",key:"1y3wsu"}],["path",{d:"m18 9 .4.4a1 1 0 1 1-3 3l-3.8-3.8a1 1 0 1 1 3-3l.4.4 3.4-3.4a1 1 0 1 1 3 3z",key:"110lr1"}],["path",{d:"m2 22 .414-.414",key:"jhxm08"}]],cr=H("pipette",lr);const dr=[["rect",{width:"5",height:"5",x:"3",y:"3",rx:"1",key:"1tu5fj"}],["rect",{width:"5",height:"5",x:"16",y:"3",rx:"1",key:"1v8r4q"}],["rect",{width:"5",height:"5",x:"3",y:"16",rx:"1",key:"1x03jg"}],["path",{d:"M21 16h-3a2 2 0 0 0-2 2v3",key:"177gqh"}],["path",{d:"M21 21v.01",key:"ents32"}],["path",{d:"M12 7v3a2 2 0 0 1-2 2H7",key:"8crl2c"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M12 3h.01",key:"n36tog"}],["path",{d:"M12 16v.01",key:"133mhm"}],["path",{d:"M16 12h1",key:"1slzba"}],["path",{d:"M21 12v.01",key:"1lwtk9"}],["path",{d:"M12 21v-1",key:"1880an"}]],Ze=H("qr-code",dr);const ur=[["rect",{width:"20",height:"12",x:"2",y:"6",rx:"2",key:"9lu3g6"}]],hr=H("rectangle-horizontal",ur);const pr=[["rect",{width:"12",height:"20",x:"6",y:"2",rx:"2",key:"1oxtiu"}]],fr=H("rectangle-vertical",pr);const gr=[["path",{d:"M21 5H3",key:"1fi0y6"}],["path",{d:"M17 12H7",key:"16if0g"}],["path",{d:"M19 19H5",key:"vjpgq2"}]],yr=H("text-align-center",gr);const mr=[["path",{d:"M21 5H3",key:"1fi0y6"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M21 19H7",key:"4cu937"}]],xr=H("text-align-end",mr);const br=[["path",{d:"M21 5H3",key:"1fi0y6"}],["path",{d:"M15 12H3",key:"6jk70r"}],["path",{d:"M17 19H3",key:"z6ezky"}]],Ie=H("text-align-start",br);const wr=[["path",{d:"M12 20h-1a2 2 0 0 1-2-2 2 2 0 0 1-2 2H6",key:"1528k5"}],["path",{d:"M13 8h7a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-7",key:"13ksps"}],["path",{d:"M5 16H4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h1",key:"1n9rhb"}],["path",{d:"M6 4h1a2 2 0 0 1 2 2 2 2 0 0 1 2-2h1",key:"1mj8rg"}],["path",{d:"M9 6v12",key:"velyjx"}]],vr=H("text-cursor-input",wr);const Sr=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],jr=H("trash-2",Sr);const Cr=[["path",{d:"M6 4v6a6 6 0 0 0 12 0V4",key:"9kb039"}],["line",{x1:"4",x2:"20",y1:"20",y2:"20",key:"nun2al"}]],kr=H("underline",Cr);const Mr=[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]],Rr=H("upload",Mr);function Se({label:t,color:e="#4fb8b2"}){return r.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:8,fontSize:"0.7rem",fontWeight:600,textTransform:"uppercase",letterSpacing:"0.25em",color:"#6b7280"},children:[r.jsx("span",{"aria-hidden":!0,style:{width:8,height:8,borderRadius:"50%",background:e,display:"inline-block",flexShrink:0}}),t]})}function le({children:t,style:e}){return r.jsx("h3",{style:{margin:0,fontSize:"1rem",fontWeight:600,color:"#111827",...e},children:t})}function de({label:t,helperText:e,className:n,style:i,...s}){return r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[t&&r.jsx("span",{style:{fontSize:"0.65rem",color:"#6b7280",textTransform:"uppercase",letterSpacing:"0.35em",fontWeight:600},children:t}),r.jsx("input",{style:{border:"1px solid #e5e7eb",borderRadius:8,padding:"8px 12px",fontSize:"0.875rem",fontWeight:600,width:"100%",boxSizing:"border-box",outline:"none",background:"#fff",...i},...s}),e&&r.jsx("span",{style:{fontSize:"0.75rem",color:"#9ca3af"},children:e})]})}function be({label:t,value:e,options:n,placeholder:i,helperText:s,onValueChange:l,disabled:h=!1}){return r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[t&&r.jsx("span",{style:{fontSize:"0.65rem",color:"#6b7280",textTransform:"uppercase",letterSpacing:"0.4em",fontWeight:600},children:t}),r.jsxs("select",{value:e,onChange:f=>l(f.target.value),disabled:h,style:{border:"1px solid #e5e7eb",borderRadius:8,padding:"8px 12px",fontSize:"0.875rem",fontWeight:600,width:"100%",background:"#fff",cursor:h?"not-allowed":"pointer",opacity:h?.6:1,outline:"none"},children:[i&&r.jsx("option",{value:"",disabled:!0,children:i}),n.map(f=>r.jsx("option",{value:f.value,children:f.label},f.value))]}),s&&r.jsx("span",{style:{fontSize:"0.75rem",color:"#9ca3af"},children:s})]})}function _r({label:t,value:e,min:n=0,max:i=30,helperText:s,onChange:l,disabled:h=!1}){return r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[r.jsx("span",{style:{fontSize:"0.65rem",color:"#6b7280",textTransform:"uppercase",letterSpacing:"0.35em",fontWeight:600},children:t}),r.jsxs("span",{style:{fontSize:"0.875rem",fontWeight:600,color:"#111827"},children:[e," mm"]})]}),r.jsx("input",{type:"range",min:n,max:i,value:e,disabled:h,onChange:f=>l(Number(f.target.value)),style:{width:"100%",cursor:h?"not-allowed":"pointer",opacity:h?.6:1,accentColor:"#4fb8b2"}}),s&&r.jsx("span",{style:{fontSize:"0.75rem",color:"#9ca3af"},children:s})]})}function Tr({label:t,icon:e,onClick:n,disabled:i}){return r.jsxs("button",{type:"button",onClick:n,disabled:i,style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:8,padding:"14px 12px",minHeight:80,border:"1.5px solid #e5e7eb",borderRadius:12,background:"#fafafa",cursor:i?"not-allowed":"pointer",opacity:i?.5:1,transition:"border-color 150ms, box-shadow 150ms",fontSize:"0.8rem",fontWeight:600,color:"#374151",width:"100%"},onMouseEnter:s=>{i||(s.currentTarget.style.borderColor="#4fb8b2",s.currentTarget.style.boxShadow="0 2px 8px rgba(79,184,178,0.15)")},onMouseLeave:s=>{s.currentTarget.style.borderColor="#e5e7eb",s.currentTarget.style.boxShadow="none"},children:[r.jsx("span",{style:{color:"#6b7280"},children:e}),r.jsx("span",{children:t})]})}function Re({children:t}){return r.jsx("p",{style:{margin:0,fontSize:"0.75rem",color:"#9ca3af",lineHeight:1.5},children:t})}function Pr({icon:t,label:e,description:n}){const i=e.length>24?"…"+e.slice(Math.floor(e.length/2)):e;return r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[r.jsx("span",{style:{color:"#6b7280",flexShrink:0},children:t}),r.jsxs("div",{children:[r.jsx("p",{style:{margin:0,fontSize:"0.875rem",fontWeight:600,color:"#111827"},children:i}),n&&r.jsx("p",{style:{margin:0,fontSize:"0.75rem",color:"#9ca3af"},children:n})]})]})}function Ir({label:t,helperText:e,onFileChange:n,disabled:i=!1}){const s=u.useId(),[l,h]=u.useState(!1);function f(S){const P=S.target.files?.[0]??null;n?.(P)}return r.jsxs("label",{htmlFor:s,onMouseEnter:()=>!i&&h(!0),onMouseLeave:()=>h(!1),style:{display:"flex",flexDirection:"column",gap:6,textAlign:"center",padding:"14px 16px",border:`1.5px dashed ${l&&!i?"#4fb8b2":"#d1d5db"}`,borderRadius:12,background:"#fafafa",cursor:i?"not-allowed":"pointer",opacity:i?.5:1,transition:"border-color 150ms",boxSizing:"border-box"},children:[t&&r.jsx("span",{style:{fontSize:"0.65rem",fontWeight:600,textTransform:"uppercase",letterSpacing:"0.3em",color:"#6b7280"},children:t}),r.jsx("span",{style:{fontSize:"0.875rem",fontWeight:600,color:"#111827"},children:"Drop or browse CSV / XLSX"}),r.jsx("span",{style:{fontSize:"0.75rem",color:"#9ca3af"},children:e??"Supports .csv and .xlsx files"}),r.jsx("input",{id:s,type:"file",accept:".csv,.xlsx",style:{position:"absolute",width:1,height:1,opacity:0,overflow:"hidden"},onChange:f,disabled:i})]})}const Er=[{label:"Text",icon:r.jsx(vr,{size:20}),type:"text"},{label:"QR Code",icon:r.jsx(Ze,{size:20}),type:"qr_code"},{label:"Barcode",icon:r.jsx(Je,{size:20}),type:"bar_code"},{label:"Image",icon:r.jsx(Xe,{size:20}),type:"image"}];function ee(t,e,n){return Math.max(e,Math.min(n,Math.floor(t)))}function et({boardId:t,canEdit:e=!0}){const n=Q.useQueryClient(),i=Pe(t),s=I(c=>c.addElement),l=I(c=>c.setDataSourceMeta),h=I(c=>c.assetUrl),f=I(c=>c.setAssetUrl),[S,P]=u.useState("PORTRAIT"),[j,A]=u.useState("A4"),[E,b]=u.useState(4),[k,N]=u.useState(2),[C,y]=u.useState(12),[T,q]=u.useState(!1),[K,x]=u.useState(null),[p,L]=u.useState(null),w=u.useRef(!1),R=u.useRef(null),O=Q.useQuery({queryKey:["data-source",t],queryFn:()=>Mt(t),enabled:!!t,retry:!1}),U=p||(O.data?.name?{name:O.data.name,records:O.data.records?.length??0}:null);u.useEffect(()=>{const c=i.data?.board,g=c?.config;!g||w.current||(P(c.orientation??"PORTRAIT"),A(g.paperSize??"A4"),typeof g.rows=="number"&&g.rows>0&&b(ee(g.rows,1,50)),N(ee(g.columns??1,1,20)),y(ee(Math.round(g.marginTopMm??10),0,50)),w.current=!0)},[i.data?.board]);const D=Q.useMutation({mutationFn:vt,onSuccess:c=>{n.setQueryData(["board-editor",t],g=>g&&{...g,board:{...g.board,config:c}})}}),V=u.useMemo(()=>He.debounce(c=>D.mutate(c),400),[D]);u.useEffect(()=>()=>V.cancel(),[V]);function J(c){if(!e)return;const g=i.data?.board?.config?.id;g&&V({id:g,boardId:t,paperSize:c.paperSize??j,rows:typeof c.rows=="number"?ee(c.rows,1,50):E,columns:ee(c.columns??k,1,20),marginTopMm:ee(c.margin??C,0,50),marginRightMm:ee(c.margin??C,0,50),marginBottomMm:ee(c.margin??C,0,50),marginLeftMm:ee(c.margin??C,0,50)})}const W=Q.useMutation({mutationFn:c=>St(t,c),onSuccess:(c,g)=>{n.setQueryData(["board-editor",t],X=>X&&{...X,board:{...X.board,orientation:g}})}});async function te(c){if(!(!e||T)){q(!0);try{const g=await jt(t,{mimeType:c.type,fileSize:c.size});await Ct(g.signedUrl,g.uploadEndpoint,c),await kt(t,{storagePath:g.storagePath,publicUrl:g.publicUrl,fileType:g.fileType,fileSize:c.size}),f(g.publicUrl)}catch{}finally{q(!1),R.current&&(R.current.value="")}}}const o=Q.useMutation({mutationFn:c=>Rt(t,c),onSuccess:c=>{const g=c?.dataSource?.columnHeaders??[],X=c?.dataSource?.parsedData?.[0]??{};l({columnHeaders:g,previewRow:X}),n.invalidateQueries({queryKey:["data-source",t]})}});function M(c){if(e){if(x(c),!c){L(null),l(null);return}if(c.type==="text/csv"||c.name.endsWith(".csv")){const g=new FileReader;g.onload=()=>{const B=g.result.split(/\r?\n/).map(ae=>ae.trim()).filter(Boolean),re=(B[0]??"").split(",").map(ae=>ae.trim()).filter(Boolean),ie=(B[1]??"").split(",").map(ae=>ae.trim()),ce={};re.forEach((ae,Me)=>{ce[ae]=ie[Me]??""}),L({name:c.name,records:Math.max(B.length-1,0)}),l({columnHeaders:re,previewRow:ce})},g.readAsText(c)}else L({name:c.name,records:0})}}function m(){!e||!K||o.mutate(K)}const _=E*k,a={display:"flex",flexDirection:"column",gap:16},v={...a,border:"1px dashed #e5e7eb",borderRadius:16,padding:16},z={width:"100%",padding:"10px 16px",borderRadius:8,fontSize:"0.875rem",fontWeight:600,cursor:"pointer",transition:"background 150ms",boxSizing:"border-box"};return r.jsxs("div",{className:"formiq-board-sidebar",style:{display:"flex",flexDirection:"column",gap:20,padding:"24px 20px",overflowY:"auto",height:"100%"},children:[r.jsxs("section",{style:v,children:[r.jsx(Se,{label:"Base Template",color:"#0ea5e9"}),r.jsx("div",{style:{borderRadius:20,overflow:"hidden",border:"1px dashed #e5e7eb",padding:8,background:"#f9fafb"},children:r.jsx("div",{style:{height:140,borderRadius:14,overflow:"hidden",background:"linear-gradient(135deg, #0b234d, #291b61, #0b3d73)",position:"relative"},children:h&&r.jsx("img",{src:h,alt:"Base template",style:{width:"100%",height:"100%",objectFit:"cover",display:"block"}})})}),r.jsx("input",{ref:R,type:"file",accept:"image/png,image/jpeg,image/jpg",style:{display:"none"},onChange:c=>{const g=c.target.files?.[0];g&&te(g)}}),r.jsx("button",{type:"button",disabled:!e||T,onClick:()=>R.current?.click(),style:{...z,background:"#4fb8b2",color:"#fff",border:"none",opacity:!e||T?.6:1,cursor:!e||T?"not-allowed":"pointer"},children:T?"Replacing…":"Replace Image"}),!e&&r.jsx(Re,{children:"You have viewer access. Editing controls are disabled."})]}),r.jsxs("section",{style:a,children:[r.jsx(Se,{label:"Data Source",color:"#10b981"}),r.jsx("div",{style:{display:"flex",flexDirection:"column",gap:12,border:"1px solid #d1fae5",borderRadius:16,padding:16,background:"#f0fdf4"},children:U?r.jsxs(r.Fragment,{children:[r.jsx(Pr,{icon:r.jsx(or,{size:20,color:"#10b981"}),label:U.name,description:`${U.records.toLocaleString()} records found`}),r.jsx("div",{style:{display:"flex",gap:10},children:r.jsx("button",{type:"button",disabled:!e||o.isPending,onClick:m,style:{...z,flex:1,background:"#fff",border:"1px solid #d1d5db",color:"#374151",opacity:!e||o.isPending?.6:1,cursor:!e||o.isPending?"not-allowed":"pointer"},children:o.isPending?"Mapping...":"Map Columns"})})]}):r.jsx(Ir,{label:"Upload CSV / XLSX",helperText:"Records will be counted automatically",onFileChange:M,disabled:!e})})]}),r.jsxs("section",{style:a,children:[r.jsx(Se,{label:"Paper Settings",color:"#8b5cf6"}),r.jsx(le,{children:"Layout controls"}),r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16},children:[r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[r.jsx("span",{style:{fontSize:"0.75rem",color:"#6b7280",fontWeight:500},children:"Orientation"}),r.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[{value:"PORTRAIT",label:"Portrait",Icon:fr},{value:"LANDSCAPE",label:"Landscape",Icon:hr}].map(({value:c,label:g,Icon:X})=>r.jsxs("button",{type:"button",disabled:!e,onClick:()=>{!e||S===c||(P(c),W.mutate(c),J({paperSize:j,columns:k,margin:C,rows:E}))},style:{display:"flex",alignItems:"center",justifyContent:"center",gap:6,padding:"8px 12px",border:`1px solid ${S===c?"#4fb8b2":"#e5e7eb"}`,borderRadius:8,fontSize:"0.8rem",fontWeight:600,background:S===c?"rgba(79,184,178,0.08)":"#fff",color:S===c?"#4fb8b2":"#6b7280",cursor:e?"pointer":"not-allowed",opacity:e?1:.5,transition:"all 150ms"},children:[r.jsx(X,{size:16}),g]},c))})]}),r.jsx(be,{label:"Paper Size",value:j,disabled:!e,onValueChange:c=>{if(!e)return;const g=c;A(g),J({paperSize:g})},options:[{label:"A4 (210 × 297 mm)",value:"A4"},{label:"Long format",value:"Long"},{label:"Ticket (Short)",value:"Short"},{label:"Custom",value:"Custom"}]}),r.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16},children:[r.jsx(de,{label:"Rows/Page",type:"number",value:E,min:1,max:50,disabled:!e,onChange:c=>{if(!e)return;const g=ee(Number(c.target.value),1,50);b(g),J({rows:g})}}),r.jsx(de,{label:"Columns",type:"number",value:k,min:1,max:20,disabled:!e,onChange:c=>{if(!e)return;const g=ee(Number(c.target.value),1,20);N(g),J({columns:g})}})]}),r.jsxs(Re,{children:[_.toLocaleString()," asset",_===1?"":"s"," per page"]}),r.jsx(_r,{label:"Margins",value:C,min:0,max:50,disabled:!e,onChange:c=>{if(!e)return;const g=ee(c,0,50);y(g),J({margin:g})},helperText:"Margins in millimeters"})]})]}),r.jsxs("section",{style:a,children:[r.jsx(Se,{label:"Toolbox",color:"#f97316"}),r.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12},children:Er.map(c=>r.jsx(Tr,{label:c.label,icon:c.icon,disabled:!e,onClick:()=>{e&&s(c.type)}},c.label))}),r.jsx(Re,{children:"Drag elements onto the canvas once it is ready."})]})]})}const Ar=[{label:"Poppins (Sans)",value:"Poppins"},{label:"Roboto (Sans)",value:"Roboto"},{label:"Lato (Sans)",value:"Lato"},{label:"Open Sans (Sans)",value:"Open Sans"},{label:"Montserrat (Sans)",value:"Montserrat"},{label:"Work Sans (Sans)",value:"Work Sans"},{label:"Fira Sans (Sans)",value:"Fira Sans"},{label:"DM Sans (Sans)",value:"DM Sans"},{label:"Manrope (Sans)",value:"Manrope"},{label:"Raleway (Sans)",value:"Raleway"},{label:"Ubuntu (Sans)",value:"Ubuntu"},{label:"Oswald (Sans)",value:"Oswald"},{label:"Helvetica (Sans Serif)",value:"Helvetica"},{label:"Arial (Sans Serif)",value:"Arial"},{label:"Verdana (Sans Serif)",value:"Verdana"},{label:"Tahoma (Sans Serif)",value:"Tahoma"},{label:"Trebuchet MS (Sans Serif)",value:"Trebuchet MS"},{label:"Georgia (Serif)",value:"Georgia"},{label:"Times New Roman (Serif)",value:"Times New Roman"},{label:"Garamond (Serif)",value:"Garamond"},{label:"Palatino (Serif)",value:"Palatino"},{label:"Merriweather (Serif)",value:"Merriweather"},{label:"Playfair Display (Serif)",value:"Playfair Display"},{label:"PT Serif (Serif)",value:"PT Serif"},{label:"Baskerville (Serif)",value:"Baskerville"},{label:"Cambria (Serif)",value:"Cambria"},{label:"Courier New (Monospace)",value:"Courier New"},{label:"Source Code Pro (Monospace)",value:"Source Code Pro"},{label:"Dancing Script (Cursive)",value:"Dancing Script"},{label:"Pacifico (Cursive)",value:"Pacifico"},{label:"Great Vibes (Calligraphy)",value:"Great Vibes"},{label:"Sacramento (Calligraphy)",value:"Sacramento"}],zr={text:{label:"Dynamic Text",Icon:Ie},qr_code:{label:"QR Code",Icon:Ze},bar_code:{label:"Barcode",Icon:Je},image:{label:"Image",Icon:Xe}};function Nr(){return r.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,height:"100%",padding:24,textAlign:"center"},children:[r.jsx("div",{style:{width:48,height:48,borderRadius:"50%",background:"#f3f4f6",display:"flex",alignItems:"center",justifyContent:"center"},children:r.jsx(Ie,{size:20,color:"#9ca3af"})}),r.jsx("p",{style:{margin:0,fontSize:"0.875rem",fontWeight:600,color:"#374151"},children:"No element selected"}),r.jsx("p",{style:{margin:0,fontSize:"0.75rem",color:"#9ca3af"},children:"Click an element on the canvas to edit its properties."})]})}function me({children:t,active:e,disabled:n,onClick:i,title:s}){return r.jsx("button",{type:"button",title:s,disabled:n,onClick:i,style:{width:28,height:28,display:"flex",alignItems:"center",justifyContent:"center",borderRadius:6,border:`1px solid ${e?"#4fb8b2":"#e5e7eb"}`,background:e?"rgba(79,184,178,0.1)":"#fff",color:e?"#4fb8b2":"#374151",cursor:n?"not-allowed":"pointer",opacity:n?.5:1,padding:0,transition:"all 150ms"},children:t})}function tt({boardId:t,canEdit:e=!0}){const n=u.useRef(null),i=I(o=>o.selectedId),s=I(o=>o.elements),l=I(o=>o.dataSourceMeta),h=I(o=>o.colorEyedropped),f=I(o=>o.colorEyedropperActive),S=I(o=>o.setColorEyedropped),P=I(o=>o.setColorEyedropperActive),j=I(o=>o.updateElementProperties),A=I(o=>o.updateDimensions),E=I(o=>o.updateElement),b=I(o=>o.bringForward),k=I(o=>o.sendBackward),N=I(o=>o.removeElement),{deleteCanvasElement:C,upsertCanvasElement:y}=ke(t,{canEdit:e}),T=u.useMemo(()=>s.find(o=>o.id===i)??null,[s,i]),q=l?.columnHeaders??[],K=u.useMemo(()=>{const o=new Map;for(const M of s){if(M.type!=="text")continue;const m=typeof M.properties.bindingKey=="string"&&M.properties.bindingKey.trim()?M.properties.bindingKey:typeof M.text=="string"&&M.text.trim()?M.text.replace(/{{\s*/,"").replace(/\s*}}/,"").trim():null;if(!m)continue;const _=o.get(m),a=!!M.properties.isIncrementalVariable;if(!_){o.set(m,{key:m,incremental:a});continue}o.set(m,{key:m,incremental:_.incremental||a})}return[...o.values()]},[s]);if(u.useEffect(()=>{if(!T||!e||!h)return;const o=I.getState().elements.find(M=>M.id===T.id)??T;j(T.id,{color:h}),y({id:o.dbId,clientId:o.id,canvasElementConfigId:o.configDbId,boardId:t,type:o.type,x:o.x,y:o.y,rotation:o.rotation,width:o.width,height:o.height,zIndex:o.zIndex,properties:{...o.properties,color:h,text:o.text,data:o.data,src:o.src??o.properties.src}},(M,m)=>E(o.id,{dbId:M,configDbId:m})),S(null)},[t,h,e,T,y,E,j,S]),!T)return r.jsx("div",{style:{height:"100%",background:"#fff",padding:16},children:r.jsx(Nr,{})});const x=T;function p(o={},M={}){if(!e)return;const m=I.getState().elements.find(_=>_.id===x.id)??x;y({id:m.dbId,clientId:m.id,canvasElementConfigId:m.configDbId,boardId:t,type:m.type,x:o?.x??m.x,y:o?.y??m.y,rotation:o?.rotation??m.rotation,width:o?.width??m.width,height:o?.height??m.height,zIndex:o?.zIndex??m.zIndex,properties:{...m.properties,...M,text:o?.text??m.text,data:o?.data??m.data,src:o?.src??m.src??m.properties.src}},(_,a)=>E(m.id,{dbId:_,configDbId:a}))}function L(o,M){if(!e)return;const m=Number(M);Number.isNaN(m)||(A(x.id,{[o]:m}),p({[o]:m}))}const w=x.properties,R=/^#(?:[0-9A-Fa-f]{3}){1,2}$/.test(w.color)?w.color:"#000000",O=w.bindingKey?l?.previewRow[w.bindingKey]??"":"",U=[...q.map(o=>({label:o,value:o})),...K.filter(o=>!q.includes(o.key)).map(o=>({label:o.incremental?`${o.key} (incremental)`:o.key,value:o.key}))],{label:D,Icon:V}=zr[x.type],J=(()=>{switch(x.type){case"text":return x.text??"—";case"qr_code":case"bar_code":return w.bindingKey?`Bound to: ${w.bindingKey}`:"No variable bound";case"image":return w.src?"Image uploaded":"No image"}})(),W={fontSize:"0.6rem",color:"#6b7280",textTransform:"uppercase",letterSpacing:"0.45em",fontWeight:600},te={display:"flex",alignItems:"center",justifyContent:"space-between",gap:8};return r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:20,padding:"16px 14px",overflowY:"auto",height:"100%",background:"#fff",boxSizing:"border-box"},children:[r.jsxs("div",{style:te,children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[r.jsx("div",{style:{background:"#f3f4f6",borderRadius:12,padding:"8px 10px",display:"flex",alignItems:"center"},children:r.jsx(V,{size:18,color:"#4fb8b2"})}),r.jsxs("div",{children:[r.jsx("p",{style:{margin:0,fontSize:"0.875rem",fontWeight:600,color:"#111827"},children:D}),r.jsx("p",{style:{margin:0,fontSize:"0.7rem",color:"#9ca3af"},children:J})]})]}),r.jsx("button",{type:"button",disabled:!e||!x.dbId,title:"Delete element",onClick:()=>{!e||!x.dbId||C(x.dbId,{onSuccess:()=>N(x.id)})},style:{background:"none",border:"none",cursor:!e||!x.dbId?"not-allowed":"pointer",opacity:!e||!x.dbId?.4:1,padding:4,color:"#6b7280",display:"flex",alignItems:"center"},children:r.jsx(jr,{size:16})})]}),!e&&r.jsx("p",{style:{margin:0,fontSize:"0.75rem",color:"#6b7280",border:"1px dashed #e5e7eb",borderRadius:8,padding:"8px 12px"},children:"You have viewer access. Editing controls are disabled."}),x.type==="text"&&r.jsxs(r.Fragment,{children:[r.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[r.jsx("span",{style:W,children:"Variable Name"}),r.jsx("input",{style:{border:"1px solid #e5e7eb",borderRadius:8,padding:"8px 12px",fontSize:"0.875rem",fontWeight:600,outline:"none",width:"100%",boxSizing:"border-box"},value:x.text??"",disabled:!e,onChange:o=>{e&&(E(x.id,{text:o.target.value}),p({text:o.target.value}))}})]}),r.jsxs("div",{children:[r.jsx(le,{style:{marginBottom:8},children:"Connect data"}),r.jsx(be,{value:w.bindingKey??"",placeholder:"Choose a column",options:U,disabled:!e,onValueChange:o=>{e&&(j(x.id,{bindingKey:o}),E(x.id,{text:`{{${o}}}`}),p({text:`{{${o}}}`},{bindingKey:o}))}}),O&&r.jsxs("p",{style:{margin:"4px 0 0",fontSize:"0.75rem",color:"#9ca3af"},children:["Preview: “",O,"”"]})]}),r.jsxs("div",{children:[r.jsx(le,{style:{marginBottom:8},children:"Typography"}),r.jsx(be,{label:"Font family",value:w.fontFamily,disabled:!e,options:Ar,onValueChange:o=>{e&&(j(x.id,{fontFamily:o}),p({},{fontFamily:o}))}}),r.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,marginTop:12},children:[r.jsx(be,{label:"Weight",value:w.fontWeight,disabled:!e,options:[{label:"Normal",value:"normal"},{label:"Bold",value:"bold"}],onValueChange:o=>{if(!e)return;const M=o;j(x.id,{fontWeight:M}),p({},{fontWeight:M})}}),r.jsx(de,{label:"Size",type:"number",min:8,max:72,value:w.fontSize,disabled:!e,onChange:o=>{if(!e)return;const M=Number(o.target.value);j(x.id,{fontSize:M}),p({},{fontSize:M})}})]}),r.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginTop:12},children:[r.jsx("div",{style:{display:"flex",gap:4},children:["left","center","right"].map(o=>r.jsxs(me,{active:w.textAlign===o,disabled:!e,title:`Align ${o}`,onClick:()=>{e&&(j(x.id,{textAlign:o}),p({},{textAlign:o}))},children:[o==="left"&&r.jsx(Ie,{size:12}),o==="center"&&r.jsx(yr,{size:12}),o==="right"&&r.jsx(xr,{size:12})]},o))}),r.jsxs("div",{style:{display:"flex",gap:4},children:[r.jsx(me,{active:w.fontWeight==="bold",disabled:!e,title:"Bold",onClick:()=>{if(!e)return;const o=w.fontWeight==="bold"?"normal":"bold";j(x.id,{fontWeight:o}),p({},{fontWeight:o})},children:r.jsx(rr,{size:12})}),r.jsx(me,{active:!!w.italic,disabled:!e,title:"Italic",onClick:()=>{if(!e)return;const o=!w.italic;j(x.id,{italic:o}),p({},{italic:o})},children:r.jsx(sr,{size:12})}),r.jsx(me,{active:!!w.underline,disabled:!e,title:"Underline",onClick:()=>{if(!e)return;const o=!w.underline;j(x.id,{underline:o}),p({},{underline:o})},children:r.jsx(kr,{size:12})})]})]}),r.jsxs("div",{style:{...te,marginTop:12},children:[r.jsx("span",{style:W,children:"Color"}),r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[r.jsx(me,{active:f,disabled:!e,title:"Eyedropper",onClick:()=>{S(null),P(!f)},children:r.jsx(cr,{size:12})}),r.jsx("span",{style:{border:"1px solid #e5e7eb",borderRadius:6,padding:"2px 8px",fontSize:"0.8rem",fontWeight:600,fontFamily:"monospace",color:"#374151"},children:R}),r.jsx("input",{type:"color",value:R,disabled:!e,onChange:o=>{e&&(j(x.id,{color:o.target.value}),p({},{color:o.target.value}))},style:{width:24,height:24,padding:0,border:"1px solid #e5e7eb",borderRadius:"50%",cursor:e?"pointer":"not-allowed",overflow:"hidden"},title:"Pick color"})]})]}),e&&f&&r.jsx("p",{style:{margin:"4px 0 0",fontSize:"0.75rem",color:"#9ca3af"},children:"Click any pixel on the canvas to sample its color."})]})]}),(x.type==="qr_code"||x.type==="bar_code")&&r.jsxs("div",{children:[r.jsx(le,{style:{marginBottom:4},children:"Connect data"}),r.jsxs("p",{style:{margin:"0 0 8px",fontSize:"0.75rem",color:"#9ca3af"},children:["Select a column whose value will be encoded into the"," ",x.type==="qr_code"?"QR code":"barcode","."]}),r.jsx(be,{value:w.bindingKey??"",placeholder:"Choose a column",options:U,disabled:!e,onValueChange:o=>{e&&(j(x.id,{bindingKey:o}),E(x.id,{data:`{{${o}}}`}),p({data:`{{${o}}}`},{bindingKey:o,data:`{{${o}}}`,text:`{{${o}}}`}))}}),O&&r.jsxs("p",{style:{margin:"4px 0 0",fontSize:"0.75rem",color:"#9ca3af"},children:["Preview: “",O,"”"]})]}),x.type==="image"&&r.jsxs(r.Fragment,{children:[r.jsx(le,{style:{marginBottom:4},children:"Image Source"}),r.jsx("input",{ref:n,type:"file",accept:"image/*",style:{display:"none"},disabled:!e,onChange:o=>{if(!e)return;const M=o.target.files?.[0];if(!M)return;const m=new FileReader;m.onload=_=>{const a=_.target?.result;E(x.id,{src:a}),j(x.id,{src:a}),p({},{src:a})},m.readAsDataURL(M)}}),w.src&&r.jsx("img",{src:w.src,alt:"Element preview",style:{width:"100%",maxHeight:96,objectFit:"contain",border:"1px solid #e5e7eb",borderRadius:8}}),r.jsxs("button",{type:"button",disabled:!e,onClick:()=>{e&&n.current?.click()},style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",gap:8,padding:"10px 16px",border:"1px solid #e5e7eb",borderRadius:8,background:"#fff",fontSize:"0.875rem",fontWeight:600,cursor:e?"pointer":"not-allowed",opacity:e?1:.5,color:"#374151",boxSizing:"border-box"},children:[r.jsx(Rr,{size:16}),w.src?"Replace Image":"Upload Image"]})]}),r.jsxs("div",{children:[r.jsx(le,{style:{marginBottom:8},children:"Position & Size"}),r.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12},children:[r.jsx(de,{label:"X",type:"number",value:Math.round(x.x),disabled:!e,onChange:o=>L("x",o.target.value)}),r.jsx(de,{label:"Y",type:"number",value:Math.round(x.y),disabled:!e,onChange:o=>L("y",o.target.value)}),r.jsx(de,{label:"Width",type:"number",value:Math.round(x.width),disabled:!e,onChange:o=>L("width",o.target.value)}),r.jsx(de,{label:"Height",type:"number",value:Math.round(x.height),disabled:!e,onChange:o=>L("height",o.target.value)})]})]}),r.jsxs("div",{children:[r.jsx(le,{style:{marginBottom:8},children:"Arrangement"}),r.jsx("div",{style:{display:"flex",gap:10},children:[{label:"Forward",icon:r.jsx(Zt,{size:14}),action:()=>b(x.id)},{label:"Backward",icon:r.jsx(Jt,{size:14}),action:()=>k(x.id)}].map(({label:o,icon:M,action:m})=>r.jsxs("button",{type:"button",disabled:!e,onClick:()=>{e&&m()},style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",gap:6,padding:"8px 12px",border:"1px solid #e5e7eb",borderRadius:8,background:"#fff",fontSize:"0.8rem",fontWeight:600,cursor:e?"pointer":"not-allowed",opacity:e?1:.5,color:"#374151"},children:[M,o]},o))})]}),r.jsxs("div",{children:[r.jsxs("div",{style:{...te,marginBottom:6},children:[r.jsx(le,{children:"Opacity"}),r.jsxs("span",{style:{fontSize:"0.875rem",fontWeight:600,color:"#111827"},children:[Math.round(w.opacity*100),"%"]})]}),r.jsx("input",{type:"range",min:0,max:100,value:w.opacity*100,disabled:!e,onChange:o=>{if(!e)return;const M=Number(o.target.value)/100;j(x.id,{opacity:M}),p({},{opacity:M})},style:{width:"100%",cursor:e?"pointer":"not-allowed",accentColor:"#4fb8b2",opacity:e?1:.5}})]})]})}function rt({boardId:t,canEdit:e=!0,children:n}){return r.jsxs("div",{className:"formiq-board-workspace",children:[r.jsx("div",{className:"formiq-board-workspace__sidebar",children:r.jsx(et,{boardId:t,canEdit:e})}),r.jsx("div",{className:"formiq-board-workspace__canvas",children:n}),r.jsx("div",{className:"formiq-board-workspace__properties",children:r.jsx(tt,{boardId:t,canEdit:e})})]})}const pe={fontFamily:"Poppins",italic:!1,underline:!1,fontSize:24,color:"#ffffff",opacity:1};function Dr(t){return t==="center"||t==="right"?t:"left"}function Br(t){return t==="bold"?"bold":"normal"}function je(t,e=!1){return typeof t=="boolean"?t:e}function We(t){const e=t.properties??{},n={fontFamily:typeof e.fontFamily=="string"?e.fontFamily:pe.fontFamily,fontWeight:Br(e.fontWeight),italic:je(e.italic,je(e.isItalicText,pe.italic)),underline:je(e.underline,je(e.isUnderlineText,pe.underline)),fontSize:typeof e.fontSize=="number"?e.fontSize:pe.fontSize,textAlign:Dr(e.textAlign),color:typeof e.color=="string"?e.color:pe.color,opacity:typeof e.opacity=="number"?e.opacity:pe.opacity,coordinateSpace:e.coordinateSpace==="page"?"page":"stage",bindingKey:typeof e.bindingKey=="string"?e.bindingKey:typeof e.bindingKey=="number"?String(e.bindingKey):void 0,data:typeof e.data=="string"?e.data:typeof t.data=="string"?t.data:void 0,src:typeof e.src=="string"?e.src:typeof t.src=="string"?t.src:void 0,isIncrementalVariable:typeof e.isIncrementalVariable=="boolean"?e.isIncrementalVariable:!1,generationType:e.generationType==="alphanumeric"||e.generationType==="integer"?e.generationType:void 0,incrementCount:typeof e.incrementCount=="number"&&Number.isFinite(e.incrementCount)?e.incrementCount:void 0,incrementStart:typeof e.incrementStart=="number"&&Number.isFinite(e.incrementStart)?e.incrementStart:void 0,incrementPadLength:typeof e.incrementPadLength=="number"&&Number.isFinite(e.incrementPadLength)?e.incrementPadLength:void 0,incrementSeed:typeof e.incrementSeed=="string"?e.incrementSeed:void 0};return{id:t.id.toString(),dbId:t.id,configDbId:t.canvasElementConfigId,type:t.type,x:t.x,y:t.y,rotation:t.rotation??0,width:t.width,height:t.height,zIndex:t.zIndex,generationType:n.generationType,text:typeof e.text=="string"?e.text:t.type==="text"&&n.bindingKey?`{{${n.bindingKey}}}`:void 0,data:n.data,src:n.src,properties:n}}function Fr(t){if(!t)return null;const e=Array.isArray(t.columnHeaders)?t.columnHeaders:[],n=Array.isArray(t.parsedData)&&t.parsedData.length?t.parsedData[0]:{};return{columnHeaders:e,previewRow:n}}function Lr({boardId:t,canEdit:e=!0}){const[n,i]=u.useState(null),[s,l]=u.useState(!1),h=I(C=>C.setElements),f=I(C=>C.mergeElements),S=I(C=>C.setDataSourceMeta),P=I(C=>C.setAssetUrl),j=u.useRef(!1);u.useEffect(()=>{const C=_e();i(C),l(!0)},[]);const A=Pe(t,{enabled:!!(s&&n)}),{canvasElements:E}=ke(t,{enabled:!!(s&&n)}),b=Ve(t),k=u.useMemo(()=>A.data?A.data.board.boardName:"Board",[A.data]);u.useEffect(()=>{if(!A.data?.board){h([]),S(null),P(null);return}const{board:C}=A.data;S(Fr(C.dataSource)),P(C.asset?.fileUrl??null)},[A.data,h,S,P]),u.useEffect(()=>{if(E){if(!j.current){h(E.map(We)),j.current=!0;return}f(E.map(We))}},[E,h,f]);async function N(){if(b.status==="READY"&&b.downloadUrl){window.open(b.downloadUrl,"_blank","noopener,noreferrer");return}await b.triggerGeneration()}return r.jsxs("div",{className:"formiq-board",children:[r.jsxs("div",{className:"formiq-board__header",children:[r.jsx("div",{className:"formiq-board__title",children:k}),r.jsxs("div",{className:"formiq-board__actions",children:[r.jsx("button",{type:"button",className:"formiq-board__button",onClick:N,disabled:b.isTriggering||b.isGenerating||!n,children:b.isGenerating?`Generating ${b.progress}%`:"Generate PDF"}),b.downloadUrl&&b.status==="READY"&&r.jsx("button",{type:"button",className:"formiq-board__button formiq-board__button--ghost",onClick:()=>window.open(b.downloadUrl,"_blank","noopener,noreferrer"),children:"Download PDF"})]})]}),A.isError&&r.jsx("div",{className:"formiq-board__error",children:"Failed to load board. Check your PAT and board id."}),!n&&r.jsxs("div",{className:"formiq-board__empty",children:["No PAT provided. Wrap this component with"," ",r.jsx("code",{children:'<FormiqProvider token="...">'}),"."]}),n&&r.jsx(rt,{boardId:t,canEdit:e,children:r.jsx(Qe,{boardId:t,board:A.data?.board,canEdit:e})})]})}let nt=null;function ot(t){const e=(t??"").trim();nt=e.length?e:null}function Or(){return nt}function $r({token:t,apiBaseUrl:e,children:n}){const i=u.useRef(null);i.current||(i.current=new Q.QueryClient);const s=t.trim(),l=e?.trim()??"";return s&&Te(s),l&&ot(l),r.jsx(Q.QueryClientProvider,{client:i.current,children:n})}function qr(t){return Q.useQuery({queryKey:["validate-pat",t],queryFn:()=>ft(t??""),enabled:!!t,staleTime:6e4})}exports.BoardCanvas=Qe;exports.BoardEditor=Lr;exports.BoardPropertiesPanel=tt;exports.BoardSidebar=et;exports.BoardWorkspaceLayout=rt;exports.FormiqProvider=$r;exports.clearPersonalAccessToken=ht;exports.getApiBaseUrl=Or;exports.getPersonalAccessToken=_e;exports.setApiBaseUrl=ot;exports.setPersonalAccessToken=Te;exports.useBoardCanvas=Ye;exports.useBoardEditor=Pe;exports.useCanvasElement=ke;exports.useCanvasStore=I;exports.useProduce=Ve;exports.useValidatePat=qr;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import './styles.css';
|
|
2
2
|
export { BoardEditor } from './components/board/BoardEditor';
|
|
3
|
+
export { BoardCanvas } from './components/board/BoardCanvas';
|
|
4
|
+
export { BoardSidebar } from './components/board/BoardSidebar';
|
|
5
|
+
export { BoardPropertiesPanel } from './components/board/BoardPropertiesPanel';
|
|
6
|
+
export { BoardWorkspaceLayout } from './components/board/BoardWorkspaceLayout';
|
|
3
7
|
export { FormiqProvider } from './provider/FormiqProvider';
|
|
4
8
|
export { useBoardEditor } from './hooks/useBoardEditor';
|
|
5
9
|
export { useCanvasElement } from './hooks/useCanvasElement';
|