@tailor-platform/app-shell 0.13.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.css CHANGED
@@ -1,2 +1,2 @@
1
- @layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--astw-font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--astw-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--astw-color-black: #000;--astw-color-white: #fff;--astw-spacing: .25rem;--astw-container-xs: 20rem;--astw-container-sm: 24rem;--astw-container-lg: 32rem;--astw-container-5xl: 64rem;--astw-text-xs: .75rem;--astw-text-xs--line-height: calc(1 / .75);--astw-text-sm: .875rem;--astw-text-sm--line-height: calc(1.25 / .875);--astw-text-base: 1rem;--astw-text-base--line-height: 1.5 ;--astw-text-lg: 1.125rem;--astw-text-lg--line-height: calc(1.75 / 1.125);--astw-font-weight-normal: 400;--astw-font-weight-medium: 500;--astw-font-weight-semibold: 600;--astw-font-weight-bold: 700;--astw-tracking-tight: -.025em;--astw-radius-xs: .125rem;--astw-ease-in-out: cubic-bezier(.4, 0, .2, 1);--astw-animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--astw-default-transition-duration: .15s;--astw-default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--astw-default-font-family: var(--astw-font-sans);--astw-default-mono-font-family: var(--astw-font-mono)}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--astw-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(--astw-default-font-feature-settings, normal);font-variation-settings:var(--astw-default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--astw-default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--astw-default-mono-font-feature-settings, normal);font-variation-settings:var(--astw-default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}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{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}: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)){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,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.astw\:pointer-events-none{pointer-events:none}.astw\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.astw\:absolute{position:absolute}.astw\:fixed{position:fixed}.astw\:relative{position:relative}.astw\:inset-0{inset:calc(var(--astw-spacing) * 0)}.astw\:inset-x-0{inset-inline:calc(var(--astw-spacing) * 0)}.astw\:inset-y-0{inset-block:calc(var(--astw-spacing) * 0)}.astw\:top-0{top:calc(var(--astw-spacing) * 0)}.astw\:top-1\.5{top:calc(var(--astw-spacing) * 1.5)}.astw\:top-3\.5{top:calc(var(--astw-spacing) * 3.5)}.astw\:top-4{top:calc(var(--astw-spacing) * 4)}.astw\:top-\[50\%\]{top:50%}.astw\:right-0{right:calc(var(--astw-spacing) * 0)}.astw\:right-1{right:calc(var(--astw-spacing) * 1)}.astw\:right-3{right:calc(var(--astw-spacing) * 3)}.astw\:right-4{right:calc(var(--astw-spacing) * 4)}.astw\:bottom-0{bottom:calc(var(--astw-spacing) * 0)}.astw\:left-0{left:calc(var(--astw-spacing) * 0)}.astw\:left-\[50\%\]{left:50%}.astw\:z-10{z-index:10}.astw\:z-20{z-index:20}.astw\:z-50{z-index:50}.astw\:mx-2{margin-inline:calc(var(--astw-spacing) * 2)}.astw\:mx-3\.5{margin-inline:calc(var(--astw-spacing) * 3.5)}.astw\:mx-auto{margin-inline:auto}.astw\:mt-2{margin-top:calc(var(--astw-spacing) * 2)}.astw\:mt-4{margin-top:calc(var(--astw-spacing) * 4)}.astw\:mt-auto{margin-top:auto}.astw\:mb-2{margin-bottom:calc(var(--astw-spacing) * 2)}.astw\:-ml-1{margin-left:calc(var(--astw-spacing) * -1)}.astw\:-ml-2\.5{margin-left:calc(var(--astw-spacing) * -2.5)}.astw\:flex{display:flex}.astw\:grid{display:grid}.astw\:hidden{display:none}.astw\:inline-flex{display:inline-flex}.astw\:aspect-square{aspect-ratio:1 / 1}.astw\:size-2\.5{width:calc(var(--astw-spacing) * 2.5);height:calc(var(--astw-spacing) * 2.5)}.astw\:size-4{width:calc(var(--astw-spacing) * 4);height:calc(var(--astw-spacing) * 4)}.astw\:size-4\.5{width:calc(var(--astw-spacing) * 4.5);height:calc(var(--astw-spacing) * 4.5)}.astw\:size-9{width:calc(var(--astw-spacing) * 9);height:calc(var(--astw-spacing) * 9)}.astw\:h-4{height:calc(var(--astw-spacing) * 4)}.astw\:h-5{height:calc(var(--astw-spacing) * 5)}.astw\:h-7{height:calc(var(--astw-spacing) * 7)}.astw\:h-8{height:calc(var(--astw-spacing) * 8)}.astw\:h-9{height:calc(var(--astw-spacing) * 9)}.astw\:h-10{height:calc(var(--astw-spacing) * 10)}.astw\:h-12{height:calc(var(--astw-spacing) * 12)}.astw\:h-14{height:calc(var(--astw-spacing) * 14)}.astw\:h-auto{height:auto}.astw\:h-full{height:100%}.astw\:h-svh{height:100svh}.astw\:min-h-0{min-height:calc(var(--astw-spacing) * 0)}.astw\:min-h-svh{min-height:100svh}.astw\:w-\(--sidebar-width\){width:var(--sidebar-width)}.astw\:w-3\/4{width:75%}.astw\:w-4{width:calc(var(--astw-spacing) * 4)}.astw\:w-5{width:calc(var(--astw-spacing) * 5)}.astw\:w-\[100\%\]{width:100%}.astw\:w-\[calc\(100\%-var\(--sidebar-width\)\)\]{width:calc(100% - var(--sidebar-width))}.astw\:w-auto{width:auto}.astw\:w-fit{width:fit-content}.astw\:w-full{width:100%}.astw\:max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.astw\:max-w-5xl{max-width:var(--astw-container-5xl)}.astw\:max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.astw\:min-w-0{min-width:calc(var(--astw-spacing) * 0)}.astw\:min-w-5{min-width:calc(var(--astw-spacing) * 5)}.astw\:flex-1{flex:1}.astw\:shrink-0{flex-shrink:0}.astw\:caption-bottom{caption-side:bottom}.astw\:origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.astw\:-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.astw\:-translate-x-px{--tw-translate-x: -1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.astw\:translate-x-\[-50\%\]{--tw-translate-x: -50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.astw\:translate-x-px{--tw-translate-x: 1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.astw\:translate-y-\[-50\%\]{--tw-translate-y: -50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.astw\:translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;translate:var(--tw-translate-x) var(--tw-translate-y)}.astw\:rotate-45{rotate:45deg}.astw\:animate-in{animation:enter var(--tw-duration,.15s)var(--tw-ease,ease)}.astw\:animate-pulse{animation:var(--astw-animate-pulse)}.astw\:flex-col{flex-direction:column}.astw\:flex-col-reverse{flex-direction:column-reverse}.astw\:flex-row{flex-direction:row}.astw\:flex-wrap{flex-wrap:wrap}.astw\:items-center{align-items:center}.astw\:justify-between{justify-content:space-between}.astw\:justify-center{justify-content:center}.astw\:justify-start{justify-content:flex-start}.astw\:gap-0\.5{gap:calc(var(--astw-spacing) * .5)}.astw\:gap-1{gap:calc(var(--astw-spacing) * 1)}.astw\:gap-1\.5{gap:calc(var(--astw-spacing) * 1.5)}.astw\:gap-2{gap:calc(var(--astw-spacing) * 2)}.astw\:gap-3{gap:calc(var(--astw-spacing) * 3)}.astw\:gap-4{gap:calc(var(--astw-spacing) * 4)}.astw\:gap-\[10px\]{gap:10px}.astw\:overflow-auto{overflow:auto}.astw\:overflow-hidden{overflow:hidden}.astw\:overflow-x-auto{overflow-x:auto}.astw\:rounded-\[2px\]{border-radius:2px}.astw\:rounded-lg{border-radius:var(--radius)}.astw\:rounded-md{border-radius:calc(var(--radius) - 2px)}.astw\:rounded-sm{border-radius:calc(var(--radius) - 4px)}.astw\:rounded-xs{border-radius:var(--astw-radius-xs)}.astw\:border{border-style:var(--tw-border-style);border-width:1px}.astw\:border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.astw\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.astw\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.astw\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.astw\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.astw\:border-input{border-color:var(--input)}.astw\:border-sidebar-border{border-color:var(--sidebar-border)}.astw\:border-x-border{border-inline-color:var(--border)}.astw\:bg-accent{background-color:var(--accent)}.astw\:bg-background{background-color:var(--background)}.astw\:bg-black\/50{background-color:var(--astw-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--astw-color-black) 50%,transparent)}}.astw\:bg-border{background-color:var(--border)}.astw\:bg-card{background-color:var(--card)}.astw\:bg-destructive{background-color:var(--destructive)}.astw\:bg-muted\/50{background-color:var(--muted);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--muted) 50%,transparent)}}.astw\:bg-primary{background-color:var(--primary)}.astw\:bg-secondary{background-color:var(--secondary)}.astw\:bg-sidebar{background-color:var(--sidebar)}.astw\:bg-sidebar-accent{background-color:var(--sidebar-accent)}.astw\:bg-sidebar-border{background-color:var(--sidebar-border)}.astw\:bg-transparent{background-color:transparent}.astw\:fill-primary{fill:var(--primary)}.astw\:p-0{padding:calc(var(--astw-spacing) * 0)}.astw\:p-2{padding:calc(var(--astw-spacing) * 2)}.astw\:p-3{padding:calc(var(--astw-spacing) * 3)}.astw\:p-4{padding:calc(var(--astw-spacing) * 4)}.astw\:p-6{padding:calc(var(--astw-spacing) * 6)}.astw\:px-1{padding-inline:calc(var(--astw-spacing) * 1)}.astw\:px-2{padding-inline:calc(var(--astw-spacing) * 2)}.astw\:px-2\.5{padding-inline:calc(var(--astw-spacing) * 2.5)}.astw\:px-3{padding-inline:calc(var(--astw-spacing) * 3)}.astw\:px-4{padding-inline:calc(var(--astw-spacing) * 4)}.astw\:px-6{padding-inline:calc(var(--astw-spacing) * 6)}.astw\:py-0\.5{padding-block:calc(var(--astw-spacing) * .5)}.astw\:py-1{padding-block:calc(var(--astw-spacing) * 1)}.astw\:py-1\.5{padding-block:calc(var(--astw-spacing) * 1.5)}.astw\:py-2{padding-block:calc(var(--astw-spacing) * 2)}.astw\:text-center{text-align:center}.astw\:text-left{text-align:left}.astw\:align-middle{vertical-align:middle}.astw\:text-base{font-size:var(--astw-text-base);line-height:var(--tw-leading, var(--astw-text-base--line-height))}.astw\:text-lg{font-size:var(--astw-text-lg);line-height:var(--tw-leading, var(--astw-text-lg--line-height))}.astw\:text-sm{font-size:var(--astw-text-sm);line-height:var(--tw-leading, var(--astw-text-sm--line-height))}.astw\:text-xs{font-size:var(--astw-text-xs);line-height:var(--tw-leading, var(--astw-text-xs--line-height))}.astw\:leading-\[36px\]{--tw-leading: 36px;line-height:36px}.astw\:leading-none{--tw-leading: 1;line-height:1}.astw\:font-bold{--tw-font-weight: var(--astw-font-weight-bold);font-weight:var(--astw-font-weight-bold)}.astw\:font-medium{--tw-font-weight: var(--astw-font-weight-medium);font-weight:var(--astw-font-weight-medium)}.astw\:font-normal{--tw-font-weight: var(--astw-font-weight-normal);font-weight:var(--astw-font-weight-normal)}.astw\:font-semibold{--tw-font-weight: var(--astw-font-weight-semibold);font-weight:var(--astw-font-weight-semibold)}.astw\:tracking-tight{--tw-tracking: var(--astw-tracking-tight);letter-spacing:var(--astw-tracking-tight)}.astw\:text-balance{text-wrap:balance}.astw\:break-words{overflow-wrap:break-word}.astw\:whitespace-nowrap{white-space:nowrap}.astw\:text-foreground{color:var(--foreground)}.astw\:text-muted-foreground{color:var(--muted-foreground)}.astw\:text-primary{color:var(--primary)}.astw\:text-primary-foreground{color:var(--primary-foreground)}.astw\:text-secondary-foreground{color:var(--secondary-foreground)}.astw\:text-sidebar-foreground{color:var(--sidebar-foreground)}.astw\:text-sidebar-foreground\/70{color:var(--sidebar-foreground);@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,var(--sidebar-foreground) 70%,transparent)}}.astw\:text-white{color:var(--astw-color-white)}.astw\: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,)}.astw\:underline-offset-4{text-underline-offset:4px}.astw\:opacity-70{opacity:70%}.astw\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.astw\:shadow-lg{--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.astw\:shadow-none{--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.astw\:shadow-xs{--tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.astw\:ring-sidebar-ring{--tw-ring-color: var(--sidebar-ring)}.astw\:outline-hidden{--tw-outline-style: none;outline-style:none;@media (forced-colors: active){outline:2px solid transparent;outline-offset:2px}}.astw\: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;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-\[width\,height\]{transition-property:width,height;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\: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(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:duration-200{--tw-duration: .2s;transition-duration:.2s}.astw\:ease-in-out{--tw-ease: var(--astw-ease-in-out);transition-timing-function:var(--astw-ease-in-out)}.astw\:ease-linear{--tw-ease: linear;transition-timing-function:linear}.astw\:outline-none{--tw-outline-style: none;outline-style:none}.astw\:select-none{-webkit-user-select:none;user-select:none}.astw\:fade-in-0{--tw-enter-opacity: 0}.astw\:zoom-in-95{--tw-enter-scale: .95}.astw\:group-focus-within\/menu-item\:opacity-100{&:is(:where(.astw\:group\/menu-item):focus-within *){opacity:100%}}.astw\:group-hover\/menu-item\:opacity-100{&:is(:where(.astw\:group\/menu-item):hover *){@media (hover: hover){opacity:100%}}}.astw\:group-has-data-\[collapsible\=icon\]\/sidebar-wrapper\:h-12{&:is(:where(.astw\:group\/sidebar-wrapper):has(*[data-collapsible=icon]) *){height:calc(var(--astw-spacing) * 12)}}.astw\:group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8{&:is(:where(.astw\:group\/menu-item):has(*[data-sidebar=menu-action]) *){padding-right:calc(var(--astw-spacing) * 8)}}.astw\:group-data-\[collapsible\=icon\]\:-mt-8{&:is(:where(.astw\:group)[data-collapsible=icon] *){margin-top:calc(var(--astw-spacing) * -8)}}.astw\:group-data-\[collapsible\=icon\]\:hidden{&:is(:where(.astw\:group)[data-collapsible=icon] *){display:none}}.astw\:group-data-\[collapsible\=icon\]\:size-8\!{&:is(:where(.astw\:group)[data-collapsible=icon] *){width:calc(var(--astw-spacing) * 8)!important;height:calc(var(--astw-spacing) * 8)!important}}.astw\:group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\){&:is(:where(.astw\:group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}}.astw\:group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]{&:is(:where(.astw\:group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--astw-spacing) * 4)))}}.astw\:group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]{&:is(:where(.astw\:group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--astw-spacing) * 4)) + 2px)}}.astw\:group-data-\[collapsible\=icon\]\:overflow-hidden{&:is(:where(.astw\:group)[data-collapsible=icon] *){overflow:hidden}}.astw\:group-data-\[collapsible\=icon\]\:p-0\!{&:is(:where(.astw\:group)[data-collapsible=icon] *){padding:calc(var(--astw-spacing) * 0)!important}}.astw\:group-data-\[collapsible\=icon\]\:p-2\!{&:is(:where(.astw\:group)[data-collapsible=icon] *){padding:calc(var(--astw-spacing) * 2)!important}}.astw\:group-data-\[collapsible\=icon\]\:opacity-0{&:is(:where(.astw\:group)[data-collapsible=icon] *){opacity:0%}}.astw\:group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{&:is(:where(.astw\:group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width) * -1)}}.astw\:group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{&:is(:where(.astw\:group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width) * -1)}}.astw\:group-data-\[collapsible\=offcanvas\]\:w-0{&:is(:where(.astw\:group)[data-collapsible=offcanvas] *){width:calc(var(--astw-spacing) * 0)}}.astw\:group-data-\[collapsible\=offcanvas\]\:translate-x-0{&:is(:where(.astw\:group)[data-collapsible=offcanvas] *){--tw-translate-x: calc(var(--astw-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}}.astw\:group-data-\[side\=left\]\:-right-4{&:is(:where(.astw\:group)[data-side=left] *){right:calc(var(--astw-spacing) * -4)}}.astw\:group-data-\[side\=left\]\:border-r{&:is(:where(.astw\:group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}}.astw\:group-data-\[side\=right\]\:left-0{&:is(:where(.astw\:group)[data-side=right] *){left:calc(var(--astw-spacing) * 0)}}.astw\:group-data-\[side\=right\]\:rotate-180{&:is(:where(.astw\:group)[data-side=right] *){rotate:180deg}}.astw\:group-data-\[side\=right\]\:border-l{&:is(:where(.astw\:group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}}.astw\:group-data-\[variant\=floating\]\:rounded-lg{&:is(:where(.astw\:group)[data-variant=floating] *){border-radius:var(--radius)}}.astw\:group-data-\[variant\=floating\]\:border{&:is(:where(.astw\:group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}}.astw\:group-data-\[variant\=floating\]\:border-sidebar-border{&:is(:where(.astw\:group)[data-variant=floating] *){border-color:var(--sidebar-border)}}.astw\:group-data-\[variant\=floating\]\:shadow-sm{&:is(:where(.astw\:group)[data-variant=floating] *){--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.astw\:peer-hover\/menu-button\:text-sidebar-accent-foreground{&:is(:where(.astw\:peer\/menu-button):hover~*){@media (hover: hover){color:var(--sidebar-accent-foreground)}}}.astw\:peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{&:is(:where(.astw\:peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}}.astw\:peer-data-\[size\=default\]\/menu-button\:top-1\.5{&:is(:where(.astw\:peer\/menu-button)[data-size=default]~*){top:calc(var(--astw-spacing) * 1.5)}}.astw\:peer-data-\[size\=lg\]\/menu-button\:top-2\.5{&:is(:where(.astw\:peer\/menu-button)[data-size=lg]~*){top:calc(var(--astw-spacing) * 2.5)}}.astw\:peer-data-\[size\=sm\]\/menu-button\:top-1{&:is(:where(.astw\:peer\/menu-button)[data-size=sm]~*){top:calc(var(--astw-spacing) * 1)}}.astw\:selection\:bg-primary{& *::selection{background-color:var(--primary)}&::selection{background-color:var(--primary)}}.astw\:selection\:text-primary-foreground{& *::selection{color:var(--primary-foreground)}&::selection{color:var(--primary-foreground)}}.astw\:file\:inline-flex{&::file-selector-button{display:inline-flex}}.astw\:file\:h-7{&::file-selector-button{height:calc(var(--astw-spacing) * 7)}}.astw\:file\:border-0{&::file-selector-button{border-style:var(--tw-border-style);border-width:0px}}.astw\:file\:bg-transparent{&::file-selector-button{background-color:transparent}}.astw\:file\:text-sm{&::file-selector-button{font-size:var(--astw-text-sm);line-height:var(--tw-leading, var(--astw-text-sm--line-height))}}.astw\:file\:font-medium{&::file-selector-button{--tw-font-weight: var(--astw-font-weight-medium);font-weight:var(--astw-font-weight-medium)}}.astw\:file\:text-foreground{&::file-selector-button{color:var(--foreground)}}.astw\:placeholder\:text-muted-foreground{&::placeholder{color:var(--muted-foreground)}}.astw\:after\:absolute{&:after{content:var(--tw-content);position:absolute}}.astw\:after\:-inset-2{&:after{content:var(--tw-content);inset:calc(var(--astw-spacing) * -2)}}.astw\:after\:inset-y-0{&:after{content:var(--tw-content);inset-block:calc(var(--astw-spacing) * 0)}}.astw\:after\:left-1\/2{&:after{content:var(--tw-content);left:50%}}.astw\:after\:w-\[2px\]{&:after{content:var(--tw-content);width:2px}}.astw\:group-data-\[collapsible\=offcanvas\]\:after\:left-full{&:is(:where(.astw\:group)[data-collapsible=offcanvas] *){&:after{content:var(--tw-content);left:100%}}}.astw\:last\:text-foreground{&:last-child{color:var(--foreground)}}.astw\:hover\:bg-accent{&:hover{@media (hover: hover){background-color:var(--accent)}}}.astw\:hover\:bg-destructive\/90{&:hover{@media (hover: hover){background-color:var(--destructive);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--destructive) 90%,transparent)}}}}.astw\:hover\:bg-muted\/50{&:hover{@media (hover: hover){background-color:var(--muted);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--muted) 50%,transparent)}}}}.astw\:hover\:bg-primary\/90{&:hover{@media (hover: hover){background-color:var(--primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--primary) 90%,transparent)}}}}.astw\:hover\:bg-secondary\/80{&:hover{@media (hover: hover){background-color:var(--secondary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--secondary) 80%,transparent)}}}}.astw\:hover\:bg-sidebar-accent{&:hover{@media (hover: hover){background-color:var(--sidebar-accent)}}}.astw\:hover\:text-accent-foreground{&:hover{@media (hover: hover){color:var(--accent-foreground)}}}.astw\:hover\:text-foreground{&:hover{@media (hover: hover){color:var(--foreground)}}}.astw\:hover\:text-sidebar-accent-foreground{&:hover{@media (hover: hover){color:var(--sidebar-accent-foreground)}}}.astw\:hover\:underline{&:hover{@media (hover: hover){text-decoration-line:underline}}}.astw\:hover\:opacity-100{&:hover{@media (hover: hover){opacity:100%}}}.astw\:hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]{&:hover{@media (hover: hover){--tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}.astw\:hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar{&:hover{@media (hover: hover){&:is(:where(.astw\:group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}}}}.astw\:hover\:after\:bg-sidebar-border{&:hover{@media (hover: hover){&:after{content:var(--tw-content);background-color:var(--sidebar-border)}}}}.astw\:focus\:ring-2{&:focus{--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)}}.astw\:focus\:ring-ring{&:focus{--tw-ring-color: var(--ring)}}.astw\:focus\:ring-offset-2{&:focus{--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)}}.astw\:focus\:outline-hidden{&:focus{--tw-outline-style: none;outline-style:none;@media (forced-colors: active){outline:2px solid transparent;outline-offset:2px}}}.astw\:focus-visible\:border-ring{&:focus-visible{border-color:var(--ring)}}.astw\: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)}}.astw\:focus-visible\:ring-\[3px\]{&:focus-visible{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.astw\:focus-visible\:ring-destructive\/20{&:focus-visible{--tw-ring-color: var(--destructive);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent)}}}.astw\:focus-visible\:ring-ring\/50{&:focus-visible{--tw-ring-color: var(--ring);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent)}}}.astw\:active\:bg-sidebar-accent{&:active{background-color:var(--sidebar-accent)}}.astw\:active\:text-sidebar-accent-foreground{&:active{color:var(--sidebar-accent-foreground)}}.astw\:disabled\:pointer-events-none{&:disabled{pointer-events:none}}.astw\:disabled\:cursor-not-allowed{&:disabled{cursor:not-allowed}}.astw\:disabled\:opacity-50{&:disabled{opacity:50%}}.astw\:in-data-\[side\=left\]\:cursor-w-resize{:where(*[data-side=left]) &{cursor:w-resize}}.astw\:in-data-\[side\=right\]\:cursor-e-resize{:where(*[data-side=right]) &{cursor:e-resize}}.astw\:has-data-\[variant\=inset\]\:bg-sidebar{&:has(*[data-variant=inset]){background-color:var(--sidebar)}}.astw\:has-\[\>svg\]\:px-2\.5{&:has(>svg){padding-inline:calc(var(--astw-spacing) * 2.5)}}.astw\:has-\[\>svg\]\:px-3{&:has(>svg){padding-inline:calc(var(--astw-spacing) * 3)}}.astw\:has-\[\>svg\]\:px-4{&:has(>svg){padding-inline:calc(var(--astw-spacing) * 4)}}.astw\:aria-disabled\:pointer-events-none{&[aria-disabled=true]{pointer-events:none}}.astw\:aria-disabled\:opacity-50{&[aria-disabled=true]{opacity:50%}}.astw\:aria-invalid\:border-destructive{&[aria-invalid=true]{border-color:var(--destructive)}}.astw\:aria-invalid\:ring-destructive\/20{&[aria-invalid=true]{--tw-ring-color: var(--destructive);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent)}}}.astw\:data-\[active\=true\]\:bg-sidebar-accent{&[data-active=true]{background-color:var(--sidebar-accent)}}.astw\:data-\[active\=true\]\:font-medium{&[data-active=true]{--tw-font-weight: var(--astw-font-weight-medium);font-weight:var(--astw-font-weight-medium)}}.astw\:data-\[active\=true\]\:text-sidebar-accent-foreground{&[data-active=true]{color:var(--sidebar-accent-foreground)}}.astw\:data-\[orientation\=horizontal\]\:h-px{&[data-orientation=horizontal]{height:1px}}.astw\:data-\[orientation\=horizontal\]\:w-full{&[data-orientation=horizontal]{width:100%}}.astw\:data-\[orientation\=vertical\]\:h-full{&[data-orientation=vertical]{height:100%}}.astw\:data-\[orientation\=vertical\]\:w-px{&[data-orientation=vertical]{width:1px}}.astw\:data-\[side\=bottom\]\:slide-in-from-top-2{&[data-side=bottom]{--tw-enter-translate-y: calc(2*var(--spacing)*-1)}}.astw\:data-\[side\=left\]\:slide-in-from-right-2{&[data-side=left]{--tw-enter-translate-x: calc(2*var(--spacing))}}.astw\:data-\[side\=right\]\:slide-in-from-left-2{&[data-side=right]{--tw-enter-translate-x: calc(2*var(--spacing)*-1)}}.astw\:data-\[side\=top\]\:slide-in-from-bottom-2{&[data-side=top]{--tw-enter-translate-y: calc(2*var(--spacing))}}.astw\:data-\[state\=closed\]\:animate-out{&[data-state=closed]{animation:exit var(--tw-duration,.15s)var(--tw-ease,ease)}}.astw\:data-\[state\=closed\]\:duration-300{&[data-state=closed]{--tw-duration: .3s;transition-duration:.3s}}.astw\:data-\[state\=closed\]\:fade-out-0{&[data-state=closed]{--tw-exit-opacity: 0}}.astw\:data-\[state\=closed\]\:slide-out-to-bottom{&[data-state=closed]{--tw-exit-translate-y: 100%}}.astw\:data-\[state\=closed\]\:slide-out-to-left{&[data-state=closed]{--tw-exit-translate-x: -100%}}.astw\:data-\[state\=closed\]\:slide-out-to-right{&[data-state=closed]{--tw-exit-translate-x: 100%}}.astw\:data-\[state\=closed\]\:slide-out-to-top{&[data-state=closed]{--tw-exit-translate-y: -100%}}.astw\:data-\[state\=closed\]\:zoom-out-95{&[data-state=closed]{--tw-exit-scale: .95}}.astw\:data-\[state\=open\]\:rotate-90{&[data-state=open]{rotate:90deg}}.astw\:data-\[state\=open\]\:animate-in{&[data-state=open]{animation:enter var(--tw-duration,.15s)var(--tw-ease,ease)}}.astw\:data-\[state\=open\]\:bg-accent{&[data-state=open]{background-color:var(--accent)}}.astw\:data-\[state\=open\]\:bg-secondary{&[data-state=open]{background-color:var(--secondary)}}.astw\:data-\[state\=open\]\:text-muted-foreground{&[data-state=open]{color:var(--muted-foreground)}}.astw\:data-\[state\=open\]\:opacity-100{&[data-state=open]{opacity:100%}}.astw\:data-\[state\=open\]\:duration-500{&[data-state=open]{--tw-duration: .5s;transition-duration:.5s}}.astw\:data-\[state\=open\]\:fade-in-0{&[data-state=open]{--tw-enter-opacity: 0}}.astw\:data-\[state\=open\]\:slide-in-from-bottom{&[data-state=open]{--tw-enter-translate-y: 100%}}.astw\:data-\[state\=open\]\:slide-in-from-left{&[data-state=open]{--tw-enter-translate-x: -100%}}.astw\:data-\[state\=open\]\:slide-in-from-right{&[data-state=open]{--tw-enter-translate-x: 100%}}.astw\:data-\[state\=open\]\:slide-in-from-top{&[data-state=open]{--tw-enter-translate-y: -100%}}.astw\:data-\[state\=open\]\:zoom-in-95{&[data-state=open]{--tw-enter-scale: .95}}.astw\:data-\[state\=open\]\:hover\:bg-sidebar-accent{&[data-state=open]{&:hover{@media (hover: hover){background-color:var(--sidebar-accent)}}}}.astw\:data-\[state\=open\]\:hover\:text-sidebar-accent-foreground{&[data-state=open]{&:hover{@media (hover: hover){color:var(--sidebar-accent-foreground)}}}}.astw\:data-\[state\=selected\]\:bg-muted{&[data-state=selected]{background-color:var(--muted)}}.astw\:sm\:flex{@media (width >= 40rem){display:flex}}.astw\:sm\:max-w-lg{@media (width >= 40rem){max-width:var(--astw-container-lg)}}.astw\:sm\:max-w-sm{@media (width >= 40rem){max-width:var(--astw-container-sm)}}.astw\:sm\:flex-row{@media (width >= 40rem){flex-direction:row}}.astw\:sm\:justify-end{@media (width >= 40rem){justify-content:flex-end}}.astw\:sm\:gap-2\.5{@media (width >= 40rem){gap:calc(var(--astw-spacing) * 2.5)}}.astw\:sm\:text-left{@media (width >= 40rem){text-align:left}}.astw\:md\:block{@media (width >= 48rem){display:block}}.astw\:md\:flex{@media (width >= 48rem){display:flex}}.astw\:md\:hidden{@media (width >= 48rem){display:none}}.astw\:md\:w-xs{@media (width >= 48rem){width:var(--astw-container-xs)}}.astw\:md\:flex-row{@media (width >= 48rem){flex-direction:row}}.astw\:md\:text-sm{@media (width >= 48rem){font-size:var(--astw-text-sm);line-height:var(--tw-leading, var(--astw-text-sm--line-height))}}.astw\:md\:opacity-0{@media (width >= 48rem){opacity:0%}}.astw\:md\:peer-data-\[variant\=inset\]\:px-8{@media (width >= 48rem){&:is(:where(.astw\:peer)[data-variant=inset]~*){padding-inline:calc(var(--astw-spacing) * 8)}}}.astw\:md\:peer-data-\[variant\=inset\]\:py-2{@media (width >= 48rem){&:is(:where(.astw\:peer)[data-variant=inset]~*){padding-block:calc(var(--astw-spacing) * 2)}}}.astw\:md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:pl-2{@media (width >= 48rem){&:is(:where(.astw\:peer)[data-variant=inset]~*){&:is(:where(.astw\:peer)[data-state=collapsed]~*){padding-left:calc(var(--astw-spacing) * 2)}}}}.astw\:md\:after\:hidden{@media (width >= 48rem){&:after{content:var(--tw-content);display:none}}}.astw\:dark\:border-input{&:where(.dark,.dark *){border-color:var(--input)}}.astw\:dark\:bg-destructive\/60{&:where(.dark,.dark *){background-color:var(--destructive);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--destructive) 60%,transparent)}}}.astw\:dark\:bg-input\/30{&:where(.dark,.dark *){background-color:var(--input);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--input) 30%,transparent)}}}.astw\:dark\:hover\:bg-accent\/50{&:where(.dark,.dark *){&:hover{@media (hover: hover){background-color:var(--accent);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--accent) 50%,transparent)}}}}}.astw\:dark\:hover\:bg-input\/50{&:where(.dark,.dark *){&:hover{@media (hover: hover){background-color:var(--input);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--input) 50%,transparent)}}}}}.astw\:dark\:focus-visible\:ring-destructive\/40{&:where(.dark,.dark *){&:focus-visible{--tw-ring-color: var(--destructive);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent)}}}}.astw\:dark\:aria-invalid\:ring-destructive\/40{&:where(.dark,.dark *){&[aria-invalid=true]{--tw-ring-color: var(--destructive);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent)}}}}.astw\:\[\&_svg\]\:pointer-events-none{& svg{pointer-events:none}}.astw\:\[\&_svg\]\:shrink-0{& svg{flex-shrink:0}}.astw\:\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4{& svg:not([class*=size-]){width:calc(var(--astw-spacing) * 4);height:calc(var(--astw-spacing) * 4)}}.astw\:\[\&_tr\]\:border-b{& tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}}.astw\:\[\&_tr\:last-child\]\:border-0{& tr:last-child{border-style:var(--tw-border-style);border-width:0px}}.astw\:\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0{&:has([role=checkbox]){padding-right:calc(var(--astw-spacing) * 0)}}.astw\:\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]{>[role=checkbox]{--tw-translate-y: 2px;translate:var(--tw-translate-x) var(--tw-translate-y)}}.astw\:\[\&\>button\]\:hidden{>button{display:none}}.astw\:\[\&\>span\:last-child\]\:truncate{>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.astw\:\[\&\>svg\]\:size-3\.5{>svg{width:calc(var(--astw-spacing) * 3.5);height:calc(var(--astw-spacing) * 3.5)}}.astw\:\[\&\>svg\]\:size-4{>svg{width:calc(var(--astw-spacing) * 4);height:calc(var(--astw-spacing) * 4)}}.astw\:\[\&\>svg\]\:shrink-0{>svg{flex-shrink:0}}.astw\:\[\&\>svg\]\:text-sidebar-accent-foreground{>svg{color:var(--sidebar-accent-foreground)}}.astw\:\[\&\>tr\]\:last\:border-b-0{>tr{&:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0px}}}.astw\:\[\&\[data-state\=open\]_\.astw-rotate-target\]\:rotate-90{&[data-state=open] .astw-rotate-target{rotate:90deg}}.astw\:\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{[data-side=left][data-collapsible=offcanvas] &{right:calc(var(--astw-spacing) * -2)}}.astw\:\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{[data-side=left][data-state=collapsed] &{cursor:e-resize}}.astw\:\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{[data-side=right][data-collapsible=offcanvas] &{left:calc(var(--astw-spacing) * -2)}}.astw\:\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{[data-side=right][data-state=collapsed] &{cursor:w-resize}}}:root{--background: rgba(250, 250, 250, 1);--foreground: rgba(10, 10, 10, 1);--card: rgba(255, 255, 255, 1);--card-foreground: rgba(10, 10, 10, 1);--popover: rgba(255, 255, 255, 1);--popover-foreground: rgba(10, 10, 10, 1);--primary: rgba(23, 23, 23, 1);--primary-foreground: rgba(250, 250, 250, 1);--secondary: rgba(245, 245, 245, 1);--secondary-foreground: rgba(23, 23, 23, 1);--muted: rgba(245, 245, 245, 1);--muted-foreground: rgba(115, 115, 115, 1);--accent: rgba(245, 245, 245, 1);--accent-foreground: rgba(23, 23, 23, 1);--destructive: rgba(220, 38, 38, 1);--destructive-foreground: rgba(254, 242, 242, 1);--border: rgba(229, 229, 229, 1);--input: rgba(229, 229, 229, 1);--ring: rgba(163, 163, 163, 1);--chart-1: rgba(234, 88, 12, 1);--chart-2: rgba(13, 148, 136, 1);--chart-3: rgba(22, 78, 99, 1);--chart-4: rgba(251, 191, 36, 1);--chart-5: rgba(245, 158, 11, 1);--radius: .625rem;--sidebar: rgba(250, 250, 250, 1);--sidebar-foreground: rgba(10, 10, 10, 1);--sidebar-primary: rgba(23, 23, 23, 1);--sidebar-primary-foreground: rgba(250, 250, 250, 1);--sidebar-accent: rgba(245, 245, 245, 1);--sidebar-accent-foreground: rgba(23, 23, 23, 1);--sidebar-border: rgba(229, 229, 229, 1);--sidebar-ring: rgba(163, 163, 163, 1)}.dark{--background: rgba(10, 10, 10, 1);--foreground: rgba(250, 250, 250, 1);--card: rgba(23, 23, 23, 1);--card-foreground: rgba(250, 250, 250, 1);--popover: rgba(38, 38, 38, 1);--popover-foreground: rgba(250, 250, 250, 1);--primary: rgba(229, 229, 229, 1);--primary-foreground: rgba(23, 23, 23, 1);--secondary: rgba(38, 38, 38, 1);--secondary-foreground: rgba(250, 250, 250, 1);--muted: rgba(38, 38, 38, 1);--muted-foreground: rgba(163, 163, 163, 1);--accent: rgba(64, 64, 64, 1);--accent-foreground: rgba(250, 250, 250, 1);--destructive: rgba(248, 113, 113, 1);--destructive-foreground: rgba(254, 242, 242, 1);--border: rgba(255, 255, 255, .10000000149011612);--input: rgba(255, 255, 255, .15000000596046448);--ring: rgba(115, 115, 115, 1);--chart-1: rgba(29, 78, 216, 1);--chart-2: rgba(16, 185, 129, 1);--chart-3: rgba(245, 158, 11, 1);--chart-4: rgba(168, 85, 247, 1);--chart-5: rgba(244, 63, 94, 1);--sidebar: rgba(23, 23, 23, 1);--sidebar-foreground: rgba(250, 250, 250, 1);--sidebar-primary: rgba(29, 78, 216, 1);--sidebar-primary-foreground: rgba(250, 250, 250, 1);--sidebar-accent: rgba(38, 38, 38, 1);--sidebar-accent-foreground: rgba(250, 250, 250, 1);--sidebar-border: rgba(255, 255, 255, .10000000149011612);--sidebar-ring: rgba(82, 82, 82, 1)}@layer base{*,:after,:before,::backdrop,::file-selector-button{border-color:var(--color-gray-200, currentcolor)}}@layer base{*{border-color:var(--border);outline-color:var(--ring);@supports (color: color-mix(in lab,red,red)){outline-color:color-mix(in oklab,var(--ring) 50%,transparent)}}body{background-color:var(--background);font-family:var(--astw-font-sans);color:var(--foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::-webkit-scrollbar{height:calc(var(--astw-spacing) * 2);width:calc(var(--astw-spacing) * 2);background-color:var(--muted)}::-webkit-scrollbar-thumb{border-radius:.25rem;background-color:var(--muted-foreground)}::-webkit-scrollbar-corner{background-color:var(--muted-foreground)}}@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-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: 0px;}@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-duration{syntax: "*"; inherits: false;}@property --tw-ease{syntax: "*"; inherits: false;}@property --tw-content{syntax: "*"; initial-value: ""; inherits: false;}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}@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-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-duration: initial;--tw-ease: initial;--tw-content: ""}}}
1
+ @layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--astw-font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--astw-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--astw-color-black: #000;--astw-color-white: #fff;--astw-spacing: .25rem;--astw-container-xs: 20rem;--astw-container-sm: 24rem;--astw-container-lg: 32rem;--astw-container-5xl: 64rem;--astw-text-xs: .75rem;--astw-text-xs--line-height: calc(1 / .75);--astw-text-sm: .875rem;--astw-text-sm--line-height: calc(1.25 / .875);--astw-text-base: 1rem;--astw-text-base--line-height: 1.5 ;--astw-text-lg: 1.125rem;--astw-text-lg--line-height: calc(1.75 / 1.125);--astw-font-weight-normal: 400;--astw-font-weight-medium: 500;--astw-font-weight-semibold: 600;--astw-font-weight-bold: 700;--astw-tracking-tight: -.025em;--astw-radius-xs: .125rem;--astw-ease-in-out: cubic-bezier(.4, 0, .2, 1);--astw-animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--astw-default-transition-duration: .15s;--astw-default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--astw-default-font-family: var(--astw-font-sans);--astw-default-mono-font-family: var(--astw-font-mono)}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--astw-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(--astw-default-font-feature-settings, normal);font-variation-settings:var(--astw-default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--astw-default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--astw-default-mono-font-feature-settings, normal);font-variation-settings:var(--astw-default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}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{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}: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)){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,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.astw\:pointer-events-none{pointer-events:none}.astw\:sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.astw\:absolute{position:absolute}.astw\:fixed{position:fixed}.astw\:relative{position:relative}.astw\:inset-0{inset:calc(var(--astw-spacing) * 0)}.astw\:inset-x-0{inset-inline:calc(var(--astw-spacing) * 0)}.astw\:inset-y-0{inset-block:calc(var(--astw-spacing) * 0)}.astw\:top-0{top:calc(var(--astw-spacing) * 0)}.astw\:top-1\.5{top:calc(var(--astw-spacing) * 1.5)}.astw\:top-3\.5{top:calc(var(--astw-spacing) * 3.5)}.astw\:top-4{top:calc(var(--astw-spacing) * 4)}.astw\:top-\[50\%\]{top:50%}.astw\:right-0{right:calc(var(--astw-spacing) * 0)}.astw\:right-1{right:calc(var(--astw-spacing) * 1)}.astw\:right-3{right:calc(var(--astw-spacing) * 3)}.astw\:right-4{right:calc(var(--astw-spacing) * 4)}.astw\:bottom-0{bottom:calc(var(--astw-spacing) * 0)}.astw\:left-0{left:calc(var(--astw-spacing) * 0)}.astw\:left-\[50\%\]{left:50%}.astw\:z-10{z-index:10}.astw\:z-20{z-index:20}.astw\:z-50{z-index:50}.astw\:mx-2{margin-inline:calc(var(--astw-spacing) * 2)}.astw\:mx-3\.5{margin-inline:calc(var(--astw-spacing) * 3.5)}.astw\:mx-auto{margin-inline:auto}.astw\:mt-0\.5{margin-top:calc(var(--astw-spacing) * .5)}.astw\:mt-1{margin-top:calc(var(--astw-spacing) * 1)}.astw\:mt-2{margin-top:calc(var(--astw-spacing) * 2)}.astw\:mt-4{margin-top:calc(var(--astw-spacing) * 4)}.astw\:mt-auto{margin-top:auto}.astw\:mb-2{margin-bottom:calc(var(--astw-spacing) * 2)}.astw\:-ml-1{margin-left:calc(var(--astw-spacing) * -1)}.astw\:-ml-2\.5{margin-left:calc(var(--astw-spacing) * -2.5)}.astw\:flex{display:flex}.astw\:grid{display:grid}.astw\:hidden{display:none}.astw\:inline-flex{display:inline-flex}.astw\:aspect-square{aspect-ratio:1 / 1}.astw\:size-2\.5{width:calc(var(--astw-spacing) * 2.5);height:calc(var(--astw-spacing) * 2.5)}.astw\:size-4{width:calc(var(--astw-spacing) * 4);height:calc(var(--astw-spacing) * 4)}.astw\:size-4\.5{width:calc(var(--astw-spacing) * 4.5);height:calc(var(--astw-spacing) * 4.5)}.astw\:size-9{width:calc(var(--astw-spacing) * 9);height:calc(var(--astw-spacing) * 9)}.astw\:h-4{height:calc(var(--astw-spacing) * 4)}.astw\:h-5{height:calc(var(--astw-spacing) * 5)}.astw\:h-7{height:calc(var(--astw-spacing) * 7)}.astw\:h-8{height:calc(var(--astw-spacing) * 8)}.astw\:h-9{height:calc(var(--astw-spacing) * 9)}.astw\:h-10{height:calc(var(--astw-spacing) * 10)}.astw\:h-12{height:calc(var(--astw-spacing) * 12)}.astw\:h-14{height:calc(var(--astw-spacing) * 14)}.astw\:h-auto{height:auto}.astw\:h-full{height:100%}.astw\:h-svh{height:100svh}.astw\:min-h-0{min-height:calc(var(--astw-spacing) * 0)}.astw\:min-h-svh{min-height:100svh}.astw\:w-\(--sidebar-width\){width:var(--sidebar-width)}.astw\:w-3\/4{width:75%}.astw\:w-4{width:calc(var(--astw-spacing) * 4)}.astw\:w-5{width:calc(var(--astw-spacing) * 5)}.astw\:w-\[100\%\]{width:100%}.astw\:w-\[calc\(100\%-var\(--sidebar-width\)\)\]{width:calc(100% - var(--sidebar-width))}.astw\:w-auto{width:auto}.astw\:w-fit{width:fit-content}.astw\:w-full{width:100%}.astw\:max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.astw\:max-w-5xl{max-width:var(--astw-container-5xl)}.astw\:max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.astw\:min-w-0{min-width:calc(var(--astw-spacing) * 0)}.astw\:min-w-5{min-width:calc(var(--astw-spacing) * 5)}.astw\:flex-1{flex:1}.astw\:flex-shrink-0,.astw\:shrink-0{flex-shrink:0}.astw\:caption-bottom{caption-side:bottom}.astw\:origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.astw\:-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.astw\:-translate-x-px{--tw-translate-x: -1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.astw\:translate-x-\[-50\%\]{--tw-translate-x: -50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.astw\:translate-x-px{--tw-translate-x: 1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.astw\:translate-y-\[-50\%\]{--tw-translate-y: -50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.astw\:translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;translate:var(--tw-translate-x) var(--tw-translate-y)}.astw\:rotate-45{rotate:45deg}.astw\:animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.astw\:animate-pulse{animation:var(--astw-animate-pulse)}.astw\:flex-col{flex-direction:column}.astw\:flex-col-reverse{flex-direction:column-reverse}.astw\:flex-row{flex-direction:row}.astw\:flex-wrap{flex-wrap:wrap}.astw\:items-center{align-items:center}.astw\:items-start{align-items:flex-start}.astw\:justify-between{justify-content:space-between}.astw\:justify-center{justify-content:center}.astw\:justify-start{justify-content:flex-start}.astw\:gap-0\.5{gap:calc(var(--astw-spacing) * .5)}.astw\:gap-1{gap:calc(var(--astw-spacing) * 1)}.astw\:gap-1\.5{gap:calc(var(--astw-spacing) * 1.5)}.astw\:gap-2{gap:calc(var(--astw-spacing) * 2)}.astw\:gap-3{gap:calc(var(--astw-spacing) * 3)}.astw\:gap-4{gap:calc(var(--astw-spacing) * 4)}.astw\:gap-\[10px\]{gap:10px}.astw\:overflow-auto{overflow:auto}.astw\:overflow-hidden{overflow:hidden}.astw\:overflow-x-auto{overflow-x:auto}.astw\:rounded-\[2px\]{border-radius:2px}.astw\:rounded-lg{border-radius:var(--radius)}.astw\:rounded-md{border-radius:calc(var(--radius) - 2px)}.astw\:rounded-sm{border-radius:calc(var(--radius) - 4px)}.astw\:rounded-xs{border-radius:var(--astw-radius-xs)}.astw\:border{border-style:var(--tw-border-style);border-width:1px}.astw\:border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.astw\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.astw\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.astw\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.astw\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.astw\:border-input{border-color:var(--input)}.astw\:border-sidebar-border{border-color:var(--sidebar-border)}.astw\:border-x-border{border-inline-color:var(--border)}.astw\:bg-accent{background-color:var(--accent)}.astw\:bg-background{background-color:var(--background)}.astw\:bg-black\/50{background-color:var(--astw-color-black);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--astw-color-black) 50%,transparent)}}.astw\:bg-border{background-color:var(--border)}.astw\:bg-card{background-color:var(--card)}.astw\:bg-destructive{background-color:var(--destructive)}.astw\:bg-muted\/50{background-color:var(--muted);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--muted) 50%,transparent)}}.astw\:bg-primary{background-color:var(--primary)}.astw\:bg-secondary{background-color:var(--secondary)}.astw\:bg-sidebar{background-color:var(--sidebar)}.astw\:bg-sidebar-accent{background-color:var(--sidebar-accent)}.astw\:bg-sidebar-border{background-color:var(--sidebar-border)}.astw\:bg-transparent{background-color:transparent}.astw\:fill-primary{fill:var(--primary)}.astw\:p-0{padding:calc(var(--astw-spacing) * 0)}.astw\:p-2{padding:calc(var(--astw-spacing) * 2)}.astw\:p-3{padding:calc(var(--astw-spacing) * 3)}.astw\:p-4{padding:calc(var(--astw-spacing) * 4)}.astw\:p-6{padding:calc(var(--astw-spacing) * 6)}.astw\:px-1{padding-inline:calc(var(--astw-spacing) * 1)}.astw\:px-2{padding-inline:calc(var(--astw-spacing) * 2)}.astw\:px-2\.5{padding-inline:calc(var(--astw-spacing) * 2.5)}.astw\:px-3{padding-inline:calc(var(--astw-spacing) * 3)}.astw\:px-4{padding-inline:calc(var(--astw-spacing) * 4)}.astw\:px-6{padding-inline:calc(var(--astw-spacing) * 6)}.astw\:py-0\.5{padding-block:calc(var(--astw-spacing) * .5)}.astw\:py-1{padding-block:calc(var(--astw-spacing) * 1)}.astw\:py-1\.5{padding-block:calc(var(--astw-spacing) * 1.5)}.astw\:py-2{padding-block:calc(var(--astw-spacing) * 2)}.astw\:text-center{text-align:center}.astw\:text-left{text-align:left}.astw\:align-middle{vertical-align:middle}.astw\:text-base{font-size:var(--astw-text-base);line-height:var(--tw-leading, var(--astw-text-base--line-height))}.astw\:text-lg{font-size:var(--astw-text-lg);line-height:var(--tw-leading, var(--astw-text-lg--line-height))}.astw\:text-sm{font-size:var(--astw-text-sm);line-height:var(--tw-leading, var(--astw-text-sm--line-height))}.astw\:text-xs{font-size:var(--astw-text-xs);line-height:var(--tw-leading, var(--astw-text-xs--line-height))}.astw\:leading-\[36px\]{--tw-leading: 36px;line-height:36px}.astw\:leading-none{--tw-leading: 1;line-height:1}.astw\:font-bold{--tw-font-weight: var(--astw-font-weight-bold);font-weight:var(--astw-font-weight-bold)}.astw\:font-medium{--tw-font-weight: var(--astw-font-weight-medium);font-weight:var(--astw-font-weight-medium)}.astw\:font-normal{--tw-font-weight: var(--astw-font-weight-normal);font-weight:var(--astw-font-weight-normal)}.astw\:font-semibold{--tw-font-weight: var(--astw-font-weight-semibold);font-weight:var(--astw-font-weight-semibold)}.astw\:tracking-tight{--tw-tracking: var(--astw-tracking-tight);letter-spacing:var(--astw-tracking-tight)}.astw\:text-balance{text-wrap:balance}.astw\:break-words{overflow-wrap:break-word}.astw\:whitespace-nowrap{white-space:nowrap}.astw\:text-destructive{color:var(--destructive)}.astw\:text-foreground{color:var(--foreground)}.astw\:text-muted-foreground{color:var(--muted-foreground)}.astw\:text-primary{color:var(--primary)}.astw\:text-primary-foreground{color:var(--primary-foreground)}.astw\:text-secondary-foreground{color:var(--secondary-foreground)}.astw\:text-sidebar-foreground{color:var(--sidebar-foreground)}.astw\:text-sidebar-foreground\/70{color:var(--sidebar-foreground);@supports (color: color-mix(in lab,red,red)){color:color-mix(in oklab,var(--sidebar-foreground) 70%,transparent)}}.astw\:text-white{color:var(--astw-color-white)}.astw\: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,)}.astw\:underline-offset-4{text-underline-offset:4px}.astw\:opacity-70{opacity:70%}.astw\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.astw\:shadow-lg{--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.astw\:shadow-none{--tw-shadow: 0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.astw\:shadow-xs{--tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.astw\:ring-sidebar-ring{--tw-ring-color: var(--sidebar-ring)}.astw\:outline-hidden{--tw-outline-style: none;outline-style:none;@media (forced-colors: active){outline:2px solid transparent;outline-offset:2px}}.astw\: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;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-\[width\,height\]{transition-property:width,height;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\: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(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease, var(--astw-default-transition-timing-function));transition-duration:var(--tw-duration, var(--astw-default-transition-duration))}.astw\:duration-200{--tw-duration: .2s;transition-duration:.2s}.astw\:ease-in-out{--tw-ease: var(--astw-ease-in-out);transition-timing-function:var(--astw-ease-in-out)}.astw\:ease-linear{--tw-ease: linear;transition-timing-function:linear}.astw\:fade-in-0{--tw-enter-opacity: 0 ;--tw-enter-opacity: 0}.astw\:outline-none{--tw-outline-style: none;outline-style:none}.astw\:select-none{-webkit-user-select:none;user-select:none}.astw\:zoom-in-95{--tw-enter-scale: 95% ;--tw-enter-scale: .95}.astw\:group-focus-within\/menu-item\:opacity-100{&:is(:where(.astw\:group\/menu-item):focus-within *){opacity:100%}}.astw\:group-hover\/menu-item\:opacity-100{&:is(:where(.astw\:group\/menu-item):hover *){@media (hover: hover){opacity:100%}}}.astw\:group-has-data-\[collapsible\=icon\]\/sidebar-wrapper\:h-12{&:is(:where(.astw\:group\/sidebar-wrapper):has(*[data-collapsible=icon]) *){height:calc(var(--astw-spacing) * 12)}}.astw\:group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8{&:is(:where(.astw\:group\/menu-item):has(*[data-sidebar=menu-action]) *){padding-right:calc(var(--astw-spacing) * 8)}}.astw\:group-data-\[collapsible\=icon\]\:-mt-8{&:is(:where(.astw\:group)[data-collapsible=icon] *){margin-top:calc(var(--astw-spacing) * -8)}}.astw\:group-data-\[collapsible\=icon\]\:hidden{&:is(:where(.astw\:group)[data-collapsible=icon] *){display:none}}.astw\:group-data-\[collapsible\=icon\]\:size-8\!{&:is(:where(.astw\:group)[data-collapsible=icon] *){width:calc(var(--astw-spacing) * 8)!important;height:calc(var(--astw-spacing) * 8)!important}}.astw\:group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\){&:is(:where(.astw\:group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}}.astw\:group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]{&:is(:where(.astw\:group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--astw-spacing) * 4)))}}.astw\:group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]{&:is(:where(.astw\:group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--astw-spacing) * 4)) + 2px)}}.astw\:group-data-\[collapsible\=icon\]\:overflow-hidden{&:is(:where(.astw\:group)[data-collapsible=icon] *){overflow:hidden}}.astw\:group-data-\[collapsible\=icon\]\:p-0\!{&:is(:where(.astw\:group)[data-collapsible=icon] *){padding:calc(var(--astw-spacing) * 0)!important}}.astw\:group-data-\[collapsible\=icon\]\:p-2\!{&:is(:where(.astw\:group)[data-collapsible=icon] *){padding:calc(var(--astw-spacing) * 2)!important}}.astw\:group-data-\[collapsible\=icon\]\:opacity-0{&:is(:where(.astw\:group)[data-collapsible=icon] *){opacity:0%}}.astw\:group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{&:is(:where(.astw\:group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width) * -1)}}.astw\:group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{&:is(:where(.astw\:group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width) * -1)}}.astw\:group-data-\[collapsible\=offcanvas\]\:w-0{&:is(:where(.astw\:group)[data-collapsible=offcanvas] *){width:calc(var(--astw-spacing) * 0)}}.astw\:group-data-\[collapsible\=offcanvas\]\:translate-x-0{&:is(:where(.astw\:group)[data-collapsible=offcanvas] *){--tw-translate-x: calc(var(--astw-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}}.astw\:group-data-\[side\=left\]\:-right-4{&:is(:where(.astw\:group)[data-side=left] *){right:calc(var(--astw-spacing) * -4)}}.astw\:group-data-\[side\=left\]\:border-r{&:is(:where(.astw\:group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}}.astw\:group-data-\[side\=right\]\:left-0{&:is(:where(.astw\:group)[data-side=right] *){left:calc(var(--astw-spacing) * 0)}}.astw\:group-data-\[side\=right\]\:rotate-180{&:is(:where(.astw\:group)[data-side=right] *){rotate:180deg}}.astw\:group-data-\[side\=right\]\:border-l{&:is(:where(.astw\:group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}}.astw\:group-data-\[variant\=floating\]\:rounded-lg{&:is(:where(.astw\:group)[data-variant=floating] *){border-radius:var(--radius)}}.astw\:group-data-\[variant\=floating\]\:border{&:is(:where(.astw\:group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}}.astw\:group-data-\[variant\=floating\]\:border-sidebar-border{&:is(:where(.astw\:group)[data-variant=floating] *){border-color:var(--sidebar-border)}}.astw\:group-data-\[variant\=floating\]\:shadow-sm{&:is(:where(.astw\:group)[data-variant=floating] *){--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.astw\:peer-hover\/menu-button\:text-sidebar-accent-foreground{&:is(:where(.astw\:peer\/menu-button):hover~*){@media (hover: hover){color:var(--sidebar-accent-foreground)}}}.astw\:peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{&:is(:where(.astw\:peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}}.astw\:peer-data-\[size\=default\]\/menu-button\:top-1\.5{&:is(:where(.astw\:peer\/menu-button)[data-size=default]~*){top:calc(var(--astw-spacing) * 1.5)}}.astw\:peer-data-\[size\=lg\]\/menu-button\:top-2\.5{&:is(:where(.astw\:peer\/menu-button)[data-size=lg]~*){top:calc(var(--astw-spacing) * 2.5)}}.astw\:peer-data-\[size\=sm\]\/menu-button\:top-1{&:is(:where(.astw\:peer\/menu-button)[data-size=sm]~*){top:calc(var(--astw-spacing) * 1)}}.astw\:selection\:bg-primary{& *::selection{background-color:var(--primary)}&::selection{background-color:var(--primary)}}.astw\:selection\:text-primary-foreground{& *::selection{color:var(--primary-foreground)}&::selection{color:var(--primary-foreground)}}.astw\:file\:inline-flex{&::file-selector-button{display:inline-flex}}.astw\:file\:h-7{&::file-selector-button{height:calc(var(--astw-spacing) * 7)}}.astw\:file\:border-0{&::file-selector-button{border-style:var(--tw-border-style);border-width:0px}}.astw\:file\:bg-transparent{&::file-selector-button{background-color:transparent}}.astw\:file\:text-sm{&::file-selector-button{font-size:var(--astw-text-sm);line-height:var(--tw-leading, var(--astw-text-sm--line-height))}}.astw\:file\:font-medium{&::file-selector-button{--tw-font-weight: var(--astw-font-weight-medium);font-weight:var(--astw-font-weight-medium)}}.astw\:file\:text-foreground{&::file-selector-button{color:var(--foreground)}}.astw\:placeholder\:text-muted-foreground{&::placeholder{color:var(--muted-foreground)}}.astw\:after\:absolute{&:after{content:var(--tw-content);position:absolute}}.astw\:after\:-inset-2{&:after{content:var(--tw-content);inset:calc(var(--astw-spacing) * -2)}}.astw\:after\:inset-y-0{&:after{content:var(--tw-content);inset-block:calc(var(--astw-spacing) * 0)}}.astw\:after\:left-1\/2{&:after{content:var(--tw-content);left:50%}}.astw\:after\:w-\[2px\]{&:after{content:var(--tw-content);width:2px}}.astw\:group-data-\[collapsible\=offcanvas\]\:after\:left-full{&:is(:where(.astw\:group)[data-collapsible=offcanvas] *){&:after{content:var(--tw-content);left:100%}}}.astw\:last\:text-foreground{&:last-child{color:var(--foreground)}}.astw\:hover\:bg-accent{&:hover{@media (hover: hover){background-color:var(--accent)}}}.astw\:hover\:bg-destructive\/90{&:hover{@media (hover: hover){background-color:var(--destructive);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--destructive) 90%,transparent)}}}}.astw\:hover\:bg-muted\/50{&:hover{@media (hover: hover){background-color:var(--muted);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--muted) 50%,transparent)}}}}.astw\:hover\:bg-primary\/90{&:hover{@media (hover: hover){background-color:var(--primary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--primary) 90%,transparent)}}}}.astw\:hover\:bg-secondary\/80{&:hover{@media (hover: hover){background-color:var(--secondary);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--secondary) 80%,transparent)}}}}.astw\:hover\:bg-sidebar-accent{&:hover{@media (hover: hover){background-color:var(--sidebar-accent)}}}.astw\:hover\:text-accent-foreground{&:hover{@media (hover: hover){color:var(--accent-foreground)}}}.astw\:hover\:text-foreground{&:hover{@media (hover: hover){color:var(--foreground)}}}.astw\:hover\:text-sidebar-accent-foreground{&:hover{@media (hover: hover){color:var(--sidebar-accent-foreground)}}}.astw\:hover\:underline{&:hover{@media (hover: hover){text-decoration-line:underline}}}.astw\:hover\:opacity-100{&:hover{@media (hover: hover){opacity:100%}}}.astw\:hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]{&:hover{@media (hover: hover){--tw-shadow: 0 0 0 1px var(--tw-shadow-color, hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}.astw\:hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar{&:hover{@media (hover: hover){&:is(:where(.astw\:group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}}}}.astw\:hover\:after\:bg-sidebar-border{&:hover{@media (hover: hover){&:after{content:var(--tw-content);background-color:var(--sidebar-border)}}}}.astw\:focus\:ring-2{&:focus{--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)}}.astw\:focus\:ring-ring{&:focus{--tw-ring-color: var(--ring)}}.astw\:focus\:ring-offset-2{&:focus{--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)}}.astw\:focus\:outline-hidden{&:focus{--tw-outline-style: none;outline-style:none;@media (forced-colors: active){outline:2px solid transparent;outline-offset:2px}}}.astw\:focus-visible\:border-ring{&:focus-visible{border-color:var(--ring)}}.astw\: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)}}.astw\:focus-visible\:ring-\[3px\]{&:focus-visible{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.astw\:focus-visible\:ring-destructive\/20{&:focus-visible{--tw-ring-color: var(--destructive);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent)}}}.astw\:focus-visible\:ring-ring\/50{&:focus-visible{--tw-ring-color: var(--ring);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent)}}}.astw\:active\:bg-sidebar-accent{&:active{background-color:var(--sidebar-accent)}}.astw\:active\:text-sidebar-accent-foreground{&:active{color:var(--sidebar-accent-foreground)}}.astw\:disabled\:pointer-events-none{&:disabled{pointer-events:none}}.astw\:disabled\:cursor-not-allowed{&:disabled{cursor:not-allowed}}.astw\:disabled\:opacity-50{&:disabled{opacity:50%}}.astw\:in-data-\[side\=left\]\:cursor-w-resize{:where(*[data-side=left]) &{cursor:w-resize}}.astw\:in-data-\[side\=right\]\:cursor-e-resize{:where(*[data-side=right]) &{cursor:e-resize}}.astw\:has-data-\[variant\=inset\]\:bg-sidebar{&:has(*[data-variant=inset]){background-color:var(--sidebar)}}.astw\:has-\[\>svg\]\:px-2\.5{&:has(>svg){padding-inline:calc(var(--astw-spacing) * 2.5)}}.astw\:has-\[\>svg\]\:px-3{&:has(>svg){padding-inline:calc(var(--astw-spacing) * 3)}}.astw\:has-\[\>svg\]\:px-4{&:has(>svg){padding-inline:calc(var(--astw-spacing) * 4)}}.astw\:aria-disabled\:pointer-events-none{&[aria-disabled=true]{pointer-events:none}}.astw\:aria-disabled\:opacity-50{&[aria-disabled=true]{opacity:50%}}.astw\:aria-invalid\:border-destructive{&[aria-invalid=true]{border-color:var(--destructive)}}.astw\:aria-invalid\:ring-destructive\/20{&[aria-invalid=true]{--tw-ring-color: var(--destructive);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent)}}}.astw\:data-\[active\=true\]\:bg-sidebar-accent{&[data-active=true]{background-color:var(--sidebar-accent)}}.astw\:data-\[active\=true\]\:font-medium{&[data-active=true]{--tw-font-weight: var(--astw-font-weight-medium);font-weight:var(--astw-font-weight-medium)}}.astw\:data-\[active\=true\]\:text-sidebar-accent-foreground{&[data-active=true]{color:var(--sidebar-accent-foreground)}}.astw\:data-\[orientation\=horizontal\]\:h-px{&[data-orientation=horizontal]{height:1px}}.astw\:data-\[orientation\=horizontal\]\:w-full{&[data-orientation=horizontal]{width:100%}}.astw\:data-\[orientation\=vertical\]\:h-full{&[data-orientation=vertical]{height:100%}}.astw\:data-\[orientation\=vertical\]\:w-px{&[data-orientation=vertical]{width:1px}}.astw\:data-\[side\=bottom\]\:slide-in-from-top-2{&[data-side=bottom]{--tw-enter-translate-y: calc(2*var(--spacing)*-1)}}.astw\:data-\[side\=left\]\:slide-in-from-right-2{&[data-side=left]{--tw-enter-translate-x: calc(2*var(--spacing))}}.astw\:data-\[side\=right\]\:slide-in-from-left-2{&[data-side=right]{--tw-enter-translate-x: calc(2*var(--spacing)*-1)}}.astw\:data-\[side\=top\]\:slide-in-from-bottom-2{&[data-side=top]{--tw-enter-translate-y: calc(2*var(--spacing))}}.astw\:data-\[state\=closed\]\:animate-out{&[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}}.astw\:data-\[state\=closed\]\:duration-300{&[data-state=closed]{--tw-duration: .3s;transition-duration:.3s}}.astw\:data-\[state\=closed\]\:fade-out-0{&[data-state=closed]{--tw-exit-opacity: 0 ;--tw-exit-opacity: 0}}.astw\:data-\[state\=closed\]\:zoom-out-95{&[data-state=closed]{--tw-exit-scale: 95% ;--tw-exit-scale: .95}}.astw\:data-\[state\=closed\]\:slide-out-to-bottom{&[data-state=closed]{--tw-exit-translate-y: 100%}}.astw\:data-\[state\=closed\]\:slide-out-to-left{&[data-state=closed]{--tw-exit-translate-x: -100%}}.astw\:data-\[state\=closed\]\:slide-out-to-right{&[data-state=closed]{--tw-exit-translate-x: 100%}}.astw\:data-\[state\=closed\]\:slide-out-to-top{&[data-state=closed]{--tw-exit-translate-y: -100%}}.astw\:data-\[state\=open\]\:rotate-90{&[data-state=open]{rotate:90deg}}.astw\:data-\[state\=open\]\:animate-in{&[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}}.astw\:data-\[state\=open\]\:bg-accent{&[data-state=open]{background-color:var(--accent)}}.astw\:data-\[state\=open\]\:bg-secondary{&[data-state=open]{background-color:var(--secondary)}}.astw\:data-\[state\=open\]\:text-muted-foreground{&[data-state=open]{color:var(--muted-foreground)}}.astw\:data-\[state\=open\]\:opacity-100{&[data-state=open]{opacity:100%}}.astw\:data-\[state\=open\]\:duration-500{&[data-state=open]{--tw-duration: .5s;transition-duration:.5s}}.astw\:data-\[state\=open\]\:fade-in-0{&[data-state=open]{--tw-enter-opacity: 0 ;--tw-enter-opacity: 0}}.astw\:data-\[state\=open\]\:zoom-in-95{&[data-state=open]{--tw-enter-scale: 95% ;--tw-enter-scale: .95}}.astw\:data-\[state\=open\]\:slide-in-from-bottom{&[data-state=open]{--tw-enter-translate-y: 100%}}.astw\:data-\[state\=open\]\:slide-in-from-left{&[data-state=open]{--tw-enter-translate-x: -100%}}.astw\:data-\[state\=open\]\:slide-in-from-right{&[data-state=open]{--tw-enter-translate-x: 100%}}.astw\:data-\[state\=open\]\:slide-in-from-top{&[data-state=open]{--tw-enter-translate-y: -100%}}.astw\:data-\[state\=open\]\:hover\:bg-sidebar-accent{&[data-state=open]{&:hover{@media (hover: hover){background-color:var(--sidebar-accent)}}}}.astw\:data-\[state\=open\]\:hover\:text-sidebar-accent-foreground{&[data-state=open]{&:hover{@media (hover: hover){color:var(--sidebar-accent-foreground)}}}}.astw\:data-\[state\=selected\]\:bg-muted{&[data-state=selected]{background-color:var(--muted)}}.astw\:sm\:flex{@media (width >= 40rem){display:flex}}.astw\:sm\:max-w-lg{@media (width >= 40rem){max-width:var(--astw-container-lg)}}.astw\:sm\:max-w-sm{@media (width >= 40rem){max-width:var(--astw-container-sm)}}.astw\:sm\:flex-row{@media (width >= 40rem){flex-direction:row}}.astw\:sm\:justify-end{@media (width >= 40rem){justify-content:flex-end}}.astw\:sm\:gap-2\.5{@media (width >= 40rem){gap:calc(var(--astw-spacing) * 2.5)}}.astw\:sm\:text-left{@media (width >= 40rem){text-align:left}}.astw\:md\:block{@media (width >= 48rem){display:block}}.astw\:md\:flex{@media (width >= 48rem){display:flex}}.astw\:md\:hidden{@media (width >= 48rem){display:none}}.astw\:md\:w-xs{@media (width >= 48rem){width:var(--astw-container-xs)}}.astw\:md\:flex-row{@media (width >= 48rem){flex-direction:row}}.astw\:md\:text-sm{@media (width >= 48rem){font-size:var(--astw-text-sm);line-height:var(--tw-leading, var(--astw-text-sm--line-height))}}.astw\:md\:opacity-0{@media (width >= 48rem){opacity:0%}}.astw\:md\:peer-data-\[variant\=inset\]\:px-8{@media (width >= 48rem){&:is(:where(.astw\:peer)[data-variant=inset]~*){padding-inline:calc(var(--astw-spacing) * 8)}}}.astw\:md\:peer-data-\[variant\=inset\]\:py-2{@media (width >= 48rem){&:is(:where(.astw\:peer)[data-variant=inset]~*){padding-block:calc(var(--astw-spacing) * 2)}}}.astw\:md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:pl-2{@media (width >= 48rem){&:is(:where(.astw\:peer)[data-variant=inset]~*){&:is(:where(.astw\:peer)[data-state=collapsed]~*){padding-left:calc(var(--astw-spacing) * 2)}}}}.astw\:md\:after\:hidden{@media (width >= 48rem){&:after{content:var(--tw-content);display:none}}}.astw\:dark\:border-input{&:where(.dark,.dark *){border-color:var(--input)}}.astw\:dark\:bg-destructive\/60{&:where(.dark,.dark *){background-color:var(--destructive);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--destructive) 60%,transparent)}}}.astw\:dark\:bg-input\/30{&:where(.dark,.dark *){background-color:var(--input);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--input) 30%,transparent)}}}.astw\:dark\:hover\:bg-accent\/50{&:where(.dark,.dark *){&:hover{@media (hover: hover){background-color:var(--accent);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--accent) 50%,transparent)}}}}}.astw\:dark\:hover\:bg-input\/50{&:where(.dark,.dark *){&:hover{@media (hover: hover){background-color:var(--input);@supports (color: color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--input) 50%,transparent)}}}}}.astw\:dark\:focus-visible\:ring-destructive\/40{&:where(.dark,.dark *){&:focus-visible{--tw-ring-color: var(--destructive);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent)}}}}.astw\:dark\:aria-invalid\:ring-destructive\/40{&:where(.dark,.dark *){&[aria-invalid=true]{--tw-ring-color: var(--destructive);@supports (color: color-mix(in lab,red,red)){--tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent)}}}}.astw\:\[\&_svg\]\:pointer-events-none{& svg{pointer-events:none}}.astw\:\[\&_svg\]\:shrink-0{& svg{flex-shrink:0}}.astw\:\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4{& svg:not([class*=size-]){width:calc(var(--astw-spacing) * 4);height:calc(var(--astw-spacing) * 4)}}.astw\:\[\&_tr\]\:border-b{& tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}}.astw\:\[\&_tr\:last-child\]\:border-0{& tr:last-child{border-style:var(--tw-border-style);border-width:0px}}.astw\:\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0{&:has([role=checkbox]){padding-right:calc(var(--astw-spacing) * 0)}}.astw\:\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]{>[role=checkbox]{--tw-translate-y: 2px;translate:var(--tw-translate-x) var(--tw-translate-y)}}.astw\:\[\&\>button\]\:hidden{>button{display:none}}.astw\:\[\&\>span\:last-child\]\:truncate{>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.astw\:\[\&\>svg\]\:size-3\.5{>svg{width:calc(var(--astw-spacing) * 3.5);height:calc(var(--astw-spacing) * 3.5)}}.astw\:\[\&\>svg\]\:size-4{>svg{width:calc(var(--astw-spacing) * 4);height:calc(var(--astw-spacing) * 4)}}.astw\:\[\&\>svg\]\:shrink-0{>svg{flex-shrink:0}}.astw\:\[\&\>svg\]\:text-sidebar-accent-foreground{>svg{color:var(--sidebar-accent-foreground)}}.astw\:\[\&\>tr\]\:last\:border-b-0{>tr{&:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0px}}}.astw\:\[\&\[data-state\=open\]_\.astw-rotate-target\]\:rotate-90{&[data-state=open] .astw-rotate-target{rotate:90deg}}.astw\:\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{[data-side=left][data-collapsible=offcanvas] &{right:calc(var(--astw-spacing) * -2)}}.astw\:\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{[data-side=left][data-state=collapsed] &{cursor:e-resize}}.astw\:\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{[data-side=right][data-collapsible=offcanvas] &{left:calc(var(--astw-spacing) * -2)}}.astw\:\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{[data-side=right][data-state=collapsed] &{cursor:w-resize}}}@property --tw-animation-delay{syntax: "*"; inherits: false; initial-value: 0s;}@property --tw-animation-direction{syntax: "*"; inherits: false; initial-value: normal;}@property --tw-animation-duration{syntax: "*"; inherits: false;}@property --tw-animation-fill-mode{syntax: "*"; inherits: false; initial-value: none;}@property --tw-animation-iteration-count{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-enter-blur{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-enter-opacity{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-enter-rotate{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-enter-scale{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-enter-translate-x{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-enter-translate-y{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-exit-blur{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-exit-opacity{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-exit-rotate{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-exit-scale{syntax: "*"; inherits: false; initial-value: 1;}@property --tw-exit-translate-x{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-exit-translate-y{syntax: "*"; inherits: false; initial-value: 0;}:root{--background: rgba(250, 250, 250, 1);--foreground: rgba(10, 10, 10, 1);--card: rgba(255, 255, 255, 1);--card-foreground: rgba(10, 10, 10, 1);--popover: rgba(255, 255, 255, 1);--popover-foreground: rgba(10, 10, 10, 1);--primary: rgba(23, 23, 23, 1);--primary-foreground: rgba(250, 250, 250, 1);--secondary: rgba(245, 245, 245, 1);--secondary-foreground: rgba(23, 23, 23, 1);--muted: rgba(245, 245, 245, 1);--muted-foreground: rgba(115, 115, 115, 1);--accent: rgba(245, 245, 245, 1);--accent-foreground: rgba(23, 23, 23, 1);--destructive: rgba(220, 38, 38, 1);--destructive-foreground: rgba(254, 242, 242, 1);--border: rgba(229, 229, 229, 1);--input: rgba(229, 229, 229, 1);--ring: rgba(163, 163, 163, 1);--chart-1: rgba(234, 88, 12, 1);--chart-2: rgba(13, 148, 136, 1);--chart-3: rgba(22, 78, 99, 1);--chart-4: rgba(251, 191, 36, 1);--chart-5: rgba(245, 158, 11, 1);--radius: .625rem;--sidebar: rgba(250, 250, 250, 1);--sidebar-foreground: rgba(10, 10, 10, 1);--sidebar-primary: rgba(23, 23, 23, 1);--sidebar-primary-foreground: rgba(250, 250, 250, 1);--sidebar-accent: rgba(245, 245, 245, 1);--sidebar-accent-foreground: rgba(23, 23, 23, 1);--sidebar-border: rgba(229, 229, 229, 1);--sidebar-ring: rgba(163, 163, 163, 1)}.dark{--background: rgba(10, 10, 10, 1);--foreground: rgba(250, 250, 250, 1);--card: rgba(23, 23, 23, 1);--card-foreground: rgba(250, 250, 250, 1);--popover: rgba(38, 38, 38, 1);--popover-foreground: rgba(250, 250, 250, 1);--primary: rgba(229, 229, 229, 1);--primary-foreground: rgba(23, 23, 23, 1);--secondary: rgba(38, 38, 38, 1);--secondary-foreground: rgba(250, 250, 250, 1);--muted: rgba(38, 38, 38, 1);--muted-foreground: rgba(163, 163, 163, 1);--accent: rgba(64, 64, 64, 1);--accent-foreground: rgba(250, 250, 250, 1);--destructive: rgba(248, 113, 113, 1);--destructive-foreground: rgba(254, 242, 242, 1);--border: rgba(255, 255, 255, .10000000149011612);--input: rgba(255, 255, 255, .15000000596046448);--ring: rgba(115, 115, 115, 1);--chart-1: rgba(29, 78, 216, 1);--chart-2: rgba(16, 185, 129, 1);--chart-3: rgba(245, 158, 11, 1);--chart-4: rgba(168, 85, 247, 1);--chart-5: rgba(244, 63, 94, 1);--sidebar: rgba(23, 23, 23, 1);--sidebar-foreground: rgba(250, 250, 250, 1);--sidebar-primary: rgba(29, 78, 216, 1);--sidebar-primary-foreground: rgba(250, 250, 250, 1);--sidebar-accent: rgba(38, 38, 38, 1);--sidebar-accent-foreground: rgba(250, 250, 250, 1);--sidebar-border: rgba(255, 255, 255, .10000000149011612);--sidebar-ring: rgba(82, 82, 82, 1)}@layer base{*,:after,:before,::backdrop,::file-selector-button{border-color:var(--color-gray-200, currentcolor)}}@layer base{*{border-color:var(--border);outline-color:var(--ring);@supports (color: color-mix(in lab,red,red)){outline-color:color-mix(in oklab,var(--ring) 50%,transparent)}}body{background-color:var(--background);font-family:var(--astw-font-sans);color:var(--foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::-webkit-scrollbar{height:calc(var(--astw-spacing) * 2);width:calc(var(--astw-spacing) * 2);background-color:var(--muted)}::-webkit-scrollbar-thumb{border-radius:.25rem;background-color:var(--muted-foreground)}::-webkit-scrollbar-corner{background-color:var(--muted-foreground)}}@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-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: 0px;}@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-duration{syntax: "*"; inherits: false;}@property --tw-ease{syntax: "*"; inherits: false;}@property --tw-content{syntax: "*"; initial-value: ""; inherits: false;}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@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-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-duration: initial;--tw-ease: initial;--tw-content: "";--tw-animation-delay: 0s;--tw-animation-direction: normal;--tw-animation-duration: initial;--tw-animation-fill-mode: none;--tw-animation-iteration-count: 1;--tw-enter-blur: 0;--tw-enter-opacity: 1;--tw-enter-rotate: 0;--tw-enter-scale: 1;--tw-enter-translate-x: 0;--tw-enter-translate-y: 0;--tw-exit-blur: 0;--tw-exit-opacity: 1;--tw-exit-rotate: 0;--tw-exit-scale: 1;--tw-exit-translate-x: 0;--tw-exit-translate-y: 0}}}
2
2
  /*! tailwindcss v4.1.2 | MIT License | https://tailwindcss.com */
package/dist/index.d.ts CHANGED
@@ -1,7 +1,29 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode, PropsWithChildren } from 'react';
3
- export { Link, useLocation, useNavigate, useParams, useSearchParams } from 'react-router';
3
+ export { Link, useLocation, useNavigate, useParams, useRouteError, useSearchParams } from 'react-router';
4
4
 
5
+ /**
6
+ * Error boundary element type for route error handling.
7
+ *
8
+ * Pass a JSX element that will render when an error occurs.
9
+ * Use the `useRouteError` hook from react-router to access the error.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * import { useRouteError } from "@tailor-platform/app-shell";
14
+ *
15
+ * const MyErrorBoundary = () => {
16
+ * const error = useRouteError() as Error;
17
+ * return <div>Error: {error.message}</div>;
18
+ * };
19
+ *
20
+ * // In config:
21
+ * errorBoundary: <MyErrorBoundary />
22
+ * // Or with props:
23
+ * errorBoundary: <MyErrorBoundary theme="dark" onReport={handleReport} />
24
+ * ```
25
+ */
26
+ type ErrorBoundaryComponent = ReactNode;
5
27
  /**
6
28
  * Redirect configuration for module or root component
7
29
  */
@@ -46,6 +68,7 @@ type Module = Omit<CommonPageResource, "meta"> & {
46
68
  };
47
69
  resources: Array<Resource>;
48
70
  loader?: (basePath?: string) => Response;
71
+ errorBoundary?: ErrorBoundaryComponent;
49
72
  };
50
73
  /**
51
74
  * A resource that can be included in the sub-content in the root resource.
@@ -55,12 +78,14 @@ type Module = Omit<CommonPageResource, "meta"> & {
55
78
  type Resource = CommonPageResource & {
56
79
  _type: "resource";
57
80
  subResources?: Array<Resource>;
81
+ errorBoundary?: ErrorBoundaryComponent;
58
82
  };
59
83
  type Modules = Array<Module>;
60
84
  type RootConfiguration = {
61
85
  modules: Modules;
62
86
  settingsResources?: Resource[];
63
87
  basePath?: string;
88
+ errorBoundary?: ErrorBoundaryComponent;
64
89
  };
65
90
  type ResourceMetaProps = {
66
91
  /**
@@ -128,6 +153,12 @@ type DefineModuleProps = CommonProps & CommonModuleProps & {
128
153
  * ```
129
154
  */
130
155
  component: ((props: ResourceComponentProps) => ReactNode) | RedirectConfig;
156
+ /**
157
+ * Error boundary component for this module and its child resources.
158
+ * When an error occurs in this module or its resources, this component will render.
159
+ * Use the `useRouteError` hook to access error details within the component.
160
+ */
161
+ errorBoundary?: ErrorBoundaryComponent;
131
162
  };
132
163
  /**
133
164
  * Define a root-level resource that renders a React component.
@@ -153,6 +184,13 @@ type DefineResourceProps = CommonProps & ReactResourceProps & {
153
184
  * Sub-resources of the resource.
154
185
  */
155
186
  subResources?: Array<Resource>;
187
+ /**
188
+ * Error boundary component for this resource and its sub-resources.
189
+ * When an error occurs in this resource, this component will render.
190
+ * Overrides module-level or global error boundaries.
191
+ * Use the `useRouteError` hook to access error details within the component.
192
+ */
193
+ errorBoundary?: ErrorBoundaryComponent;
156
194
  };
157
195
  /**
158
196
  * Define a resource that renders a React component.
@@ -228,6 +266,35 @@ type AppShellProps = {
228
266
  * Modules that appear only in Settings
229
267
  */
230
268
  settingsModules?: Modules;
269
+ /**
270
+ * Global error boundary component applied to all routes.
271
+ * When an error occurs in any route component, this component will render.
272
+ * Module and resource-level error boundaries take precedence over this.
273
+ * Use the `useRouteError` hook to access error details within the component.
274
+ *
275
+ * @example
276
+ * ```tsx
277
+ * import { useRouteError } from "@tailor-platform/app-shell";
278
+ *
279
+ * const GlobalErrorBoundary = () => {
280
+ * const error = useRouteError() as Error;
281
+ * return (
282
+ * <div>
283
+ * <h1>Something went wrong</h1>
284
+ * <p>{error.message}</p>
285
+ * </div>
286
+ * );
287
+ * };
288
+ *
289
+ * <AppShell
290
+ * configurations={{
291
+ * modules: [...],
292
+ * errorBoundary: <GlobalErrorBoundary />,
293
+ * }}
294
+ * >
295
+ * ```
296
+ */
297
+ errorBoundary?: ErrorBoundaryComponent;
231
298
  };
232
299
  };
233
300
  declare const AppShell: (props: React.PropsWithChildren<AppShellProps>) => react_jsx_runtime.JSX.Element | null;
@@ -274,21 +341,40 @@ type ThemeProviderState = {
274
341
  declare const useTheme: () => ThemeProviderState;
275
342
 
276
343
  interface BuiltinIdPAuthContextType {
344
+ /**
345
+ * Initiates the login process by redirecting to the OAuth2 authorization endpoint.
346
+ */
277
347
  login: () => Promise<void>;
348
+ /**
349
+ * Logs out the user by revoking the token and clearing session data.
350
+ */
278
351
  logout: () => Promise<void>;
279
352
  }
280
353
  declare const useBuiltinIdpAuth: () => BuiltinIdPAuthContextType;
281
354
  type Props = {
282
- idpEndpoint: string;
355
+ /**
356
+ * API endpoint of your Tailor Platform application. No `/query` suffix needed.
357
+ *
358
+ * @example https://xyz.erp.dev
359
+ */
360
+ apiEndpoint: string;
361
+ /**
362
+ * OAuth2 Client ID of your Tailor Platform application.
363
+ */
283
364
  clientId: string;
284
- redirectUri: string;
285
- } & PropsWithChildren;
286
- declare const BuiltinIdPAuthProvider: ({ idpEndpoint, clientId, redirectUri, children, }: Props) => react_jsx_runtime.JSX.Element;
365
+ /**
366
+ * Redirect URI after login is successful.
367
+ *
368
+ * @defaults `window.location.origin`
369
+ */
370
+ redirectUri?: string;
371
+ };
372
+ declare const BuiltinIdPAuthProvider: ({ apiEndpoint, clientId, redirectUri, children, }: PropsWithChildren<Props>) => react_jsx_runtime.JSX.Element;
287
373
 
288
374
  declare const PKCE_VERIFIER_KEY = "oauth_pkce_verifier";
289
375
  declare const OAUTH_STATE_KEY = "oauth_state";
290
376
  interface BuildAuthorizationUrlParams {
291
- idpEndpoint: string;
377
+ apiEndpoint: string;
292
378
  clientId: string;
293
379
  state: string;
294
380
  codeChallenge: string;
@@ -298,9 +384,9 @@ interface BuildAuthorizationUrlParams {
298
384
  * We need to build a Login URL with the correct parameters to redirect
299
385
  * to our OAuth endpoint login page
300
386
  */
301
- declare const buildAuthorizationUrl: ({ idpEndpoint, clientId, state, codeChallenge, redirectUri, }: BuildAuthorizationUrlParams) => string;
387
+ declare const buildAuthorizationUrl: ({ apiEndpoint, clientId, state, codeChallenge, redirectUri, }: BuildAuthorizationUrlParams) => string;
302
388
  interface ExchangeCodeForTokenParams {
303
- idpEndpoint: string;
389
+ apiEndpoint: string;
304
390
  clientId: string;
305
391
  returnedState: string | null;
306
392
  code: string | null;
@@ -312,7 +398,7 @@ interface ExchangeCodeForTokenParams {
312
398
  * for an actual authorization token, in Browser Client case, we get the token
313
399
  * inside of a cookie so there is nothing else to do beyond that point
314
400
  */
315
- declare const exchangeCodeForToken: ({ code, returnedState, idpEndpoint, clientId, redirectUri, }: ExchangeCodeForTokenParams) => Promise<string>;
401
+ declare const exchangeCodeForToken: ({ code, returnedState, apiEndpoint, clientId, redirectUri, }: ExchangeCodeForTokenParams) => Promise<string>;
316
402
  /**
317
403
  * We need to generate a challenge and state key for OAuth login
318
404
  * and stores them in sessionStorage for verification on callback redirect
@@ -325,11 +411,11 @@ declare const prepareLogin: () => Promise<{
325
411
  * When redirected from our IdP Provider, we need to exchange code and state
326
412
  * for a token and clean up the URL params
327
413
  */
328
- declare const handleOAuthCallback: ({ currentUrl, idpEndpoint, clientId, redirectUri, }: {
414
+ declare const handleOAuthCallback: ({ currentUrl, apiEndpoint, clientId, redirectUri, }: {
329
415
  currentUrl: URL;
330
- idpEndpoint: string;
416
+ apiEndpoint: string;
331
417
  clientId: string;
332
418
  redirectUri: string;
333
419
  }) => Promise<void>;
334
420
 
335
- export { AppShell, type AppShellProps, BuiltinIdPAuthProvider, DefaultSidebar, OAUTH_STATE_KEY, PKCE_VERIFIER_KEY, type ResourceComponentProps, SidebarLayoutContainer, buildAuthorizationUrl, defineModule, defineResource, exchangeCodeForToken, handleOAuthCallback, prepareLogin, redirectToResource, useAppShell, useBuiltinIdpAuth, useTheme };
421
+ export { AppShell, type AppShellProps, BuiltinIdPAuthProvider, DefaultSidebar, type ErrorBoundaryComponent, OAUTH_STATE_KEY, PKCE_VERIFIER_KEY, type ResourceComponentProps, SidebarLayoutContainer, buildAuthorizationUrl, defineModule, defineResource, exchangeCodeForToken, handleOAuthCallback, prepareLogin, redirectToResource, useAppShell, useBuiltinIdpAuth, useTheme };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{Table as Sa}from"lucide-react";import{useEffect as Ra,useMemo as Ta,useState as Na}from"react";import{createContext as Qt,useContext as Zt}from"react";var F=Qt({navItems:[],configurations:{modules:[]}}),P=()=>Zt(F);import{createBrowserRouter as ua,RouterProvider as ga,Navigate as ma,redirect as ba}from"react-router";import{NavLink as ia,Outlet as dt}from"react-router";import{Toaster as na}from"sonner";import{Slot as ea}from"@radix-ui/react-slot";import{cva as ra}from"class-variance-authority";import{clsx as ta}from"clsx";import{twMerge as aa}from"tailwind-merge";function c(...t){return aa(ta(t))}import{jsx as sa}from"react/jsx-runtime";var oa=ra("astw:inline-flex astw:items-center astw:justify-center astw:gap-2 astw:whitespace-nowrap astw:rounded-md astw:text-sm astw:font-medium astw:transition-all astw:disabled:pointer-events-none astw:disabled:opacity-50 astw:[&_svg]:pointer-events-none astw:[&_svg:not([class*='size-'])]:size-4 astw:shrink-0 astw:[&_svg]:shrink-0 astw:outline-none astw:focus-visible:border-ring astw:focus-visible:ring-ring/50 astw:focus-visible:ring-[3px] astw:aria-invalid:ring-destructive/20 astw:dark:aria-invalid:ring-destructive/40 astw:aria-invalid:border-destructive",{variants:{variant:{default:"astw:bg-primary astw:text-primary-foreground astw:shadow-xs astw:hover:bg-primary/90",destructive:"astw:bg-destructive astw:text-white astw:shadow-xs astw:hover:bg-destructive/90 astw:focus-visible:ring-destructive/20 astw:dark:focus-visible:ring-destructive/40 astw:dark:bg-destructive/60",outline:"astw:border astw:bg-background astw:shadow-xs astw:hover:bg-accent astw:hover:text-accent-foreground astw:dark:bg-input/30 astw:dark:border-input astw:dark:hover:bg-input/50",secondary:"astw:bg-secondary astw:text-secondary-foreground astw:shadow-xs astw:hover:bg-secondary/80",ghost:"astw:hover:bg-accent astw:hover:text-accent-foreground astw:dark:hover:bg-accent/50",link:"astw:text-primary astw:underline-offset-4 astw:hover:underline"},size:{default:"astw:h-9 astw:px-4 astw:py-2 astw:has-[>svg]:px-3",sm:"astw:h-8 astw:rounded-md astw:gap-1.5 astw:px-3 astw:has-[>svg]:px-2.5",lg:"astw:h-10 astw:rounded-md astw:px-6 astw:has-[>svg]:px-4",icon:"astw:size-9"}},defaultVariants:{variant:"default",size:"default"}});function N({className:t,variant:a,size:e,asChild:r=!1,...o}){return sa(r?ea:"button",{"data-slot":"button",className:c(oa({variant:a,size:e,className:t})),...o})}import{Fragment as da,jsx as h,jsxs as A}from"react/jsx-runtime";var j=({contentBorder:t,children:a})=>h("div",{className:t?"astw:p-4 astw:rounded-sm astw:border astw:shadow-xs":"",children:a}),lt=()=>A(j,{contentBorder:!0,children:[h("p",{className:"astw:font-semibold astw:leading-none astw:tracking-tight",children:"Welcome to AppShell"}),h("p",{className:"pt-4",children:"Add your GraphQL resources from configuration at first!"})]}),q=()=>A(da,{children:[h(dt,{}),h(na,{})]}),ct=()=>{let{configurations:t}=P();return A("div",{className:"astw:mx-auto astw:flex-col astw:flex astw:md:flex-row astw:max-w-5xl astw:gap-[10px] astw:w-full",children:[h("div",{children:A("nav",{className:"astw:bg-card astw:md:w-xs astw:rounded-md astw:border astw:p-3 astw:shadow-xs",children:[h("h2",{className:"astw:text-sm astw:leading-[36px] astw:mb-2 astw:font-bold ",children:"Settings"}),h("ul",{className:"astw:flex astw:flex-col astw:gap-1",children:t.settingsResources?.map(a=>h("li",{children:h(ia,{to:`./${a.path}`,children:({isActive:e})=>A(N,{variant:e?"secondary":"ghost",className:"astw:w-full astw:justify-start",children:[a.meta.icon,a.meta.title]})})},a.path))})]})}),h("section",{className:"astw:bg-card astw:flex-1 astw:rounded-md astw:border astw:shadow-xs",children:h(dt,{})})]})};import{capitalCase as wt}from"change-case";import{redirect as la}from"react-router";var W="resources",x=(t,a)=>a?`/${a}/${W}/${t}`:`/${W}/${t}`;import{jsx as pt}from"react/jsx-runtime";function ca(t){return{redirectTo:t}}function U(t){return typeof t=="object"&&t!==null&&"redirectTo"in t}function wa(t){let{path:a,meta:e,component:r,resources:o}=t,s=e?.title??wt(a),l=U(r)?{component:()=>null,loader:i=>la(x(r.redirectTo,i))}:{component:()=>pt(j,{contentBorder:e?.contentBorder??!1,children:r({title:s,resources:o})})};return{path:a,type:"component",_type:"module",...l,meta:{title:s,...e?.breadcrumbTitle!==void 0?{breadcrumbTitle:e.breadcrumbTitle}:{},...e,menuItemClickable:!U(r),icon:t.meta?.icon},resources:o}}function pa(t){let{path:a,component:e,subResources:r,meta:o}=t,s=o?.title??wt(a);return{_type:"resource",type:"component",path:a,meta:{title:s,icon:o?.icon,...o?.breadcrumbTitle!==void 0?{breadcrumbTitle:o.breadcrumbTitle}:{}},component:()=>pt(j,{contentBorder:o?.contentBorder??!1,children:e({title:s,resources:r})}),subResources:r}}import{jsx as ut}from"react/jsx-runtime";var ha=(t,a)=>t.reduce((e,r)=>{let o={index:!0,Component:r.component,...r.loader&&{loader:()=>r.loader(a)}};return[...e,{path:r.path,...r.resources&&r.resources.length>0?{children:[o,...r.resources.map(gt)]}:{children:[o]}}]},[]),gt=t=>{let a={index:!0,Component:t.component};return{path:t.path,...t.subResources&&t.subResources.length>0?{children:[a,...t.subResources.map(gt)]}:{children:[a]}}},mt=t=>{let{configurations:a}=P(),{rootComponent:e}=t,r=U(e)?{index:!0,loader:()=>ba(x(e.redirectTo,a.basePath))}:{index:!0,Component:e??lt},o=ua([{path:a.basePath,element:t.children,children:[r,{path:W,children:ha(a.modules,a.basePath)},{path:"settings",index:!0,Component:()=>ut(ma,{to:(a.settingsResources??[])[0].path,relative:"path",replace:!0})},{path:"settings",Component:ct,children:a.settingsResources?.map(s=>({path:s.path,Component:s.component}))}]}]);return ut(ga,{router:o})};import{createContext as fa,useContext as va,useEffect as xa,useMemo as ya,useState as Ca}from"react";import{jsx as Pa}from"react/jsx-runtime";var ka={resolvedTheme:"light",theme:"system",setTheme:()=>null},bt=fa(ka);function ht({children:t,storageKey:a,defaultTheme:e="system",...r}){let[o,s]=Ca(()=>localStorage.getItem(a)||e),l=ya(()=>o!=="system"?o:window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",[o]);xa(()=>{let d=window.document.documentElement;d.classList.remove("light","dark"),d.classList.add(l)},[l]);let i={resolvedTheme:l,theme:o,setTheme:d=>{localStorage.setItem(a,d),s(d)}};return Pa(bt.Provider,{...r,value:i,children:t})}var G=()=>{let t=va(bt);if(t===void 0)throw new Error("useTheme must be used within a ThemeProvider");return t};import{jsx as H}from"react/jsx-runtime";var za=t=>{let[a,e]=Na(!1);Ra(function(){e(!0)},[]);let r=t.configurations.basePath,o=Ta(()=>t.configurations.modules.map(l=>{let i=l.resources.map(d=>({title:d.meta.title,url:x(`${l.path}/${d.path}`,r)}));return{title:l.meta.title,url:l.meta.menuItemClickable?x(l.path,r):void 0,clickable:l.component,icon:l.meta.icon||H(Sa,{}),isActive:!0,items:i}}),[t.configurations.modules,r]);return a?H(F.Provider,{value:{title:t.title,icon:t.icon,configurations:{...t.configurations,basePath:r},navItems:o},children:H(ht,{defaultTheme:"system",storageKey:"appshell-ui-theme",children:H(mt,{rootComponent:t.configurations.rootComponent,children:t.children})})}):null};import*as z from"@radix-ui/react-collapsible";import{jsx as Y}from"react/jsx-runtime";function ft({...t}){return Y(z.Root,{"data-slot":"collapsible",...t})}function X({...t}){return Y(z.CollapsibleTrigger,{"data-slot":"collapsible-trigger",...t})}function vt({...t}){return Y(z.CollapsibleContent,{"data-slot":"collapsible-content",...t})}import{useLocation as Ft,useMatch as Xa}from"react-router";import*as b from"react";import{Slot as tt}from"@radix-ui/react-slot";import{cva as Ea}from"class-variance-authority";import{PanelLeftIcon as La}from"lucide-react";import*as V from"react";var J=768;function xt(){let[t,a]=V.useState(void 0);return V.useEffect(()=>{let e=window.matchMedia(`(max-width: ${J-1}px)`),r=()=>{a(window.innerWidth<J)};return e.addEventListener("change",r),a(window.innerWidth<J),()=>e.removeEventListener("change",r)},[]),!!t}import{jsx as lr}from"react/jsx-runtime";import*as Ma from"@radix-ui/react-separator";import{jsx as ur}from"react/jsx-runtime";import*as g from"@radix-ui/react-dialog";import{XIcon as Ia}from"lucide-react";import{jsx as y,jsxs as Q}from"react/jsx-runtime";function yt({...t}){return y(g.Root,{"data-slot":"sheet",...t})}function _a({...t}){return y(g.Portal,{"data-slot":"sheet-portal",...t})}function Aa({className:t,...a}){return y(g.Overlay,{"data-slot":"sheet-overlay",className:c("astw:data-[state=open]:animate-in astw:data-[state=closed]:animate-out astw:data-[state=closed]:fade-out-0 astw:data-[state=open]:fade-in-0 astw:fixed astw:inset-0 astw:z-50 astw:bg-black/50",t),...a})}function Ct({className:t,children:a,side:e="right",...r}){return Q(_a,{children:[y(Aa,{}),Q(g.Content,{"data-slot":"sheet-content",className:c("astw:bg-background astw:data-[state=open]:animate-in astw:data-[state=closed]:animate-out astw:fixed astw:z-50 astw:flex astw:flex-col astw:gap-4 astw:shadow-lg astw:transition astw:ease-in-out astw:data-[state=closed]:duration-300 astw:data-[state=open]:duration-500",e==="right"&&"astw:data-[state=closed]:slide-out-to-right astw:data-[state=open]:slide-in-from-right astw:inset-y-0 astw:right-0 astw:h-full astw:w-3/4 astw:border-l astw:sm:max-w-sm",e==="left"&&"astw:data-[state=closed]:slide-out-to-left astw:data-[state=open]:slide-in-from-left astw:inset-y-0 astw:left-0 astw:h-full astw:w-3/4 astw:border-r astw:sm:max-w-sm",e==="top"&&"astw:data-[state=closed]:slide-out-to-top astw:data-[state=open]:slide-in-from-top astw:inset-x-0 astw:top-0 astw:h-auto astw:border-b",e==="bottom"&&"astw:data-[state=closed]:slide-out-to-bottom astw:data-[state=open]:slide-in-from-bottom astw:inset-x-0 astw:bottom-0 astw:h-auto astw:border-t",t),...r,children:[a,Q(g.Close,{className:"astw:ring-offset-bg astw:focus:ring-ring astw:data-[state=open]:bg-secondary astw:absolute astw:top-4 astw:right-4 astw:rounded-xs astw:opacity-70 astw:transition-opacity astw:hover:opacity-100 astw:focus:ring-2 astw:focus:ring-offset-2 astw:focus:outline-hidden astw:disabled:pointer-events-none",children:[y(Ia,{className:"astw:size-4"}),y("span",{className:"astw:sr-only",children:"Close"})]})]})]})}function kt({className:t,...a}){return y("div",{"data-slot":"sheet-header",className:c("astw:flex astw:flex-col astw:gap-1.5 astw:p-4",t),...a})}function Pt({className:t,...a}){return y(g.Title,{"data-slot":"sheet-title",className:c("astw:text-foreground astw:font-semibold",t),...a})}function St({className:t,...a}){return y(g.Description,{"data-slot":"sheet-description",className:c("astw:text-muted-foreground astw:text-sm",t),...a})}import{jsx as yr}from"react/jsx-runtime";import*as f from"@radix-ui/react-tooltip";import{jsx as M,jsxs as Ba}from"react/jsx-runtime";function Z({delayDuration:t=0,...a}){return M(f.Provider,{"data-slot":"tooltip-provider",delayDuration:t,...a})}function Rt({...t}){return M(Z,{children:M(f.Root,{"data-slot":"tooltip",...t})})}function Tt({...t}){return M(f.Trigger,{"data-slot":"tooltip-trigger",...t})}function Nt({className:t,sideOffset:a=0,children:e,...r}){return M(f.Portal,{children:Ba(f.Content,{"data-slot":"tooltip-content",sideOffset:a,className:c("astw:bg-primary astw:text-primary-foreground astw:animate-in astw:fade-in-0 astw:zoom-in-95 astw:data-[state=closed]:animate-out astw:data-[state=closed]:fade-out-0 astw:data-[state=closed]:zoom-out-95 astw:data-[side=bottom]:slide-in-from-top-2 astw:data-[side=left]:slide-in-from-right-2 astw:data-[side=right]:slide-in-from-left-2 astw:data-[side=top]:slide-in-from-bottom-2 astw:z-50 astw:w-fit astw:origin-(--radix-tooltip-content-transform-origin) astw:rounded-md astw:px-3 astw:py-1.5 astw:text-xs astw:text-balance",t),...r,children:[e,M(f.Arrow,{className:"astw:bg-primary astw:fill-primary astw:z-50 astw:size-2.5 astw:translate-y-[calc(-50%_-_2px)] astw:rotate-45 astw:rounded-[2px]"})]})})}import{jsx as w,jsxs as B}from"react/jsx-runtime";var Oa="sidebar_state",Da=60*60*24*7,$a="16rem",ja="18rem",Wa="3rem",Ua="b",zt=b.createContext(null);function E(){let t=b.useContext(zt);if(!t)throw new Error("useSidebar must be used within a SidebarProvider.");return t}function Mt({defaultOpen:t=!0,open:a,onOpenChange:e,className:r,style:o,children:s,...l}){let i=xt(),[d,p]=b.useState(!1),[u,S]=b.useState(t),C=a??u,R=b.useCallback(v=>{let k=typeof v=="function"?v(C):v;e?e(k):S(k),document.cookie=`${Oa}=${k}; path=/; max-age=${Da}`},[e,C]),T=b.useCallback(()=>i?p(v=>!v):R(v=>!v),[i,R,p]);b.useEffect(()=>{let v=k=>{k.key===Ua&&(k.metaKey||k.ctrlKey)&&(k.preventDefault(),T())};return window.addEventListener("keydown",v),()=>window.removeEventListener("keydown",v)},[T]);let K=C?"expanded":"collapsed",$=b.useMemo(()=>({state:K,open:C,setOpen:R,isMobile:i,openMobile:d,setOpenMobile:p,toggleSidebar:T}),[K,C,R,i,d,p,T]);return w(zt.Provider,{value:$,children:w(Z,{delayDuration:0,children:w("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":$a,"--sidebar-width-icon":Wa,...o},className:c("astw:group/sidebar-wrapper astw:has-data-[variant=inset]:bg-sidebar astw:flex astw:min-h-svh astw:w-full",r),...l,children:s})})})}function It({side:t="left",variant:a="sidebar",collapsible:e="offcanvas",className:r,children:o,...s}){let{isMobile:l,state:i,openMobile:d,setOpenMobile:p}=E();return e==="none"?w("div",{"data-slot":"sidebar",className:c("astw:bg-sidebar astw:text-sidebar-foreground astw:flex astw:h-full astw:w-(--sidebar-width) astw:flex-col",r),...s,children:o}):l?w(yt,{open:d,onOpenChange:p,...s,children:B(Ct,{"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",className:"astw:bg-sidebar astw:text-sidebar-foreground astw:w-(--sidebar-width) astw:p-0 astw:[&>button]:hidden",style:{"--sidebar-width":ja},side:t,children:[B(kt,{className:"astw:sr-only",children:[w(Pt,{children:"Sidebar"}),w(St,{children:"Displays the mobile sidebar."})]}),w("div",{className:"flex h-full w-full flex-col",children:o})]})}):B("div",{className:"astw:group astw:peer astw:text-sidebar-foreground astw:hidden astw:md:block","data-state":i,"data-collapsible":i==="collapsed"?e:"","data-variant":a,"data-side":t,"data-slot":"sidebar",children:[w("div",{"data-slot":"sidebar-gap",className:c("astw:relative astw:w-(--sidebar-width) astw:bg-transparent astw:transition-[width] astw:duration-200 astw:ease-linear","astw:group-data-[collapsible=offcanvas]:w-0","astw:group-data-[side=right]:rotate-180",a==="floating"||a==="inset"?"astw:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"astw:group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),w("div",{"data-slot":"sidebar-container",className:c("astw:fixed astw:inset-y-0 astw:z-10 astw:hidden astw:h-svh astw:w-(--sidebar-width) astw:transition-[left,right,width] astw:duration-200 astw:ease-linear astw:md:flex",t==="left"?"astw:left-0 astw:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]":"astw:right-0 astw:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",a==="floating"||a==="inset"?"astw:p-2 astw:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"astw:group-data-[collapsible=icon]:w-(--sidebar-width-icon) astw:group-data-[side=left]:border-r astw:group-data-[side=right]:border-l",a==="inset"&&"astw:border-x astw:border-x-border",r),...s,children:w("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"astw:bg-sidebar astw:group-data-[variant=floating]:border-sidebar-border astw:flex astw:h-full astw:w-full astw:flex-col astw:group-data-[variant=floating]:rounded-lg astw:group-data-[variant=floating]:border astw:group-data-[variant=floating]:shadow-sm",children:o})})]})}function at({className:t,onClick:a,...e}){let{toggleSidebar:r}=E();return B(N,{"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon",className:c("astw:text-muted-foreground",t),onClick:o=>{a?.(o),r()},...e,children:[w(La,{className:"astw:size-4.5"}),w("span",{className:"astw:sr-only",children:"Toggle Sidebar"})]})}function _t({className:t,...a}){return w("main",{"data-slot":"sidebar-inset",className:c("astw:bg-background astw:relative astw:flex astw:w-full astw:flex-1 astw:flex-col","astw:px-4 astw:md:peer-data-[variant=inset]:px-8 astw:md:peer-data-[variant=inset]:py-2",t),...a})}function At({className:t,...a}){return w("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:c("astw:flex astw:flex-row astw:items-center astw:gap-0.5 astw:p-2",t),...a})}function Bt({className:t,...a}){return w("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:c("astw:flex astw:min-h-0 astw:flex-1 astw:flex-col astw:gap-2 astw:overflow-auto astw:group-data-[collapsible=icon]:overflow-hidden",t),...a})}function Et({className:t,...a}){return w("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:c("astw:relative astw:flex astw:w-full astw:min-w-0 astw:flex-col astw:p-2",t),...a})}function Lt({className:t,...a}){return w("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:c("astw:flex astw:w-full astw:min-w-0 astw:flex-col astw:gap-1",t),...a})}function Ot({className:t,...a}){return w("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:c("astw:group/menu-item astw:relative",t),...a})}var Ha=Ea("astw:peer/menu-button astw:flex astw:w-full astw:items-center astw:gap-2 astw:overflow-hidden astw:rounded-md astw:p-2 astw:text-left astw:text-sm astw:outline-hidden astw:ring-sidebar-ring astw:transition-[width,height,padding] astw:hover:bg-sidebar-accent astw:hover:text-sidebar-accent-foreground astw:focus-visible:ring-2 astw:active:bg-sidebar-accent astw:active:text-sidebar-accent-foreground astw:disabled:pointer-events-none astw:disabled:opacity-50 astw:group-has-data-[sidebar=menu-action]/menu-item:pr-8 astw:aria-disabled:pointer-events-none astw:aria-disabled:opacity-50 astw:data-[active=true]:bg-sidebar-accent astw:data-[active=true]:font-medium astw:data-[active=true]:text-sidebar-accent-foreground astw:data-[state=open]:hover:bg-sidebar-accent astw:data-[state=open]:hover:text-sidebar-accent-foreground astw:group-data-[collapsible=icon]:size-8! astw:group-data-[collapsible=icon]:p-2! astw:[&>span:last-child]:truncate astw:[&>svg]:size-4 astw:[&>svg]:shrink-0",{variants:{variant:{default:"astw:hover:bg-sidebar-accent astw:hover:text-sidebar-accent-foreground",outline:"astw:bg-background astw:shadow-[0_0_0_1px_hsl(var(--sidebar-border))] astw:hover:bg-sidebar-accent astw:hover:text-sidebar-accent-foreground astw:hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"},size:{default:"astw:h-8 astw:text-sm",sm:"astw:h-7 astw:rounded-md astw:gap-1.5 astw:px-3 astw:has-[>svg]:px-2.5",lg:"astw:h-12 astw:text-sm astw:group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}});function et({asChild:t=!1,isActive:a=!1,variant:e="default",size:r="default",tooltip:o,className:s,...l}){let i=t?tt:"button",{isMobile:d,state:p}=E(),u=w(i,{"data-slot":"sidebar-menu-button","data-sidebar":"menu-button","data-size":r,"data-active":a,className:c(Ha({variant:e,size:r}),s),...l});return o?(typeof o=="string"&&(o={children:o}),B(Rt,{children:[w(Tt,{asChild:!0,children:u}),w(Nt,{side:"right",align:"center",hidden:p!=="collapsed"||d,...o})]})):u}function rt({className:t,asChild:a=!1,showOnHover:e=!1,...r}){return w(a?tt:"button",{"data-slot":"sidebar-menu-action","data-sidebar":"menu-action",className:c("astw:text-sidebar-foreground astw:ring-sidebar-ring astw:hover:bg-sidebar-accent astw:hover:text-sidebar-accent-foreground astw:peer-hover/menu-button:text-sidebar-accent-foreground astw:absolute astw:top-1.5 astw:right-1 astw:flex astw:aspect-square astw:w-5 astw:items-center astw:justify-center astw:rounded-md astw:p-0 astw:outline-hidden astw:transition-transform astw:focus-visible:ring-2 astw:[&>svg]:size-4 astw:[&>svg]:shrink-0","astw:after:absolute astw:after:-inset-2 astw:md:after:hidden","astw:peer-data-[size=sm]/menu-button:top-1","astw:peer-data-[size=default]/menu-button:top-1.5","astw:peer-data-[size=lg]/menu-button:top-2.5","astw:group-data-[collapsible=icon]:hidden",e&&"astw:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground astw:group-focus-within/menu-item:opacity-100 astw:group-hover/menu-item:opacity-100 astw:data-[state=open]:opacity-100 astw:md:opacity-0",t),...r})}function Dt({className:t,...a}){return w("ul",{"data-slot":"sidebar-menu-sub","data-sidebar":"menu-sub",className:c("astw:border-sidebar-border astw:mx-3.5 astw:flex astw:min-w-0 astw:translate-x-px astw:flex-col astw:gap-1 astw:border-l astw:px-2.5 astw:py-0.5","astw:group-data-[collapsible=icon]:hidden",t),...a})}function $t({className:t,...a}){return w("li",{"data-slot":"sidebar-menu-sub-item","data-sidebar":"menu-sub-item",className:c("astw:group/menu-sub-item astw:relative",t),...a})}function jt({asChild:t=!1,size:a="md",isActive:e=!1,className:r,...o}){return w(t?tt:"a",{"data-slot":"sidebar-menu-sub-button","data-sidebar":"menu-sub-button","data-size":a,"data-active":e,className:c("astw:text-sidebar-foreground astw:ring-sidebar-ring astw:hover:bg-sidebar-accent astw:hover:text-sidebar-accent-foreground astw:active:bg-sidebar-accent astw:active:text-sidebar-accent-foreground astw:[&>svg]:text-sidebar-accent-foreground astw:flex astw:h-7 astw:min-w-0 astw:-translate-x-px astw:items-center astw:gap-2 astw:overflow-hidden astw:rounded-md astw:px-2 astw:outline-hidden astw:focus-visible:ring-2 astw:disabled:pointer-events-none astw:disabled:opacity-50 astw:aria-disabled:pointer-events-none astw:aria-disabled:opacity-50 astw:[&>span:last-child]:truncate astw:[&>svg]:size-4 astw:[&>svg]:shrink-0","astw:data-[active=true]:bg-sidebar-accent astw:data-[active=true]:text-sidebar-accent-foreground",a==="sm"&&"astw:text-xs",a==="md"&&"astw:text-sm","astw:group-data-[collapsible=icon]:hidden",r),...o})}import{ChevronRight as Vt,SunIcon as Ya}from"lucide-react";import{Slot as Fa}from"@radix-ui/react-slot";import{ChevronRight as qa,MoreHorizontal as Gr}from"lucide-react";import{Link as Va,useHref as Ka}from"react-router";import{jsx as Wt}from"react/jsx-runtime";function L({to:t,children:a,...e}){try{return Ka(t),Wt(Va,{to:t,...e,children:a})}catch{return Wt("a",{href:t,...e,children:a})}}import{jsx as I,jsxs as Qr}from"react/jsx-runtime";function ot({...t}){return I("nav",{"aria-label":"breadcrumb","data-slot":"breadcrumb",...t})}function st({className:t,...a}){return I("ol",{"data-slot":"breadcrumb-list",className:c("astw:text-muted-foreground astw:flex astw:flex-wrap astw:items-center astw:gap-1.5 astw:text-sm astw:break-words astw:sm:gap-2.5",t),...a})}function it({className:t,...a}){return I("li",{"data-slot":"breadcrumb-item",className:c("astw:inline-flex astw:items-center astw:gap-1.5",t),...a})}function nt({asChild:t,className:a,children:e,...r}){return I(t?Fa:L,{"data-slot":"breadcrumb-link",className:c("astw:hover:text-foreground astw:transition-colors",a),...r,children:e})}function Ut({children:t,className:a,...e}){return I("li",{"data-slot":"breadcrumb-separator",role:"presentation","aria-hidden":"true",className:c("astw:[&>svg]:size-3.5",a),...e,children:t??I(qa,{})})}var Ga=t=>t.reduce((a,e)=>{a[e.path]={title:e.meta.title,breadcrumbTitle:e.meta.breadcrumbTitle};let r=(o,s)=>{!o||o.length===0||o.forEach(l=>{let i=`${s}/${l.path}`;a[i]={title:l.meta.title,breadcrumbTitle:l.meta.breadcrumbTitle},l.subResources&&l.subResources.length>0&&r(l.subResources,i)})};return e.resources&&e.resources.length>0&&r(e.resources,e.path),a},{});function Ht(t,a,e){let r=t.split("/").filter(i=>i!=="").slice(1),o=a?(()=>{let[i,...d]=r;return d})():r,s=Ga(e),l=o.map((i,d)=>{let p=o.slice(0,d+1).join("/"),u=s[p];if(!u){let C=Object.entries(s).find(([R])=>{let T=R.split("/").map($=>$.startsWith(":")?"[^/]+":$).join("/");return new RegExp(`^${T}$`).test(p)})?.[1];C&&(u=C)}let S;return u?typeof u.breadcrumbTitle=="function"?S=u.breadcrumbTitle(i):typeof u.breadcrumbTitle=="string"?S=u.breadcrumbTitle:S=u.title:S=decodeURIComponent(i),{segment:i,path:p,title:S}});return{basePath:a||null,segments:l}}import{Fragment as Kt,jsx as n,jsxs as m}from"react/jsx-runtime";var Ja=()=>{let{open:t}=E();return n("div",{className:t?"astw:md:hidden":void 0,children:n(at,{className:"astw:-ml-2.5"})})},Qa=t=>{let a=t.children?t.children({Outlet:q}):null,e=G(),r=()=>{e.setTheme(e.theme==="dark"?"light":"dark")};return n(Mt,{className:"astw:flex astw:flex-col",children:m("div",{className:"astw:flex astw:flex-1",children:[t.sidebar??n(qt,{}),m(_t,{className:"astw:w-[calc(100%-var(--sidebar-width))]",children:[n("header",{className:"astw:flex astw:h-14 astw:shrink-0 astw:items-center astw:gap-2 astw:transition-[width,height] astw:ease-linear astw:group-has-data-[collapsible=icon]/sidebar-wrapper:h-12",children:m("div",{className:"astw:flex astw:w-full astw:items-center astw:justify-between",children:[m("div",{className:"astw:flex astw:items-center astw:gap-2",children:[n(Ja,{}),n(te,{})]}),n("div",{className:"astw:flex astw:items-center astw:gap-2",children:n(N,{variant:"outline",size:"icon",onClick:r,children:n(Ya,{})})})]})}),n("div",{className:"astw:flex astw:flex-col astw:gap-4",children:a??n(q,{})})]})]})})},qt=t=>{let{title:a,icon:e,navItems:r}=P(),{pathname:o}=Ft(),s=m(At,{children:[e,n("h1",{className:"astw:text-sm astw:mb-2 astw:mt-2 astw:px-2",children:a})]});return m(It,{variant:"inset",children:[m("div",{className:"astw:flex astw:justify-between astw:items-center",children:[t.header??s,n("div",{className:"astw:hidden astw:md:block",children:n(at,{className:"astw:-ml-1"})})]}),n(Bt,{children:n(Et,{children:n(Lt,{children:r.map(i=>n(ft,{asChild:!0,defaultOpen:i.isActive,children:m(Ot,{children:[i.url?m(Kt,{children:[n(et,{asChild:!0,tooltip:i.title,children:m(L,{to:i.url,className:i.url===o?"astw:bg-sidebar-accent astw:font-medium":void 0,children:[i.icon,n("span",{children:i.title})]})}),!!i.items?.length&&n(X,{asChild:!0,children:m(rt,{className:"astw:data-[state=open]:rotate-90",children:[n(Vt,{}),n("span",{className:"astw:sr-only",children:"Toggle"})]})})]}):n(Kt,{children:m(X,{className:"astw:flex astw:w-[100%] astw:[&[data-state=open]_.astw-rotate-target]:rotate-90",children:[n(et,{asChild:!0,tooltip:i.title,children:m("span",{className:"astw:flex astw:w-[100%]",children:[i.icon,n("span",{children:i.title})]})}),!!i.items?.length&&n(rt,{className:"astw-rotate-target",asChild:!0,children:m("span",{children:[n(Vt,{}),n("span",{className:"astw:sr-only",children:"Toggle"})]})})]})}),!!i.items?.length&&n(vt,{children:n(Dt,{children:i.items?.map(d=>n($t,{children:n(jt,{asChild:!0,children:n(L,{to:d.url,className:d.url===o?"astw:bg-sidebar-accent astw:font-medium":void 0,children:n("span",{children:d.title})})})},d.title))})})]})},i.title))})})}),t.footer??null]})},Za=()=>{let{configurations:t}=P(),a=Ft();return Ht(a.pathname,t.basePath,t.modules)},te=()=>{let{basePath:t,segments:a}=Za(),e=Xa("/:prefix/settings/:suffix");return e?n(ot,{children:n(st,{children:n("div",{className:"astw:inline-flex astw:items-center astw:gap-3 astw:last:text-foreground",children:n(it,{children:n(nt,{to:`/${e.params.prefix}/settings`,children:"Settings"})})})})}):n(ot,{children:n(st,{children:a.map((r,o)=>m("div",{className:"astw:inline-flex astw:items-center astw:gap-3 astw:last:text-foreground",children:[n(it,{children:n(nt,{to:x(r.path,t),children:r.title})}),o<a.length-1&&n(Ut,{})]},o))})})};import{useLocation as Mo,useNavigate as Io,useParams as _o,useSearchParams as Ao,Link as Bo}from"react-router";import{createContext as ee,useCallback as Yt,useContext as re,useEffect as oe,useMemo as se,useState as ie}from"react";import*as _ from"oauth4webapi";var O="oauth_pkce_verifier",D="oauth_state",Gt=({idpEndpoint:t,clientId:a,state:e,codeChallenge:r,redirectUri:o})=>{let s=new URL(`${t}/oauth2/authorize`);return s.searchParams.set("response_type","code"),s.searchParams.set("client_id",a),s.searchParams.set("redirect_uri",o??window.location.origin),s.searchParams.set("scope","openid profile email"),s.searchParams.set("state",e),s.searchParams.set("code_challenge",r),s.searchParams.set("code_challenge_method","S256"),s.toString()},ae=async({code:t,returnedState:a,idpEndpoint:e,clientId:r,redirectUri:o})=>{let s=sessionStorage.getItem(O),l=sessionStorage.getItem(D);if(!t||!a||!s||!l){let d=[];throw t||d.push("code"),a||d.push("returnedState"),s||d.push("code_verifier"),l||d.push("expectedState"),new Error(`Missing params: ${d.join(", ")}`)}if(a!==l)throw new Error("State mismatch: possible CSRF attack");let i=new URLSearchParams({grant_type:"authorization_code",client_id:r,code:t,redirect_uri:o??window.location.origin,code_verifier:s});try{let d=await fetch(`${e}/oauth2/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json","X-Tailor-Nonce":crypto.randomUUID()},credentials:"include",body:i.toString()}),{access_token:p}=await d.json();return p}catch(d){throw new Error(`Token exchange failed: ${d instanceof Error?d.message:String(d)}`)}},Xt=async()=>{let t=_.generateRandomCodeVerifier(),a=await _.calculatePKCECodeChallenge(t),e=_.generateRandomState();return sessionStorage.setItem(O,t),sessionStorage.setItem(D,e),{codeChallenge:a,state:e}},bo=async({currentUrl:t,idpEndpoint:a,clientId:e,redirectUri:r})=>{try{let o=t.searchParams.get("code"),s=t.searchParams.get("state");await ae({idpEndpoint:a,clientId:e,code:o,returnedState:s,redirectUri:r})}catch(o){console.error(o)}finally{sessionStorage.removeItem(O),sessionStorage.removeItem(D),t.searchParams.delete("code"),t.searchParams.delete("state"),t.searchParams.delete("error"),t.searchParams.delete("error_description"),window.history.replaceState({},document.title,t.toString())}};import{jsx as le}from"react/jsx-runtime";var Jt=ee(void 0),ne=()=>{let t=re(Jt);if(t===void 0)throw new Error("useBuiltinIdpAuth must be used within an BuiltinIdPAuthContextProvider");return t},de=({idpEndpoint:t,clientId:a,redirectUri:e,children:r})=>{let[o,s]=ie(!1),l=Yt(async()=>{let{codeChallenge:d,state:p}=await Xt(),u=Gt({idpEndpoint:t,clientId:a,codeChallenge:d,state:p,redirectUri:e});window.location.href=u},[t,a,e]);oe(()=>{(async()=>{(await(await fetch(`${t}/query`,{method:"POST",headers:{"Content-Type":"application/json","X-Tailor-Nonce":crypto.randomUUID()},credentials:"include",body:JSON.stringify({query:"query Myself(){ me { id }}"})})).json()).data.me?s(!0):l()})()},[t,l]);let i=Yt(async()=>{sessionStorage.removeItem(O),sessionStorage.removeItem(D);try{await fetch(`${t}/oauth2/revoke`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","X-Tailor-Nonce":crypto.randomUUID()},credentials:"include",body:""}),window.location.href="/"}catch(d){console.error(d)}},[t]);return le(Jt.Provider,{value:se(()=>({login:l,logout:i}),[l,i]),children:o?r:null})};export{za as AppShell,de as BuiltinIdPAuthProvider,qt as DefaultSidebar,Bo as Link,D as OAUTH_STATE_KEY,O as PKCE_VERIFIER_KEY,Qa as SidebarLayoutContainer,Gt as buildAuthorizationUrl,wa as defineModule,pa as defineResource,ae as exchangeCodeForToken,bo as handleOAuthCallback,Xt as prepareLogin,ca as redirectToResource,P as useAppShell,ne as useBuiltinIdpAuth,Mo as useLocation,Io as useNavigate,_o as useParams,Ao as useSearchParams,G as useTheme};
1
+ import{Table as _a}from"lucide-react";import{useEffect as Aa,useMemo as La,useState as Oa}from"react";import{createContext as ra,useContext as oa}from"react";var Y=ra({navItems:[],configurations:{modules:[]}}),R=()=>oa(Y);import{createBrowserRouter as xa,RouterProvider as ya,Navigate as Ca,redirect as ka,Outlet as Pa}from"react-router";import{NavLink as wa,Outlet as pt}from"react-router";import{Toaster as pa}from"sonner";import{Slot as na}from"@radix-ui/react-slot";import{cva as da}from"class-variance-authority";import{clsx as sa}from"clsx";import{twMerge as ia}from"tailwind-merge";function c(...t){return ia(sa(t))}import{jsx as ca}from"react/jsx-runtime";var la=da("astw:inline-flex astw:items-center astw:justify-center astw:gap-2 astw:whitespace-nowrap astw:rounded-md astw:text-sm astw:font-medium astw:transition-all astw:disabled:pointer-events-none astw:disabled:opacity-50 astw:[&_svg]:pointer-events-none astw:[&_svg:not([class*='size-'])]:size-4 astw:shrink-0 astw:[&_svg]:shrink-0 astw:outline-none astw:focus-visible:border-ring astw:focus-visible:ring-ring/50 astw:focus-visible:ring-[3px] astw:aria-invalid:ring-destructive/20 astw:dark:aria-invalid:ring-destructive/40 astw:aria-invalid:border-destructive",{variants:{variant:{default:"astw:bg-primary astw:text-primary-foreground astw:shadow-xs astw:hover:bg-primary/90",destructive:"astw:bg-destructive astw:text-white astw:shadow-xs astw:hover:bg-destructive/90 astw:focus-visible:ring-destructive/20 astw:dark:focus-visible:ring-destructive/40 astw:dark:bg-destructive/60",outline:"astw:border astw:bg-background astw:shadow-xs astw:hover:bg-accent astw:hover:text-accent-foreground astw:dark:bg-input/30 astw:dark:border-input astw:dark:hover:bg-input/50",secondary:"astw:bg-secondary astw:text-secondary-foreground astw:shadow-xs astw:hover:bg-secondary/80",ghost:"astw:hover:bg-accent astw:hover:text-accent-foreground astw:dark:hover:bg-accent/50",link:"astw:text-primary astw:underline-offset-4 astw:hover:underline"},size:{default:"astw:h-9 astw:px-4 astw:py-2 astw:has-[>svg]:px-3",sm:"astw:h-8 astw:rounded-md astw:gap-1.5 astw:px-3 astw:has-[>svg]:px-2.5",lg:"astw:h-10 astw:rounded-md astw:px-6 astw:has-[>svg]:px-4",icon:"astw:size-9"}},defaultVariants:{variant:"default",size:"default"}});function y({className:t,variant:a,size:e,asChild:o=!1,...r}){return ca(o?na:"button",{"data-slot":"button",className:c(la({variant:a,size:e,className:t})),...r})}import{Fragment as ua,jsx as h,jsxs as _}from"react/jsx-runtime";var U=({contentBorder:t,children:a})=>h("div",{className:t?"astw:p-4 astw:rounded-sm astw:border astw:shadow-xs":"",children:a}),ut=()=>_(U,{contentBorder:!0,children:[h("p",{className:"astw:font-semibold astw:leading-none astw:tracking-tight",children:"Welcome to AppShell"}),h("p",{className:"pt-4",children:"Add your GraphQL resources from configuration at first!"})]}),J=()=>_(ua,{children:[h(pt,{}),h(pa,{})]}),mt=()=>{let{configurations:t}=R();return _("div",{className:"astw:mx-auto astw:flex-col astw:flex astw:md:flex-row astw:max-w-5xl astw:gap-[10px] astw:w-full",children:[h("div",{children:_("nav",{className:"astw:bg-card astw:md:w-xs astw:rounded-md astw:border astw:p-3 astw:shadow-xs",children:[h("h2",{className:"astw:text-sm astw:leading-[36px] astw:mb-2 astw:font-bold ",children:"Settings"}),h("ul",{className:"astw:flex astw:flex-col astw:gap-1",children:t.settingsResources?.map(a=>h("li",{children:h(wa,{to:`./${a.path}`,children:({isActive:e})=>_(y,{variant:e?"secondary":"ghost",className:"astw:w-full astw:justify-start",children:[a.meta.icon,a.meta.title]})})},a.path))})]})}),h("section",{className:"astw:bg-card astw:flex-1 astw:rounded-md astw:border astw:shadow-xs",children:h(pt,{})})]})};import{useRouteError as ma,isRouteErrorResponse as ga}from"react-router";import{AlertCircle as gt}from"lucide-react";import{jsx as x,jsxs as F}from"react/jsx-runtime";var bt=()=>{let t=ma();if(ga(t)&&t.status===404)return x("div",{className:"astw:p-6",children:F("div",{className:"astw:flex astw:items-start astw:gap-4",children:[x(gt,{className:"astw:h-5 astw:w-5 astw:text-destructive astw:flex-shrink-0 astw:mt-0.5"}),F("div",{children:[x("h1",{className:"astw:font-semibold astw:text-lg",children:"404 Not Found"}),x("p",{className:"astw:text-sm astw:text-muted-foreground astw:mt-1",children:"The page you requested could not be found."}),x(y,{variant:"outline",size:"sm",className:"astw:mt-4",onClick:()=>window.history.back(),children:"Go Back"})]})]})});let a=t instanceof Error?t.message:"An unexpected error occurred";return x("div",{className:"astw:p-6",children:F("div",{className:"astw:flex astw:items-start astw:gap-4",children:[x(gt,{className:"astw:h-5 astw:w-5 astw:text-destructive astw:flex-shrink-0 astw:mt-0.5"}),F("div",{children:[x("h1",{className:"astw:font-semibold astw:text-lg",children:"Something went wrong"}),x("p",{className:"astw:text-sm astw:text-muted-foreground astw:mt-1",children:a}),x(y,{variant:"outline",size:"sm",className:"astw:mt-4",onClick:()=>window.location.reload(),children:"Try Again"})]})]})})};import{capitalCase as ht}from"change-case";import{redirect as ba}from"react-router";var H="resources",C=(t,a)=>a?`/${a}/${H}/${t}`:`/${H}/${t}`;import{jsx as ft}from"react/jsx-runtime";function ha(t){return{redirectTo:t}}function V(t){return typeof t=="object"&&t!==null&&"redirectTo"in t}function fa(t){let{path:a,meta:e,component:o,resources:r,errorBoundary:i}=t,n=e?.title??ht(a),s=V(o)?{component:()=>null,loader:l=>ba(C(o.redirectTo,l))}:{component:()=>ft(U,{contentBorder:e?.contentBorder??!1,children:o({title:n,resources:r})})};return{path:a,type:"component",_type:"module",...s,meta:{title:n,...e?.breadcrumbTitle!==void 0?{breadcrumbTitle:e.breadcrumbTitle}:{},...e,menuItemClickable:!V(o),icon:t.meta?.icon},resources:r,errorBoundary:i}}function va(t){let{path:a,component:e,subResources:o,meta:r,errorBoundary:i}=t,n=r?.title??ht(a);return{_type:"resource",type:"component",path:a,meta:{title:n,icon:r?.icon,...r?.breadcrumbTitle!==void 0?{breadcrumbTitle:r.breadcrumbTitle}:{}},component:()=>ft(U,{contentBorder:r?.contentBorder??!1,children:e({title:n,resources:o})}),subResources:o,errorBoundary:i}}import{Fragment as Ra,jsx as A}from"react/jsx-runtime";var K=t=>()=>A(Ra,{children:t}),Sa=(t,a,e)=>t.reduce((o,r)=>{let i=r.errorBoundary||e,n={index:!0,Component:r.component,...r.loader&&{loader:()=>r.loader(a)}};return[...o,{path:r.path,...i&&{ErrorBoundary:K(i)},...r.resources&&r.resources.length>0?{children:[n,...r.resources.map(s=>vt(s,i))]}:{children:[n]}}]},[]),vt=(t,a)=>{let e=t.errorBoundary||a,o={index:!0,Component:t.component};return{path:t.path,...t.errorBoundary&&{ErrorBoundary:K(t.errorBoundary)},...t.subResources&&t.subResources.length>0?{children:[o,...t.subResources.map(r=>vt(r,e))]}:{children:[o]}}},xt=t=>{let{configurations:a}=R(),{rootComponent:e}=t,o=a.errorBoundary===void 0?A(bt,{}):a.errorBoundary,i=[V(e)?{index:!0,loader:()=>ka(C(e.redirectTo,a.basePath))}:{index:!0,Component:e??ut},{path:H,children:Sa(a.modules,a.basePath,o)},{path:"settings",index:!0,Component:()=>A(Ca,{to:(a.settingsResources??[])[0].path,relative:"path",replace:!0})},{path:"settings",Component:mt,children:a.settingsResources?.map(s=>({path:s.path,Component:s.component,...s.errorBoundary&&{ErrorBoundary:K(s.errorBoundary)}}))},{path:"*",loader:()=>{throw new Response("Not Found",{status:404})}}],n=xa([{path:a.basePath,element:t.children,children:o?[{element:A(Pa,{}),ErrorBoundary:K(o),children:i}]:i}]);return A(ya,{router:n})};import{createContext as Ta,useContext as Na,useEffect as za,useMemo as Ba,useState as Ma}from"react";import{jsx as Ia}from"react/jsx-runtime";var Ea={resolvedTheme:"light",theme:"system",setTheme:()=>null},yt=Ta(Ea);function Ct({children:t,storageKey:a,defaultTheme:e="system",...o}){let[r,i]=Ma(()=>localStorage.getItem(a)||e),n=Ba(()=>r!=="system"?r:window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",[r]);za(()=>{let l=window.document.documentElement;l.classList.remove("light","dark"),l.classList.add(n)},[n]);let s={resolvedTheme:n,theme:r,setTheme:l=>{localStorage.setItem(a,l),i(l)}};return Ia(yt.Provider,{...o,value:s,children:t})}var Q=()=>{let t=Na(yt);if(t===void 0)throw new Error("useTheme must be used within a ThemeProvider");return t};import{jsx as q}from"react/jsx-runtime";var Da=t=>{let[a,e]=Oa(!1);Aa(function(){e(!0)},[]);let o=t.configurations.basePath,r=La(()=>t.configurations.modules.map(n=>{let s=n.resources.map(l=>({title:l.meta.title,url:C(`${n.path}/${l.path}`,o)}));return{title:n.meta.title,url:n.meta.menuItemClickable?C(n.path,o):void 0,clickable:n.component,icon:n.meta.icon||q(_a,{}),isActive:!0,items:s}}),[t.configurations.modules,o]);return a?q(Y.Provider,{value:{title:t.title,icon:t.icon,configurations:{...t.configurations,basePath:o},navItems:r},children:q(Ct,{defaultTheme:"system",storageKey:"appshell-ui-theme",children:q(xt,{rootComponent:t.configurations.rootComponent,children:t.children})})}):null};import*as B from"@radix-ui/react-collapsible";import{jsx as tt}from"react/jsx-runtime";function kt({...t}){return tt(B.Root,{"data-slot":"collapsible",...t})}function Z({...t}){return tt(B.CollapsibleTrigger,{"data-slot":"collapsible-trigger",...t})}function Pt({...t}){return tt(B.CollapsibleContent,{"data-slot":"collapsible-content",...t})}import{useLocation as Jt,useMatch as oe}from"react-router";import*as b from"react";import{Slot as ot}from"@radix-ui/react-slot";import{cva as Ha}from"class-variance-authority";import{PanelLeftIcon as Va}from"lucide-react";import*as G from"react";var at=768;function St(){let[t,a]=G.useState(void 0);return G.useEffect(()=>{let e=window.matchMedia(`(max-width: ${at-1}px)`),o=()=>{a(window.innerWidth<at)};return e.addEventListener("change",o),a(window.innerWidth<at),()=>e.removeEventListener("change",o)},[]),!!t}import{jsx as Sr}from"react/jsx-runtime";import*as $a from"@radix-ui/react-separator";import{jsx as zr}from"react/jsx-runtime";import*as m from"@radix-ui/react-dialog";import{XIcon as ja}from"lucide-react";import{jsx as k,jsxs as et}from"react/jsx-runtime";function Rt({...t}){return k(m.Root,{"data-slot":"sheet",...t})}function Wa({...t}){return k(m.Portal,{"data-slot":"sheet-portal",...t})}function Ua({className:t,...a}){return k(m.Overlay,{"data-slot":"sheet-overlay",className:c("astw:data-[state=open]:animate-in astw:data-[state=closed]:animate-out astw:data-[state=closed]:fade-out-0 astw:data-[state=open]:fade-in-0 astw:fixed astw:inset-0 astw:z-50 astw:bg-black/50",t),...a})}function Tt({className:t,children:a,side:e="right",...o}){return et(Wa,{children:[k(Ua,{}),et(m.Content,{"data-slot":"sheet-content",className:c("astw:bg-background astw:data-[state=open]:animate-in astw:data-[state=closed]:animate-out astw:fixed astw:z-50 astw:flex astw:flex-col astw:gap-4 astw:shadow-lg astw:transition astw:ease-in-out astw:data-[state=closed]:duration-300 astw:data-[state=open]:duration-500",e==="right"&&"astw:data-[state=closed]:slide-out-to-right astw:data-[state=open]:slide-in-from-right astw:inset-y-0 astw:right-0 astw:h-full astw:w-3/4 astw:border-l astw:sm:max-w-sm",e==="left"&&"astw:data-[state=closed]:slide-out-to-left astw:data-[state=open]:slide-in-from-left astw:inset-y-0 astw:left-0 astw:h-full astw:w-3/4 astw:border-r astw:sm:max-w-sm",e==="top"&&"astw:data-[state=closed]:slide-out-to-top astw:data-[state=open]:slide-in-from-top astw:inset-x-0 astw:top-0 astw:h-auto astw:border-b",e==="bottom"&&"astw:data-[state=closed]:slide-out-to-bottom astw:data-[state=open]:slide-in-from-bottom astw:inset-x-0 astw:bottom-0 astw:h-auto astw:border-t",t),...o,children:[a,et(m.Close,{className:"astw:ring-offset-bg astw:focus:ring-ring astw:data-[state=open]:bg-secondary astw:absolute astw:top-4 astw:right-4 astw:rounded-xs astw:opacity-70 astw:transition-opacity astw:hover:opacity-100 astw:focus:ring-2 astw:focus:ring-offset-2 astw:focus:outline-hidden astw:disabled:pointer-events-none",children:[k(ja,{className:"astw:size-4"}),k("span",{className:"astw:sr-only",children:"Close"})]})]})]})}function Nt({className:t,...a}){return k("div",{"data-slot":"sheet-header",className:c("astw:flex astw:flex-col astw:gap-1.5 astw:p-4",t),...a})}function zt({className:t,...a}){return k(m.Title,{"data-slot":"sheet-title",className:c("astw:text-foreground astw:font-semibold",t),...a})}function Bt({className:t,...a}){return k(m.Description,{"data-slot":"sheet-description",className:c("astw:text-muted-foreground astw:text-sm",t),...a})}import{jsx as Or}from"react/jsx-runtime";import*as f from"@radix-ui/react-tooltip";import{jsx as M,jsxs as Fa}from"react/jsx-runtime";function rt({delayDuration:t=0,...a}){return M(f.Provider,{"data-slot":"tooltip-provider",delayDuration:t,...a})}function Mt({...t}){return M(rt,{children:M(f.Root,{"data-slot":"tooltip",...t})})}function Et({...t}){return M(f.Trigger,{"data-slot":"tooltip-trigger",...t})}function It({className:t,sideOffset:a=0,children:e,...o}){return M(f.Portal,{children:Fa(f.Content,{"data-slot":"tooltip-content",sideOffset:a,className:c("astw:bg-primary astw:text-primary-foreground astw:animate-in astw:fade-in-0 astw:zoom-in-95 astw:data-[state=closed]:animate-out astw:data-[state=closed]:fade-out-0 astw:data-[state=closed]:zoom-out-95 astw:data-[side=bottom]:slide-in-from-top-2 astw:data-[side=left]:slide-in-from-right-2 astw:data-[side=right]:slide-in-from-left-2 astw:data-[side=top]:slide-in-from-bottom-2 astw:z-50 astw:w-fit astw:origin-(--radix-tooltip-content-transform-origin) astw:rounded-md astw:px-3 astw:py-1.5 astw:text-xs astw:text-balance",t),...o,children:[e,M(f.Arrow,{className:"astw:bg-primary astw:fill-primary astw:z-50 astw:size-2.5 astw:translate-y-[calc(-50%_-_2px)] astw:rotate-45 astw:rounded-[2px]"})]})})}import{jsx as w,jsxs as L}from"react/jsx-runtime";var Ka="sidebar_state",qa=60*60*24*7,Ga="16rem",Xa="18rem",Ya="3rem",Ja="b",_t=b.createContext(null);function O(){let t=b.useContext(_t);if(!t)throw new Error("useSidebar must be used within a SidebarProvider.");return t}function At({defaultOpen:t=!0,open:a,onOpenChange:e,className:o,style:r,children:i,...n}){let s=St(),[l,p]=b.useState(!1),[u,T]=b.useState(t),P=a??u,N=b.useCallback(v=>{let S=typeof v=="function"?v(P):v;e?e(S):T(S),document.cookie=`${Ka}=${S}; path=/; max-age=${qa}`},[e,P]),z=b.useCallback(()=>s?p(v=>!v):N(v=>!v),[s,N,p]);b.useEffect(()=>{let v=S=>{S.key===Ja&&(S.metaKey||S.ctrlKey)&&(S.preventDefault(),z())};return window.addEventListener("keydown",v),()=>window.removeEventListener("keydown",v)},[z]);let X=P?"expanded":"collapsed",W=b.useMemo(()=>({state:X,open:P,setOpen:N,isMobile:s,openMobile:l,setOpenMobile:p,toggleSidebar:z}),[X,P,N,s,l,p,z]);return w(_t.Provider,{value:W,children:w(rt,{delayDuration:0,children:w("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":Ga,"--sidebar-width-icon":Ya,...r},className:c("astw:group/sidebar-wrapper astw:has-data-[variant=inset]:bg-sidebar astw:flex astw:min-h-svh astw:w-full",o),...n,children:i})})})}function Lt({side:t="left",variant:a="sidebar",collapsible:e="offcanvas",className:o,children:r,...i}){let{isMobile:n,state:s,openMobile:l,setOpenMobile:p}=O();return e==="none"?w("div",{"data-slot":"sidebar",className:c("astw:bg-sidebar astw:text-sidebar-foreground astw:flex astw:h-full astw:w-(--sidebar-width) astw:flex-col",o),...i,children:r}):n?w(Rt,{open:l,onOpenChange:p,...i,children:L(Tt,{"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",className:"astw:bg-sidebar astw:text-sidebar-foreground astw:w-(--sidebar-width) astw:p-0 astw:[&>button]:hidden",style:{"--sidebar-width":Xa},side:t,children:[L(Nt,{className:"astw:sr-only",children:[w(zt,{children:"Sidebar"}),w(Bt,{children:"Displays the mobile sidebar."})]}),w("div",{className:"flex h-full w-full flex-col",children:r})]})}):L("div",{className:"astw:group astw:peer astw:text-sidebar-foreground astw:hidden astw:md:block","data-state":s,"data-collapsible":s==="collapsed"?e:"","data-variant":a,"data-side":t,"data-slot":"sidebar",children:[w("div",{"data-slot":"sidebar-gap",className:c("astw:relative astw:w-(--sidebar-width) astw:bg-transparent astw:transition-[width] astw:duration-200 astw:ease-linear","astw:group-data-[collapsible=offcanvas]:w-0","astw:group-data-[side=right]:rotate-180",a==="floating"||a==="inset"?"astw:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"astw:group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),w("div",{"data-slot":"sidebar-container",className:c("astw:fixed astw:inset-y-0 astw:z-10 astw:hidden astw:h-svh astw:w-(--sidebar-width) astw:transition-[left,right,width] astw:duration-200 astw:ease-linear astw:md:flex",t==="left"?"astw:left-0 astw:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]":"astw:right-0 astw:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",a==="floating"||a==="inset"?"astw:p-2 astw:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"astw:group-data-[collapsible=icon]:w-(--sidebar-width-icon) astw:group-data-[side=left]:border-r astw:group-data-[side=right]:border-l",a==="inset"&&"astw:border-x astw:border-x-border",o),...i,children:w("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"astw:bg-sidebar astw:group-data-[variant=floating]:border-sidebar-border astw:flex astw:h-full astw:w-full astw:flex-col astw:group-data-[variant=floating]:rounded-lg astw:group-data-[variant=floating]:border astw:group-data-[variant=floating]:shadow-sm",children:r})})]})}function st({className:t,onClick:a,...e}){let{toggleSidebar:o}=O();return L(y,{"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon",className:c("astw:text-muted-foreground",t),onClick:r=>{a?.(r),o()},...e,children:[w(Va,{className:"astw:size-4.5"}),w("span",{className:"astw:sr-only",children:"Toggle Sidebar"})]})}function Ot({className:t,...a}){return w("main",{"data-slot":"sidebar-inset",className:c("astw:bg-background astw:relative astw:flex astw:w-full astw:flex-1 astw:flex-col","astw:px-4 astw:md:peer-data-[variant=inset]:px-8 astw:md:peer-data-[variant=inset]:py-2",t),...a})}function Dt({className:t,...a}){return w("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:c("astw:flex astw:flex-row astw:items-center astw:gap-0.5 astw:p-2",t),...a})}function $t({className:t,...a}){return w("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:c("astw:flex astw:min-h-0 astw:flex-1 astw:flex-col astw:gap-2 astw:overflow-auto astw:group-data-[collapsible=icon]:overflow-hidden",t),...a})}function jt({className:t,...a}){return w("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:c("astw:relative astw:flex astw:w-full astw:min-w-0 astw:flex-col astw:p-2",t),...a})}function Wt({className:t,...a}){return w("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:c("astw:flex astw:w-full astw:min-w-0 astw:flex-col astw:gap-1",t),...a})}function Ut({className:t,...a}){return w("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:c("astw:group/menu-item astw:relative",t),...a})}var Qa=Ha("astw:peer/menu-button astw:flex astw:w-full astw:items-center astw:gap-2 astw:overflow-hidden astw:rounded-md astw:p-2 astw:text-left astw:text-sm astw:outline-hidden astw:ring-sidebar-ring astw:transition-[width,height,padding] astw:hover:bg-sidebar-accent astw:hover:text-sidebar-accent-foreground astw:focus-visible:ring-2 astw:active:bg-sidebar-accent astw:active:text-sidebar-accent-foreground astw:disabled:pointer-events-none astw:disabled:opacity-50 astw:group-has-data-[sidebar=menu-action]/menu-item:pr-8 astw:aria-disabled:pointer-events-none astw:aria-disabled:opacity-50 astw:data-[active=true]:bg-sidebar-accent astw:data-[active=true]:font-medium astw:data-[active=true]:text-sidebar-accent-foreground astw:data-[state=open]:hover:bg-sidebar-accent astw:data-[state=open]:hover:text-sidebar-accent-foreground astw:group-data-[collapsible=icon]:size-8! astw:group-data-[collapsible=icon]:p-2! astw:[&>span:last-child]:truncate astw:[&>svg]:size-4 astw:[&>svg]:shrink-0",{variants:{variant:{default:"astw:hover:bg-sidebar-accent astw:hover:text-sidebar-accent-foreground",outline:"astw:bg-background astw:shadow-[0_0_0_1px_hsl(var(--sidebar-border))] astw:hover:bg-sidebar-accent astw:hover:text-sidebar-accent-foreground astw:hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"},size:{default:"astw:h-8 astw:text-sm",sm:"astw:h-7 astw:rounded-md astw:gap-1.5 astw:px-3 astw:has-[>svg]:px-2.5",lg:"astw:h-12 astw:text-sm astw:group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}});function it({asChild:t=!1,isActive:a=!1,variant:e="default",size:o="default",tooltip:r,className:i,...n}){let s=t?ot:"button",{isMobile:l,state:p}=O(),u=w(s,{"data-slot":"sidebar-menu-button","data-sidebar":"menu-button","data-size":o,"data-active":a,className:c(Qa({variant:e,size:o}),i),...n});return r?(typeof r=="string"&&(r={children:r}),L(Mt,{children:[w(Et,{asChild:!0,children:u}),w(It,{side:"right",align:"center",hidden:p!=="collapsed"||l,...r})]})):u}function nt({className:t,asChild:a=!1,showOnHover:e=!1,...o}){return w(a?ot:"button",{"data-slot":"sidebar-menu-action","data-sidebar":"menu-action",className:c("astw:text-sidebar-foreground astw:ring-sidebar-ring astw:hover:bg-sidebar-accent astw:hover:text-sidebar-accent-foreground astw:peer-hover/menu-button:text-sidebar-accent-foreground astw:absolute astw:top-1.5 astw:right-1 astw:flex astw:aspect-square astw:w-5 astw:items-center astw:justify-center astw:rounded-md astw:p-0 astw:outline-hidden astw:transition-transform astw:focus-visible:ring-2 astw:[&>svg]:size-4 astw:[&>svg]:shrink-0","astw:after:absolute astw:after:-inset-2 astw:md:after:hidden","astw:peer-data-[size=sm]/menu-button:top-1","astw:peer-data-[size=default]/menu-button:top-1.5","astw:peer-data-[size=lg]/menu-button:top-2.5","astw:group-data-[collapsible=icon]:hidden",e&&"astw:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground astw:group-focus-within/menu-item:opacity-100 astw:group-hover/menu-item:opacity-100 astw:data-[state=open]:opacity-100 astw:md:opacity-0",t),...o})}function Ft({className:t,...a}){return w("ul",{"data-slot":"sidebar-menu-sub","data-sidebar":"menu-sub",className:c("astw:border-sidebar-border astw:mx-3.5 astw:flex astw:min-w-0 astw:translate-x-px astw:flex-col astw:gap-1 astw:border-l astw:px-2.5 astw:py-0.5","astw:group-data-[collapsible=icon]:hidden",t),...a})}function Ht({className:t,...a}){return w("li",{"data-slot":"sidebar-menu-sub-item","data-sidebar":"menu-sub-item",className:c("astw:group/menu-sub-item astw:relative",t),...a})}function Vt({asChild:t=!1,size:a="md",isActive:e=!1,className:o,...r}){return w(t?ot:"a",{"data-slot":"sidebar-menu-sub-button","data-sidebar":"menu-sub-button","data-size":a,"data-active":e,className:c("astw:text-sidebar-foreground astw:ring-sidebar-ring astw:hover:bg-sidebar-accent astw:hover:text-sidebar-accent-foreground astw:active:bg-sidebar-accent astw:active:text-sidebar-accent-foreground astw:[&>svg]:text-sidebar-accent-foreground astw:flex astw:h-7 astw:min-w-0 astw:-translate-x-px astw:items-center astw:gap-2 astw:overflow-hidden astw:rounded-md astw:px-2 astw:outline-hidden astw:focus-visible:ring-2 astw:disabled:pointer-events-none astw:disabled:opacity-50 astw:aria-disabled:pointer-events-none astw:aria-disabled:opacity-50 astw:[&>span:last-child]:truncate astw:[&>svg]:size-4 astw:[&>svg]:shrink-0","astw:data-[active=true]:bg-sidebar-accent astw:data-[active=true]:text-sidebar-accent-foreground",a==="sm"&&"astw:text-xs",a==="md"&&"astw:text-sm","astw:group-data-[collapsible=icon]:hidden",o),...r})}import{ChevronRight as Xt,SunIcon as se}from"lucide-react";import{Slot as ae}from"@radix-ui/react-slot";import{ChevronRight as ee,MoreHorizontal as wo}from"lucide-react";import{Link as Za,useHref as te}from"react-router";import{jsx as Kt}from"react/jsx-runtime";function D({to:t,children:a,...e}){try{return te(t),Kt(Za,{to:t,...e,children:a})}catch{return Kt("a",{href:t,...e,children:a})}}import{jsx as E,jsxs as go}from"react/jsx-runtime";function dt({...t}){return E("nav",{"aria-label":"breadcrumb","data-slot":"breadcrumb",...t})}function lt({className:t,...a}){return E("ol",{"data-slot":"breadcrumb-list",className:c("astw:text-muted-foreground astw:flex astw:flex-wrap astw:items-center astw:gap-1.5 astw:text-sm astw:break-words astw:sm:gap-2.5",t),...a})}function ct({className:t,...a}){return E("li",{"data-slot":"breadcrumb-item",className:c("astw:inline-flex astw:items-center astw:gap-1.5",t),...a})}function wt({asChild:t,className:a,children:e,...o}){return E(t?ae:D,{"data-slot":"breadcrumb-link",className:c("astw:hover:text-foreground astw:transition-colors",a),...o,children:e})}function qt({children:t,className:a,...e}){return E("li",{"data-slot":"breadcrumb-separator",role:"presentation","aria-hidden":"true",className:c("astw:[&>svg]:size-3.5",a),...e,children:t??E(ee,{})})}var re=t=>t.reduce((a,e)=>{a[e.path]={title:e.meta.title,breadcrumbTitle:e.meta.breadcrumbTitle};let o=(r,i)=>{!r||r.length===0||r.forEach(n=>{let s=`${i}/${n.path}`;a[s]={title:n.meta.title,breadcrumbTitle:n.meta.breadcrumbTitle},n.subResources&&n.subResources.length>0&&o(n.subResources,s)})};return e.resources&&e.resources.length>0&&o(e.resources,e.path),a},{});function Gt(t,a,e){let o=t.split("/").filter(s=>s!=="").slice(1),r=a?(()=>{let[s,...l]=o;return l})():o,i=re(e),n=r.map((s,l)=>{let p=r.slice(0,l+1).join("/"),u=i[p];if(!u){let P=Object.entries(i).find(([N])=>{let z=N.split("/").map(W=>W.startsWith(":")?"[^/]+":W).join("/");return new RegExp(`^${z}$`).test(p)})?.[1];P&&(u=P)}let T;return u?typeof u.breadcrumbTitle=="function"?T=u.breadcrumbTitle(s):typeof u.breadcrumbTitle=="string"?T=u.breadcrumbTitle:T=u.title:T=decodeURIComponent(s),{segment:s,path:p,title:T}});return{basePath:a||null,segments:n}}import{Fragment as Yt,jsx as d,jsxs as g}from"react/jsx-runtime";var ie=()=>{let{open:t}=O();return d("div",{className:t?"astw:md:hidden":void 0,children:d(st,{className:"astw:-ml-2.5"})})},ne=t=>{let a=t.children?t.children({Outlet:J}):null,e=Q(),o=()=>{e.setTheme(e.theme==="dark"?"light":"dark")};return d(At,{className:"astw:flex astw:flex-col",children:g("div",{className:"astw:flex astw:flex-1",children:[t.sidebar??d(Qt,{}),g(Ot,{className:"astw:w-[calc(100%-var(--sidebar-width))]",children:[d("header",{className:"astw:flex astw:h-14 astw:shrink-0 astw:items-center astw:gap-2 astw:transition-[width,height] astw:ease-linear astw:group-has-data-[collapsible=icon]/sidebar-wrapper:h-12",children:g("div",{className:"astw:flex astw:w-full astw:items-center astw:justify-between",children:[g("div",{className:"astw:flex astw:items-center astw:gap-2",children:[d(ie,{}),d(le,{})]}),d("div",{className:"astw:flex astw:items-center astw:gap-2",children:d(y,{variant:"outline",size:"icon",onClick:o,children:d(se,{})})})]})}),d("div",{className:"astw:flex astw:flex-col astw:gap-4",children:a??d(J,{})})]})]})})},Qt=t=>{let{title:a,icon:e,navItems:o}=R(),{pathname:r}=Jt(),i=g(Dt,{children:[e,d("h1",{className:"astw:text-sm astw:mb-2 astw:mt-2 astw:px-2",children:a})]});return g(Lt,{variant:"inset",children:[g("div",{className:"astw:flex astw:justify-between astw:items-center",children:[t.header??i,d("div",{className:"astw:hidden astw:md:block",children:d(st,{className:"astw:-ml-1"})})]}),d($t,{children:d(jt,{children:d(Wt,{children:o.map(s=>d(kt,{asChild:!0,defaultOpen:s.isActive,children:g(Ut,{children:[s.url?g(Yt,{children:[d(it,{asChild:!0,tooltip:s.title,children:g(D,{to:s.url,className:s.url===r?"astw:bg-sidebar-accent astw:font-medium":void 0,children:[s.icon,d("span",{children:s.title})]})}),!!s.items?.length&&d(Z,{asChild:!0,children:g(nt,{className:"astw:data-[state=open]:rotate-90",children:[d(Xt,{}),d("span",{className:"astw:sr-only",children:"Toggle"})]})})]}):d(Yt,{children:g(Z,{className:"astw:flex astw:w-[100%] astw:[&[data-state=open]_.astw-rotate-target]:rotate-90",children:[d(it,{asChild:!0,tooltip:s.title,children:g("span",{className:"astw:flex astw:w-[100%]",children:[s.icon,d("span",{children:s.title})]})}),!!s.items?.length&&d(nt,{className:"astw-rotate-target",asChild:!0,children:g("span",{children:[d(Xt,{}),d("span",{className:"astw:sr-only",children:"Toggle"})]})})]})}),!!s.items?.length&&d(Pt,{children:d(Ft,{children:s.items?.map(l=>d(Ht,{children:d(Vt,{asChild:!0,children:d(D,{to:l.url,className:l.url===r?"astw:bg-sidebar-accent astw:font-medium":void 0,children:d("span",{children:l.title})})})},l.title))})})]})},s.title))})})}),t.footer??null]})},de=()=>{let{configurations:t}=R(),a=Jt();return Gt(a.pathname,t.basePath,t.modules)},le=()=>{let{basePath:t,segments:a}=de(),e=oe("/:prefix/settings/:suffix");return e?d(dt,{children:d(lt,{children:d("div",{className:"astw:inline-flex astw:items-center astw:gap-3 astw:last:text-foreground",children:d(ct,{children:d(wt,{to:`/${e.params.prefix}/settings`,children:"Settings"})})})})}):d(dt,{children:d(lt,{children:a.map((o,r)=>g("div",{className:"astw:inline-flex astw:items-center astw:gap-3 astw:last:text-foreground",children:[d(ct,{children:d(wt,{to:C(o.path,t),children:o.title})}),r<a.length-1&&d(qt,{})]},r))})})};import{useLocation as Ko,useNavigate as qo,useParams as Go,useSearchParams as Xo,useRouteError as Yo,Link as Jo}from"react-router";import{createContext as we,useCallback as aa,useContext as pe,useEffect as ue,useMemo as me,useState as ge}from"react";import*as I from"oauth4webapi";var $="oauth_pkce_verifier",j="oauth_state",Zt=({apiEndpoint:t,clientId:a,state:e,codeChallenge:o,redirectUri:r})=>{let i=new URL(`${t}/oauth2/authorize`);return i.searchParams.set("response_type","code"),i.searchParams.set("client_id",a),i.searchParams.set("redirect_uri",r??window.location.origin),i.searchParams.set("scope","openid profile email"),i.searchParams.set("state",e),i.searchParams.set("code_challenge",o),i.searchParams.set("code_challenge_method","S256"),i.toString()},ce=async({code:t,returnedState:a,apiEndpoint:e,clientId:o,redirectUri:r})=>{let i=sessionStorage.getItem($),n=sessionStorage.getItem(j);if(!t||!a||!i||!n){let l=[];throw t||l.push("code"),a||l.push("returnedState"),i||l.push("code_verifier"),n||l.push("expectedState"),new Error(`Missing params: ${l.join(", ")}`)}if(a!==n)throw new Error("State mismatch: possible CSRF attack");let s=new URLSearchParams({grant_type:"authorization_code",client_id:o,code:t,redirect_uri:r??window.location.origin,code_verifier:i});try{let l=await fetch(`${e}/oauth2/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json","X-Tailor-Nonce":crypto.randomUUID()},credentials:"include",body:s.toString()}),{access_token:p}=await l.json();return p}catch(l){throw new Error(`Token exchange failed: ${l instanceof Error?l.message:String(l)}`)}},ta=async()=>{let t=I.generateRandomCodeVerifier(),a=await I.calculatePKCECodeChallenge(t),e=I.generateRandomState();return sessionStorage.setItem($,t),sessionStorage.setItem(j,e),{codeChallenge:a,state:e}},Eo=async({currentUrl:t,apiEndpoint:a,clientId:e,redirectUri:o})=>{try{let r=t.searchParams.get("code"),i=t.searchParams.get("state");await ce({apiEndpoint:a,clientId:e,code:r,returnedState:i,redirectUri:o})}catch(r){console.error(r)}finally{sessionStorage.removeItem($),sessionStorage.removeItem(j),t.searchParams.delete("code"),t.searchParams.delete("state"),t.searchParams.delete("error"),t.searchParams.delete("error_description"),window.history.replaceState({},document.title,t.toString())}};import{jsx as fe}from"react/jsx-runtime";var ea=we(void 0),be=()=>{let t=pe(ea);if(t===void 0)throw new Error("useBuiltinIdpAuth must be used within an BuiltinIdPAuthContextProvider");return t},he=({apiEndpoint:t,clientId:a,redirectUri:e,children:o})=>{let[r,i]=ge(!1),n=aa(async()=>{let{codeChallenge:l,state:p}=await ta(),u=Zt({apiEndpoint:t,clientId:a,codeChallenge:l,state:p,redirectUri:e});window.location.href=u},[t,a,e]);ue(()=>{(async()=>{(await(await fetch(`${t}/query`,{method:"POST",headers:{"Content-Type":"application/json","X-Tailor-Nonce":crypto.randomUUID()},credentials:"include",body:JSON.stringify({query:"query Myself(){ me { id }}"})})).json()).data.me?i(!0):n()})()},[t,n]);let s=aa(async()=>{sessionStorage.removeItem($),sessionStorage.removeItem(j);try{await fetch(`${t}/oauth2/revoke`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","X-Tailor-Nonce":crypto.randomUUID()},credentials:"include",body:""}),window.location.href="/"}catch(l){console.error(l)}},[t]);return fe(ea.Provider,{value:me(()=>({login:n,logout:s}),[n,s]),children:r?o:null})};export{Da as AppShell,he as BuiltinIdPAuthProvider,Qt as DefaultSidebar,Jo as Link,j as OAUTH_STATE_KEY,$ as PKCE_VERIFIER_KEY,ne as SidebarLayoutContainer,Zt as buildAuthorizationUrl,fa as defineModule,va as defineResource,ce as exchangeCodeForToken,Eo as handleOAuthCallback,ta as prepareLogin,ha as redirectToResource,R as useAppShell,be as useBuiltinIdpAuth,Ko as useLocation,qo as useNavigate,Go as useParams,Yo as useRouteError,Xo as useSearchParams,Q as useTheme};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tailor-platform/app-shell",
3
- "version": "0.13.0",
3
+ "version": "0.14.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./styles": "./dist/index.css",
@@ -20,12 +20,11 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@badgateway/oauth2-client": "^3.3.0",
23
- "@hookform/resolvers": "^5.2.2",
24
23
  "@radix-ui/react-checkbox": "^1.1.4",
25
24
  "@radix-ui/react-collapsible": "^1.1.3",
26
25
  "@radix-ui/react-dialog": "^1.1.15",
27
26
  "@radix-ui/react-dropdown-menu": "^2.1.6",
28
- "@radix-ui/react-label": "^2.1.2",
27
+ "@radix-ui/react-label": "^2.1.8",
29
28
  "@radix-ui/react-navigation-menu": "^1.2.5",
30
29
  "@radix-ui/react-popover": "^1.1.6",
31
30
  "@radix-ui/react-select": "^2.1.6",
@@ -38,16 +37,16 @@
38
37
  "change-case": "^5.4.4",
39
38
  "class-variance-authority": "^0.7.1",
40
39
  "clsx": "^2.1.1",
41
- "es-toolkit": "^1.34.1",
40
+ "es-toolkit": "^1.41.0",
42
41
  "lucide-react": "^0.487.0",
43
42
  "next-themes": "^0.4.6",
44
43
  "oauth4webapi": "^3.8.1",
45
- "react": "^19.1.1",
46
- "react-dom": "^19.1.1",
44
+ "react": "^19.2.1",
45
+ "react-dom": "^19.2.1",
47
46
  "react-hook-form": "^7.54.2",
48
47
  "react-router": "^7.4.0",
49
48
  "sonner": "^2.0.7",
50
- "tailwind-merge": "^3.0.1",
49
+ "tailwind-merge": "^3.4.0",
51
50
  "urql": "^5.0.1"
52
51
  },
53
52
  "devDependencies": {
@@ -62,7 +61,7 @@
62
61
  "prettier": "^3.6.2",
63
62
  "tailwindcss": "^4.1.3",
64
63
  "tsup": "^8.3.6",
65
- "tw-animate-css": "^1.2.5",
64
+ "tw-animate-css": "^1.4.0",
66
65
  "typescript": "^5",
67
66
  "vite-tsconfig-paths": "^5.1.4",
68
67
  "vitest": "^3.1.1"