@marktiderman/genesis-sites 0.1.0 → 0.2.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/README.md +152 -8
- package/dist/assets/islands.77d11f5697.js +1 -0
- package/dist/assets/sites-forms.4e6aa42497.css +10 -0
- package/dist/assets/sites-forms.css +1 -1
- package/dist/assets/sites.css +1 -1
- package/dist/assets/sites.e1ffd2708b.css +2 -0
- package/dist/blocks.d.ts +1 -1
- package/dist/blocks.js +5 -1
- package/dist/blocks.js.map +1 -1
- package/dist/chunk-3VKTBE7S.js +69 -0
- package/dist/chunk-3VKTBE7S.js.map +1 -0
- package/dist/chunk-C375ZPU2.js +2241 -0
- package/dist/chunk-C375ZPU2.js.map +1 -0
- package/dist/{chunk-GA7U3CIN.js → chunk-IXMY4B56.js} +229 -10
- package/dist/chunk-IXMY4B56.js.map +1 -0
- package/dist/chunk-VZUDRPFG.js +13 -0
- package/dist/chunk-VZUDRPFG.js.map +1 -0
- package/dist/{chunk-KEF3V5ZN.js → chunk-ZGWGQGT2.js} +169 -73
- package/dist/chunk-ZGWGQGT2.js.map +1 -0
- package/dist/import.d.ts +130 -0
- package/dist/import.js +330 -0
- package/dist/import.js.map +1 -0
- package/dist/index.d.ts +40 -7
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/{registry-CdgVymsu.d.ts → registry-D_DCWRTc.d.ts} +274 -8
- package/dist/sections.d.ts +422 -6
- package/dist/sections.js +4 -2
- package/dist/{store-BzGw2i5J.d.ts → store-DkSycDhq.d.ts} +119 -53
- package/dist/supabase.d.ts +5 -5
- package/dist/supabase.js +115 -6
- package/dist/supabase.js.map +1 -1
- package/dist/web.d.ts +26 -8
- package/dist/web.js +142 -18
- package/dist/web.js.map +1 -1
- package/migrations/0001_genesis_sites.sql +64 -6
- package/migrations/0002_genesis_sites_posts.sql +404 -0
- package/migrations/tests/0001_genesis_sites.test.sql +30 -1
- package/migrations/tests/0002_genesis_sites_posts.test.sql +242 -0
- package/package.json +18 -10
- package/dist/assets/islands.230b20b9c4.js +0 -1
- package/dist/assets/sites-forms.5e6ebf31c3.css +0 -10
- package/dist/assets/sites.b28b796c6f.css +0 -2
- package/dist/chunk-43XUAO63.js +0 -1255
- package/dist/chunk-43XUAO63.js.map +0 -1
- package/dist/chunk-GA7U3CIN.js.map +0 -1
- package/dist/chunk-KEF3V5ZN.js.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
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-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction: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}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-mono:var(--font-mono);--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-7xl:80rem;--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);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--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-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-2xl:1rem;--animate-spin:spin 1s linear infinite;--aspect-video:16 / 9;--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:hsl(var(--accent));--font-display:var(--font-display)}}@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;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}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}:focus-visible{outline:2px solid hsl(var(--ring));outline-offset:2px}img{max-width:100%;height:auto}}@layer components{[data-gs-schedule]:has(input[data-day="0"]:checked) [data-panel]:not([data-panel="0"]),[data-gs-schedule]:has(input[data-day="1"]:checked) [data-panel]:not([data-panel="1"]),[data-gs-schedule]:has(input[data-day="2"]:checked) [data-panel]:not([data-panel="2"]),[data-gs-schedule]:has(input[data-day="3"]:checked) [data-panel]:not([data-panel="3"]),[data-gs-schedule]:has(input[data-day="4"]:checked) [data-panel]:not([data-panel="4"]),[data-gs-schedule]:has(input[data-day="5"]:checked) [data-panel]:not([data-panel="5"]),[data-gs-schedule]:has(input[data-day="6"]:checked) [data-panel]:not([data-panel="6"]){display:none}}@layer utilities{.pointer-events-none{pointer-events:none}.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}.inset-0{inset:0}.inset-x-0{inset-inline:0}.top-1\/3{top:33.3333%}.top-11{top:calc(var(--spacing) * 11)}.top-full{top:100%}.bottom-0{bottom:0}.left-1\/2{left:50%}.left-\[1\.375rem\]{left:1.375rem}.isolate{isolation:isolate}.-z-10{z-index:calc(10 * -1)}.z-10{z-index:10}.z-50{z-index:50}.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}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-auto{margin-inline:auto}.-mt-1{margin-top:calc(var(--spacing) * -1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mt-auto{margin-top:auto}.mb-1{margin-bottom:var(--spacing)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.field-sizing-content{field-sizing:content}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-\[16\/10\]{aspect-ratio:16/10}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-11{width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-14{width:calc(var(--spacing) * 14);height:calc(var(--spacing) * 14)}.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-full{height:100%}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-11{min-height:calc(var(--spacing) * 11)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-\[80px\]{min-height:80px}.min-h-screen{min-height:100vh}.w-10{width:calc(var(--spacing) * 10)}.w-24{width:calc(var(--spacing) * 24)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-32{max-width:calc(var(--spacing) * 32)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-\[1180px\]{max-width:1180px}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-prose{max-width:65ch}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:0}.min-w-11{min-width:calc(var(--spacing) * 11)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.scroll-mt-20{scroll-margin-top:calc(var(--spacing) * 20)}.list-none{list-style-type:none}.columns-1{columns:1}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[2\.75rem_1fr\]{grid-template-columns:2.75rem 1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.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-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}.gap-12{gap:calc(var(--spacing) * 12)}.gap-16{gap:calc(var(--spacing) * 16)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-x-10{column-gap:calc(var(--spacing) * 10)}.gap-x-12{column-gap:calc(var(--spacing) * 12)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}.gap-y-6{row-gap:calc(var(--spacing) * 6)}.gap-y-8{row-gap:calc(var(--spacing) * 8)}.gap-y-10{row-gap:calc(var(--spacing) * 10)}: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:hsl(var(--border))}.self-start{align-self:flex-start}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-t-xl{border-top-left-radius:calc(var(--radius) + 4px);border-top-right-radius:calc(var(--radius) + 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-y{border-block-style:var(--tw-border-style);border-block-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-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-solid{--tw-border-style:solid;border-style:solid}.border-border{border-color:hsl(var(--border))}.border-current,.border-current\/20{border-color:currentColor}@supports (color:color-mix(in lab, red, red)){.border-current\/20{border-color:color-mix(in oklab, currentcolor 20%, transparent)}}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.bg-background{background-color:hsl(var(--background))}.bg-border{background-color:hsl(var(--border))}.bg-current{background-color:currentColor}.bg-destructive{background-color:hsl(var(--destructive))}.bg-foreground,.bg-foreground\/80{background-color:hsl(var(--foreground))}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/80{background-color:color-mix(in oklab, hsl(var(--foreground)) 80%, transparent)}}.bg-muted{background-color:hsl(var(--muted))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-2{padding:calc(var(--spacing) * 2)}.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-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0{padding-block:0}.py-1{padding-block:var(--spacing)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-24{padding-block:calc(var(--spacing) * 24)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-10{padding-bottom:calc(var(--spacing) * 10)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.align-top{vertical-align:top}.font-display{font-family:var(--font-display)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.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-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-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.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-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.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)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-balance{text-wrap:balance}.text-pretty{text-wrap:pretty}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.text-background{color:hsl(var(--background))}.text-current{color:currentColor}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.accent-\[hsl\(var\(--primary\)\)\]{accent-color:hsl(var(--primary))}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px 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{--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-offset-background{--tw-ring-offset-color:hsl(var(--background))}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{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,)}.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-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))}.outline-none{--tw-outline-style:none;outline-style:none}.group-open\:rotate-180:is(:where(.group):is([open],:popover-open,:open) *){rotate:180deg}.peer-checked\:border-primary:is(:where(.peer):checked~*){border-color:hsl(var(--primary))}.peer-checked\:bg-primary:is(:where(.peer):checked~*){background-color:hsl(var(--primary))}.peer-checked\:text-primary-foreground:is(:where(.peer):checked~*){color:hsl(var(--primary-foreground))}.peer-focus-visible\:outline-2:is(:where(.peer):focus-visible~*){outline-style:var(--tw-outline-style);outline-width:2px}.peer-focus-visible\:outline-offset-2:is(:where(.peer):focus-visible~*){outline-offset:2px}.peer-focus-visible\:outline-ring:is(:where(.peer):focus-visible~*){outline-color:hsl(var(--ring))}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.first\:pt-0:first-child{padding-top:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.last\:pb-0:last-child{padding-bottom:0}@media (hover:hover){.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-background\/90:hover{background-color:hsl(var(--background))}@supports (color:color-mix(in lab, red, red)){.hover\:bg-background\/90:hover{background-color:color-mix(in oklab, hsl(var(--background)) 90%, transparent)}}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive))}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, hsl(var(--destructive)) 90%, transparent)}}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, hsl(var(--primary)) 90%, transparent)}}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary))}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, hsl(var(--secondary)) 80%, transparent)}}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}}.focus\:not-sr-only:focus{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.focus\:fixed:focus{position:fixed}.focus\:top-4:focus{top:calc(var(--spacing) * 4)}.focus\:left-4:focus{left:calc(var(--spacing) * 4)}.focus\:z-\[100\]:focus{z-index:100}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:outline-ring:focus{outline-color:hsl(var(--ring))}.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-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-ring:focus-visible{outline-color:hsl(var(--ring))}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:hsl(var(--destructive))}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:hsl(var(--destructive))}@supports (color:color-mix(in lab, red, red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, hsl(var(--destructive)) 20%, transparent)}}.aria-\[current\=page\]\:underline[aria-current=page]{text-decoration-line:underline}.aria-\[current\=page\]\:underline-offset-8[aria-current=page]{text-underline-offset:8px}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media not all and (min-width:48rem){.max-md\:hidden{display:none}}@media (min-width:40rem){.sm\:columns-2{columns:2}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-wrap{flex-wrap:wrap}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:justify-center{justify-content:center}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:px-12{padding-inline:calc(var(--spacing) * 12)}.sm\:py-10{padding-block:calc(var(--spacing) * 10)}.sm\:py-16{padding-block:calc(var(--spacing) * 16)}.sm\:py-24{padding-block:calc(var(--spacing) * 24)}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.sm\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media (min-width:48rem){.md\:order-2{order:2}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:inline-flex{display:inline-flex}.md\:w-full{width:100%}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[2fr_repeat\(3\,1fr\)\]{grid-template-columns:2fr repeat(3,1fr)}.md\:grid-cols-\[minmax\(0\,16rem\)_1fr\]{grid-template-columns:minmax(0,16rem) 1fr}.md\:flex-col{flex-direction:column}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:items-start{align-items:flex-start}.md\:justify-between{justify-content:space-between}.md\:justify-center{justify-content:center}.md\:justify-end{justify-content:flex-end}.md\:gap-10{gap:calc(var(--spacing) * 10)}.md\:gap-12{gap:calc(var(--spacing) * 12)}.md\:gap-16{gap:calc(var(--spacing) * 16)}.md\:py-4{padding-block:calc(var(--spacing) * 4)}.md\:text-left{text-align:left}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (min-width:64rem){.lg\:columns-3{columns:3}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}.lg\:py-20{padding-block:calc(var(--spacing) * 20)}.lg\:py-32{padding-block:calc(var(--spacing) * 32)}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}}.\[\&_\[data-video-embed\]\]\:relative [data-video-embed]{position:relative}.\[\&_\[data-video-embed\]\]\:aspect-video [data-video-embed]{aspect-ratio:var(--aspect-video)}.\[\&_\[data-video-embed\]\]\:w-full [data-video-embed]{width:100%}.\[\&_\[data-video-embed\]\]\:overflow-hidden [data-video-embed]{overflow:hidden}.\[\&_\[data-video-embed\]\]\:rounded-md [data-video-embed]{border-radius:calc(var(--radius) - 2px)}.\[\&_\[data-video-embed\]\]\:bg-muted [data-video-embed]{background-color:hsl(var(--muted))}.\[\&_\[data-video-embed\]_iframe\]\:absolute [data-video-embed] iframe{position:absolute}.\[\&_\[data-video-embed\]_iframe\]\:inset-0 [data-video-embed] iframe{inset:0}.\[\&_\[data-video-embed\]_iframe\]\:h-full [data-video-embed] iframe{height:100%}.\[\&_\[data-video-embed\]_iframe\]\:w-full [data-video-embed] iframe{width:100%}.\[\&_\[data-video-embed\]_iframe\]\:border-0 [data-video-embed] iframe{border-style:var(--tw-border-style);border-width:0}.\[\&_a\]\:text-primary a{color:hsl(var(--primary))}.\[\&_a\]\:underline a{text-decoration-line:underline}.\[\&_a\]\:underline-offset-4 a{text-underline-offset:4px}.\[\&_blockquote\]\:border-l-2 blockquote{border-left-style:var(--tw-border-style);border-left-width:2px}.\[\&_blockquote\]\:border-border blockquote{border-color:hsl(var(--border))}.\[\&_blockquote\]\:pl-4 blockquote{padding-left:calc(var(--spacing) * 4)}.\[\&_blockquote\]\:text-muted-foreground blockquote{color:hsl(var(--muted-foreground))}.\[\&_blockquote\]\:italic blockquote{font-style:italic}.\[\&_h2\]\:mt-6 h2{margin-top:calc(var(--spacing) * 6)}.\[\&_h2\]\:font-display h2{font-family:var(--font-display)}.\[\&_h2\]\:text-2xl h2{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.\[\&_h2\]\:text-xl h2{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.\[\&_h2\]\:font-semibold h2{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_h2\]\:tracking-tight h2{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.first\:\[\&_h2\]\:mt-0:first-child h2{margin-top:0}.\[\&_h3\]\:mt-5 h3{margin-top:calc(var(--spacing) * 5)}.\[\&_h3\]\:font-display h3{font-family:var(--font-display)}.\[\&_h3\]\:text-lg h3{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.\[\&_h3\]\:text-xl h3{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.\[\&_h3\]\:font-semibold h3{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.first\:\[\&_h3\]\:mt-0:first-child h3{margin-top:0}.\[\&_h4\]\:mt-4 h4{margin-top:calc(var(--spacing) * 4)}.\[\&_h4\]\:text-base h4{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.\[\&_h4\]\:font-semibold h4{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.first\:\[\&_h4\]\:mt-0:first-child h4{margin-top:0}.\[\&_li\]\:my-1 li{margin-block:var(--spacing)}.\[\&_li\>p\]\:m-0 li>p{margin:0}.\[\&_ol\]\:list-decimal ol{list-style-type:decimal}.\[\&_ol\]\:pl-6 ol{padding-left:calc(var(--spacing) * 6)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_ul\]\:list-disc ul{list-style-type:disc}.\[\&_ul\]\:pl-6 ul{padding-left:calc(var(--spacing) * 6)}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\>\*\+\*\]\:mt-3>*+*{margin-top:calc(var(--spacing) * 3)}.\[\&\>li\]\:mb-4>li{margin-bottom:calc(var(--spacing) * 4)}.\[\&\>li\]\:break-inside-avoid>li{break-inside:avoid}}:root{--background:0 0% 100%;--foreground:240 10% 3.9%;--card:0 0% 100%;--card-foreground:240 10% 3.9%;--popover:0 0% 100%;--popover-foreground:240 10% 3.9%;--primary:243 75% 59%;--primary-foreground:0 0% 100%;--secondary:240 4.8% 95.9%;--secondary-foreground:240 5.9% 10%;--muted:240 4.8% 95.9%;--muted-foreground:240 3.8% 46.1%;--accent:240 4.8% 95.9%;--accent-foreground:240 5.9% 10%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--border:240 5.9% 90%;--input:240 5.9% 90%;--ring:243 75% 59%;--radius:.625rem;--chart-1:12 76% 61%;--chart-2:173 58% 39%;--chart-3:197 37% 24%;--chart-4:43 74% 66%;--chart-5:27 87% 67%;--success:160 84.1% 39.4%;--success-foreground:0 0% 100%;--warning:38 92.1% 50.2%;--warning-foreground:0 0% 100%;--info:217 91.2% 59.8%;--info-foreground:0 0% 100%;--sidebar-background:0 0% 98%;--sidebar-foreground:240 5.3% 26.1%;--sidebar-primary:243 75% 59%;--sidebar-primary-foreground:0 0% 100%;--sidebar-accent:240 4.8% 95.9%;--sidebar-accent-foreground:240 5.9% 10%;--sidebar-border:220 13% 91%;--sidebar-ring:243 75% 59%;--font-sans:Inter, ui-sans-serif, system-ui, sans-serif;--font-display:"Space Grotesk", ui-sans-serif, system-ui, sans-serif;--font-mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace}.dark{--background:240 10% 3.9%;--foreground:0 0% 98%;--card:240 10% 3.9%;--card-foreground:0 0% 98%;--popover:240 10% 3.9%;--popover-foreground:0 0% 98%;--primary:243 75% 69%;--primary-foreground:240 10% 3.9%;--secondary:240 3.7% 15.9%;--secondary-foreground:0 0% 98%;--muted:240 3.7% 15.9%;--muted-foreground:240 5% 64.9%;--accent:240 3.7% 15.9%;--accent-foreground:0 0% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:0 0% 98%;--border:240 3.7% 15.9%;--input:240 3.7% 15.9%;--ring:243 75% 69%;--radius:.625rem;--chart-1:220 70% 50%;--chart-2:160 60% 45%;--chart-3:30 80% 55%;--chart-4:280 65% 60%;--chart-5:340 75% 55%;--success:160 84.1% 49%;--success-foreground:0 0% 100%;--warning:38 92.1% 50.2%;--warning-foreground:0 0% 100%;--info:217 91.2% 59.8%;--info-foreground:0 0% 100%;--sidebar-background:240 5.9% 10%;--sidebar-foreground:240 4.8% 95.9%;--sidebar-primary:243 75% 69%;--sidebar-primary-foreground:240 10% 3.9%;--sidebar-accent:240 3.7% 15.9%;--sidebar-accent-foreground:240 4.8% 95.9%;--sidebar-border:240 3.7% 15.9%;--sidebar-ring:243 75% 69%;--font-sans:Inter, ui-sans-serif, system-ui, sans-serif;--font-display:"Space Grotesk", ui-sans-serif, system-ui, sans-serif;--font-mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace}@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-divide-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-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{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}@keyframes spin{to{transform:rotate(360deg)}}
|
package/dist/blocks.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as _marktiderman_genesis_features_blocks from '@marktiderman/genesis-fe
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Sites and landing pages: the `genesis_sites` schema (sites, pages,
|
|
5
|
-
* releases, assets), drafts, publish and rollback. The pages are served by
|
|
5
|
+
* releases, assets, blog posts), drafts, publish and rollback. The pages are served by
|
|
6
6
|
* `handleSiteRequest` from `@marktiderman/genesis-sites/web`, mounted by the
|
|
7
7
|
* app on its own server.
|
|
8
8
|
*
|
package/dist/blocks.js
CHANGED
|
@@ -6,11 +6,15 @@ var sitesBlock = defineBlock({
|
|
|
6
6
|
id: "sites",
|
|
7
7
|
platforms: ["web", "server"],
|
|
8
8
|
contributes: {
|
|
9
|
-
migrations: [
|
|
9
|
+
migrations: [
|
|
10
|
+
{ package: PACKAGE, file: "migrations/0001_genesis_sites.sql", test: "migrations/tests/0001_genesis_sites.test.sql" },
|
|
11
|
+
{ package: PACKAGE, file: "migrations/0002_genesis_sites_posts.sql", test: "migrations/tests/0002_genesis_sites_posts.test.sql" }
|
|
12
|
+
],
|
|
10
13
|
privacy: {
|
|
11
14
|
notes: [
|
|
12
15
|
"Sites hold what their editors write and publish; a published site is public.",
|
|
13
16
|
"Each release records who published it; a deleted person's releases stay, without the person.",
|
|
17
|
+
"Blog posts record who wrote them; a published post is public until it is taken down or deleted.",
|
|
14
18
|
"Visitors' form answers go to the app's own forms endpoint, not to the site tables."
|
|
15
19
|
]
|
|
16
20
|
}
|
package/dist/blocks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/blocks.ts"],"names":[],"mappings":";;;AAOA,IAAM,OAAA,GAAU,6BAAA;AAUT,IAAM,aAAa,WAAA,CAAY;AAAA,EACpC,EAAA,EAAI,OAAA;AAAA,EACJ,SAAA,EAAW,CAAC,KAAA,EAAO,QAAQ,CAAA;AAAA,EAC3B,WAAA,EAAa;AAAA,IACX,UAAA,EAAY,
|
|
1
|
+
{"version":3,"sources":["../src/blocks.ts"],"names":[],"mappings":";;;AAOA,IAAM,OAAA,GAAU,6BAAA;AAUT,IAAM,aAAa,WAAA,CAAY;AAAA,EACpC,EAAA,EAAI,OAAA;AAAA,EACJ,SAAA,EAAW,CAAC,KAAA,EAAO,QAAQ,CAAA;AAAA,EAC3B,WAAA,EAAa;AAAA,IACX,UAAA,EAAY;AAAA,MACV,EAAE,OAAA,EAAS,OAAA,EAAS,IAAA,EAAM,mCAAA,EAAqC,MAAM,8CAAA,EAA+C;AAAA,MACpH,EAAE,OAAA,EAAS,OAAA,EAAS,IAAA,EAAM,yCAAA,EAA2C,MAAM,oDAAA;AAAqD,KAClI;AAAA,IACA,OAAA,EAAS;AAAA,MACP,KAAA,EAAO;AAAA,QACL,8EAAA;AAAA,QACA,8FAAA;AAAA,QACA,iGAAA;AAAA,QACA;AAAA;AACF;AACF;AAEJ,CAAC","file":"blocks.js","sourcesContent":["/**\n * The sites block, as a `defineBlock` declaration: what `genesis add sites`\n * installs (the migration and its pgTAP test) and what it means for the\n * stores' privacy forms. Node-safe: no React, no Supabase client.\n */\nimport { defineBlock } from \"@marktiderman/genesis-features/blocks\";\n\nconst PACKAGE = \"@marktiderman/genesis-sites\";\n\n/**\n * Sites and landing pages: the `genesis_sites` schema (sites, pages,\n * releases, assets, blog posts), drafts, publish and rollback. The pages are served by\n * `handleSiteRequest` from `@marktiderman/genesis-sites/web`, mounted by the\n * app on its own server.\n *\n * @stability Beta\n */\nexport const sitesBlock = defineBlock({\n id: \"sites\",\n platforms: [\"web\", \"server\"],\n contributes: {\n migrations: [\n { package: PACKAGE, file: \"migrations/0001_genesis_sites.sql\", test: \"migrations/tests/0001_genesis_sites.test.sql\" },\n { package: PACKAGE, file: \"migrations/0002_genesis_sites_posts.sql\", test: \"migrations/tests/0002_genesis_sites_posts.test.sql\" },\n ],\n privacy: {\n notes: [\n \"Sites hold what their editors write and publish; a published site is public.\",\n \"Each release records who published it; a deleted person's releases stay, without the person.\",\n \"Blog posts record who wrote them; a published post is public until it is taken down or deleted.\",\n \"Visitors' form answers go to the app's own forms endpoint, not to the site tables.\",\n ],\n },\n },\n});\n"]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// src/core/urls.ts
|
|
2
|
+
var MAX_URL_LENGTH = 2048;
|
|
3
|
+
var SAFE_SCHEMES = /* @__PURE__ */ new Set(["https:", "http:", "mailto:", "tel:"]);
|
|
4
|
+
var UNSAFE_CHARS = /[\u0000-\u001f\u007f\\\s]/;
|
|
5
|
+
function isSafeHref(value) {
|
|
6
|
+
if (typeof value !== "string" || value.length === 0 || value.length > MAX_URL_LENGTH) return false;
|
|
7
|
+
if (UNSAFE_CHARS.test(value)) return false;
|
|
8
|
+
if (value.startsWith("#")) return true;
|
|
9
|
+
if (value.startsWith("/")) return !value.startsWith("//");
|
|
10
|
+
let url;
|
|
11
|
+
try {
|
|
12
|
+
url = new URL(value);
|
|
13
|
+
} catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
if (!SAFE_SCHEMES.has(url.protocol)) return false;
|
|
17
|
+
if (url.protocol === "http:" || url.protocol === "https:") return url.hostname.length > 0 && !url.username && !url.password;
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
function isSafeImageSrc(value) {
|
|
21
|
+
if (!isSafeHref(value)) return false;
|
|
22
|
+
if (value.startsWith("/")) return true;
|
|
23
|
+
return value.startsWith("https://");
|
|
24
|
+
}
|
|
25
|
+
function isExternalHref(href) {
|
|
26
|
+
return /^https?:\/\//i.test(href);
|
|
27
|
+
}
|
|
28
|
+
var PAGE_PATH = /^\/(?:[a-z0-9]+(?:-[a-z0-9]+)*(?:\/[a-z0-9]+(?:-[a-z0-9]+)*){0,7})?$/;
|
|
29
|
+
var MAX_PAGE_PATH_LENGTH = 200;
|
|
30
|
+
var DEFAULT_RESERVED_PATHS = Object.freeze(["/api", "/_server", "/auth", "/_gs"]);
|
|
31
|
+
function isReservedPath(path, reserved = DEFAULT_RESERVED_PATHS) {
|
|
32
|
+
if (typeof reserved === "function") return reserved(path);
|
|
33
|
+
const probe = path.toLowerCase();
|
|
34
|
+
return reserved.some((prefix) => {
|
|
35
|
+
const lower = prefix.toLowerCase();
|
|
36
|
+
const p = lower.endsWith("/") && lower.length > 1 ? lower.slice(0, -1) : lower;
|
|
37
|
+
return probe === p || probe.startsWith(`${p}/`);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function pagePathProblems(path, reserved = DEFAULT_RESERVED_PATHS) {
|
|
41
|
+
if (typeof path !== "string") return ["A page path is text."];
|
|
42
|
+
const problems = [];
|
|
43
|
+
if (path.length > MAX_PAGE_PATH_LENGTH) problems.push(`A page path has at most ${MAX_PAGE_PATH_LENGTH} characters.`);
|
|
44
|
+
if (!PAGE_PATH.test(path)) {
|
|
45
|
+
problems.push('A page path starts with "/" and uses lowercase letters, digits and single hyphens, with no trailing slash (for example "/about").');
|
|
46
|
+
}
|
|
47
|
+
if (isReservedPath(path, reserved)) problems.push(`"${path}" is reserved for the app this site shares its address with.`);
|
|
48
|
+
return problems;
|
|
49
|
+
}
|
|
50
|
+
function validatePagePath(path, reserved = DEFAULT_RESERVED_PATHS) {
|
|
51
|
+
const problems = pagePathProblems(path, reserved);
|
|
52
|
+
if (problems.length) throw new Error(problems.join(" "));
|
|
53
|
+
return path;
|
|
54
|
+
}
|
|
55
|
+
function normalizeRequestPath(pathname) {
|
|
56
|
+
let path;
|
|
57
|
+
try {
|
|
58
|
+
path = decodeURIComponent(pathname);
|
|
59
|
+
} catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
if (UNSAFE_CHARS.test(path) || path.includes("//")) return null;
|
|
63
|
+
if (path.length > 1 && path.endsWith("/")) path = path.slice(0, -1);
|
|
64
|
+
return path.toLowerCase();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export { DEFAULT_RESERVED_PATHS, MAX_PAGE_PATH_LENGTH, MAX_URL_LENGTH, PAGE_PATH, isExternalHref, isReservedPath, isSafeHref, isSafeImageSrc, normalizeRequestPath, pagePathProblems, validatePagePath };
|
|
68
|
+
//# sourceMappingURL=chunk-3VKTBE7S.js.map
|
|
69
|
+
//# sourceMappingURL=chunk-3VKTBE7S.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/urls.ts"],"names":[],"mappings":";AAYO,IAAM,cAAA,GAAiB;AAE9B,IAAM,YAAA,uBAAmB,GAAA,CAAI,CAAC,UAAU,OAAA,EAAS,SAAA,EAAW,MAAM,CAAC,CAAA;AAInE,IAAM,YAAA,GAAe,2BAAA;AAGd,SAAS,WAAW,KAAA,EAAiC;AAC1D,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,WAAW,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,cAAA,EAAgB,OAAO,KAAA;AAC7F,EAAA,IAAI,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA,EAAG,OAAO,KAAA;AACrC,EAAA,IAAI,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,IAAA;AAClC,EAAA,IAAI,KAAA,CAAM,WAAW,GAAG,CAAA,SAAU,CAAC,KAAA,CAAM,WAAW,IAAI,CAAA;AACxD,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAM,IAAI,IAAI,KAAK,CAAA;AAAA,EACrB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,GAAA,CAAI,QAAQ,GAAG,OAAO,KAAA;AAC5C,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,OAAA,IAAW,GAAA,CAAI,aAAa,QAAA,EAAU,OAAO,GAAA,CAAI,QAAA,CAAS,SAAS,CAAA,IAAK,CAAC,GAAA,CAAI,QAAA,IAAY,CAAC,GAAA,CAAI,QAAA;AACnH,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,eAAe,KAAA,EAAiC;AAC9D,EAAA,IAAI,CAAC,UAAA,CAAW,KAAK,CAAA,EAAG,OAAO,KAAA;AAC/B,EAAA,IAAI,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,IAAA;AAClC,EAAA,OAAO,KAAA,CAAM,WAAW,UAAU,CAAA;AACpC;AAGO,SAAS,eAAe,IAAA,EAAuB;AACpD,EAAA,OAAO,eAAA,CAAgB,KAAK,IAAI,CAAA;AAClC;AAOO,IAAM,SAAA,GAAY;AAClB,IAAM,oBAAA,GAAuB;AAS7B,IAAM,sBAAA,GAA4C,OAAO,MAAA,CAAO,CAAC,QAAQ,UAAA,EAAY,OAAA,EAAS,MAAM,CAAC;AAMrG,SAAS,cAAA,CAAe,IAAA,EAAc,QAAA,GAA0B,sBAAA,EAAiC;AACtG,EAAA,IAAI,OAAO,QAAA,KAAa,UAAA,EAAY,OAAO,SAAS,IAAI,CAAA;AAExD,EAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,EAAY;AAC/B,EAAA,OAAO,QAAA,CAAS,IAAA,CAAK,CAAC,MAAA,KAAW;AAC/B,IAAA,MAAM,KAAA,GAAQ,OAAO,WAAA,EAAY;AACjC,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IAAK,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,KAAA;AACzE,IAAA,OAAO,UAAU,CAAA,IAAK,KAAA,CAAM,UAAA,CAAW,CAAA,EAAG,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EAChD,CAAC,CAAA;AACH;AAGO,SAAS,gBAAA,CAAiB,IAAA,EAAe,QAAA,GAA0B,sBAAA,EAAkC;AAC1G,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,CAAC,sBAAsB,CAAA;AAC5D,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,IAAI,KAAK,MAAA,GAAS,oBAAA,WAA+B,IAAA,CAAK,CAAA,wBAAA,EAA2B,oBAAoB,CAAA,YAAA,CAAc,CAAA;AACnH,EAAA,IAAI,CAAC,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,EAAG;AACzB,IAAA,QAAA,CAAS,KAAK,mIAAmI,CAAA;AAAA,EACnJ;AACA,EAAA,IAAI,cAAA,CAAe,MAAM,QAAQ,CAAA,WAAY,IAAA,CAAK,CAAA,CAAA,EAAI,IAAI,CAAA,4DAAA,CAA8D,CAAA;AACxH,EAAA,OAAO,QAAA;AACT;AAGO,SAAS,gBAAA,CAAiB,IAAA,EAAc,QAAA,GAA0B,sBAAA,EAAgC;AACvG,EAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,IAAA,EAAM,QAAQ,CAAA;AAChD,EAAA,IAAI,QAAA,CAAS,QAAQ,MAAM,IAAI,MAAM,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA;AACvD,EAAA,OAAO,IAAA;AACT;AAOO,SAAS,qBAAqB,QAAA,EAAiC;AACpE,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,mBAAmB,QAAQ,CAAA;AAAA,EACpC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,YAAA,CAAa,KAAK,IAAI,CAAA,IAAK,KAAK,QAAA,CAAS,IAAI,GAAG,OAAO,IAAA;AAC3D,EAAA,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAClE,EAAA,OAAO,KAAK,WAAA,EAAY;AAC1B","file":"chunk-3VKTBE7S.js","sourcesContent":["/**\n * URL and path rules shared by the schemas, the renderer and the database.\n *\n * Every link a site renders comes from stored props, so every link is\n * untrusted. A link is safe when it is a site path (`/about`), a fragment\n * (`#pricing`), or an absolute `https:`, `http:`, `mailto:` or `tel:` URL.\n * Everything else (`javascript:`, `data:`, `vbscript:`, protocol-relative\n * `//host`, a backslash trick, a control character) is refused, both when a\n * document is parsed and again when it is rendered.\n */\n\n/** The longest URL a site stores. */\nexport const MAX_URL_LENGTH = 2048;\n\nconst SAFE_SCHEMES = new Set([\"https:\", \"http:\", \"mailto:\", \"tel:\"]);\n// C0 controls, DEL, whitespace other than a plain space, and the backslash\n// (browsers read `\\` as `/` in special URLs, so `/\\evil.test` is `//evil.test`).\n// eslint-disable-next-line no-control-regex\nconst UNSAFE_CHARS = /[\\u0000-\\u001f\\u007f\\\\\\s]/;\n\n/** Is this a link a site may render: a site path, a fragment, or an http(s), mailto or tel URL? */\nexport function isSafeHref(value: unknown): value is string {\n if (typeof value !== \"string\" || value.length === 0 || value.length > MAX_URL_LENGTH) return false;\n if (UNSAFE_CHARS.test(value)) return false;\n if (value.startsWith(\"#\")) return true;\n if (value.startsWith(\"/\")) return !value.startsWith(\"//\");\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n return false;\n }\n if (!SAFE_SCHEMES.has(url.protocol)) return false;\n if (url.protocol === \"http:\" || url.protocol === \"https:\") return url.hostname.length > 0 && !url.username && !url.password;\n return true;\n}\n\n/** Is this a URL an image may load from: a site path or an `https:` URL? */\nexport function isSafeImageSrc(value: unknown): value is string {\n if (!isSafeHref(value)) return false;\n if (value.startsWith(\"/\")) return true;\n return value.startsWith(\"https://\");\n}\n\n/** Is this an external (absolute) link, opened with `rel=\"noopener noreferrer\"`? */\nexport function isExternalHref(href: string): boolean {\n return /^https?:\\/\\//i.test(href);\n}\n\n/**\n * A page's path: `/`, or lowercase segments of letters, digits and hyphens\n * (`/about`, `/classes/strength`). No trailing slash, no dots, at most 8\n * segments and 200 characters. The database checks the same pattern.\n */\nexport const PAGE_PATH = /^\\/(?:[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/[a-z0-9]+(?:-[a-z0-9]+)*){0,7})?$/;\nexport const MAX_PAGE_PATH_LENGTH = 200;\n\n/**\n * Paths a site never owns, because it shares its hostname with the host app:\n * the app's API and server functions, its auth callbacks, and this package's\n * own assets. A host passes its own list (or a predicate) to\n * `handleSiteRequest` and `validatePagePath`; the database's default is the\n * same list (`genesis_sites.reserved_paths()`).\n */\nexport const DEFAULT_RESERVED_PATHS: readonly string[] = Object.freeze([\"/api\", \"/_server\", \"/auth\", \"/_gs\"]);\n\n/** A reserved-path rule: a list of path prefixes, or a predicate. */\nexport type ReservedPaths = readonly string[] | ((path: string) => boolean);\n\n/** Is `path` reserved: equal to a reserved prefix, or under it (`/api`, `/api/x`, not `/apiary`)? */\nexport function isReservedPath(path: string, reserved: ReservedPaths = DEFAULT_RESERVED_PATHS): boolean {\n if (typeof reserved === \"function\") return reserved(path);\n // Case-insensitive, like the database's check: /AUTH is the app's /auth on a case-insensitive router.\n const probe = path.toLowerCase();\n return reserved.some((prefix) => {\n const lower = prefix.toLowerCase();\n const p = lower.endsWith(\"/\") && lower.length > 1 ? lower.slice(0, -1) : lower;\n return probe === p || probe.startsWith(`${p}/`);\n });\n}\n\n/** Problems with a page path, empty when it is fine. */\nexport function pagePathProblems(path: unknown, reserved: ReservedPaths = DEFAULT_RESERVED_PATHS): string[] {\n if (typeof path !== \"string\") return [\"A page path is text.\"];\n const problems: string[] = [];\n if (path.length > MAX_PAGE_PATH_LENGTH) problems.push(`A page path has at most ${MAX_PAGE_PATH_LENGTH} characters.`);\n if (!PAGE_PATH.test(path)) {\n problems.push('A page path starts with \"/\" and uses lowercase letters, digits and single hyphens, with no trailing slash (for example \"/about\").');\n }\n if (isReservedPath(path, reserved)) problems.push(`\"${path}\" is reserved for the app this site shares its address with.`);\n return problems;\n}\n\n/** Throws when the path can't be a page's. */\nexport function validatePagePath(path: string, reserved: ReservedPaths = DEFAULT_RESERVED_PATHS): string {\n const problems = pagePathProblems(path, reserved);\n if (problems.length) throw new Error(problems.join(\" \"));\n return path;\n}\n\n/**\n * The page path a request path asks for: decoded, lowercase, without a\n * trailing slash. Returns null for a path that can't name a page (so the\n * caller falls through to the host app).\n */\nexport function normalizeRequestPath(pathname: string): string | null {\n let path: string;\n try {\n path = decodeURIComponent(pathname);\n } catch {\n return null;\n }\n if (UNSAFE_CHARS.test(path) || path.includes(\"//\")) return null;\n if (path.length > 1 && path.endsWith(\"/\")) path = path.slice(0, -1);\n return path.toLowerCase();\n}\n"]}
|