@samva/vite 0.8.0 → 0.10.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.
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--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-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--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-duration:initial;--tw-ease:initial;--tw-content:"";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--spacing:.25rem;--container-lg:32rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--shadow-xs:0 1px 2px 0 #0000000d;--shadow-sm:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--blur-md:12px;--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);--color-accent-email:var(--accent-email);--color-sel-soft:var(--sel-soft);--color-sel-mid:var(--sel-mid);--color-background:var(--background);--color-foreground:var(--foreground);--color-muted:var(--muted);--color-muted-foreground:var(--muted-foreground);--color-border:var(--border);--color-border-subtle:var(--border-subtle);--color-surface-inset:var(--surface-inset);--color-surface-elevated:var(--surface-elevated);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-placeholder:var(--placeholder);--color-status-success:var(--status-success);--color-status-warning:var(--status-warning);--color-status-error:var(--status-error)}}@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,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, 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;-webkit-text-decoration:inherit;-webkit-text-decoration: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:where(:not(iframe)){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 components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.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}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-3{top:calc(var(--spacing) * 3)}.right-0{right:0}.right-3{right:calc(var(--spacing) * 3)}.bottom-0{bottom:0}.bottom-3{bottom:calc(var(--spacing) * 3)}.left-0{left:0}.left-1\/2{left:50%}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[80\]{z-index:80}.z-\[100\]{z-index:100}.z-\[110\]{z-index:110}.z-\[111\]{z-index:111}.z-\[120\]{z-index:120}.z-\[130\]{z-index:130}.z-\[131\]{z-index:131}.z-\[200\]{z-index:200}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:0}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-1{margin-inline:var(--spacing)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-4{margin-block:calc(var(--spacing) * 4)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mr-1{margin-right:var(--spacing)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-3\.5{margin-bottom:calc(var(--spacing) * 3.5)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-\[7px\]{width:7px;height:7px}.size-\[11px\]{width:11px;height:11px}.size-\[13px\]{width:13px;height:13px}.size-\[14px\]{width:14px;height:14px}.size-\[15px\]{width:15px;height:15px}.size-\[16px\]{width:16px;height:16px}.size-full{width:100%;height:100%}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-7\.5{height:calc(var(--spacing) * 7.5)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-\[18px\]{height:18px}.h-\[22px\]{height:22px}.h-\[30px\]{height:30px}.h-\[92px\]{height:92px}.h-\[calc\(100\%-2rem\)\]{height:calc(100% - 2rem)}.h-dvh{height:100dvh}.h-full{height:100%}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-\[85dvh\]{max-height:85dvh}.max-h-\[min\(560px\,70vh\)\]{max-height:min(560px,70vh)}.min-h-0{min-height:0}.min-h-5{min-height:calc(var(--spacing) * 5)}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-11{min-height:calc(var(--spacing) * 11)}.min-h-40{min-height:calc(var(--spacing) * 40)}.min-h-52{min-height:calc(var(--spacing) * 52)}.min-h-\[34px\]{min-height:34px}.min-h-full{min-height:100%}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-6{width:calc(var(--spacing) * 6)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-\[30px\]{width:30px}.w-\[42px\]{width:42px}.w-\[52px\]{width:52px}.w-\[82px\]{width:82px}.w-\[116px\]{width:116px}.w-\[150px\]{width:150px}.w-\[360px\]{width:360px}.w-\[375px\]{width:375px}.w-\[380px\]{width:380px}.w-\[400px\]{width:400px}.w-\[420px\]{width:420px}.w-\[600px\]{width:600px}.w-\[clamp\(96px\,18vw\,240px\)\]{width:clamp(96px,18vw,240px)}.w-\[min\(840px\,calc\(100vw-32px\)\)\]{width:min(840px,100vw - 32px)}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[72px\]{max-width:72px}.max-w-\[92vw\]{max-width:92vw}.max-w-\[170px\]{max-width:170px}.max-w-\[180px\]{max-width:180px}.max-w-\[280px\]{max-width:280px}.max-w-\[420px\]{max-width:420px}.max-w-\[460px\]{max-width:460px}.max-w-\[720px\]{max-width:720px}.max-w-\[1100px\]{max-width:1100px}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-none{max-width:none}.min-w-0{min-width:0}.min-w-52{min-width:calc(var(--spacing) * 52)}.min-w-\[8ch\]{min-width:8ch}.min-w-\[128px\]{min-width:128px}.min-w-\[var\(--anchor-width\)\]{min-width:var(--anchor-width)}.flex-1{flex:1}.flex-none{flex:none}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.origin-\[var\(--transform-origin\)\]{transform-origin:var(--transform-origin)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-3{--tw-translate-x:calc(var(--spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-none{list-style-type:none}.grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.grid-rows-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-rows:auto minmax(0,1fr) auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}: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)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--color-border)}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[5px\]{border-radius:5px}.rounded-\[6px\]{border-radius:6px}.rounded-\[7px\]{border-radius:7px}.rounded-\[9px\]{border-radius:9px}.rounded-\[18px\]{border-radius:18px}.rounded-\[28px\]{border-radius:28px}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.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-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-accent-email,.border-accent-email\/40{border-color:var(--color-accent-email)}@supports (color:color-mix(in lab, red, red)){.border-accent-email\/40{border-color:color-mix(in oklab, var(--color-accent-email) 40%, transparent)}}.border-border{border-color:var(--color-border)}.border-border-subtle{border-color:var(--color-border-subtle)}.border-border\/80{border-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.border-border\/80{border-color:color-mix(in oklab, var(--color-border) 80%, transparent)}}.border-status-error\/30{border-color:var(--color-status-error)}@supports (color:color-mix(in lab, red, red)){.border-status-error\/30{border-color:color-mix(in oklab, var(--color-status-error) 30%, transparent)}}.border-status-error\/40{border-color:var(--color-status-error)}@supports (color:color-mix(in lab, red, red)){.border-status-error\/40{border-color:color-mix(in oklab, var(--color-status-error) 40%, transparent)}}.border-status-success\/40{border-color:var(--color-status-success)}@supports (color:color-mix(in lab, red, red)){.border-status-success\/40{border-color:color-mix(in oklab, var(--color-status-success) 40%, transparent)}}.border-status-warning\/45{border-color:var(--color-status-warning)}@supports (color:color-mix(in lab, red, red)){.border-status-warning\/45{border-color:color-mix(in oklab, var(--color-status-warning) 45%, transparent)}}.border-transparent{border-color:#0000}.bg-\[\#e9e2d8\]{background-color:#e9e2d8}.bg-\[var\(--editor-backdrop\,rgb\(0_0_0\/0\.28\)\)\]{background-color:var(--editor-backdrop,#00000047)}.bg-\[var\(--editor-canvas-bg\)\]{background-color:var(--editor-canvas-bg)}.bg-\[var\(--editor-scrollbar-thumb\)\]{background-color:var(--editor-scrollbar-thumb)}.bg-accent-email{background-color:var(--color-accent-email)}.bg-background,.bg-background\/45{background-color:var(--color-background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/45{background-color:color-mix(in oklab, var(--color-background) 45%, transparent)}}.bg-background\/92{background-color:var(--color-background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/92{background-color:color-mix(in oklab, var(--color-background) 92%, transparent)}}.bg-background\/95{background-color:var(--color-background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/95{background-color:color-mix(in oklab, var(--color-background) 95%, transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\/30{background-color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.bg-border{background-color:var(--color-border)}.bg-foreground{background-color:var(--color-foreground)}.bg-muted{background-color:var(--color-muted)}.bg-muted-foreground{background-color:var(--color-muted-foreground)}.bg-muted\/30{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/30{background-color:color-mix(in oklab, var(--color-muted) 30%, transparent)}}.bg-primary{background-color:var(--color-primary)}.bg-sel-soft{background-color:var(--color-sel-soft)}.bg-status-error,.bg-status-error\/5{background-color:var(--color-status-error)}@supports (color:color-mix(in lab, red, red)){.bg-status-error\/5{background-color:color-mix(in oklab, var(--color-status-error) 5%, transparent)}}.bg-status-success,.bg-status-success\/10{background-color:var(--color-status-success)}@supports (color:color-mix(in lab, red, red)){.bg-status-success\/10{background-color:color-mix(in oklab, var(--color-status-success) 10%, transparent)}}.bg-status-success\/12{background-color:var(--color-status-success)}@supports (color:color-mix(in lab, red, red)){.bg-status-success\/12{background-color:color-mix(in oklab, var(--color-status-success) 12%, transparent)}}.bg-status-warning{background-color:var(--color-status-warning)}.bg-surface-elevated{background-color:var(--color-surface-elevated)}.bg-surface-inset,.bg-surface-inset\/40{background-color:var(--color-surface-inset)}@supports (color:color-mix(in lab, red, red)){.bg-surface-inset\/40{background-color:color-mix(in oklab, var(--color-surface-inset) 40%, transparent)}}.bg-surface-inset\/80{background-color:var(--color-surface-inset)}@supports (color:color-mix(in lab, red, red)){.bg-surface-inset\/80{background-color:color-mix(in oklab, var(--color-surface-inset) 80%, transparent)}}.bg-transparent{background-color:#0000}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-10{padding-inline:calc(var(--spacing) * 10)}.px-\[7px\]{padding-inline:7px}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-\[3px\]{padding-block:3px}.py-px{padding-block:1px}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pb-12{padding-bottom:calc(var(--spacing) * 12)}.pb-24{padding-bottom:calc(var(--spacing) * 24)}.pl-1\.5{padding-left:calc(var(--spacing) * 1.5)}.pl-2{padding-left:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.82em\]{font-size:.82em}.text-\[9px\]{font-size:9px}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.04em\]{--tw-tracking:.04em;letter-spacing:.04em}.tracking-\[0\.05em\]{--tw-tracking:.05em;letter-spacing:.05em}.tracking-\[0\.06em\]{--tw-tracking:.06em;letter-spacing:.06em}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent-email{color:var(--color-accent-email)}.text-background{color:var(--color-background)}.text-foreground{color:var(--color-foreground)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-placeholder{color:var(--color-placeholder)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-status-error{color:var(--color-status-error)}.text-status-success{color:var(--color-status-success)}.text-status-warning{color:var(--color-status-warning)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.\[color-scheme\:light\]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);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_0_0_1px_var\(--accent-email\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,var(--accent-email));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--shadow-floating\)\]{--tw-shadow:var(--shadow-floating);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--shadow-lg\)\]{--tw-shadow:var(--shadow-lg);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--shadow-md\)\]{--tw-shadow:var(--shadow-md);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--shadow-sm\)\]{--tw-shadow:var(--shadow-sm);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--shadow-xl\)\]{--tw-shadow:var(--shadow-xl);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--shadow-xs\)\]{--tw-shadow:var(--shadow-xs);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-accent-email\/20{--tw-ring-color:var(--color-accent-email)}@supports (color:color-mix(in lab, red, red)){.ring-accent-email\/20{--tw-ring-color:color-mix(in oklab, var(--color-accent-email) 20%, transparent)}}.ring-primary{--tw-ring-color:var(--color-primary)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-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,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-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))}.transition-\[border-color\,box-shadow\]{transition-property:border-color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,background-color\,border-color\,box-shadow\]{transition-property:color,background-color,border-color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[transform\,scale\,opacity\]{transition-property:transform,scale,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,transform\,box-shadow\]{transition-property:width,transform,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-180{--tw-duration:.18s;transition-duration:.18s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[overflow-anchor\:none\]{overflow-anchor:none}.ring-inset{--tw-ring-inset:inset}.placeholder\:text-muted-foreground\/60::placeholder{color:var(--color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.placeholder\:text-muted-foreground\/60::placeholder{color:color-mix(in oklab, var(--color-muted-foreground) 60%, transparent)}}.placeholder\:text-placeholder::placeholder{color:var(--color-placeholder)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{content:var(--tw-content);inset-block:0}.before\:left-1\/2:before{content:var(--tw-content);left:50%}.before\:w-px:before{content:var(--tw-content);width:1px}.before\:-translate-x-1\/2:before{content:var(--tw-content);--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.before\:bg-border:before{content:var(--tw-content);background-color:var(--color-border)}.before\:transition-colors:before{content:var(--tw-content);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-1\/2:after{content:var(--tw-content);top:50%}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-10:after{content:var(--tw-content);height:calc(var(--spacing) * 10)}.after\:w-1:after{content:var(--tw-content);width:var(--spacing)}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.after\:-translate-y-1\/2:after{content:var(--tw-content);--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:2147483647px}.after\:bg-muted-foreground\/35:after{content:var(--tw-content);background-color:var(--color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.after\:bg-muted-foreground\/35:after{background-color:color-mix(in oklab, var(--color-muted-foreground) 35%, transparent)}}.after\:opacity-60:after{content:var(--tw-content);opacity:.6}.after\:transition-opacity:after{content:var(--tw-content);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.first\:mt-0:first-child{margin-top:0}.read-only\:bg-muted:read-only{background-color:var(--color-muted)}.read-only\:shadow-none:read-only{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-within\:ring-\[3px\]:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (hover:hover){.hover\:border-sel-mid:hover{border-color:var(--color-sel-mid)}.hover\:bg-\[var\(--editor-scrollbar-thumb-hover\)\]:hover{background-color:var(--editor-scrollbar-thumb-hover)}.hover\:bg-muted:hover{background-color:var(--color-muted)}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:text-status-error:hover{color:var(--color-status-error)}.hover\:opacity-90:hover{opacity:.9}.hover\:before\:w-0\.5:hover:before{content:var(--tw-content);width:calc(var(--spacing) * .5)}.hover\:before\:bg-accent-email:hover:before,.hover\:after\:bg-accent-email:hover:after{content:var(--tw-content);background-color:var(--color-accent-email)}.hover\:after\:opacity-100:hover:after{content:var(--tw-content);opacity:1}}.focus\:bg-background:focus,.focus-visible\:bg-background:focus-visible{background-color:var(--color-background)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.active\:translate-y-px:active{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.active\:before\:bg-accent-email:active:before{content:var(--tw-content);background-color:var(--color-accent-email)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-surface-inset:disabled{background-color:var(--color-surface-inset)}.disabled\:text-muted-foreground:disabled{color:var(--color-muted-foreground)}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}@media (hover:hover){.disabled\:hover\:bg-transparent:disabled:hover{background-color:#0000}}.data-highlighted\:bg-muted[data-highlighted]{background-color:var(--color-muted)}.data-\[ending-style\]\:scale-95[data-ending-style]{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-\[ending-style\]\:opacity-0[data-ending-style]{opacity:0}.data-\[highlighted\]\:bg-sel-soft[data-highlighted]{background-color:var(--color-sel-soft)}.data-\[highlighted\]\:text-accent-email[data-highlighted]{color:var(--color-accent-email)}.data-\[starting-style\]\:scale-95[data-starting-style]{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-\[starting-style\]\:opacity-0[data-starting-style]{opacity:0}@media (width>=40rem){.sm\:block{display:block}.sm\:inline{display:inline}.sm\:gap-2\.5{gap:calc(var(--spacing) * 2.5)}.sm\:px-4{padding-inline:calc(var(--spacing) * 4)}}.dark\:grid:where(.dark,.dark *){display:grid}.dark\:hidden:where(.dark,.dark *){display:none}.dark\:bg-\[\#0b141a\]:where(.dark,.dark *){background-color:#0b141a}.dark\:\[color-scheme\:dark\]:where(.dark,.dark *){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.dark\:read-only\:bg-muted\/40:where(.dark,.dark *):read-only{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.dark\:read-only\:bg-muted\/40:where(.dark,.dark *):read-only{background-color:color-mix(in oklab, var(--color-muted) 40%, transparent)}}.dark\:read-only\:shadow-none:where(.dark,.dark *):read-only{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.\[\&_\[data-channel-button\]\]\:px-1\.5 [data-channel-button]{padding-inline:calc(var(--spacing) * 1.5)}.\[\&_\[data-channel-label\]\]\:hidden [data-channel-label]{display:none}}:root{--accent-email:oklch(62% .21 255);--sel-soft:oklch(62% .21 255/.08);--sel-mid:oklch(62% .21 255/.35);--editor-scrollbar-thumb:oklch(78% .01 286);--editor-scrollbar-thumb-hover:oklch(62% .015 286)}.dark{--sel-soft:oklch(62% .21 255/.16);--editor-scrollbar-thumb:oklch(32% .01 286);--editor-scrollbar-thumb-hover:oklch(42% .012 286)}.samva-editor-shell{--editor-bg:var(--background);--editor-fg:var(--foreground);--editor-surface:var(--card);--editor-surface-elevated:var(--surface-elevated);--editor-surface-inset:var(--surface-inset);--editor-muted:var(--muted);--editor-muted-fg:var(--muted-foreground);--editor-placeholder:var(--placeholder);--editor-border:var(--border);--editor-border-subtle:var(--border-subtle);--editor-hover:var(--muted);--editor-active:var(--accent);--editor-accent:var(--accent-email);--editor-accent-fg:oklch(100% 0 0);--editor-selection-soft:var(--sel-soft);--editor-selection-mid:var(--sel-mid);--editor-focus-ring:var(--ring);--editor-disabled-fg:var(--muted-foreground);--editor-success:var(--status-success);--editor-warning:var(--status-warning);--editor-error:var(--status-error);--editor-info:var(--status-info);--editor-canvas-bg:var(--surface-inset);--editor-canvas-grid:var(--border)}@supports (color:color-mix(in lab, red, red)){.samva-editor-shell{--editor-canvas-grid:color-mix(in oklab, var(--border) 64%, transparent)}}.samva-editor-shell{--editor-canvas-hover:var(--editor-selection-mid);--editor-canvas-selected:var(--editor-accent);--editor-canvas-selected-fg:var(--editor-accent-fg);--editor-canvas-generated:oklch(62% .21 305);--editor-canvas-document-bg:oklch(100% 0 0);--editor-backdrop:oklab(0% none none/.28);--editor-shadow-control:var(--shadow-xs);--editor-shadow-overlay:var(--shadow-lg);--editor-shadow-floating:var(--shadow-floating);background-color:var(--editor-bg);color:var(--editor-fg);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-size:13px;line-height:1.45}.samva-editor-frame{container:samva-editor/inline-size}.dark .samva-editor-shell{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@container samva-editor (width<=1279px){.samva-editor-shell[data-layout=wide] [data-editor-rail=right],.samva-editor-shell[data-layout=wide] [data-editor-resize=right]{display:none}}@container samva-editor (width<=979px){.samva-editor-shell[data-layout=wide] [data-editor-rail=left],.samva-editor-shell[data-layout=wide] [data-editor-resize=left]{display:none}}.samva-inspector-content>div{border:0;border-bottom:1px solid var(--border-subtle);background:0 0;border-radius:0;margin:0;padding-inline:12px}.samva-inspector-content>div:last-child{border-bottom:0}.samva-radius-slider{appearance:none;cursor:ew-resize;background:0 0;height:18px}.samva-radius-slider::-webkit-slider-runnable-track{background:var(--border);border-radius:999px;height:3px}.samva-radius-slider::-webkit-slider-thumb{appearance:none;border:1px solid var(--border);background:var(--foreground);width:12px;height:12px;box-shadow:var(--editor-shadow-control);border-radius:999px;margin-top:-4.5px}.samva-radius-slider::-moz-range-track{background:var(--border);border-radius:999px;height:3px}.samva-radius-slider::-moz-range-thumb{border:1px solid var(--border);background:var(--foreground);width:12px;height:12px;box-shadow:var(--editor-shadow-control);border-radius:999px}.samva-radius-slider:focus-visible{outline:2px solid var(--accent-email)}@supports (color:color-mix(in lab, red, red)){.samva-radius-slider:focus-visible{outline:2px solid color-mix(in oklab, var(--accent-email) 55%, transparent)}}.samva-radius-slider:focus-visible{outline-offset:3px}.samva-radius-slider-overridden::-webkit-slider-thumb{background:var(--accent-email)}.samva-radius-slider-overridden::-moz-range-thumb{background:var(--accent-email)}@container samva-editor (width<=719px){.samva-editor-workspace .samva-editor-scroll{padding-inline:16px;padding-top:16px}.samva-editor-shell button{touch-action:manipulation}}.samva-editor-workspace{background-color:var(--editor-canvas-bg);background-image:linear-gradient(to right, var(--editor-canvas-grid) 1px, transparent 1px), linear-gradient(to bottom, var(--editor-canvas-grid) 1px, transparent 1px);background-position:top;background-size:24px 24px}.dark .samva-editor-workspace{--editor-canvas-grid:var(--editor-border)}@supports (color:color-mix(in lab, red, red)){.dark .samva-editor-workspace{--editor-canvas-grid:color-mix(in oklab, var(--editor-border) 55%, transparent)}}.samva-editor-scroll{color-scheme:inherit;scrollbar-width:thin;scrollbar-color:var(--editor-scrollbar-thumb) transparent}.samva-editor-scroll::-webkit-scrollbar{width:10px;height:10px}.samva-editor-scroll::-webkit-scrollbar-track{background:0 0}.samva-editor-scroll::-webkit-scrollbar-thumb{background-color:var(--editor-scrollbar-thumb);background-clip:padding-box;border:2px solid #0000;border-radius:999px}.samva-editor-scroll::-webkit-scrollbar-thumb:hover{background-color:var(--editor-scrollbar-thumb-hover);background-clip:padding-box}@media (prefers-reduced-motion:reduce){.samva-editor-shell,.samva-editor-shell *,.samva-editor-shell :before,.samva-editor-shell :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}:root{--background:oklch(100% 0 0);--foreground:oklch(14.1% .005 285.823);--muted:oklch(96.7% .001 286.375);--muted-foreground:oklch(55.2% .016 285.938);--border:oklch(92% .004 286.32);--border-subtle:oklch(94% .002 286);--surface-inset:oklch(97.5% .001 286);--surface-elevated:oklch(99.5% 0 0);--primary:oklch(21% .006 285.885);--primary-foreground:oklch(98.5% 0 0);--placeholder:oklch(65% .012 285.9);--status-success:oklch(65% .22 155);--status-warning:oklch(75% .18 75);--status-error:oklch(57.7% .245 27.325);--shadow-md:0 2px 4px -1px oklch(0% 0 0/.06), 0 6px 12px -2px oklch(0% 0 0/.08);--shadow-xl:0 12px 24px -6px oklch(0% 0 0/.1), 0 32px 64px -12px oklch(0% 0 0/.16)}.dark{--background:oklch(14.1% .005 285.823);--foreground:oklch(98.5% 0 0);--muted:oklch(27.4% .006 286.033);--muted-foreground:oklch(75% .015 286.067);--border:oklch(100% 0 0/.1);--border-subtle:oklch(100% 0 0/.07);--surface-inset:oklch(16% .004 286);--surface-elevated:oklch(18% .005 286);--primary:oklch(92% .004 286.32);--primary-foreground:oklch(21% .006 285.885);--placeholder:oklch(68% .012 285.9);--shadow-md:0 2px 4px -1px oklch(0% 0 0/.4), 0 6px 12px -2px oklch(0% 0 0/.45);--shadow-xl:0 12px 24px -6px oklch(0% 0 0/.55), 0 32px 64px -12px oklch(0% 0 0/.7)}html,body,#root{height:100%;margin:0}html{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}html.dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}body{color:var(--foreground);background:var(--background);-webkit-font-smoothing:antialiased;font-family:ui-sans-serif,system-ui,sans-serif;font-size:13px;line-height:1.45;overflow:hidden}@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}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@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-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@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-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}
package/dist/email.d.ts DELETED
@@ -1,60 +0,0 @@
1
- import { CompiledEmailProject, TransformOptions, compileEmailProject } from "@samva/markup/compiler";
2
- import { TemplateDefinition } from "@samva/markup/template";
3
- import { SerializeEmailOptions } from "@samva/markup/email/html";
4
- import { renderEmail } from "@samva/markup/email/render";
5
- //#region src/email.d.ts
6
- interface EmailProjectSource {
7
- /** Project-relative path to text content, or to bytes for an imported file. */
8
- readonly [path: string]: string | Uint8Array;
9
- }
10
- interface RenderedEmailProject extends ReturnType<typeof renderEmail> {
11
- readonly compiled: CompiledEmailProject;
12
- }
13
- /**
14
- * One compiled entry, evaluated. `template` is `undefined` when the entry has no
15
- * default export, which is how a helper module is told apart from a template
16
- * without inspecting authored source.
17
- */
18
- interface LoadedEmailEntry {
19
- readonly template: TemplateDefinition<unknown> | undefined;
20
- readonly renderEmail: typeof renderEmail;
21
- readonly compiled: CompiledEmailProject;
22
- }
23
- /** A long-lived evaluator. Every render shares its module graph, as a dev server does. */
24
- interface EmailRenderer {
25
- /**
26
- * Compile one entry and evaluate the compiler's generated wrapper. Callers
27
- * that render several inputs against one template load once and render many
28
- * times; nothing here renders on its own.
29
- *
30
- * `namespace` names the id space the entry's modules occupy. Reusing one
31
- * keeps a watch session's ids stable across reloads, while a fresh one
32
- * isolates an unrelated project. Omitting it takes a new namespace each time.
33
- * Every load re-evaluates the namespace's own modules, so the wrapper binds
34
- * the sheets its imports registered; `invalidate` reaches the modules shared
35
- * between namespaces.
36
- */
37
- readonly load: (source: EmailProjectSource, entryPoint: string, namespace?: string) => Promise<LoadedEmailEntry>;
38
- /**
39
- * Compile, evaluate and render one input in a single call. `serialize` reaches
40
- * the serializer, so a caller that renders for an editor asks for
41
- * `instancePaths` here; a render that will be delivered passes nothing.
42
- */
43
- readonly render: (source: EmailProjectSource, entryPoint: string, input: unknown, serialize?: SerializeEmailOptions) => Promise<RenderedEmailProject>;
44
- /** Drop every evaluated module so the next load re-reads changed source. */
45
- readonly invalidate: () => void;
46
- readonly close: () => Promise<void>;
47
- }
48
- /**
49
- * One Vite server, many renders. Each project gets its own id namespace so their
50
- * modules coexist in one graph — which also means they share one instance of
51
- * `@samva/markup`, exactly as a published consumer's install does. That shared
52
- * instance holds the stylesheet registry, which is why the compiler's generated
53
- * reset module runs first in every project's graph.
54
- */
55
- declare const createEmailRenderer: (options: TransformOptions, ssrExternal?: readonly string[]) => Promise<EmailRenderer>;
56
- /** Compile and render one project, then release the evaluator. */
57
- declare const renderEmailProject: (source: EmailProjectSource, entryPoint: string, options: TransformOptions, input: unknown) => Promise<RenderedEmailProject>;
58
- //#endregion
59
- export { type CompiledEmailProject, EmailProjectSource, EmailRenderer, LoadedEmailEntry, RenderedEmailProject, compileEmailProject, createEmailRenderer, renderEmailProject };
60
- //# sourceMappingURL=email.d.ts.map
package/dist/email.js DELETED
@@ -1,126 +0,0 @@
1
- import { dirname } from "node:path";
2
- import { fileURLToPath } from "node:url";
3
- import { compileEmailProject } from "@samva/markup/compiler";
4
- //#region src/email.ts
5
- const VIRTUAL = "/@samva-email/";
6
- /** This package's own directory: `src` in the repository, `dist` when published. */
7
- const RESOLUTION_ROOT = dirname(fileURLToPath(import.meta.url));
8
- const SCRIPT = /\.[cm]?[jt]sx?$/;
9
- const qualify = (path) => SCRIPT.test(path) ? path : `${path}.js`;
10
- const unqualify = (id) => id.endsWith(".js") && !SCRIPT.test(id.slice(0, -3)) ? id.slice(0, -3) : id;
11
- const resolveWithin = (graph, id, importer) => {
12
- const own = id.startsWith(graph.prefix) ? unqualify(id.slice(graph.prefix.length)) : id;
13
- if (graph.files[own] !== void 0) return `${graph.prefix}${qualify(own)}`;
14
- if (!own.startsWith(".")) return void 0;
15
- const segments = [...(importer?.startsWith(graph.prefix) === true ? unqualify(importer.slice(graph.prefix.length)) : "").split("/").slice(0, -1), ...own.split("/")];
16
- const parts = [];
17
- for (const segment of segments) {
18
- if (segment === "." || segment === "") continue;
19
- if (segment === "..") parts.pop();
20
- else parts.push(segment);
21
- }
22
- const path = parts.join("/");
23
- for (const candidate of [
24
- path,
25
- `${path}.ts`,
26
- `${path}.tsx`,
27
- `${path}.js`,
28
- `${path}/index.ts`
29
- ]) if (graph.files[candidate] !== void 0) return `${graph.prefix}${qualify(candidate)}`;
30
- };
31
- /**
32
- * One Vite server, many renders. Each project gets its own id namespace so their
33
- * modules coexist in one graph — which also means they share one instance of
34
- * `@samva/markup`, exactly as a published consumer's install does. That shared
35
- * instance holds the stylesheet registry, which is why the compiler's generated
36
- * reset module runs first in every project's graph.
37
- */
38
- const createEmailRenderer = async (options, ssrExternal = []) => {
39
- const vite = await import("vite").catch(() => void 0);
40
- if (vite === void 0) throw new Error("`vite` is required to render an email project locally.");
41
- const graphs = /* @__PURE__ */ new Map();
42
- let anonymous = 0;
43
- let evaluating = Promise.resolve();
44
- const evaluate = (operation) => {
45
- const running = evaluating.then(operation, operation);
46
- evaluating = running.catch(() => void 0);
47
- return running;
48
- };
49
- const graphFor = (id) => id === void 0 ? void 0 : [...graphs.values()].find((graph) => id.startsWith(graph.prefix));
50
- const server = await vite.createServer({
51
- root: RESOLUTION_ROOT,
52
- configFile: false,
53
- logLevel: "silent",
54
- server: {
55
- middlewareMode: true,
56
- hmr: false
57
- },
58
- optimizeDeps: {
59
- noDiscovery: true,
60
- include: []
61
- },
62
- oxc: { jsx: {
63
- runtime: "automatic",
64
- importSource: "@samva/markup/email"
65
- } },
66
- ...ssrExternal.length === 0 ? {} : { ssr: { external: [...ssrExternal] } },
67
- plugins: [{
68
- name: "samva:email-project",
69
- enforce: "pre",
70
- resolveId: (id, importer) => {
71
- const graph = graphFor(id) ?? graphFor(importer);
72
- return graph === void 0 ? void 0 : resolveWithin(graph, id, importer);
73
- },
74
- load: (id) => {
75
- const graph = graphFor(id);
76
- return graph === void 0 ? void 0 : graph.files[unqualify(id.slice(graph.prefix.length))];
77
- }
78
- }]
79
- });
80
- const load = async (source, entryPoint, namespace) => {
81
- const key = namespace ?? `#${anonymous += 1}`;
82
- const graph = graphs.get(key) ?? {
83
- files: {},
84
- prefix: `${VIRTUAL}${graphs.size}/`
85
- };
86
- graphs.set(key, graph);
87
- const compiled = await compileEmailProject(source, entryPoint, options);
88
- graph.files = compiled.files;
89
- const module = await evaluate(async () => {
90
- const ssr = server.environments.ssr;
91
- for (const node of ssr.moduleGraph.idToModuleMap.values()) if (node.id?.startsWith(graph.prefix) === true) ssr.moduleGraph.invalidateModule(node);
92
- return await server.ssrLoadModule(`${graph.prefix}${qualify(compiled.entryPoint)}`);
93
- });
94
- return {
95
- template: module.template,
96
- renderEmail: module.renderEmail,
97
- compiled
98
- };
99
- };
100
- return {
101
- load,
102
- render: async (source, entryPoint, input, serialize) => {
103
- const entry = await load(source, entryPoint);
104
- if (entry.template === void 0) throw new TypeError(`${entryPoint} does not default-export a template definition.`);
105
- return {
106
- ...entry.renderEmail(entry.template, input, serialize),
107
- compiled: entry.compiled
108
- };
109
- },
110
- invalidate: () => server.moduleGraph.invalidateAll(),
111
- close: () => server.close()
112
- };
113
- };
114
- /** Compile and render one project, then release the evaluator. */
115
- const renderEmailProject = async (source, entryPoint, options, input) => {
116
- const renderer = await createEmailRenderer(options);
117
- try {
118
- return await renderer.render(source, entryPoint, input);
119
- } finally {
120
- await renderer.close();
121
- }
122
- };
123
- //#endregion
124
- export { compileEmailProject, createEmailRenderer, renderEmailProject };
125
-
126
- //# sourceMappingURL=email.js.map
package/dist/emit.d.ts DELETED
@@ -1,99 +0,0 @@
1
- import { COMPILER_VERSION } from "@samva/markup/compile";
2
- import { Diagnostic } from "@samva/markup/diagnostics";
3
- import { TemplateVariable } from "@samva/markup/render-template";
4
- //#region src/emit.d.ts
5
- /** Structured channel preview emission, independent of the email execution runtime. */
6
- type PreviewChannel = "unknown" | "sms" | "whatsapp";
7
- type WhatsAppButtonPreview = {
8
- readonly type: "QUICK_REPLY";
9
- readonly text: string;
10
- } | {
11
- readonly type: "URL";
12
- readonly text: string;
13
- readonly url: string;
14
- } | {
15
- readonly type: "PHONE_NUMBER";
16
- readonly text: string;
17
- readonly phone_number: string;
18
- } | {
19
- readonly type: "COPY_CODE";
20
- readonly example: string;
21
- };
22
- interface AuthoringValidationSummary {
23
- readonly ok: boolean;
24
- readonly diagnostics: number;
25
- readonly warnings: number;
26
- readonly repairableDiagnostics: number;
27
- readonly placeholders: readonly string[];
28
- readonly darkClassCount: number;
29
- }
30
- /** The compiled payload for one template, discriminated by channel. */
31
- type CompiledPreview = {
32
- readonly channel: "unknown";
33
- readonly ok: false;
34
- readonly diagnostics: readonly Diagnostic[];
35
- readonly warnings?: readonly Diagnostic[];
36
- } | {
37
- readonly channel: "sms";
38
- readonly ok: boolean;
39
- readonly body?: string | undefined;
40
- readonly encoding?: "gsm7" | "ucs2" | undefined;
41
- readonly estimatedSegments?: number | undefined;
42
- readonly maxSegments?: number | undefined;
43
- readonly warnings?: readonly Diagnostic[] | undefined;
44
- readonly diagnostics?: readonly Diagnostic[] | undefined;
45
- } | {
46
- readonly channel: "whatsapp";
47
- readonly ok: boolean;
48
- readonly headerType?: "text" | "image" | "video" | "document" | undefined;
49
- readonly headerContent?: string | undefined;
50
- readonly bodyContent?: string | undefined;
51
- readonly footerContent?: string | undefined;
52
- readonly buttons?: readonly WhatsAppButtonPreview[] | undefined;
53
- readonly warnings?: readonly Diagnostic[] | undefined;
54
- readonly diagnostics?: readonly Diagnostic[] | undefined;
55
- };
56
- /**
57
- * One template's full preview payload: its emitted SML, inferred variable
58
- * schema, emit diagnostics, the derived channel, and the channel's compiled
59
- * output. `ok` is true only when the template emitted cleanly AND compiled
60
- * without error — the shape the preview client and the CLI both gate on.
61
- */
62
- interface EmittedTemplatePreview {
63
- readonly name: string;
64
- readonly ok: boolean;
65
- readonly channel: PreviewChannel;
66
- /** Emitted SML, present whenever the render itself succeeded (even if unstable). */
67
- readonly source: string | undefined;
68
- readonly variables: readonly TemplateVariable[];
69
- readonly diagnostics: readonly Diagnostic[];
70
- readonly compiled: CompiledPreview;
71
- readonly validation: AuthoringValidationSummary;
72
- }
73
- /** The aggregate for one module file. */
74
- interface ModulePreview {
75
- readonly ok: boolean;
76
- readonly compilerVersion: string;
77
- readonly templates: readonly EmittedTemplatePreview[];
78
- readonly diagnostics: readonly Diagnostic[];
79
- }
80
- /**
81
- * Emits + compiles the one supported template export from an already-evaluated
82
- * TSX file. A template file owns exactly one template: its `default` export.
83
- * Named exports are ordinary helpers and are never inspected or invoked.
84
- *
85
- * `name` comes from the file identity rather than the JavaScript function name,
86
- * keeping the catalog, build output, and CLI push slug stable when a developer
87
- * changes the implementation shape of the default export. Direct callers of
88
- * `@samva/vite/emit` must pass that file-backed name as the first argument.
89
- */
90
- declare const emitModulePreview: (name: string, moduleExports: Record<string, unknown>) => ModulePreview;
91
- /**
92
- * Compiles a raw SML source string directly (no TSX). Used by tests and any
93
- * caller that already holds emitted SML. Wraps the single source in the same
94
- * preview shape so the client renders compiled SML identically to TSX emission.
95
- */
96
- declare const compileSourcePreview: (name: string, source: string) => EmittedTemplatePreview;
97
- //#endregion
98
- export { AuthoringValidationSummary, COMPILER_VERSION, CompiledPreview, EmittedTemplatePreview, ModulePreview, PreviewChannel, WhatsAppButtonPreview, compileSourcePreview, emitModulePreview };
99
- //# sourceMappingURL=emit.d.ts.map
package/dist/emit.js DELETED
@@ -1,142 +0,0 @@
1
- import { COMPILER_VERSION, compileSource } from "@samva/markup/compile";
2
- import { emitModule } from "@samva/markup/emit";
3
- import { Result } from "better-result";
4
- //#region src/emit.ts
5
- const countRepairable = (diagnostics) => diagnostics.filter((diagnostic) => diagnostic.repair !== void 0).length;
6
- const uniquePlaceholders = (source) => source === void 0 ? [] : [...new Set([...source.matchAll(/{{\s*([A-Za-z_][\w.-]*)\s*}}/g)].map((match) => match[1] ?? ""))].filter(Boolean).sort();
7
- const darkClassCount = (source) => source === void 0 ? 0 : (source.match(/\bdark:/g) ?? []).length;
8
- const validationSummary = (source, emitDiagnostics, compiled) => {
9
- const warnings = compiled.warnings ?? [];
10
- const diagnostics = compiled.diagnostics ?? [];
11
- return {
12
- ok: compiled.ok && emitDiagnostics.length === 0,
13
- diagnostics: emitDiagnostics.length + diagnostics.length,
14
- warnings: warnings.length,
15
- repairableDiagnostics: countRepairable(emitDiagnostics) + countRepairable(diagnostics),
16
- placeholders: uniquePlaceholders(source),
17
- darkClassCount: darkClassCount(source)
18
- };
19
- };
20
- /** Compile one source into its channel-polymorphic preview. */
21
- const compiledPreview = (source) => {
22
- const probe = compileSource(source);
23
- if (Result.isError(probe)) return {
24
- channel: "unknown",
25
- compileOk: false,
26
- compiled: {
27
- channel: "unknown",
28
- ok: false,
29
- diagnostics: probe.error.diagnostics
30
- }
31
- };
32
- const compiled = probe.value;
33
- if (compiled.channel === "sms") return {
34
- channel: "sms",
35
- compileOk: true,
36
- compiled: {
37
- channel: "sms",
38
- ok: true,
39
- body: compiled.body,
40
- encoding: compiled.encoding,
41
- estimatedSegments: compiled.estimatedSegments,
42
- maxSegments: compiled.maxSegments,
43
- warnings: compiled.warnings
44
- }
45
- };
46
- return {
47
- channel: "whatsapp",
48
- compileOk: true,
49
- compiled: {
50
- channel: "whatsapp",
51
- ok: true,
52
- headerType: compiled.headerType,
53
- headerContent: compiled.headerContent,
54
- bodyContent: compiled.bodyContent,
55
- footerContent: compiled.footerContent,
56
- buttons: compiled.buttons,
57
- warnings: compiled.warnings
58
- }
59
- };
60
- };
61
- const previewTemplate = (emitted) => {
62
- if (emitted.source === void 0) return {
63
- name: emitted.name,
64
- ok: false,
65
- channel: "unknown",
66
- source: void 0,
67
- variables: emitted.variables,
68
- diagnostics: emitted.diagnostics,
69
- compiled: {
70
- channel: "unknown",
71
- ok: false,
72
- diagnostics: []
73
- },
74
- validation: validationSummary(void 0, emitted.diagnostics, {
75
- channel: "unknown",
76
- ok: false,
77
- diagnostics: []
78
- })
79
- };
80
- const { channel, compileOk, compiled } = compiledPreview(emitted.source);
81
- return {
82
- name: emitted.name,
83
- ok: emitted.ok && compileOk,
84
- channel,
85
- source: emitted.source,
86
- variables: emitted.variables,
87
- diagnostics: emitted.diagnostics,
88
- compiled,
89
- validation: validationSummary(emitted.source, emitted.diagnostics, compiled)
90
- };
91
- };
92
- /**
93
- * Emits + compiles the one supported template export from an already-evaluated
94
- * TSX file. A template file owns exactly one template: its `default` export.
95
- * Named exports are ordinary helpers and are never inspected or invoked.
96
- *
97
- * `name` comes from the file identity rather than the JavaScript function name,
98
- * keeping the catalog, build output, and CLI push slug stable when a developer
99
- * changes the implementation shape of the default export. Direct callers of
100
- * `@samva/vite/emit` must pass that file-backed name as the first argument.
101
- */
102
- const emitModulePreview = (name, moduleExports) => {
103
- const emitted = emitModule(moduleExports);
104
- if (emitted.templates.length === 0) return {
105
- ok: false,
106
- compilerVersion: COMPILER_VERSION,
107
- templates: [],
108
- diagnostics: emitted.diagnostics
109
- };
110
- const templates = emitted.templates.map((template) => previewTemplate({
111
- ...template,
112
- name
113
- }));
114
- return {
115
- ok: emitted.ok && templates.every((template) => template.ok),
116
- compilerVersion: COMPILER_VERSION,
117
- templates,
118
- diagnostics: emitted.diagnostics
119
- };
120
- };
121
- /**
122
- * Compiles a raw SML source string directly (no TSX). Used by tests and any
123
- * caller that already holds emitted SML. Wraps the single source in the same
124
- * preview shape so the client renders compiled SML identically to TSX emission.
125
- */
126
- const compileSourcePreview = (name, source) => {
127
- const { channel, compileOk, compiled } = compiledPreview(source);
128
- return {
129
- name,
130
- ok: compileOk,
131
- channel,
132
- source,
133
- variables: [],
134
- diagnostics: [],
135
- compiled,
136
- validation: validationSummary(source, [], compiled)
137
- };
138
- };
139
- //#endregion
140
- export { COMPILER_VERSION, compileSourcePreview, emitModulePreview };
141
-
142
- //# sourceMappingURL=emit.js.map