@declarion/react 0.26.4 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/{ActionRunner-B2e3Igpd.js → ActionRunner-DtUDeH4F.js} +595 -579
- package/dist-lib/{DraggableChildrenTable-BUUUPzI3.js → DraggableChildrenTable-D4WoV6ck.js} +5 -5
- package/dist-lib/{Grid-Bjq2IPUx.js → Grid-CsK_TuK_.js} +2 -2
- package/dist-lib/{MarkdownRenderer-Be0nUKB1.js → MarkdownRenderer-CwlNQju5.js} +1 -1
- package/dist-lib/components/layout/Layout.d.ts +4 -0
- package/dist-lib/components/shared/PageHeader.d.ts +1 -1
- package/dist-lib/declarion-react.css +1 -1
- package/dist-lib/embed/EmbedHistoryTracker.d.ts +1 -0
- package/dist-lib/embed/embed-history.d.ts +19 -0
- package/dist-lib/embed/index.d.ts +3 -1
- package/dist-lib/embed/useEmbedNavigate.d.ts +12 -0
- package/dist-lib/hooks/useActionData.d.ts +61 -0
- package/dist-lib/hooks/useCursorEntityData.d.ts +13 -0
- package/dist-lib/hooks/useEntityData.d.ts +8 -0
- package/dist-lib/hooks/useEntityItem.d.ts +8 -0
- package/dist-lib/hooks/usePageState.d.ts +32 -0
- package/dist-lib/hooks/usePageStateRuntime.d.ts +27 -0
- package/dist-lib/hooks/usePageStateTtl.d.ts +11 -0
- package/dist-lib/hooks/useRegisterScreenTab.d.ts +11 -0
- package/dist-lib/hooks/useScreenBack.d.ts +21 -0
- package/dist-lib/hooks/useScreenTab.d.ts +10 -0
- package/dist-lib/hooks/useTabNavigate.d.ts +9 -0
- package/dist-lib/hooks/useTabSearchMirror.d.ts +1 -0
- package/dist-lib/index.d.ts +19 -4
- package/dist-lib/index.js +4696 -4028
- package/dist-lib/lib/canonical-url.d.ts +27 -0
- package/dist-lib/lib/screen-back.d.ts +72 -0
- package/dist-lib/lib/scroll-restoration.d.ts +90 -0
- package/dist-lib/stores/page-state.d.ts +61 -0
- package/dist-lib/stores/tabs.d.ts +34 -0
- package/dist-lib/testing.js +7 -7
- package/dist-lib/{value-D7fe0TEL.js → value-CNUbJNK-.js} +97 -97
- package/package.json +13 -13
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { s as e } from "./DynamicIcon-DCRdxxZ7.js";
|
|
2
|
-
import {
|
|
2
|
+
import { Ln as t, Rn as n, gn as r, m as i, p as a, rn as o } from "./ActionRunner-DtUDeH4F.js";
|
|
3
3
|
import { n as s, r as c, t as l } from "./dataTableStyles-vwD1mVOP.js";
|
|
4
4
|
import { useCallback as u, useMemo as d, useRef as f } from "react";
|
|
5
5
|
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
@@ -207,7 +207,7 @@ function T({ row: n, columns: o, editableColumns: s, displayOnlyColumns: c, chil
|
|
|
207
207
|
...A,
|
|
208
208
|
textDecoration: y ? "line-through" : "none"
|
|
209
209
|
},
|
|
210
|
-
children: t ?
|
|
210
|
+
children: t ? i({
|
|
211
211
|
field: t,
|
|
212
212
|
fieldName: e,
|
|
213
213
|
value: n[e],
|
|
@@ -215,7 +215,7 @@ function T({ row: n, columns: o, editableColumns: s, displayOnlyColumns: c, chil
|
|
|
215
215
|
record: n,
|
|
216
216
|
refs: f,
|
|
217
217
|
locale: v
|
|
218
|
-
}) :
|
|
218
|
+
}) : r(n[e])
|
|
219
219
|
}, e) : /* @__PURE__ */ p("td", {
|
|
220
220
|
style: {
|
|
221
221
|
...j,
|
|
@@ -224,7 +224,7 @@ function T({ row: n, columns: o, editableColumns: s, displayOnlyColumns: c, chil
|
|
|
224
224
|
borderRadius: a ? 4 : 0
|
|
225
225
|
},
|
|
226
226
|
title: a ? `${e} is required` : void 0,
|
|
227
|
-
children: t ?
|
|
227
|
+
children: t ? i({
|
|
228
228
|
field: t,
|
|
229
229
|
fieldName: e,
|
|
230
230
|
value: n[e],
|
|
@@ -233,7 +233,7 @@ function T({ row: n, columns: o, editableColumns: s, displayOnlyColumns: c, chil
|
|
|
233
233
|
record: n,
|
|
234
234
|
refs: f,
|
|
235
235
|
locale: v
|
|
236
|
-
}) :
|
|
236
|
+
}) : r(n[e])
|
|
237
237
|
}, e);
|
|
238
238
|
}),
|
|
239
239
|
/* @__PURE__ */ p("td", {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as e, S as t, _ as n, b as r, x as i, y as a } from "./ActionRunner-
|
|
2
|
-
import { c as o, i as s, l as c, t as l } from "./value-
|
|
1
|
+
import { C as e, S as t, _ as n, b as r, x as i, y as a } from "./ActionRunner-DtUDeH4F.js";
|
|
2
|
+
import { c as o, i as s, l as c, t as l } from "./value-CNUbJNK-.js";
|
|
3
3
|
import { useCallback as u, useEffect as d, useMemo as f, useRef as p, useState as m } from "react";
|
|
4
4
|
import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
5
5
|
import { DndContext as v, PointerSensor as y, closestCenter as b, useSensor as x, useSensors as ee } from "@dnd-kit/core";
|
|
@@ -1 +1,5 @@
|
|
|
1
|
+
import { useTabStore } from "../../stores/tabs";
|
|
2
|
+
import { type NavNode, type Screen } from "../../types/schema";
|
|
3
|
+
import type { Crumb } from "../../components/shared/Breadcrumbs";
|
|
1
4
|
export declare function Layout(): import("react").JSX.Element | null;
|
|
5
|
+
export declare function buildCrumbs(nodes: NavNode[], screens: Record<string, Screen>, pathname: string, tabs: ReturnType<typeof useTabStore.getState>["tabs"], activeTabId: string | null, topLevelNavigate: (to: string) => void): Crumb[];
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/*! tailwindcss v4.3.
|
|
1
|
+
/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */
|
|
2
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-y-reverse:0;--tw-border-style:solid;--tw-font-weight: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;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-mono:var(--font-mono);--color-black:#000;--color-white:#fff;--spacing:.25rem;--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;--radius-xs:var(--radius-xs);--radius-sm:var(--radius-sm);--radius-md:var(--radius-md);--radius-lg:var(--radius-lg);--radius-xl:var(--radius-xl);--shadow-xs:0 1px 2px 0 #0000000d;--shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-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{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{.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.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}.top-0{top:0}.top-1{top:var(--spacing)}.top-4{top:calc(var(--spacing) * 4)}.right-1{right:var(--spacing)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:0}.bottom-1{bottom:var(--spacing)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:0}.left-1{left:var(--spacing)}.left-4{left:calc(var(--spacing) * 4)}.z-40{z-index:40}.z-50{z-index:50}.order-1{order:1}.col-span-full{grid-column:1/-1}.row-0{grid-row:0}.row-1{grid-row:1}.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}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.71429}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.888889em;margin-bottom:.888889em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.33333em;margin-bottom:1.33333em;padding-inline-start:1.11111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:.8em;font-size:2.14286em;line-height:1.2}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6em;margin-bottom:.8em;font-size:1.42857em;line-height:1.4}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.55556em;margin-bottom:.444444em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.42857em;margin-bottom:.571429em;line-height:1.42857}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.142857em;padding-inline-end:.357143em;padding-bottom:.142857em;border-radius:.3125rem;padding-inline-start:.357143em;font-size:.857143em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;border-radius:.25rem;margin-top:1.66667em;margin-bottom:1.66667em;padding-inline-start:1em;font-size:.857143em;line-height:1.66667}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em;padding-inline-start:1.57143em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;margin-bottom:.285714em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.428571em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;padding-inline-start:1.57143em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.85714em;margin-bottom:2.85714em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.666667em;font-size:.857143em;line-height:1.33333}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.h-2{height:calc(var(--spacing) * 2)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-16{height:calc(var(--spacing) * 16)}.h-20{height:calc(var(--spacing) * 20)}.h-24{height:calc(var(--spacing) * 24)}.h-\[480px\]{height:480px}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:0}.min-h-screen{min-height:100vh}.w-1{width:var(--spacing)}.w-2{width:calc(var(--spacing) * 2)}.w-2\/3{width:66.6667%}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-16{width:calc(var(--spacing) * 16)}.w-\[320px\]{width:320px}.w-full{width:100%}.max-w-\[90vw\]{max-width:90vw}.max-w-none{max-width:none}.min-w-0{min-width:0}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);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)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.resize{resize:both}.scrollbar-none{scrollbar-width:none}.columns-3{columns:3}.grid-cols-\[repeat\(auto-fill\,minmax\(140px\,1fr\)\)\]{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-stretch{align-items:stretch}.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-8{gap:calc(var(--spacing) * 8)}: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-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(.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-divider>:not(:last-child)){border-color:var(--divider)}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-accent{border-color:var(--accent)}.border-border{border-color:var(--border)}.border-destructive{border-color:var(--danger)}.border-divider{border-color:var(--divider)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.bg-accent{background-color:var(--accent)}.bg-background{background-color:var(--bg)}.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-black\/40{background-color:#0006}@supports (color:color-mix(in lab, red, red)){.bg-black\/40{background-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab, red, red)){.bg-black\/70{background-color:color-mix(in oklab, var(--color-black) 70%, transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab, red, red)){.bg-black\/80{background-color:color-mix(in oklab, var(--color-black) 80%, transparent)}}.bg-card{background-color:var(--surface)}.bg-destructive-soft{background-color:var(--danger-soft)}.bg-muted{background-color:var(--surface-2)}.bg-success-soft{background-color:var(--success-soft)}.bg-surface{background-color:var(--surface)}.bg-surface-2{background-color:var(--surface-2)}.bg-surface-3{background-color:var(--surface-3)}.bg-warning{background-color:var(--warn)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.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-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.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)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.text-center{text-align:center}.text-left{text-align:left}.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-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.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)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-accent{color:var(--accent)}.text-destructive{color:var(--danger)}.text-foreground{color:var(--text)}.text-muted-foreground{color:var(--text-3)}.text-success{color:var(--success)}.text-text-3{color:var(--text-3)}.text-text-4{color:var(--text-4)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.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,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);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)}.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,)}.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{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-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))}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.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}.inline-fit{inline-size:fit-content}.group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.focus-within\:opacity-100:focus-within{opacity:1}@media (hover:hover){.hover\:border-border:hover{border-color:var(--border)}.hover\:bg-surface:hover{background-color:var(--surface)}.hover\:bg-surface-2:hover{background-color:var(--surface-2)}.hover\:text-text-3:hover{color:var(--text-3)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus-visible\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-accent:focus-visible{outline-color:var(--accent)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.dark\:prose-invert:where([data-theme=dark],[data-theme=dark] *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}}:root{--bg:#f7f8fa;--surface:#fff;--surface-2:#fbfbfd;--surface-3:#f3f4f7;--border:#e6e8ee;--border-strong:#d1d5de;--divider:#eef0f4;--text:#0e1116;--text-2:#2a2f3a;--text-3:#5b6270;--text-4:#8a8f9c;--text-placeholder:#a8adba;--muted:var(--surface-2);--muted-foreground:var(--text-3);--card:var(--surface);--card-foreground:var(--text);--popover:var(--surface);--popover-foreground:var(--text);--secondary:var(--surface-2);--secondary-foreground:var(--text-2);--input:var(--surface);--ring:var(--accent-ring);--primary:#1e2a4a;--primary-hover:#16213d;--primary-fg:#fff;--accent:#5b5bd6;--accent-2:#7b7be6;--accent-foreground:#fff;--accent-soft:#eeeefb;--accent-ring:#5b5bd647;--destructive:var(--danger);--destructive-foreground:#fff;--row-selected-bg:#eeeefb;--success:#118a5a;--success-soft:#e3f4ec;--success-border:#b8e0cc;--warn:#b56b00;--warn-soft:#fbf1e0;--warn-border:#eccb91;--danger:#c2362c;--danger-soft:#fae8e6;--danger-border:#f0b6b0;--danger-hover:#a02a21;--info:#0b6fb0;--info-soft:#e4f1fa;--info-border:#b2d6ee;--pill-indigo:#4f46e5;--pill-indigo-bg:#eef2ff;--pill-emerald:#047857;--pill-emerald-bg:#ecfdf5;--pill-amber:#b45309;--pill-amber-bg:#fef3c7;--pill-rose:#be123c;--pill-rose-bg:#fff1f2;--pill-sky:#0369a1;--pill-sky-bg:#e0f2fe;--pill-violet:#6d28d9;--pill-violet-bg:#f3e8ff;--pill-slate:#475569;--pill-slate-bg:#f1f5f9;--pill-teal:#0f766e;--pill-teal-bg:#ccfbf1;--rail:#0e1116;--rail-fg:#d6d9e0;--rail-muted:#6b707e;--rail-active:#1f232d;--rail-hover:#161a22;--sidebar:#fff;--sidebar-fg:#1e2a4a;--sidebar-muted:#6b7180;--sidebar-active:#f1f1fb;--sidebar-hover:#f4f5f8;--shadow-xs:0 1px 0 #0c0e140a;--shadow-sm:0 1px 2px #0c0e140f, 0 1px 2px #0c0e140a;--shadow-md:0 4px 12px #0c0e140f, 0 1px 3px #0c0e140a;--shadow-lg:0 16px 48px #0c0e1424, 0 4px 12px #0c0e1414;--shadow-panel:0 1px 0 #0c0e140a, 0 0 0 1px var(--border);--shadow-toast:0 8px 24px #0c0e141f, 0 2px 6px #0c0e140f, 0 0 0 1px var(--border);--scrim:#0c0e1459;--scrim-strong:#0c0e1473;--scrim-lite:#0c0e1433;--inverted-overlay:#ffffff1f;--radius-xs:3px;--radius-sm:5px;--radius-md:7px;--radius-lg:10px;--radius-xl:14px;--row-h:32px;--row-h-comf:40px;--row-h-cozy:48px;--topbar-h:44px;--tabbar-h:34px;--rail-w:52px;--sidebar-w:220px;--font-sans:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:"JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;--impersonation-accent:#f59e0b;--impersonation-accent-soft:#f59e0b29;--impersonation-accent-fg:#92400e;--auth-panel-bg-start:#0e1116;--auth-panel-bg-mid:#1a1f2c;--auth-panel-bg-end:#2a2f4a;--auth-panel-fg:#e8eaf0;--auth-panel-fg-muted:#c4c8d2;--auth-panel-fg-dim:#8a90a0;--auth-panel-border-soft:#ffffff14;--auth-panel-border-faint:#ffffff26;--auth-panel-surface-soft:#ffffff0a;--auth-panel-glow-1:#8b8bf047;--auth-panel-glow-2:#5b5bd633;--profile-avatar-scrim:#00000059;--profile-avatar-upload-fg:#fff}body[data-impersonation-destructive=true]{--impersonation-accent:#ef4444;--impersonation-accent-soft:#ef444429;--impersonation-accent-fg:#7f1d1d}[data-theme=dark]{--bg:#0a0c10;--surface:#181c26;--surface-2:#111318;--surface-3:#20253a;--border:#262c3c;--border-strong:#353c52;--divider:#1a1e2c;--text:#e8eaf0;--text-2:#c4c8d2;--text-3:#8a90a0;--text-4:#5f6578;--text-placeholder:#4d5263;--primary:#e8eaf0;--primary-hover:#fff;--primary-fg:#0a0c10;--accent:#8b8bf0;--accent-2:#a5a5f5;--accent-foreground:#0a0c10;--accent-soft:#8b8bf024;--accent-ring:#8b8bf059;--destructive-foreground:#0a0c10;--success:#3fbf8f;--success-soft:#3fbf8f29;--success-border:#3fbf8f52;--warn:#e0a44a;--warn-soft:#e0a44a29;--warn-border:#e0a44a52;--danger:#ef6a60;--danger-soft:#ef6a6029;--danger-border:#ef6a6052;--danger-hover:#f48a82;--info:#5ab3ea;--info-soft:#5ab3ea29;--info-border:#5ab3ea52;--pill-indigo:#a5b4fc;--pill-indigo-bg:#4f46e538;--pill-emerald:#6ee7b7;--pill-emerald-bg:#04785738;--pill-amber:#fcd34d;--pill-amber-bg:#b4530942;--pill-rose:#fda4af;--pill-rose-bg:#be123c3d;--pill-sky:#7dd3fc;--pill-sky-bg:#0369a142;--pill-violet:#c4b5fd;--pill-violet-bg:#6d28d942;--pill-slate:#cbd5e1;--pill-slate-bg:#47556952;--pill-teal:#5eead4;--pill-teal-bg:#0f766e42;--rail:#06080c;--rail-fg:#c4c8d2;--rail-muted:#5f6578;--rail-active:#1c2030;--rail-hover:#14171e;--sidebar:#0e1018;--sidebar-fg:#e8eaf0;--sidebar-muted:#8a90a0;--sidebar-active:#8b8bf02e;--sidebar-hover:#161a24;--shadow-xs:inset 0 1px 0 #ffffff0f;--shadow-sm:0 2px 8px #00000073, inset 0 1px 0 #ffffff0d;--shadow-md:0 4px 16px #00000080, inset 0 1px 0 #ffffff0d;--shadow-lg:0 16px 48px #000000a6, 0 2px 8px #0006;--shadow-panel:0 0 0 1px var(--border), inset 0 1px 0 #ffffff0a;--shadow-toast:0 8px 32px #00000080, 0 0 0 1px var(--border);--scrim:#0000008c;--scrim-strong:#000000a6;--scrim-lite:#0006;--inverted-overlay:#0000001a;--row-selected-bg:var(--accent)}@supports (color:color-mix(in lab, red, red)){[data-theme=dark]{--row-selected-bg:color-mix(in srgb, var(--accent) 22%, var(--surface))}}[data-accent=violet]{--accent:#5b5bd6;--accent-2:#7b7be6;--accent-soft:#eeeefb;--accent-ring:#5b5bd647}[data-accent=blue]{--accent:#2563eb;--accent-2:#4f83f0;--accent-soft:#e7effd;--accent-ring:#2563eb47}[data-accent=teal]{--accent:#0d9488;--accent-2:#14b8a6;--accent-soft:#d8f2ef;--accent-ring:#0d948847}[data-accent=amber]{--accent:#b45309;--accent-2:#d97706;--accent-soft:#fbf1e0;--accent-ring:#b4530947}[data-accent=rose]{--accent:#be123c;--accent-2:#e11d48;--accent-soft:#fce7ec;--accent-ring:#be123c47}[data-theme=dark][data-accent=violet]{--accent:#8b8bf0;--accent-2:#a5a5f5;--accent-soft:#8b8bf024;--accent-ring:#8b8bf059}[data-theme=dark][data-accent=blue]{--accent:#60a5fa;--accent-2:#93c5fd;--accent-soft:#2563eb29;--accent-ring:#3b82f659}[data-theme=dark][data-accent=teal]{--accent:#2dd4bf;--accent-2:#5eead4;--accent-soft:#0d948829;--accent-ring:#14b8a659}[data-theme=dark][data-accent=amber]{--accent:#fcd34d;--accent-2:#fde68a;--accent-soft:#b453092e;--accent-ring:#d9770659}[data-theme=dark][data-accent=rose]{--accent:#fda4af;--accent-2:#fecdd3;--accent-soft:#be123c2e;--accent-ring:#e11d4859}[data-density=comfortable]{--row-h:var(--row-h-comf)}[data-density=cozy]{--row-h:var(--row-h-cozy)}html[data-zebra=on] table tbody tr:nth-child(2n)>td{background:var(--surface-2)}*{box-sizing:border-box}html,body{height:100%;margin:0}body{font-family:var(--font-sans);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-feature-settings:"cv11", "ss01", "ss03";letter-spacing:-.005em;font-size:13px}::selection{background:var(--accent-soft);color:var(--text)}button{font-family:inherit;font-size:inherit;letter-spacing:inherit}input,textarea,select{font-family:inherit;font-size:inherit;color:inherit;letter-spacing:inherit}.mono{font-family:var(--font-mono);font-feature-settings:"zero","ss01"}.num{font-variant-numeric:tabular-nums}@media (width<=640px){.tabstrip-utility{gap:6px!important;padding:0 6px 0 8px!important}.tabstrip-utility-divider,.tabstrip-tabs-label{display:none!important}}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-strong);background-clip:padding-box;border:2px solid #0000;border-radius:8px}::-webkit-scrollbar-thumb:hover{background:var(--text-4);background-clip:padding-box;border:2px solid #0000}.scrollbar-none{scrollbar-width:none}.scrollbar-none::-webkit-scrollbar{display:none}#app{grid-template-rows:var(--topbar-h) 1fr;grid-template-columns:var(--rail-w) var(--sidebar-w) 1fr;grid-template-areas:"topbar topbar topbar""rail sidebar main";height:100vh;display:grid;overflow:hidden}#app[data-sidebar=collapsed],#app[data-sidebar=icon-only]{grid-template-columns:var(--rail-w) 56px 1fr}#app[data-sidebar=hidden]{grid-template-columns:var(--rail-w) 0 1fr}.prose pre{background-color:var(--surface-3)!important;color:var(--text)!important}.prose code{color:var(--text)!important}.json-editor-readonly{resize:vertical;min-height:48px;max-height:600px;overflow:auto}.json-editor-readonly .jse-main{border:1px solid var(--border);border-radius:var(--radius-md);height:100%}.json-editor-editable{resize:vertical;min-height:150px;max-height:500px;overflow:hidden}.json-editor-editable .jse-main{border:1px solid var(--border);border-radius:var(--radius-md);height:100%}.sl-row-actions{opacity:0;transition:opacity .1s}tr:hover .sl-row-actions,.sl-row-actions[data-open=true]{opacity:1}.peek-pencil{opacity:0;pointer-events:none;transition:opacity .12s}.peek-field-cell:hover .peek-pencil,.peek-field-cell:focus-within .peek-pencil,.peek-field-cell[data-editing=true] .peek-pencil{opacity:1;pointer-events:auto}@media (hover:none){.peek-pencil{opacity:1;pointer-events:auto}}.detail-row-action{opacity:0;transition:opacity .12s}.detail-row:hover .detail-row-action,.detail-row:focus-within .detail-row-action{opacity:1}@media (hover:none){.detail-row-action{opacity:1}}.detail-ref-chip{border-radius:var(--radius-sm);background:var(--surface-2);border:1px solid var(--border);max-width:100%;height:22px;color:var(--text);align-items:center;gap:6px;padding:0 8px 0 5px;font-size:12.5px;font-weight:500;text-decoration:none;transition:background .12s,border-color .12s;display:inline-flex}.detail-ref-chip:hover{background:var(--surface-3);border-color:var(--border-strong)}.detail-resize-handle{cursor:col-resize;flex-shrink:0;align-self:stretch;width:7px;position:relative}.detail-resize-handle:after{content:"";background:0 0;width:2px;transition:background .12s;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)}.detail-resize-handle:hover:after,.detail-resize-handle[data-active=true]:after{background:var(--accent)}.json-editor-readonly *,.json-editor-editable *{border-color:initial}.agent-highlight{animation:4s ease-out forwards agent-highlight-glow}@keyframes agent-highlight-glow{0%{box-shadow:0 0 0 2px rgb(var(--primary));background:rgb(var(--primary) / .08)}to{background:0 0;box-shadow:0 0 #0000}}.agent-attention{animation:2s ease-out forwards agent-attention-pulse}@keyframes agent-attention-pulse{0%,to{outline:2px solid #0000}50%{outline:2px solid rgb(var(--primary))}}@keyframes agent-blink{0%,50%{opacity:1}51%,to{opacity:0}}@keyframes dz-toast-in{0%{opacity:0;transform:translate(20px)scale(.96)}to{opacity:1;transform:none}}@keyframes dz-toast-out{0%{opacity:1;transform:none}to{opacity:0;transform:translate(20px)scale(.96)}}@media (prefers-reduced-motion:reduce){@keyframes dz-toast-in{0%{opacity:0}to{opacity:1}}@keyframes dz-toast-out{0%{opacity:1}to{opacity:0}}}@keyframes dz-toast-spin{to{transform:rotate(360deg)}}@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-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{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}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}
|
|
3
3
|
/*$vite$:1*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function EmbedHistoryTracker(): null;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** The React Router navigation action, as returned by `useNavigationType()`. */
|
|
2
|
+
export type EmbedNavAction = "PUSH" | "POP" | "REPLACE";
|
|
3
|
+
interface EmbedHistoryState {
|
|
4
|
+
/** In-frame history depth: 0 at the entry screen, +1 per in-frame drill. */
|
|
5
|
+
readonly depth: number;
|
|
6
|
+
/** When true, the NEXT applied navigation is treated as a fresh root (depth
|
|
7
|
+
* resets to 0) regardless of its action. Set by a host-driven `navigate`. */
|
|
8
|
+
readonly nextIsRoot: boolean;
|
|
9
|
+
/** Apply one navigation's action to the depth. PUSH +1, POP -1 (floored at
|
|
10
|
+
* 0), REPLACE unchanged; a pending root marker forces 0 and clears itself.
|
|
11
|
+
* Called once per navigation by the tracker. */
|
|
12
|
+
applyNavigation: (action: EmbedNavAction) => void;
|
|
13
|
+
/** Mark the next applied navigation as a fresh root (host-driven `navigate`). */
|
|
14
|
+
markRoot: () => void;
|
|
15
|
+
/** Reset to the entry screen (embed re-bootstrap). */
|
|
16
|
+
reset: () => void;
|
|
17
|
+
}
|
|
18
|
+
export declare const useEmbedHistoryStore: import("zustand").UseBoundStore<import("zustand").StoreApi<EmbedHistoryState>>;
|
|
19
|
+
export {};
|
|
@@ -10,7 +10,9 @@ export { EmbedDirtyReporter } from "./EmbedDirtyReporter";
|
|
|
10
10
|
export { EMBED_MESSAGE_SOURCE, EMBED_PROTOCOL_VERSION, EMBED_MESSAGE_TYPES, postToParent, type EmbedMessageType, type EmbedMessage, type EmbedMessagePayloadMap, type EmbedReadyPayload, type EmbedSetTokenPayload, type EmbedTokenExpiredPayload, type EmbedReloadRequiredPayload, type EmbedResizedPayload, type EmbedNavigationPayload, type EmbedDirtyChangedPayload, type EmbedNavigationFailedPayload, type EmbedNavigatePayload, type EmbedSetThemePayload, } from "./protocol";
|
|
11
11
|
export { resolveEmbedNavigation, resolveEmbedNavigationPayload, } from "./screen-location";
|
|
12
12
|
export type { EmbedNavigationResolution } from "./screen-location";
|
|
13
|
-
export { useEmbedNavigate, useEmbedScreenNavigate, useEmbedNavigationFailed, } from "./useEmbedNavigate";
|
|
13
|
+
export { useEmbedNavigate, useEmbedScreenNavigate, useEmbedScreenBack, useEmbedNavigationFailed, } from "./useEmbedNavigate";
|
|
14
|
+
export { useEmbedHistoryStore, type EmbedNavAction } from "./embed-history";
|
|
15
|
+
export { EmbedHistoryTracker } from "./EmbedHistoryTracker";
|
|
14
16
|
export { useGlobalLinkInterceptor, interceptedNavigationTarget, interceptedProgrammaticTarget, NATIVE_LINK_ATTR, } from "./useGlobalLinkInterceptor";
|
|
15
17
|
export { EmbedLocationReporter } from "./EmbedLocationReporter";
|
|
16
18
|
export { useEmbedDirtyStore, useReportEmbedDirty } from "./embed-dirty";
|
|
@@ -26,6 +26,18 @@ export declare function useEmbedScreenNavigate(): (to: string, opts?: NavigateOp
|
|
|
26
26
|
* them.
|
|
27
27
|
*/
|
|
28
28
|
export declare function useEmbedNavigate(): (to: string, opts?: NavigateOptions) => void;
|
|
29
|
+
/**
|
|
30
|
+
* Embed-mode Back: pop the iframe's own browser history (`navigate(-1)`) to the
|
|
31
|
+
* exact prior URL, so the URL-keyed retained page + cache restore the prior
|
|
32
|
+
* screen's full state - "the same as a normal app", just without tab chrome.
|
|
33
|
+
*
|
|
34
|
+
* Routed through the SAME deferred unsaved-changes guard the rest of embed
|
|
35
|
+
* navigation uses: a raw `navigate(-1)` would bypass the dirty guard and
|
|
36
|
+
* silently discard an in-progress edit (Codex finding). The CALLER
|
|
37
|
+
* (`useScreenBack`) decides WHEN to use this (only when in-frame history depth
|
|
38
|
+
* > 0); this hook only performs the guarded pop.
|
|
39
|
+
*/
|
|
40
|
+
export declare function useEmbedScreenBack(): () => void;
|
|
29
41
|
/**
|
|
30
42
|
* Emit a `navigation-failed` event to the host. Used where an in-frame
|
|
31
43
|
* navigation cannot be handled OUTSIDE the chokepoint - chiefly the embedded
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type QueryKey } from "@tanstack/react-query";
|
|
2
|
+
/** The canonical list-page envelope a paginated action returns in its `result` -
|
|
3
|
+
* the same shape `data.list` (ListResponse) produces. */
|
|
4
|
+
export interface ActionListPage<T> {
|
|
5
|
+
data: T[];
|
|
6
|
+
meta?: {
|
|
7
|
+
cursor?: string;
|
|
8
|
+
has_more?: boolean;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/** Query-key root for a one-shot action read. Mirrors the entity root
|
|
12
|
+
* `entity-data`. */
|
|
13
|
+
export declare const ACTION_DATA_KEY = "action-data";
|
|
14
|
+
/** Query-key root for a cursor (infinite) action read. Mirrors the entity cursor
|
|
15
|
+
* root `entity-data-cursor`; distinct from the one-shot read so it is
|
|
16
|
+
* reaped/registered independently. */
|
|
17
|
+
export declare const ACTION_DATA_CURSOR_KEY = "action-data-cursor";
|
|
18
|
+
/**
|
|
19
|
+
* The React Query key for a one-shot action read. Single source of truth for
|
|
20
|
+
* both `useActionData` and a screen registering it as its PRIMARY read with its
|
|
21
|
+
* retained page (`useRegisterRetainedQuery`). `params` is embedded directly;
|
|
22
|
+
* React Query hashes it stably (sorted keys).
|
|
23
|
+
*/
|
|
24
|
+
export declare function actionDataQueryKey(actionCode: string | undefined, params: Record<string, unknown>): QueryKey;
|
|
25
|
+
/**
|
|
26
|
+
* Read an arbitrary action ONCE and cache its `result` - the action mirror of
|
|
27
|
+
* `useEntityData`. `T` is whatever the action returns (a summary object, or a
|
|
28
|
+
* plain array that is not cursor-paginated). Returns the raw React Query result;
|
|
29
|
+
* the caller registers the key via `actionDataQueryKey` +
|
|
30
|
+
* `useRegisterRetainedQuery` for retention.
|
|
31
|
+
*/
|
|
32
|
+
export declare function useActionData<T>(actionCode: string | undefined, params: Record<string, unknown>, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<NoInfer<T>, Error>;
|
|
33
|
+
/**
|
|
34
|
+
* The React Query key for a cursor (infinite) action read. Single source of
|
|
35
|
+
* truth for both `useCursorActionData` and its retained-page registration. The
|
|
36
|
+
* key excludes the cursor (the cursor is the page param, not part of identity).
|
|
37
|
+
*/
|
|
38
|
+
export declare function cursorActionDataQueryKey(actionCode: string | undefined, params: Record<string, unknown>): QueryKey;
|
|
39
|
+
/** The accumulated, table-ready result of a cursor action read - mirrors the
|
|
40
|
+
* shape `useCursorEntityData` feeds a list. */
|
|
41
|
+
export interface CursorActionDataResult<T> {
|
|
42
|
+
rows: T[];
|
|
43
|
+
hasMore: boolean;
|
|
44
|
+
fetchNextPage: () => void;
|
|
45
|
+
isFetchingNextPage: boolean;
|
|
46
|
+
isLoading: boolean;
|
|
47
|
+
isError: boolean;
|
|
48
|
+
error: Error | null;
|
|
49
|
+
refetch: () => void;
|
|
50
|
+
queryKey: QueryKey;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Drive a cursor-paginated table from an action that returns an `ActionListPage`
|
|
54
|
+
* in its `result`. The mirror of `useCursorEntityData`, differing only in the
|
|
55
|
+
* source (an action via `executeAction`, not `EntityClient.list`): it
|
|
56
|
+
* accumulates windows with `useInfiniteQuery`, advancing `meta.cursor` while
|
|
57
|
+
* `meta.has_more`, and exposes the flattened rows. Register the returned
|
|
58
|
+
* `queryKey` with `useRegisterRetainedQuery` so the pages survive a tab switch /
|
|
59
|
+
* Back within the retention window and die with the retained page.
|
|
60
|
+
*/
|
|
61
|
+
export declare function useCursorActionData<T>(actionCode: string | undefined, params: Record<string, unknown>, enabled?: boolean): CursorActionDataResult<T>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type QueryKey } from "@tanstack/react-query";
|
|
1
2
|
import type { FilterNodeParam, Refs, V2Meta } from "../types/api";
|
|
2
3
|
/**
|
|
3
4
|
* Query-key root for the cursor (infinite) entity list. Distinct from the
|
|
@@ -7,6 +8,18 @@ import type { FilterNodeParam, Refs, V2Meta } from "../types/api";
|
|
|
7
8
|
* list. See useSSE.ts.
|
|
8
9
|
*/
|
|
9
10
|
export declare const CURSOR_ENTITY_DATA_KEY = "entity-data-cursor";
|
|
11
|
+
/**
|
|
12
|
+
* The stable JSON segment of the cursor list's query key (the view-defining
|
|
13
|
+
* params, order-independent). Extracted so both the hook and the key builder
|
|
14
|
+
* compute it identically.
|
|
15
|
+
*/
|
|
16
|
+
export declare function cursorEntityStableKey(params: CursorEntityDataParams): string;
|
|
17
|
+
/**
|
|
18
|
+
* The React Query key for the cursor (infinite) entity list. Single source of
|
|
19
|
+
* truth for both `useCursorEntityData` and a screen registering its PRIMARY
|
|
20
|
+
* cursor read with its retained page (`useRegisterRetainedQuery`).
|
|
21
|
+
*/
|
|
22
|
+
export declare function cursorEntityDataQueryKey(entity: string | undefined, params: CursorEntityDataParams): QueryKey;
|
|
10
23
|
export interface CursorEntityDataParams {
|
|
11
24
|
sort?: string;
|
|
12
25
|
filters?: FilterNodeParam[];
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
+
import { type QueryKey } from "@tanstack/react-query";
|
|
1
2
|
import type { ListParams, ListResponse } from "../types/api";
|
|
3
|
+
/**
|
|
4
|
+
* The React Query key for an entity list-window read. The single source of
|
|
5
|
+
* truth for both `useEntityData` and a screen registering its PRIMARY read with
|
|
6
|
+
* its retained page (`useRegisterRetainedQuery`), so the registered key matches
|
|
7
|
+
* the live query exactly. See hooks/usePageStateRuntime.ts.
|
|
8
|
+
*/
|
|
9
|
+
export declare function entityDataQueryKey(entity: string | undefined, params: ListParams): QueryKey;
|
|
2
10
|
/**
|
|
3
11
|
* useEntityData fetches one page-window of entity rows.
|
|
4
12
|
*
|
|
@@ -1,2 +1,10 @@
|
|
|
1
|
+
import { type QueryKey } from "@tanstack/react-query";
|
|
1
2
|
import type { PkValues } from "../types/schema";
|
|
3
|
+
/**
|
|
4
|
+
* The React Query key for a single-record read. Single source of truth for both
|
|
5
|
+
* `useEntityItem` and a detail screen registering its PRIMARY read with its
|
|
6
|
+
* retained page (`useRegisterRetainedQuery`). For a string PK uses it directly;
|
|
7
|
+
* for a composite PK sorts the parts so key order does not fork the cache.
|
|
8
|
+
*/
|
|
9
|
+
export declare function entityItemQueryKey(entity: string | undefined, pkValues: PkValues | string | undefined): QueryKey;
|
|
2
10
|
export declare function useEntityItem(entity: string | undefined, pkValues: PkValues | string | undefined): import("@tanstack/react-query").UseQueryResult<NoInfer<import("..").DataResponse<Record<string, unknown>>>, Error>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** A `useState`-style setter accepting a value or an updater. */
|
|
2
|
+
export type PageStateSetter<T> = (next: T | ((prev: T) => T)) => void;
|
|
3
|
+
/**
|
|
4
|
+
* How coarsely a value is keyed.
|
|
5
|
+
* - `"url"` (default): keyed by the full canonical URL, so it FORKS when
|
|
6
|
+
* filters/sort/sub-view change (per-view memory - e.g. scroll position,
|
|
7
|
+
* expanded rows). A filter change is a new view with its own value.
|
|
8
|
+
* - `"path"`: keyed by the screen pathname only, so it PERSISTS across
|
|
9
|
+
* in-screen query changes (e.g. row selection, which survives a filter or
|
|
10
|
+
* column change and is pruned to the visible rows, not reset).
|
|
11
|
+
*/
|
|
12
|
+
export type PageStateScope = "url" | "path";
|
|
13
|
+
export interface PageStateOptions {
|
|
14
|
+
scope?: PageStateScope;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Bind a deep value to the current screen's retained page.
|
|
18
|
+
*
|
|
19
|
+
* Returns `[value, setValue]`:
|
|
20
|
+
* - `value` is the stored value for the live canonical URL, or `defaultValue`
|
|
21
|
+
* when absent / reaped / retention disabled. Re-renders only when THIS
|
|
22
|
+
* pageKey's value for THIS key changes.
|
|
23
|
+
* - `setValue` writes through to the store under the LIVE canonical URL
|
|
24
|
+
* (tracked via a per-render ref, so the stable setter always targets the
|
|
25
|
+
* currently-mounted view - never a key captured at mount, never the
|
|
26
|
+
* destination's after a navigation). Accepts a value or an updater.
|
|
27
|
+
*
|
|
28
|
+
* Writes are immediate (write-through), so there is no deferred unmount flush to
|
|
29
|
+
* lose: a value set while mounted at a URL is already stored under that URL when
|
|
30
|
+
* the screen unmounts. The retained page is created lazily on first write.
|
|
31
|
+
*/
|
|
32
|
+
export declare function usePageState<T>(key: string, defaultValue: T, opts?: PageStateOptions): [T, PageStateSetter<T>];
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type QueryClient, type QueryKey } from "@tanstack/react-query";
|
|
2
|
+
/**
|
|
3
|
+
* Apply `gcTime` to every retained-read query-key prefix. Exported so app.tsx
|
|
4
|
+
* can seed the DEFAULT floor on the QueryClient at module load - BEFORE the
|
|
5
|
+
* first screen renders and creates its reads - so even that first screen's data
|
|
6
|
+
* is not GC'd at React Query's 5-min default within the retention window. The
|
|
7
|
+
* runtime then overrides with the resolved per-tenant value for later reads.
|
|
8
|
+
*/
|
|
9
|
+
export declare function applyRetainedReadGcTime(client: QueryClient, gcTime: number): void;
|
|
10
|
+
/**
|
|
11
|
+
* Mount once (Layout) to drive the retained-page lifecycle from the resolved
|
|
12
|
+
* `ui_page_state_ttl_ms`. Idempotent and inert beyond its three effects.
|
|
13
|
+
*/
|
|
14
|
+
export declare function usePageStateRuntime(): void;
|
|
15
|
+
/**
|
|
16
|
+
* Register a screen's PRIMARY heavy read (its list or detail query key) with the
|
|
17
|
+
* current retained page, so a kill/sweep `removeQueries` releases the cached
|
|
18
|
+
* data alongside the deep state. Call from the standard pages (and custom
|
|
19
|
+
* screens) with the key from the matching key-builder (`entityDataQueryKey` /
|
|
20
|
+
* `cursorEntityDataQueryKey` / `entityItemQueryKey`).
|
|
21
|
+
*
|
|
22
|
+
* Pass ONLY primary heavy reads - never a shared ref/lookup query, or a
|
|
23
|
+
* sibling screen that shares its key would lose it on this page's eviction.
|
|
24
|
+
* `enabled` (default true) lets the cursor/offset pages register exactly the
|
|
25
|
+
* read they actually use.
|
|
26
|
+
*/
|
|
27
|
+
export declare function useRegisterRetainedQuery(queryKey: QueryKey | undefined, enabled?: boolean): void;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** The platform parameter governing retained-page retention. Declared in
|
|
2
|
+
* modules/_platform/schema/core_parameters.yaml (int, category `ui`,
|
|
3
|
+
* `[tenant]`, env `DECLARION_UI_PAGE_STATE_TTL_MS`). */
|
|
4
|
+
export declare const PAGE_STATE_TTL_PARAM = "ui_page_state_ttl_ms";
|
|
5
|
+
/**
|
|
6
|
+
* Resolve the retention window in milliseconds. Returns the per-tenant value
|
|
7
|
+
* once the parameter loads, the YAML-mirrored default before then, and clamps a
|
|
8
|
+
* malformed value to the default (never NaN/negative). `0` is honored as
|
|
9
|
+
* "retention disabled".
|
|
10
|
+
*/
|
|
11
|
+
export declare function usePageStateTtl(): number;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Entity, type Screen } from "../types/schema";
|
|
2
|
+
/**
|
|
3
|
+
* The embed-guarded tab registration shared by the schema-driven Smart pages
|
|
4
|
+
* (`useRegisterScreenTab`) and the public custom-screen hook (`useScreenTab`),
|
|
5
|
+
* so the "open a tab for this screen" logic - and its embed guard - lives in one
|
|
6
|
+
* place. Registers `route` as a tab once; `search` is captured at first
|
|
7
|
+
* registration (the mirror syncs later changes), so it is excluded from the
|
|
8
|
+
* effect deps. No-op when `route` is absent or embed mode is on (Invariant 8).
|
|
9
|
+
*/
|
|
10
|
+
export declare function useScreenTabRegistration(route: string | undefined, title: string, icon: string | undefined, search: string): void;
|
|
11
|
+
export declare function useRegisterScreenTab(screen: Screen | undefined, entity: Entity | undefined, search: string): void;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface UseScreenBackOptions {
|
|
2
|
+
/** Static/parent fallback invoked when there is no valid origin (e.g. a
|
|
3
|
+
* detail's `backToList`, a custom screen's static `PageHeader.backTo`).
|
|
4
|
+
* Callers make this embed-correct themselves; the hook never tab-ops it. */
|
|
5
|
+
fallback?: () => void;
|
|
6
|
+
}
|
|
7
|
+
export interface ScreenBack {
|
|
8
|
+
/** True when `goBack` will navigate (an origin exists, or a fallback is
|
|
9
|
+
* provided and permitted). Drives whether to render a Back affordance when a
|
|
10
|
+
* surface has no other visibility rule. */
|
|
11
|
+
canGoBack: boolean;
|
|
12
|
+
/** True when the active screen has a captured origin to return to. */
|
|
13
|
+
hasOriginBack: boolean;
|
|
14
|
+
/** True when a static/parent fallback is permitted (false ONLY for a
|
|
15
|
+
* menu-cleared origin). Surfaces combine it with their own rule. */
|
|
16
|
+
allowFallbackBack: boolean;
|
|
17
|
+
/** Navigate Back: switch to / reopen the origin tab, else invoke the
|
|
18
|
+
* fallback. Never closes the current tab; never throws. */
|
|
19
|
+
goBack: () => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function useScreenBack(opts?: UseScreenBackOptions): ScreenBack;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface UseScreenTabOptions {
|
|
2
|
+
/** The tab's route. Defaults to the live `location.pathname` - the right value
|
|
3
|
+
* for a param-less custom screen, which is the common case. */
|
|
4
|
+
route?: string;
|
|
5
|
+
/** Tab title. Defaults to the route when omitted. */
|
|
6
|
+
title?: string;
|
|
7
|
+
/** Tab icon name (resolved by the icon registry). */
|
|
8
|
+
icon?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function useScreenTab(opts?: UseScreenTabOptions): void;
|
|
@@ -3,6 +3,15 @@ interface TabNavigateOptions {
|
|
|
3
3
|
icon?: string;
|
|
4
4
|
search?: string;
|
|
5
5
|
replace?: boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Top-level (chrome) navigation: do NOT capture the current screen as the
|
|
8
|
+
* destination's Back origin; CLEAR the destination tab's origin to `null`
|
|
9
|
+
* (the menu-cleared sentinel) so a menu/sidebar/command-palette-opened
|
|
10
|
+
* screen shows no Back. Default `false` = capture by default, which is what
|
|
11
|
+
* makes every drill-in (content anchors, row clicks, association, action
|
|
12
|
+
* href, custom `tabNavigate`) origin-aware with no per-site change.
|
|
13
|
+
*/
|
|
14
|
+
topLevel?: boolean;
|
|
6
15
|
}
|
|
7
16
|
/**
|
|
8
17
|
* Split a full location string (`/path?query#hash`) into the fields
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useTabSearchMirror(route: string | undefined): void;
|
package/dist-lib/index.d.ts
CHANGED
|
@@ -16,11 +16,13 @@ export { useSchema } from "./hooks/useSchema";
|
|
|
16
16
|
export { useEntity } from "./hooks/useEntity";
|
|
17
17
|
export { useScreen } from "./hooks/useScreen";
|
|
18
18
|
export { useAuth } from "./hooks/useAuth";
|
|
19
|
-
export { useEntityData, useEntityCount } from "./hooks/useEntityData";
|
|
20
|
-
export { useCursorEntityData } from "./hooks/useCursorEntityData";
|
|
19
|
+
export { useEntityData, useEntityCount, entityDataQueryKey } from "./hooks/useEntityData";
|
|
20
|
+
export { useCursorEntityData, cursorEntityDataQueryKey, cursorEntityStableKey, } from "./hooks/useCursorEntityData";
|
|
21
21
|
export type { CursorEntityDataParams, CursorEntityDataResult, } from "./hooks/useCursorEntityData";
|
|
22
22
|
export { useAllEntityData } from "./hooks/useAllEntityData";
|
|
23
|
-
export { useEntityItem } from "./hooks/useEntityItem";
|
|
23
|
+
export { useEntityItem, entityItemQueryKey } from "./hooks/useEntityItem";
|
|
24
|
+
export { useActionData, useCursorActionData, actionDataQueryKey, cursorActionDataQueryKey, ACTION_DATA_KEY, ACTION_DATA_CURSOR_KEY, } from "./hooks/useActionData";
|
|
25
|
+
export type { ActionListPage, CursorActionDataResult } from "./hooks/useActionData";
|
|
24
26
|
export { useCreateEntity, useUpdateEntity, useDeleteEntity } from "./hooks/useMutations";
|
|
25
27
|
export { useDebounce } from "./hooks/useDebounce";
|
|
26
28
|
export { usePublicParams, useResolvedParam, useParam } from "./hooks/useParams";
|
|
@@ -34,8 +36,21 @@ export { registerScreen } from "./stores/screen-registry";
|
|
|
34
36
|
export { setIconRegistry, getIcon } from "./stores/icon-registry";
|
|
35
37
|
export type { IconDef } from "./stores/icon-registry";
|
|
36
38
|
export { registerLayoutWidget, getLayoutWidget, hasLayoutWidget, type LayoutWidget, type LayoutWidgetProps, } from "./components/detail-layout/widgets/registry";
|
|
37
|
-
export { useTabStore, type TabItem } from "./stores/tabs";
|
|
39
|
+
export { useTabStore, type TabItem, type ReturnTarget } from "./stores/tabs";
|
|
38
40
|
export { useTabNavigate } from "./hooks/useTabNavigate";
|
|
41
|
+
export { useScreenBack } from "./hooks/useScreenBack";
|
|
42
|
+
export type { UseScreenBackOptions, ScreenBack } from "./hooks/useScreenBack";
|
|
43
|
+
export { usePageState } from "./hooks/usePageState";
|
|
44
|
+
export type { PageStateSetter } from "./hooks/usePageState";
|
|
45
|
+
export { canonicalUrl } from "./lib/canonical-url";
|
|
46
|
+
export type { CanonicalLocation } from "./lib/canonical-url";
|
|
47
|
+
export { useRegisterRetainedQuery } from "./hooks/usePageStateRuntime";
|
|
48
|
+
export { usePageStateTtl, PAGE_STATE_TTL_PARAM } from "./hooks/usePageStateTtl";
|
|
49
|
+
export { useScreenTab } from "./hooks/useScreenTab";
|
|
50
|
+
export type { UseScreenTabOptions } from "./hooks/useScreenTab";
|
|
51
|
+
export { useTabSearchMirror } from "./hooks/useTabSearchMirror";
|
|
52
|
+
export { useVirtualScrollRestoration, usePlainScrollRestoration, useSavedScrollOffset, SCROLL_STATE_KEY, } from "./lib/scroll-restoration";
|
|
53
|
+
export type { ScrollAnchor, ScrollableVirtualizer } from "./lib/scroll-restoration";
|
|
39
54
|
export { SmartListPage } from "./components/pages/SmartListPage";
|
|
40
55
|
export { SmartDetailPage } from "./components/pages/SmartDetailPage";
|
|
41
56
|
export { SmartRecordListPage } from "./components/pages/SmartRecordListPage";
|