@betterinternship/components 1.3.1 → 1.3.3

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.esm.js CHANGED
@@ -1,3 +1,37 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import React__default, { useState, useRef } from 'react';
4
+
5
+ function styleInject(css, ref) {
6
+ if ( ref === void 0 ) ref = {};
7
+ var insertAt = ref.insertAt;
8
+
9
+ if (typeof document === 'undefined') { return; }
10
+
11
+ var head = document.head || document.getElementsByTagName('head')[0];
12
+ var style = document.createElement('style');
13
+ style.type = 'text/css';
14
+
15
+ if (insertAt === 'top') {
16
+ if (head.firstChild) {
17
+ head.insertBefore(style, head.firstChild);
18
+ } else {
19
+ head.appendChild(style);
20
+ }
21
+ } else {
22
+ head.appendChild(style);
23
+ }
24
+
25
+ if (style.styleSheet) {
26
+ style.styleSheet.cssText = css;
27
+ } else {
28
+ style.appendChild(document.createTextNode(css));
29
+ }
30
+ }
31
+
32
+ var css_248z = "/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer theme, base, components, utilities;@layer theme{:host,:root{--font-sans:var(--font-geist-sans);--font-mono:var(--font-geist-mono);--color-red-50:oklch(97.1% 0.013 17.38);--color-green-50:oklch(98.2% 0.018 155.826);--color-blue-50:oklch(97% 0.014 254.604);--color-slate-800:oklch(27.9% 0.041 260.031);--color-gray-50:oklch(98.5% 0.002 247.839);--color-gray-300:oklch(87.2% 0.01 258.338);--color-gray-700:oklch(37.3% 0.034 259.733);--color-white:#fff;--spacing:0.25rem;--text-xs:0.75rem;--text-xs--line-height:1.33333;--text-sm:0.875rem;--text-sm--line-height:1.42857;--text-2xl:1.5rem;--text-2xl--line-height:1.33333;--font-weight-medium:500;--radius-sm:calc(var(--radius) - 4px);--radius-lg:var(--radius);--default-transition-duration:150ms;--default-transition-timing-function:cubic-bezier(0.4,0,0.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-background:var(--background);--color-foreground:var(--foreground);--color-ring:var(--ring);--color-border:var(--border);--color-destructive:var(--destructive);--color-destructive-foreground:var(--destructive-foreground);--color-supportive:var(--supportive);--color-supportive-foreground:var(--supportive-foreground);--color-accent-foreground:var(--accent-foreground);--color-accent:var(--accent);--color-secondary-foreground:var(--secondary-foreground);--color-secondary:var(--secondary);--color-primary-foreground:var(--primary-foreground);--color-primary:var(--primary)}}@layer base{*,::backdrop,::file-selector-button,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:var(--default-font-feature-settings,normal);-webkit-tap-highlight-color:transparent;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-variation-settings:var(--default-font-variation-settings,normal);line-height:1.5;tab-size:4}hr{border-top-width:1px;color:inherit;height:0}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,pre,samp{font-feature-settings:var(--default-mono-font-feature-settings,normal);font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}::file-selector-button,button,input,optgroup,select,textarea{font-feature-settings:inherit;background-color:transparent;border-radius:0;color:inherit;font:inherit;font-variation-settings:inherit;letter-spacing:inherit;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-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}::file-selector-button,button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{border-width:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.not-sr-only{clip-path:none;height:auto;margin:0;overflow:visible;padding:0;position:static;white-space:normal;width:auto}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.-inset-1{inset:calc(var(--spacing)*-1)}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.container{width:100%;@media (width >= 40rem){max-width:40rem}@media (width >= 48rem){max-width:48rem}@media (width >= 64rem){max-width:64rem}@media (width >= 80rem){max-width:80rem}@media (width >= 96rem){max-width:96rem}}.mb-4{margin-bottom:calc(var(--spacing)*4)}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.w-10{width:calc(var(--spacing)*10)}.shrink{flex-shrink:1}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.translate-none{translate:none}.scale-3d{scale:var(--tw-scale-x) var(--tw-scale-y) var(--tw-scale-z)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.touch-pinch-zoom{--tw-pinch-zoom:pinch-zoom;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.resize{resize:both}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing)*2)}.space-y-reverse{:where(&>:not(:last-child)){--tw-space-y-reverse:1}}.space-x-reverse{:where(&>:not(:last-child)){--tw-space-x-reverse:1}}.divide-x{:where(&>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-end-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-style:var(--tw-border-style)}}.divide-y{:where(&>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}}.divide-y-reverse{:where(&>:not(:last-child)){--tw-divide-y-reverse:1}}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.rounded-\\[0\\.33em\\]{border-radius:.33em}.rounded-s{border-end-start-radius:.25rem}.rounded-s,.rounded-ss{border-start-start-radius:.25rem}.rounded-e{border-end-end-radius:.25rem}.rounded-e,.rounded-se{border-start-end-radius:.25rem}.rounded-ee{border-end-end-radius:.25rem}.rounded-es{border-end-start-radius:.25rem}.rounded-t{border-top-right-radius:.25rem}.rounded-l,.rounded-t{border-top-left-radius:.25rem}.rounded-l{border-bottom-left-radius:.25rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-r{border-bottom-right-radius:.25rem}.rounded-r,.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-left-radius:.25rem}.rounded-b,.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-destructive{border-color:var(--color-destructive)}.border-gray-300{border-color:var(--color-gray-300)}.border-primary{border-color:var(--color-primary)}.border-supportive{border-color:var(--color-supportive)}.bg-background{background-color:var(--color-background)}.bg-destructive{background-color:var(--color-destructive)}.bg-primary{background-color:var(--color-primary)}.bg-secondary{background-color:var(--color-secondary)}.bg-supportive{background-color:var(--color-supportive)}.bg-repeat{background-repeat:repeat}.mask-no-clip{mask-clip:no-clip}.mask-repeat{mask-repeat:repeat}.p-10{padding:calc(var(--spacing)*10)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-\\[1em\\]{padding-inline:1em}.py-\\[0\\.33em\\]{padding-block:.33em}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.text-wrap{text-wrap:wrap}.text-clip{text-overflow:clip}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.text-destructive{color:var(--color-destructive)}.text-destructive-foreground{color:var(--color-destructive-foreground)}.text-gray-700{color:var(--color-gray-700)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-supportive{color:var(--color-supportive)}.text-supportive-foreground{color:var(--color-supportive-foreground)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.diagonal-fractions{--tw-numeric-fraction:diagonal-fractions}.diagonal-fractions,.lining-nums{font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.lining-nums{--tw-numeric-figure:lining-nums}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums}.oldstyle-nums,.ordinal{font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.ordinal{--tw-ordinal:ordinal}.proportional-nums{--tw-numeric-spacing:proportional-nums}.proportional-nums,.slashed-zero{font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.slashed-zero{--tw-slashed-zero:slashed-zero}.stacked-fractions{--tw-numeric-fraction:stacked-fractions}.stacked-fractions,.tabular-nums{font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums}.normal-nums{font-variant-numeric:normal}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1))}.ring,.shadow{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px)}.blur,.drop-shadow{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,rgba(0,0,0,.1))) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,rgba(0,0,0,.06)));--tw-drop-shadow:drop-shadow(0 1px 2px rgba(0,0,0,.1)) drop-shadow(0 1px 1px rgba(0,0,0,.06))}.grayscale{--tw-grayscale:grayscale(100%)}.grayscale,.invert{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%)}.sepia{--tw-sepia:sepia(100%)}.filter,.sepia{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-grayscale{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%)}.backdrop-invert{--tw-backdrop-invert:invert(100%)}.backdrop-invert,.backdrop-sepia{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-colors{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.divide-x-reverse{:where(&>:not(:last-child)){--tw-divide-x-reverse:1}}.paused{animation-play-state:paused}.ring-inset{--tw-ring-inset:inset}.running{animation-play-state:running}.zoom-in{--tw-enter-scale:0}.zoom-out{--tw-exit-scale:0}.hover\\:bg-accent{&:hover{@media (hover:hover){background-color:var(--color-accent)}}}.hover\\:bg-blue-50{&:hover{@media (hover:hover){background-color:var(--color-blue-50)}}}.hover\\:bg-destructive\\/90{&:hover{@media (hover:hover){background-color:var(--color-destructive);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-destructive) 90%,transparent)}}}}.hover\\:bg-green-50{&:hover{@media (hover:hover){background-color:var(--color-green-50)}}}.hover\\:bg-primary\\/90{&:hover{@media (hover:hover){background-color:var(--color-primary);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-primary) 90%,transparent)}}}}.hover\\:bg-red-50{&:hover{@media (hover:hover){background-color:var(--color-red-50)}}}.hover\\:bg-secondary\\/80{&:hover{@media (hover:hover){background-color:var(--color-secondary);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-secondary) 80%,transparent)}}}}.hover\\:bg-supportive\\/90{&:hover{@media (hover:hover){background-color:var(--color-supportive);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-supportive) 90%,transparent)}}}}.hover\\:text-accent-foreground{&:hover{@media (hover:hover){color:var(--color-accent-foreground)}}}.hover\\:underline{&:hover{@media (hover:hover){text-decoration-line:underline}}}.focus\\:ring-transparent{&:focus{--tw-ring-color:transparent}}.focus\\:outline-none{&:focus{--tw-outline-style:none;outline-style:none}}.disabled\\:pointer-events-none{&:disabled{pointer-events:none}}.disabled\\:opacity-50{&:disabled{opacity:50%}}.\\[\\&_svg\\]\\:pointer-events-none{& svg{pointer-events:none}}.\\[\\&_svg\\]\\:size-4{& svg{height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}}.\\[\\&_svg\\]\\:shrink-0{& svg{flex-shrink:0}}}@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{--radius:0.625rem;--background:oklch(1 0 0);--foreground:oklch(0.145 0 0);--card:oklch(1 0 0);--card-foreground:oklch(0.145 0 0);--popover:oklch(1 0 0);--popover-foreground:oklch(0.145 0 0);--primary:oklch(0.441 0.122 251);--primary-foreground:oklch(0.984 0.003 210);--supportive:oklch(0.663 0.137 137);--supportive-foreground:oklch(0.984 0.003 210);--secondary:oklch(0.208 0.04 266);--secondary-foreground:oklch(0.968 0.007 210);--muted:oklch(0.968 0.007 210);--muted-foreground:oklch(0.554 0.041 257);--warning:oklch(0.731 0.144 64);--warning-foreground:oklch(0.968 0.007 210);--accent:oklch(0.97 0 0);--accent-foreground:oklch(0.205 0 0);--destructive:oklch(0.64 0.218 29);--destructive-foreground:oklch(0.984 0.003 210);--border:oklch(0.922 0 0);--input:oklch(0.922 0 0);--ring:oklch(0.708 0 0);--chart-1:oklch(0.646 0.222 41.116);--chart-2:oklch(0.6 0.118 184.704);--chart-3:oklch(0.398 0.07 227.392);--chart-4:oklch(0.828 0.189 84.429);--chart-5:oklch(0.769 0.188 70.08);--sidebar:oklch(0.985 0 0);--sidebar-foreground:oklch(0.145 0 0);--sidebar-primary:oklch(0.205 0 0);--sidebar-primary-foreground:oklch(0.985 0 0);--sidebar-accent:oklch(0.97 0 0);--sidebar-accent-foreground:oklch(0.205 0 0);--sidebar-border:oklch(0.922 0 0);--sidebar-ring:oklch(0.708 0 0)}/*! add in missing dark mode styles from above OR no dark mode at all (who tf over 30 needs it)*/.dark{--background:oklch(0.145 0 0);--foreground:oklch(0.985 0 0);--card:oklch(0.205 0 0);--card-foreground:oklch(0.985 0 0);--popover:oklch(0.205 0 0);--popover-foreground:oklch(0.985 0 0);--primary:oklch(0.922 0 0);--primary-foreground:oklch(0.205 0 0);--secondary:oklch(0.269 0 0);--secondary-foreground:oklch(0.985 0 0);--muted:oklch(0.269 0 0);--muted-foreground:oklch(0.708 0 0);--accent:oklch(0.269 0 0);--accent-foreground:oklch(0.985 0 0);--destructive:oklch(0.704 0.191 22.216);--border:oklch(1 0 0/10%);--input:oklch(1 0 0/15%);--ring:oklch(0.556 0 0);--chart-1:oklch(0.488 0.243 264.376);--chart-2:oklch(0.696 0.17 162.48);--chart-3:oklch(0.769 0.188 70.08);--chart-4:oklch(0.627 0.265 303.9);--chart-5:oklch(0.645 0.246 16.439);--sidebar:oklch(0.205 0 0);--sidebar-foreground:oklch(0.985 0 0);--sidebar-primary:oklch(0.488 0.243 264.376);--sidebar-primary-foreground:oklch(0.985 0 0);--sidebar-accent:oklch(0.269 0 0);--sidebar-accent-foreground:oklch(0.985 0 0);--sidebar-border:oklch(1 0 0/10%);--sidebar-ring:oklch(0.556 0 0)}@layer base{*{border-color:var(--color-border);outline-color:var(--color-ring);@supports (color:color-mix(in lab,red,red)){outline-color:color-mix(in oklab,var(--color-ring) 50%,transparent)}}body{background-color:var(--color-background);color:var(--color-foreground)}a{--tw-duration:200ms;border-radius:var(--radius-sm);color:var(--color-primary);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-duration:.2s;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));&:hover{@media (hover:hover){color:var(--color-primary);@supports (color:color-mix(in lab,red,red)){color:color-mix(in oklab,var(--color-primary) 80%,transparent)}}}&:focus{--tw-outline-style:none;outline-style:none}}}@layer components{.bi-card{background-color:var(--color-white);border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;padding:calc(var(--spacing)*6);&:is(.dark *){border-color:var(--color-slate-800)}&:is(.dark *){background-color:var(--color-red-50)}}.bi-card-interactive{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));&:hover{@media (hover:hover){background-color:var(--color-gray-50)}}&:is(.dark *){&:hover{@media (hover:hover){background-color:color-mix(in srgb,oklch(27.9% .041 260.031) 60%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-slate-800) 60%,transparent)}}}}}}body{height:100vh;margin:0;padding:0;width:100vw}html{overflow:hidden}*{box-sizing:border-box}@layer utilities{.pb-safe{padding-bottom:env(safe-area-inset-bottom)}.pt-safe{padding-top:env(safe-area-inset-top)}.pl-safe{padding-left:env(safe-area-inset-left)}.pr-safe{padding-right:env(safe-area-inset-right)}.webkit-overflow-scrolling-touch{-webkit-overflow-scrolling:touch}}.input-wrap{align-items:center;display:flex;height:40px}.input-wrap input{font-size:14px}.input-wrap input:focus{font-size:16px}@layer base{@media (max-width:639.98px){input:focus,select:focus,textarea:focus{font-size:1rem}}}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-pan-x{syntax:\"*\";inherits:false}@property --tw-pan-y{syntax:\"*\";inherits:false}@property --tw-pinch-zoom{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-ordinal{syntax:\"*\";inherits:false}@property --tw-slashed-zero{syntax:\"*\";inherits:false}@property --tw-numeric-figure{syntax:\"*\";inherits:false}@property --tw-numeric-spacing{syntax:\"*\";inherits:false}@property --tw-numeric-fraction{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-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;--tw-duration:initial}}}";
33
+ styleInject(css_248z,{"insertAt":"top"});
34
+
1
35
  let config = {
2
36
  orchestratorApi: '',
3
37
  };
@@ -5,5 +39,4405 @@ const configure = (newConfig) => {
5
39
  config = { ...config, ...newConfig };
6
40
  };
7
41
 
8
- export { config, configure };
42
+ // packages/react/compose-refs/src/compose-refs.tsx
43
+ function setRef(ref, value) {
44
+ if (typeof ref === "function") {
45
+ return ref(value);
46
+ } else if (ref !== null && ref !== void 0) {
47
+ ref.current = value;
48
+ }
49
+ }
50
+ function composeRefs(...refs) {
51
+ return (node) => {
52
+ let hasCleanup = false;
53
+ const cleanups = refs.map((ref) => {
54
+ const cleanup = setRef(ref, node);
55
+ if (!hasCleanup && typeof cleanup == "function") {
56
+ hasCleanup = true;
57
+ }
58
+ return cleanup;
59
+ });
60
+ if (hasCleanup) {
61
+ return () => {
62
+ for (let i = 0; i < cleanups.length; i++) {
63
+ const cleanup = cleanups[i];
64
+ if (typeof cleanup == "function") {
65
+ cleanup();
66
+ } else {
67
+ setRef(refs[i], null);
68
+ }
69
+ }
70
+ };
71
+ }
72
+ };
73
+ }
74
+
75
+ // src/slot.tsx
76
+ var REACT_LAZY_TYPE = Symbol.for("react.lazy");
77
+ var use = React[" use ".trim().toString()];
78
+ function isPromiseLike(value) {
79
+ return typeof value === "object" && value !== null && "then" in value;
80
+ }
81
+ function isLazyComponent(element) {
82
+ return element != null && typeof element === "object" && "$$typeof" in element && element.$$typeof === REACT_LAZY_TYPE && "_payload" in element && isPromiseLike(element._payload);
83
+ }
84
+ // @__NO_SIDE_EFFECTS__
85
+ function createSlot(ownerName) {
86
+ const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);
87
+ const Slot2 = React.forwardRef((props, forwardedRef) => {
88
+ let { children, ...slotProps } = props;
89
+ if (isLazyComponent(children) && typeof use === "function") {
90
+ children = use(children._payload);
91
+ }
92
+ const childrenArray = React.Children.toArray(children);
93
+ const slottable = childrenArray.find(isSlottable);
94
+ if (slottable) {
95
+ const newElement = slottable.props.children;
96
+ const newChildren = childrenArray.map((child) => {
97
+ if (child === slottable) {
98
+ if (React.Children.count(newElement) > 1) return React.Children.only(null);
99
+ return React.isValidElement(newElement) ? newElement.props.children : null;
100
+ } else {
101
+ return child;
102
+ }
103
+ });
104
+ return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });
105
+ }
106
+ return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });
107
+ });
108
+ Slot2.displayName = `${ownerName}.Slot`;
109
+ return Slot2;
110
+ }
111
+ var Slot = /* @__PURE__ */ createSlot("Slot");
112
+ // @__NO_SIDE_EFFECTS__
113
+ function createSlotClone(ownerName) {
114
+ const SlotClone = React.forwardRef((props, forwardedRef) => {
115
+ let { children, ...slotProps } = props;
116
+ if (isLazyComponent(children) && typeof use === "function") {
117
+ children = use(children._payload);
118
+ }
119
+ if (React.isValidElement(children)) {
120
+ const childrenRef = getElementRef(children);
121
+ const props2 = mergeProps(slotProps, children.props);
122
+ if (children.type !== React.Fragment) {
123
+ props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;
124
+ }
125
+ return React.cloneElement(children, props2);
126
+ }
127
+ return React.Children.count(children) > 1 ? React.Children.only(null) : null;
128
+ });
129
+ SlotClone.displayName = `${ownerName}.SlotClone`;
130
+ return SlotClone;
131
+ }
132
+ var SLOTTABLE_IDENTIFIER = Symbol("radix.slottable");
133
+ function isSlottable(child) {
134
+ return React.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;
135
+ }
136
+ function mergeProps(slotProps, childProps) {
137
+ const overrideProps = { ...childProps };
138
+ for (const propName in childProps) {
139
+ const slotPropValue = slotProps[propName];
140
+ const childPropValue = childProps[propName];
141
+ const isHandler = /^on[A-Z]/.test(propName);
142
+ if (isHandler) {
143
+ if (slotPropValue && childPropValue) {
144
+ overrideProps[propName] = (...args) => {
145
+ const result = childPropValue(...args);
146
+ slotPropValue(...args);
147
+ return result;
148
+ };
149
+ } else if (slotPropValue) {
150
+ overrideProps[propName] = slotPropValue;
151
+ }
152
+ } else if (propName === "style") {
153
+ overrideProps[propName] = { ...slotPropValue, ...childPropValue };
154
+ } else if (propName === "className") {
155
+ overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" ");
156
+ }
157
+ }
158
+ return { ...slotProps, ...overrideProps };
159
+ }
160
+ function getElementRef(element) {
161
+ let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
162
+ let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
163
+ if (mayWarn) {
164
+ return element.ref;
165
+ }
166
+ getter = Object.getOwnPropertyDescriptor(element, "ref")?.get;
167
+ mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
168
+ if (mayWarn) {
169
+ return element.props.ref;
170
+ }
171
+ return element.props.ref || element.ref;
172
+ }
173
+
174
+ function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}
175
+
176
+ const falsyToString = (value)=>typeof value === "boolean" ? `${value}` : value === 0 ? "0" : value;
177
+ const cx = clsx;
178
+ const cva = (base, config)=>(props)=>{
179
+ var _config_compoundVariants;
180
+ if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);
181
+ const { variants, defaultVariants } = config;
182
+ const getVariantClassNames = Object.keys(variants).map((variant)=>{
183
+ const variantProp = props === null || props === void 0 ? void 0 : props[variant];
184
+ const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];
185
+ if (variantProp === null) return null;
186
+ const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);
187
+ return variants[variant][variantKey];
188
+ });
189
+ const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{
190
+ let [key, value] = param;
191
+ if (value === undefined) {
192
+ return acc;
193
+ }
194
+ acc[key] = value;
195
+ return acc;
196
+ }, {});
197
+ const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{
198
+ let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;
199
+ return Object.entries(compoundVariantOptions).every((param)=>{
200
+ let [key, value] = param;
201
+ return Array.isArray(value) ? value.includes({
202
+ ...defaultVariants,
203
+ ...propsWithoutUndefined
204
+ }[key]) : ({
205
+ ...defaultVariants,
206
+ ...propsWithoutUndefined
207
+ })[key] === value;
208
+ }) ? [
209
+ ...acc,
210
+ cvClass,
211
+ cvClassName
212
+ ] : acc;
213
+ }, []);
214
+ return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);
215
+ };
216
+
217
+ /**
218
+ * Concatenates two arrays faster than the array spread operator.
219
+ */
220
+ const concatArrays = (array1, array2) => {
221
+ // Pre-allocate for better V8 optimization
222
+ const combinedArray = new Array(array1.length + array2.length);
223
+ for (let i = 0; i < array1.length; i++) {
224
+ combinedArray[i] = array1[i];
225
+ }
226
+ for (let i = 0; i < array2.length; i++) {
227
+ combinedArray[array1.length + i] = array2[i];
228
+ }
229
+ return combinedArray;
230
+ };
231
+
232
+ // Factory function ensures consistent object shapes
233
+ const createClassValidatorObject = (classGroupId, validator) => ({
234
+ classGroupId,
235
+ validator
236
+ });
237
+ // Factory ensures consistent ClassPartObject shape
238
+ const createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({
239
+ nextPart,
240
+ validators,
241
+ classGroupId
242
+ });
243
+ const CLASS_PART_SEPARATOR = '-';
244
+ const EMPTY_CONFLICTS = [];
245
+ // I use two dots here because one dot is used as prefix for class groups in plugins
246
+ const ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';
247
+ const createClassGroupUtils = config => {
248
+ const classMap = createClassMap(config);
249
+ const {
250
+ conflictingClassGroups,
251
+ conflictingClassGroupModifiers
252
+ } = config;
253
+ const getClassGroupId = className => {
254
+ if (className.startsWith('[') && className.endsWith(']')) {
255
+ return getGroupIdForArbitraryProperty(className);
256
+ }
257
+ const classParts = className.split(CLASS_PART_SEPARATOR);
258
+ // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.
259
+ const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;
260
+ return getGroupRecursive(classParts, startIndex, classMap);
261
+ };
262
+ const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {
263
+ if (hasPostfixModifier) {
264
+ const modifierConflicts = conflictingClassGroupModifiers[classGroupId];
265
+ const baseConflicts = conflictingClassGroups[classGroupId];
266
+ if (modifierConflicts) {
267
+ if (baseConflicts) {
268
+ // Merge base conflicts with modifier conflicts
269
+ return concatArrays(baseConflicts, modifierConflicts);
270
+ }
271
+ // Only modifier conflicts
272
+ return modifierConflicts;
273
+ }
274
+ // Fall back to without postfix if no modifier conflicts
275
+ return baseConflicts || EMPTY_CONFLICTS;
276
+ }
277
+ return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;
278
+ };
279
+ return {
280
+ getClassGroupId,
281
+ getConflictingClassGroupIds
282
+ };
283
+ };
284
+ const getGroupRecursive = (classParts, startIndex, classPartObject) => {
285
+ const classPathsLength = classParts.length - startIndex;
286
+ if (classPathsLength === 0) {
287
+ return classPartObject.classGroupId;
288
+ }
289
+ const currentClassPart = classParts[startIndex];
290
+ const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);
291
+ if (nextClassPartObject) {
292
+ const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);
293
+ if (result) return result;
294
+ }
295
+ const validators = classPartObject.validators;
296
+ if (validators === null) {
297
+ return undefined;
298
+ }
299
+ // Build classRest string efficiently by joining from startIndex onwards
300
+ const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);
301
+ const validatorsLength = validators.length;
302
+ for (let i = 0; i < validatorsLength; i++) {
303
+ const validatorObj = validators[i];
304
+ if (validatorObj.validator(classRest)) {
305
+ return validatorObj.classGroupId;
306
+ }
307
+ }
308
+ return undefined;
309
+ };
310
+ /**
311
+ * Get the class group ID for an arbitrary property.
312
+ *
313
+ * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.
314
+ */
315
+ const getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {
316
+ const content = className.slice(1, -1);
317
+ const colonIndex = content.indexOf(':');
318
+ const property = content.slice(0, colonIndex);
319
+ return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;
320
+ })();
321
+ /**
322
+ * Exported for testing only
323
+ */
324
+ const createClassMap = config => {
325
+ const {
326
+ theme,
327
+ classGroups
328
+ } = config;
329
+ return processClassGroups(classGroups, theme);
330
+ };
331
+ // Split into separate functions to maintain monomorphic call sites
332
+ const processClassGroups = (classGroups, theme) => {
333
+ const classMap = createClassPartObject();
334
+ for (const classGroupId in classGroups) {
335
+ const group = classGroups[classGroupId];
336
+ processClassesRecursively(group, classMap, classGroupId, theme);
337
+ }
338
+ return classMap;
339
+ };
340
+ const processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {
341
+ const len = classGroup.length;
342
+ for (let i = 0; i < len; i++) {
343
+ const classDefinition = classGroup[i];
344
+ processClassDefinition(classDefinition, classPartObject, classGroupId, theme);
345
+ }
346
+ };
347
+ // Split into separate functions for each type to maintain monomorphic call sites
348
+ const processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
349
+ if (typeof classDefinition === 'string') {
350
+ processStringDefinition(classDefinition, classPartObject, classGroupId);
351
+ return;
352
+ }
353
+ if (typeof classDefinition === 'function') {
354
+ processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);
355
+ return;
356
+ }
357
+ processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);
358
+ };
359
+ const processStringDefinition = (classDefinition, classPartObject, classGroupId) => {
360
+ const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);
361
+ classPartObjectToEdit.classGroupId = classGroupId;
362
+ };
363
+ const processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
364
+ if (isThemeGetter(classDefinition)) {
365
+ processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);
366
+ return;
367
+ }
368
+ if (classPartObject.validators === null) {
369
+ classPartObject.validators = [];
370
+ }
371
+ classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));
372
+ };
373
+ const processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
374
+ const entries = Object.entries(classDefinition);
375
+ const len = entries.length;
376
+ for (let i = 0; i < len; i++) {
377
+ const [key, value] = entries[i];
378
+ processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);
379
+ }
380
+ };
381
+ const getPart = (classPartObject, path) => {
382
+ let current = classPartObject;
383
+ const parts = path.split(CLASS_PART_SEPARATOR);
384
+ const len = parts.length;
385
+ for (let i = 0; i < len; i++) {
386
+ const part = parts[i];
387
+ let next = current.nextPart.get(part);
388
+ if (!next) {
389
+ next = createClassPartObject();
390
+ current.nextPart.set(part, next);
391
+ }
392
+ current = next;
393
+ }
394
+ return current;
395
+ };
396
+ // Type guard maintains monomorphic check
397
+ const isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;
398
+
399
+ // LRU cache implementation using plain objects for simplicity
400
+ const createLruCache = maxCacheSize => {
401
+ if (maxCacheSize < 1) {
402
+ return {
403
+ get: () => undefined,
404
+ set: () => {}
405
+ };
406
+ }
407
+ let cacheSize = 0;
408
+ let cache = Object.create(null);
409
+ let previousCache = Object.create(null);
410
+ const update = (key, value) => {
411
+ cache[key] = value;
412
+ cacheSize++;
413
+ if (cacheSize > maxCacheSize) {
414
+ cacheSize = 0;
415
+ previousCache = cache;
416
+ cache = Object.create(null);
417
+ }
418
+ };
419
+ return {
420
+ get(key) {
421
+ let value = cache[key];
422
+ if (value !== undefined) {
423
+ return value;
424
+ }
425
+ if ((value = previousCache[key]) !== undefined) {
426
+ update(key, value);
427
+ return value;
428
+ }
429
+ },
430
+ set(key, value) {
431
+ if (key in cache) {
432
+ cache[key] = value;
433
+ } else {
434
+ update(key, value);
435
+ }
436
+ }
437
+ };
438
+ };
439
+ const IMPORTANT_MODIFIER = '!';
440
+ const MODIFIER_SEPARATOR = ':';
441
+ const EMPTY_MODIFIERS = [];
442
+ // Pre-allocated result object shape for consistency
443
+ const createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({
444
+ modifiers,
445
+ hasImportantModifier,
446
+ baseClassName,
447
+ maybePostfixModifierPosition,
448
+ isExternal
449
+ });
450
+ const createParseClassName = config => {
451
+ const {
452
+ prefix,
453
+ experimentalParseClassName
454
+ } = config;
455
+ /**
456
+ * Parse class name into parts.
457
+ *
458
+ * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS
459
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js
460
+ */
461
+ let parseClassName = className => {
462
+ // Use simple array with push for better performance
463
+ const modifiers = [];
464
+ let bracketDepth = 0;
465
+ let parenDepth = 0;
466
+ let modifierStart = 0;
467
+ let postfixModifierPosition;
468
+ const len = className.length;
469
+ for (let index = 0; index < len; index++) {
470
+ const currentCharacter = className[index];
471
+ if (bracketDepth === 0 && parenDepth === 0) {
472
+ if (currentCharacter === MODIFIER_SEPARATOR) {
473
+ modifiers.push(className.slice(modifierStart, index));
474
+ modifierStart = index + 1;
475
+ continue;
476
+ }
477
+ if (currentCharacter === '/') {
478
+ postfixModifierPosition = index;
479
+ continue;
480
+ }
481
+ }
482
+ if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;
483
+ }
484
+ const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);
485
+ // Inline important modifier check
486
+ let baseClassName = baseClassNameWithImportantModifier;
487
+ let hasImportantModifier = false;
488
+ if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {
489
+ baseClassName = baseClassNameWithImportantModifier.slice(0, -1);
490
+ hasImportantModifier = true;
491
+ } else if (
492
+ /**
493
+ * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.
494
+ * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864
495
+ */
496
+ baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {
497
+ baseClassName = baseClassNameWithImportantModifier.slice(1);
498
+ hasImportantModifier = true;
499
+ }
500
+ const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;
501
+ return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);
502
+ };
503
+ if (prefix) {
504
+ const fullPrefix = prefix + MODIFIER_SEPARATOR;
505
+ const parseClassNameOriginal = parseClassName;
506
+ parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);
507
+ }
508
+ if (experimentalParseClassName) {
509
+ const parseClassNameOriginal = parseClassName;
510
+ parseClassName = className => experimentalParseClassName({
511
+ className,
512
+ parseClassName: parseClassNameOriginal
513
+ });
514
+ }
515
+ return parseClassName;
516
+ };
517
+
518
+ /**
519
+ * Sorts modifiers according to following schema:
520
+ * - Predefined modifiers are sorted alphabetically
521
+ * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it
522
+ */
523
+ const createSortModifiers = config => {
524
+ // Pre-compute weights for all known modifiers for O(1) comparison
525
+ const modifierWeights = new Map();
526
+ // Assign weights to sensitive modifiers (highest priority, but preserve order)
527
+ config.orderSensitiveModifiers.forEach((mod, index) => {
528
+ modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods
529
+ });
530
+ return modifiers => {
531
+ const result = [];
532
+ let currentSegment = [];
533
+ // Process modifiers in one pass
534
+ for (let i = 0; i < modifiers.length; i++) {
535
+ const modifier = modifiers[i];
536
+ // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)
537
+ const isArbitrary = modifier[0] === '[';
538
+ const isOrderSensitive = modifierWeights.has(modifier);
539
+ if (isArbitrary || isOrderSensitive) {
540
+ // Sort and flush current segment alphabetically
541
+ if (currentSegment.length > 0) {
542
+ currentSegment.sort();
543
+ result.push(...currentSegment);
544
+ currentSegment = [];
545
+ }
546
+ result.push(modifier);
547
+ } else {
548
+ // Regular modifier - add to current segment for batch sorting
549
+ currentSegment.push(modifier);
550
+ }
551
+ }
552
+ // Sort and add any remaining segment items
553
+ if (currentSegment.length > 0) {
554
+ currentSegment.sort();
555
+ result.push(...currentSegment);
556
+ }
557
+ return result;
558
+ };
559
+ };
560
+ const createConfigUtils = config => ({
561
+ cache: createLruCache(config.cacheSize),
562
+ parseClassName: createParseClassName(config),
563
+ sortModifiers: createSortModifiers(config),
564
+ ...createClassGroupUtils(config)
565
+ });
566
+ const SPLIT_CLASSES_REGEX = /\s+/;
567
+ const mergeClassList = (classList, configUtils) => {
568
+ const {
569
+ parseClassName,
570
+ getClassGroupId,
571
+ getConflictingClassGroupIds,
572
+ sortModifiers
573
+ } = configUtils;
574
+ /**
575
+ * Set of classGroupIds in following format:
576
+ * `{importantModifier}{variantModifiers}{classGroupId}`
577
+ * @example 'float'
578
+ * @example 'hover:focus:bg-color'
579
+ * @example 'md:!pr'
580
+ */
581
+ const classGroupsInConflict = [];
582
+ const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);
583
+ let result = '';
584
+ for (let index = classNames.length - 1; index >= 0; index -= 1) {
585
+ const originalClassName = classNames[index];
586
+ const {
587
+ isExternal,
588
+ modifiers,
589
+ hasImportantModifier,
590
+ baseClassName,
591
+ maybePostfixModifierPosition
592
+ } = parseClassName(originalClassName);
593
+ if (isExternal) {
594
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
595
+ continue;
596
+ }
597
+ let hasPostfixModifier = !!maybePostfixModifierPosition;
598
+ let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);
599
+ if (!classGroupId) {
600
+ if (!hasPostfixModifier) {
601
+ // Not a Tailwind class
602
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
603
+ continue;
604
+ }
605
+ classGroupId = getClassGroupId(baseClassName);
606
+ if (!classGroupId) {
607
+ // Not a Tailwind class
608
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
609
+ continue;
610
+ }
611
+ hasPostfixModifier = false;
612
+ }
613
+ // Fast path: skip sorting for empty or single modifier
614
+ const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');
615
+ const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;
616
+ const classId = modifierId + classGroupId;
617
+ if (classGroupsInConflict.indexOf(classId) > -1) {
618
+ // Tailwind class omitted due to conflict
619
+ continue;
620
+ }
621
+ classGroupsInConflict.push(classId);
622
+ const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);
623
+ for (let i = 0; i < conflictGroups.length; ++i) {
624
+ const group = conflictGroups[i];
625
+ classGroupsInConflict.push(modifierId + group);
626
+ }
627
+ // Tailwind class not in conflict
628
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
629
+ }
630
+ return result;
631
+ };
632
+
633
+ /**
634
+ * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.
635
+ *
636
+ * Specifically:
637
+ * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js
638
+ * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts
639
+ *
640
+ * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)
641
+ */
642
+ const twJoin = (...classLists) => {
643
+ let index = 0;
644
+ let argument;
645
+ let resolvedValue;
646
+ let string = '';
647
+ while (index < classLists.length) {
648
+ if (argument = classLists[index++]) {
649
+ if (resolvedValue = toValue(argument)) {
650
+ string && (string += ' ');
651
+ string += resolvedValue;
652
+ }
653
+ }
654
+ }
655
+ return string;
656
+ };
657
+ const toValue = mix => {
658
+ // Fast path for strings
659
+ if (typeof mix === 'string') {
660
+ return mix;
661
+ }
662
+ let resolvedValue;
663
+ let string = '';
664
+ for (let k = 0; k < mix.length; k++) {
665
+ if (mix[k]) {
666
+ if (resolvedValue = toValue(mix[k])) {
667
+ string && (string += ' ');
668
+ string += resolvedValue;
669
+ }
670
+ }
671
+ }
672
+ return string;
673
+ };
674
+ const createTailwindMerge = (createConfigFirst, ...createConfigRest) => {
675
+ let configUtils;
676
+ let cacheGet;
677
+ let cacheSet;
678
+ let functionToCall;
679
+ const initTailwindMerge = classList => {
680
+ const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());
681
+ configUtils = createConfigUtils(config);
682
+ cacheGet = configUtils.cache.get;
683
+ cacheSet = configUtils.cache.set;
684
+ functionToCall = tailwindMerge;
685
+ return tailwindMerge(classList);
686
+ };
687
+ const tailwindMerge = classList => {
688
+ const cachedResult = cacheGet(classList);
689
+ if (cachedResult) {
690
+ return cachedResult;
691
+ }
692
+ const result = mergeClassList(classList, configUtils);
693
+ cacheSet(classList, result);
694
+ return result;
695
+ };
696
+ functionToCall = initTailwindMerge;
697
+ return (...args) => functionToCall(twJoin(...args));
698
+ };
699
+ const fallbackThemeArr = [];
700
+ const fromTheme = key => {
701
+ const themeGetter = theme => theme[key] || fallbackThemeArr;
702
+ themeGetter.isThemeGetter = true;
703
+ return themeGetter;
704
+ };
705
+ const arbitraryValueRegex = /^\[(?:(\w[\w-]*):)?(.+)\]$/i;
706
+ const arbitraryVariableRegex = /^\((?:(\w[\w-]*):)?(.+)\)$/i;
707
+ const fractionRegex = /^\d+\/\d+$/;
708
+ const tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
709
+ const lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/;
710
+ const colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/;
711
+ // Shadow always begins with x and y offset separated by underscore optionally prepended by inset
712
+ const shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
713
+ const imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
714
+ const isFraction = value => fractionRegex.test(value);
715
+ const isNumber = value => !!value && !Number.isNaN(Number(value));
716
+ const isInteger = value => !!value && Number.isInteger(Number(value));
717
+ const isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));
718
+ const isTshirtSize = value => tshirtUnitRegex.test(value);
719
+ const isAny = () => true;
720
+ const isLengthOnly = value =>
721
+ // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
722
+ // For example, `hsl(0 0% 0%)` would be classified as a length without this check.
723
+ // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
724
+ lengthUnitRegex.test(value) && !colorFunctionRegex.test(value);
725
+ const isNever = () => false;
726
+ const isShadow = value => shadowRegex.test(value);
727
+ const isImage = value => imageRegex.test(value);
728
+ const isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);
729
+ const isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);
730
+ const isArbitraryValue = value => arbitraryValueRegex.test(value);
731
+ const isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);
732
+ const isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);
733
+ const isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);
734
+ const isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);
735
+ const isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);
736
+ const isArbitraryVariable = value => arbitraryVariableRegex.test(value);
737
+ const isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);
738
+ const isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);
739
+ const isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);
740
+ const isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);
741
+ const isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);
742
+ const isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);
743
+ // Helpers
744
+ const getIsArbitraryValue = (value, testLabel, testValue) => {
745
+ const result = arbitraryValueRegex.exec(value);
746
+ if (result) {
747
+ if (result[1]) {
748
+ return testLabel(result[1]);
749
+ }
750
+ return testValue(result[2]);
751
+ }
752
+ return false;
753
+ };
754
+ const getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {
755
+ const result = arbitraryVariableRegex.exec(value);
756
+ if (result) {
757
+ if (result[1]) {
758
+ return testLabel(result[1]);
759
+ }
760
+ return shouldMatchNoLabel;
761
+ }
762
+ return false;
763
+ };
764
+ // Labels
765
+ const isLabelPosition = label => label === 'position' || label === 'percentage';
766
+ const isLabelImage = label => label === 'image' || label === 'url';
767
+ const isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';
768
+ const isLabelLength = label => label === 'length';
769
+ const isLabelNumber = label => label === 'number';
770
+ const isLabelFamilyName = label => label === 'family-name';
771
+ const isLabelShadow = label => label === 'shadow';
772
+ const getDefaultConfig = () => {
773
+ /**
774
+ * Theme getters for theme variable namespaces
775
+ * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces
776
+ */
777
+ /***/
778
+ const themeColor = fromTheme('color');
779
+ const themeFont = fromTheme('font');
780
+ const themeText = fromTheme('text');
781
+ const themeFontWeight = fromTheme('font-weight');
782
+ const themeTracking = fromTheme('tracking');
783
+ const themeLeading = fromTheme('leading');
784
+ const themeBreakpoint = fromTheme('breakpoint');
785
+ const themeContainer = fromTheme('container');
786
+ const themeSpacing = fromTheme('spacing');
787
+ const themeRadius = fromTheme('radius');
788
+ const themeShadow = fromTheme('shadow');
789
+ const themeInsetShadow = fromTheme('inset-shadow');
790
+ const themeTextShadow = fromTheme('text-shadow');
791
+ const themeDropShadow = fromTheme('drop-shadow');
792
+ const themeBlur = fromTheme('blur');
793
+ const themePerspective = fromTheme('perspective');
794
+ const themeAspect = fromTheme('aspect');
795
+ const themeEase = fromTheme('ease');
796
+ const themeAnimate = fromTheme('animate');
797
+ /**
798
+ * Helpers to avoid repeating the same scales
799
+ *
800
+ * We use functions that create a new array every time they're called instead of static arrays.
801
+ * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.
802
+ */
803
+ /***/
804
+ const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];
805
+ const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',
806
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
807
+ 'left-top', 'top-right',
808
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
809
+ 'right-top', 'bottom-right',
810
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
811
+ 'right-bottom', 'bottom-left',
812
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
813
+ 'left-bottom'];
814
+ const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];
815
+ const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];
816
+ const scaleOverscroll = () => ['auto', 'contain', 'none'];
817
+ const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];
818
+ const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];
819
+ const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];
820
+ const scaleGridColRowStartAndEnd = () => ['auto', {
821
+ span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]
822
+ }, isInteger, isArbitraryVariable, isArbitraryValue];
823
+ const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];
824
+ const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];
825
+ const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];
826
+ const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];
827
+ const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];
828
+ const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];
829
+ const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];
830
+ const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {
831
+ position: [isArbitraryVariable, isArbitraryValue]
832
+ }];
833
+ const scaleBgRepeat = () => ['no-repeat', {
834
+ repeat: ['', 'x', 'y', 'space', 'round']
835
+ }];
836
+ const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {
837
+ size: [isArbitraryVariable, isArbitraryValue]
838
+ }];
839
+ const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];
840
+ const scaleRadius = () => [
841
+ // Deprecated since Tailwind CSS v4.0.0
842
+ '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];
843
+ const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];
844
+ const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];
845
+ const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];
846
+ const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];
847
+ const scaleBlur = () => [
848
+ // Deprecated since Tailwind CSS v4.0.0
849
+ '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];
850
+ const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];
851
+ const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];
852
+ const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];
853
+ const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];
854
+ return {
855
+ cacheSize: 500,
856
+ theme: {
857
+ animate: ['spin', 'ping', 'pulse', 'bounce'],
858
+ aspect: ['video'],
859
+ blur: [isTshirtSize],
860
+ breakpoint: [isTshirtSize],
861
+ color: [isAny],
862
+ container: [isTshirtSize],
863
+ 'drop-shadow': [isTshirtSize],
864
+ ease: ['in', 'out', 'in-out'],
865
+ font: [isAnyNonArbitrary],
866
+ 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],
867
+ 'inset-shadow': [isTshirtSize],
868
+ leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],
869
+ perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],
870
+ radius: [isTshirtSize],
871
+ shadow: [isTshirtSize],
872
+ spacing: ['px', isNumber],
873
+ text: [isTshirtSize],
874
+ 'text-shadow': [isTshirtSize],
875
+ tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']
876
+ },
877
+ classGroups: {
878
+ // --------------
879
+ // --- Layout ---
880
+ // --------------
881
+ /**
882
+ * Aspect Ratio
883
+ * @see https://tailwindcss.com/docs/aspect-ratio
884
+ */
885
+ aspect: [{
886
+ aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]
887
+ }],
888
+ /**
889
+ * Container
890
+ * @see https://tailwindcss.com/docs/container
891
+ * @deprecated since Tailwind CSS v4.0.0
892
+ */
893
+ container: ['container'],
894
+ /**
895
+ * Columns
896
+ * @see https://tailwindcss.com/docs/columns
897
+ */
898
+ columns: [{
899
+ columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]
900
+ }],
901
+ /**
902
+ * Break After
903
+ * @see https://tailwindcss.com/docs/break-after
904
+ */
905
+ 'break-after': [{
906
+ 'break-after': scaleBreak()
907
+ }],
908
+ /**
909
+ * Break Before
910
+ * @see https://tailwindcss.com/docs/break-before
911
+ */
912
+ 'break-before': [{
913
+ 'break-before': scaleBreak()
914
+ }],
915
+ /**
916
+ * Break Inside
917
+ * @see https://tailwindcss.com/docs/break-inside
918
+ */
919
+ 'break-inside': [{
920
+ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']
921
+ }],
922
+ /**
923
+ * Box Decoration Break
924
+ * @see https://tailwindcss.com/docs/box-decoration-break
925
+ */
926
+ 'box-decoration': [{
927
+ 'box-decoration': ['slice', 'clone']
928
+ }],
929
+ /**
930
+ * Box Sizing
931
+ * @see https://tailwindcss.com/docs/box-sizing
932
+ */
933
+ box: [{
934
+ box: ['border', 'content']
935
+ }],
936
+ /**
937
+ * Display
938
+ * @see https://tailwindcss.com/docs/display
939
+ */
940
+ display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],
941
+ /**
942
+ * Screen Reader Only
943
+ * @see https://tailwindcss.com/docs/display#screen-reader-only
944
+ */
945
+ sr: ['sr-only', 'not-sr-only'],
946
+ /**
947
+ * Floats
948
+ * @see https://tailwindcss.com/docs/float
949
+ */
950
+ float: [{
951
+ float: ['right', 'left', 'none', 'start', 'end']
952
+ }],
953
+ /**
954
+ * Clear
955
+ * @see https://tailwindcss.com/docs/clear
956
+ */
957
+ clear: [{
958
+ clear: ['left', 'right', 'both', 'none', 'start', 'end']
959
+ }],
960
+ /**
961
+ * Isolation
962
+ * @see https://tailwindcss.com/docs/isolation
963
+ */
964
+ isolation: ['isolate', 'isolation-auto'],
965
+ /**
966
+ * Object Fit
967
+ * @see https://tailwindcss.com/docs/object-fit
968
+ */
969
+ 'object-fit': [{
970
+ object: ['contain', 'cover', 'fill', 'none', 'scale-down']
971
+ }],
972
+ /**
973
+ * Object Position
974
+ * @see https://tailwindcss.com/docs/object-position
975
+ */
976
+ 'object-position': [{
977
+ object: scalePositionWithArbitrary()
978
+ }],
979
+ /**
980
+ * Overflow
981
+ * @see https://tailwindcss.com/docs/overflow
982
+ */
983
+ overflow: [{
984
+ overflow: scaleOverflow()
985
+ }],
986
+ /**
987
+ * Overflow X
988
+ * @see https://tailwindcss.com/docs/overflow
989
+ */
990
+ 'overflow-x': [{
991
+ 'overflow-x': scaleOverflow()
992
+ }],
993
+ /**
994
+ * Overflow Y
995
+ * @see https://tailwindcss.com/docs/overflow
996
+ */
997
+ 'overflow-y': [{
998
+ 'overflow-y': scaleOverflow()
999
+ }],
1000
+ /**
1001
+ * Overscroll Behavior
1002
+ * @see https://tailwindcss.com/docs/overscroll-behavior
1003
+ */
1004
+ overscroll: [{
1005
+ overscroll: scaleOverscroll()
1006
+ }],
1007
+ /**
1008
+ * Overscroll Behavior X
1009
+ * @see https://tailwindcss.com/docs/overscroll-behavior
1010
+ */
1011
+ 'overscroll-x': [{
1012
+ 'overscroll-x': scaleOverscroll()
1013
+ }],
1014
+ /**
1015
+ * Overscroll Behavior Y
1016
+ * @see https://tailwindcss.com/docs/overscroll-behavior
1017
+ */
1018
+ 'overscroll-y': [{
1019
+ 'overscroll-y': scaleOverscroll()
1020
+ }],
1021
+ /**
1022
+ * Position
1023
+ * @see https://tailwindcss.com/docs/position
1024
+ */
1025
+ position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],
1026
+ /**
1027
+ * Top / Right / Bottom / Left
1028
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1029
+ */
1030
+ inset: [{
1031
+ inset: scaleInset()
1032
+ }],
1033
+ /**
1034
+ * Right / Left
1035
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1036
+ */
1037
+ 'inset-x': [{
1038
+ 'inset-x': scaleInset()
1039
+ }],
1040
+ /**
1041
+ * Top / Bottom
1042
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1043
+ */
1044
+ 'inset-y': [{
1045
+ 'inset-y': scaleInset()
1046
+ }],
1047
+ /**
1048
+ * Start
1049
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1050
+ */
1051
+ start: [{
1052
+ start: scaleInset()
1053
+ }],
1054
+ /**
1055
+ * End
1056
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1057
+ */
1058
+ end: [{
1059
+ end: scaleInset()
1060
+ }],
1061
+ /**
1062
+ * Top
1063
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1064
+ */
1065
+ top: [{
1066
+ top: scaleInset()
1067
+ }],
1068
+ /**
1069
+ * Right
1070
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1071
+ */
1072
+ right: [{
1073
+ right: scaleInset()
1074
+ }],
1075
+ /**
1076
+ * Bottom
1077
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1078
+ */
1079
+ bottom: [{
1080
+ bottom: scaleInset()
1081
+ }],
1082
+ /**
1083
+ * Left
1084
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1085
+ */
1086
+ left: [{
1087
+ left: scaleInset()
1088
+ }],
1089
+ /**
1090
+ * Visibility
1091
+ * @see https://tailwindcss.com/docs/visibility
1092
+ */
1093
+ visibility: ['visible', 'invisible', 'collapse'],
1094
+ /**
1095
+ * Z-Index
1096
+ * @see https://tailwindcss.com/docs/z-index
1097
+ */
1098
+ z: [{
1099
+ z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]
1100
+ }],
1101
+ // ------------------------
1102
+ // --- Flexbox and Grid ---
1103
+ // ------------------------
1104
+ /**
1105
+ * Flex Basis
1106
+ * @see https://tailwindcss.com/docs/flex-basis
1107
+ */
1108
+ basis: [{
1109
+ basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]
1110
+ }],
1111
+ /**
1112
+ * Flex Direction
1113
+ * @see https://tailwindcss.com/docs/flex-direction
1114
+ */
1115
+ 'flex-direction': [{
1116
+ flex: ['row', 'row-reverse', 'col', 'col-reverse']
1117
+ }],
1118
+ /**
1119
+ * Flex Wrap
1120
+ * @see https://tailwindcss.com/docs/flex-wrap
1121
+ */
1122
+ 'flex-wrap': [{
1123
+ flex: ['nowrap', 'wrap', 'wrap-reverse']
1124
+ }],
1125
+ /**
1126
+ * Flex
1127
+ * @see https://tailwindcss.com/docs/flex
1128
+ */
1129
+ flex: [{
1130
+ flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]
1131
+ }],
1132
+ /**
1133
+ * Flex Grow
1134
+ * @see https://tailwindcss.com/docs/flex-grow
1135
+ */
1136
+ grow: [{
1137
+ grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]
1138
+ }],
1139
+ /**
1140
+ * Flex Shrink
1141
+ * @see https://tailwindcss.com/docs/flex-shrink
1142
+ */
1143
+ shrink: [{
1144
+ shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]
1145
+ }],
1146
+ /**
1147
+ * Order
1148
+ * @see https://tailwindcss.com/docs/order
1149
+ */
1150
+ order: [{
1151
+ order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]
1152
+ }],
1153
+ /**
1154
+ * Grid Template Columns
1155
+ * @see https://tailwindcss.com/docs/grid-template-columns
1156
+ */
1157
+ 'grid-cols': [{
1158
+ 'grid-cols': scaleGridTemplateColsRows()
1159
+ }],
1160
+ /**
1161
+ * Grid Column Start / End
1162
+ * @see https://tailwindcss.com/docs/grid-column
1163
+ */
1164
+ 'col-start-end': [{
1165
+ col: scaleGridColRowStartAndEnd()
1166
+ }],
1167
+ /**
1168
+ * Grid Column Start
1169
+ * @see https://tailwindcss.com/docs/grid-column
1170
+ */
1171
+ 'col-start': [{
1172
+ 'col-start': scaleGridColRowStartOrEnd()
1173
+ }],
1174
+ /**
1175
+ * Grid Column End
1176
+ * @see https://tailwindcss.com/docs/grid-column
1177
+ */
1178
+ 'col-end': [{
1179
+ 'col-end': scaleGridColRowStartOrEnd()
1180
+ }],
1181
+ /**
1182
+ * Grid Template Rows
1183
+ * @see https://tailwindcss.com/docs/grid-template-rows
1184
+ */
1185
+ 'grid-rows': [{
1186
+ 'grid-rows': scaleGridTemplateColsRows()
1187
+ }],
1188
+ /**
1189
+ * Grid Row Start / End
1190
+ * @see https://tailwindcss.com/docs/grid-row
1191
+ */
1192
+ 'row-start-end': [{
1193
+ row: scaleGridColRowStartAndEnd()
1194
+ }],
1195
+ /**
1196
+ * Grid Row Start
1197
+ * @see https://tailwindcss.com/docs/grid-row
1198
+ */
1199
+ 'row-start': [{
1200
+ 'row-start': scaleGridColRowStartOrEnd()
1201
+ }],
1202
+ /**
1203
+ * Grid Row End
1204
+ * @see https://tailwindcss.com/docs/grid-row
1205
+ */
1206
+ 'row-end': [{
1207
+ 'row-end': scaleGridColRowStartOrEnd()
1208
+ }],
1209
+ /**
1210
+ * Grid Auto Flow
1211
+ * @see https://tailwindcss.com/docs/grid-auto-flow
1212
+ */
1213
+ 'grid-flow': [{
1214
+ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']
1215
+ }],
1216
+ /**
1217
+ * Grid Auto Columns
1218
+ * @see https://tailwindcss.com/docs/grid-auto-columns
1219
+ */
1220
+ 'auto-cols': [{
1221
+ 'auto-cols': scaleGridAutoColsRows()
1222
+ }],
1223
+ /**
1224
+ * Grid Auto Rows
1225
+ * @see https://tailwindcss.com/docs/grid-auto-rows
1226
+ */
1227
+ 'auto-rows': [{
1228
+ 'auto-rows': scaleGridAutoColsRows()
1229
+ }],
1230
+ /**
1231
+ * Gap
1232
+ * @see https://tailwindcss.com/docs/gap
1233
+ */
1234
+ gap: [{
1235
+ gap: scaleUnambiguousSpacing()
1236
+ }],
1237
+ /**
1238
+ * Gap X
1239
+ * @see https://tailwindcss.com/docs/gap
1240
+ */
1241
+ 'gap-x': [{
1242
+ 'gap-x': scaleUnambiguousSpacing()
1243
+ }],
1244
+ /**
1245
+ * Gap Y
1246
+ * @see https://tailwindcss.com/docs/gap
1247
+ */
1248
+ 'gap-y': [{
1249
+ 'gap-y': scaleUnambiguousSpacing()
1250
+ }],
1251
+ /**
1252
+ * Justify Content
1253
+ * @see https://tailwindcss.com/docs/justify-content
1254
+ */
1255
+ 'justify-content': [{
1256
+ justify: [...scaleAlignPrimaryAxis(), 'normal']
1257
+ }],
1258
+ /**
1259
+ * Justify Items
1260
+ * @see https://tailwindcss.com/docs/justify-items
1261
+ */
1262
+ 'justify-items': [{
1263
+ 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']
1264
+ }],
1265
+ /**
1266
+ * Justify Self
1267
+ * @see https://tailwindcss.com/docs/justify-self
1268
+ */
1269
+ 'justify-self': [{
1270
+ 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]
1271
+ }],
1272
+ /**
1273
+ * Align Content
1274
+ * @see https://tailwindcss.com/docs/align-content
1275
+ */
1276
+ 'align-content': [{
1277
+ content: ['normal', ...scaleAlignPrimaryAxis()]
1278
+ }],
1279
+ /**
1280
+ * Align Items
1281
+ * @see https://tailwindcss.com/docs/align-items
1282
+ */
1283
+ 'align-items': [{
1284
+ items: [...scaleAlignSecondaryAxis(), {
1285
+ baseline: ['', 'last']
1286
+ }]
1287
+ }],
1288
+ /**
1289
+ * Align Self
1290
+ * @see https://tailwindcss.com/docs/align-self
1291
+ */
1292
+ 'align-self': [{
1293
+ self: ['auto', ...scaleAlignSecondaryAxis(), {
1294
+ baseline: ['', 'last']
1295
+ }]
1296
+ }],
1297
+ /**
1298
+ * Place Content
1299
+ * @see https://tailwindcss.com/docs/place-content
1300
+ */
1301
+ 'place-content': [{
1302
+ 'place-content': scaleAlignPrimaryAxis()
1303
+ }],
1304
+ /**
1305
+ * Place Items
1306
+ * @see https://tailwindcss.com/docs/place-items
1307
+ */
1308
+ 'place-items': [{
1309
+ 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']
1310
+ }],
1311
+ /**
1312
+ * Place Self
1313
+ * @see https://tailwindcss.com/docs/place-self
1314
+ */
1315
+ 'place-self': [{
1316
+ 'place-self': ['auto', ...scaleAlignSecondaryAxis()]
1317
+ }],
1318
+ // Spacing
1319
+ /**
1320
+ * Padding
1321
+ * @see https://tailwindcss.com/docs/padding
1322
+ */
1323
+ p: [{
1324
+ p: scaleUnambiguousSpacing()
1325
+ }],
1326
+ /**
1327
+ * Padding X
1328
+ * @see https://tailwindcss.com/docs/padding
1329
+ */
1330
+ px: [{
1331
+ px: scaleUnambiguousSpacing()
1332
+ }],
1333
+ /**
1334
+ * Padding Y
1335
+ * @see https://tailwindcss.com/docs/padding
1336
+ */
1337
+ py: [{
1338
+ py: scaleUnambiguousSpacing()
1339
+ }],
1340
+ /**
1341
+ * Padding Start
1342
+ * @see https://tailwindcss.com/docs/padding
1343
+ */
1344
+ ps: [{
1345
+ ps: scaleUnambiguousSpacing()
1346
+ }],
1347
+ /**
1348
+ * Padding End
1349
+ * @see https://tailwindcss.com/docs/padding
1350
+ */
1351
+ pe: [{
1352
+ pe: scaleUnambiguousSpacing()
1353
+ }],
1354
+ /**
1355
+ * Padding Top
1356
+ * @see https://tailwindcss.com/docs/padding
1357
+ */
1358
+ pt: [{
1359
+ pt: scaleUnambiguousSpacing()
1360
+ }],
1361
+ /**
1362
+ * Padding Right
1363
+ * @see https://tailwindcss.com/docs/padding
1364
+ */
1365
+ pr: [{
1366
+ pr: scaleUnambiguousSpacing()
1367
+ }],
1368
+ /**
1369
+ * Padding Bottom
1370
+ * @see https://tailwindcss.com/docs/padding
1371
+ */
1372
+ pb: [{
1373
+ pb: scaleUnambiguousSpacing()
1374
+ }],
1375
+ /**
1376
+ * Padding Left
1377
+ * @see https://tailwindcss.com/docs/padding
1378
+ */
1379
+ pl: [{
1380
+ pl: scaleUnambiguousSpacing()
1381
+ }],
1382
+ /**
1383
+ * Margin
1384
+ * @see https://tailwindcss.com/docs/margin
1385
+ */
1386
+ m: [{
1387
+ m: scaleMargin()
1388
+ }],
1389
+ /**
1390
+ * Margin X
1391
+ * @see https://tailwindcss.com/docs/margin
1392
+ */
1393
+ mx: [{
1394
+ mx: scaleMargin()
1395
+ }],
1396
+ /**
1397
+ * Margin Y
1398
+ * @see https://tailwindcss.com/docs/margin
1399
+ */
1400
+ my: [{
1401
+ my: scaleMargin()
1402
+ }],
1403
+ /**
1404
+ * Margin Start
1405
+ * @see https://tailwindcss.com/docs/margin
1406
+ */
1407
+ ms: [{
1408
+ ms: scaleMargin()
1409
+ }],
1410
+ /**
1411
+ * Margin End
1412
+ * @see https://tailwindcss.com/docs/margin
1413
+ */
1414
+ me: [{
1415
+ me: scaleMargin()
1416
+ }],
1417
+ /**
1418
+ * Margin Top
1419
+ * @see https://tailwindcss.com/docs/margin
1420
+ */
1421
+ mt: [{
1422
+ mt: scaleMargin()
1423
+ }],
1424
+ /**
1425
+ * Margin Right
1426
+ * @see https://tailwindcss.com/docs/margin
1427
+ */
1428
+ mr: [{
1429
+ mr: scaleMargin()
1430
+ }],
1431
+ /**
1432
+ * Margin Bottom
1433
+ * @see https://tailwindcss.com/docs/margin
1434
+ */
1435
+ mb: [{
1436
+ mb: scaleMargin()
1437
+ }],
1438
+ /**
1439
+ * Margin Left
1440
+ * @see https://tailwindcss.com/docs/margin
1441
+ */
1442
+ ml: [{
1443
+ ml: scaleMargin()
1444
+ }],
1445
+ /**
1446
+ * Space Between X
1447
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1448
+ */
1449
+ 'space-x': [{
1450
+ 'space-x': scaleUnambiguousSpacing()
1451
+ }],
1452
+ /**
1453
+ * Space Between X Reverse
1454
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1455
+ */
1456
+ 'space-x-reverse': ['space-x-reverse'],
1457
+ /**
1458
+ * Space Between Y
1459
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1460
+ */
1461
+ 'space-y': [{
1462
+ 'space-y': scaleUnambiguousSpacing()
1463
+ }],
1464
+ /**
1465
+ * Space Between Y Reverse
1466
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1467
+ */
1468
+ 'space-y-reverse': ['space-y-reverse'],
1469
+ // --------------
1470
+ // --- Sizing ---
1471
+ // --------------
1472
+ /**
1473
+ * Size
1474
+ * @see https://tailwindcss.com/docs/width#setting-both-width-and-height
1475
+ */
1476
+ size: [{
1477
+ size: scaleSizing()
1478
+ }],
1479
+ /**
1480
+ * Width
1481
+ * @see https://tailwindcss.com/docs/width
1482
+ */
1483
+ w: [{
1484
+ w: [themeContainer, 'screen', ...scaleSizing()]
1485
+ }],
1486
+ /**
1487
+ * Min-Width
1488
+ * @see https://tailwindcss.com/docs/min-width
1489
+ */
1490
+ 'min-w': [{
1491
+ 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1492
+ 'none', ...scaleSizing()]
1493
+ }],
1494
+ /**
1495
+ * Max-Width
1496
+ * @see https://tailwindcss.com/docs/max-width
1497
+ */
1498
+ 'max-w': [{
1499
+ 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1500
+ 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1501
+ {
1502
+ screen: [themeBreakpoint]
1503
+ }, ...scaleSizing()]
1504
+ }],
1505
+ /**
1506
+ * Height
1507
+ * @see https://tailwindcss.com/docs/height
1508
+ */
1509
+ h: [{
1510
+ h: ['screen', 'lh', ...scaleSizing()]
1511
+ }],
1512
+ /**
1513
+ * Min-Height
1514
+ * @see https://tailwindcss.com/docs/min-height
1515
+ */
1516
+ 'min-h': [{
1517
+ 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]
1518
+ }],
1519
+ /**
1520
+ * Max-Height
1521
+ * @see https://tailwindcss.com/docs/max-height
1522
+ */
1523
+ 'max-h': [{
1524
+ 'max-h': ['screen', 'lh', ...scaleSizing()]
1525
+ }],
1526
+ // ------------------
1527
+ // --- Typography ---
1528
+ // ------------------
1529
+ /**
1530
+ * Font Size
1531
+ * @see https://tailwindcss.com/docs/font-size
1532
+ */
1533
+ 'font-size': [{
1534
+ text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]
1535
+ }],
1536
+ /**
1537
+ * Font Smoothing
1538
+ * @see https://tailwindcss.com/docs/font-smoothing
1539
+ */
1540
+ 'font-smoothing': ['antialiased', 'subpixel-antialiased'],
1541
+ /**
1542
+ * Font Style
1543
+ * @see https://tailwindcss.com/docs/font-style
1544
+ */
1545
+ 'font-style': ['italic', 'not-italic'],
1546
+ /**
1547
+ * Font Weight
1548
+ * @see https://tailwindcss.com/docs/font-weight
1549
+ */
1550
+ 'font-weight': [{
1551
+ font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]
1552
+ }],
1553
+ /**
1554
+ * Font Stretch
1555
+ * @see https://tailwindcss.com/docs/font-stretch
1556
+ */
1557
+ 'font-stretch': [{
1558
+ 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]
1559
+ }],
1560
+ /**
1561
+ * Font Family
1562
+ * @see https://tailwindcss.com/docs/font-family
1563
+ */
1564
+ 'font-family': [{
1565
+ font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]
1566
+ }],
1567
+ /**
1568
+ * Font Variant Numeric
1569
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1570
+ */
1571
+ 'fvn-normal': ['normal-nums'],
1572
+ /**
1573
+ * Font Variant Numeric
1574
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1575
+ */
1576
+ 'fvn-ordinal': ['ordinal'],
1577
+ /**
1578
+ * Font Variant Numeric
1579
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1580
+ */
1581
+ 'fvn-slashed-zero': ['slashed-zero'],
1582
+ /**
1583
+ * Font Variant Numeric
1584
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1585
+ */
1586
+ 'fvn-figure': ['lining-nums', 'oldstyle-nums'],
1587
+ /**
1588
+ * Font Variant Numeric
1589
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1590
+ */
1591
+ 'fvn-spacing': ['proportional-nums', 'tabular-nums'],
1592
+ /**
1593
+ * Font Variant Numeric
1594
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1595
+ */
1596
+ 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],
1597
+ /**
1598
+ * Letter Spacing
1599
+ * @see https://tailwindcss.com/docs/letter-spacing
1600
+ */
1601
+ tracking: [{
1602
+ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]
1603
+ }],
1604
+ /**
1605
+ * Line Clamp
1606
+ * @see https://tailwindcss.com/docs/line-clamp
1607
+ */
1608
+ 'line-clamp': [{
1609
+ 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]
1610
+ }],
1611
+ /**
1612
+ * Line Height
1613
+ * @see https://tailwindcss.com/docs/line-height
1614
+ */
1615
+ leading: [{
1616
+ leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1617
+ themeLeading, ...scaleUnambiguousSpacing()]
1618
+ }],
1619
+ /**
1620
+ * List Style Image
1621
+ * @see https://tailwindcss.com/docs/list-style-image
1622
+ */
1623
+ 'list-image': [{
1624
+ 'list-image': ['none', isArbitraryVariable, isArbitraryValue]
1625
+ }],
1626
+ /**
1627
+ * List Style Position
1628
+ * @see https://tailwindcss.com/docs/list-style-position
1629
+ */
1630
+ 'list-style-position': [{
1631
+ list: ['inside', 'outside']
1632
+ }],
1633
+ /**
1634
+ * List Style Type
1635
+ * @see https://tailwindcss.com/docs/list-style-type
1636
+ */
1637
+ 'list-style-type': [{
1638
+ list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]
1639
+ }],
1640
+ /**
1641
+ * Text Alignment
1642
+ * @see https://tailwindcss.com/docs/text-align
1643
+ */
1644
+ 'text-alignment': [{
1645
+ text: ['left', 'center', 'right', 'justify', 'start', 'end']
1646
+ }],
1647
+ /**
1648
+ * Placeholder Color
1649
+ * @deprecated since Tailwind CSS v3.0.0
1650
+ * @see https://v3.tailwindcss.com/docs/placeholder-color
1651
+ */
1652
+ 'placeholder-color': [{
1653
+ placeholder: scaleColor()
1654
+ }],
1655
+ /**
1656
+ * Text Color
1657
+ * @see https://tailwindcss.com/docs/text-color
1658
+ */
1659
+ 'text-color': [{
1660
+ text: scaleColor()
1661
+ }],
1662
+ /**
1663
+ * Text Decoration
1664
+ * @see https://tailwindcss.com/docs/text-decoration
1665
+ */
1666
+ 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],
1667
+ /**
1668
+ * Text Decoration Style
1669
+ * @see https://tailwindcss.com/docs/text-decoration-style
1670
+ */
1671
+ 'text-decoration-style': [{
1672
+ decoration: [...scaleLineStyle(), 'wavy']
1673
+ }],
1674
+ /**
1675
+ * Text Decoration Thickness
1676
+ * @see https://tailwindcss.com/docs/text-decoration-thickness
1677
+ */
1678
+ 'text-decoration-thickness': [{
1679
+ decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]
1680
+ }],
1681
+ /**
1682
+ * Text Decoration Color
1683
+ * @see https://tailwindcss.com/docs/text-decoration-color
1684
+ */
1685
+ 'text-decoration-color': [{
1686
+ decoration: scaleColor()
1687
+ }],
1688
+ /**
1689
+ * Text Underline Offset
1690
+ * @see https://tailwindcss.com/docs/text-underline-offset
1691
+ */
1692
+ 'underline-offset': [{
1693
+ 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]
1694
+ }],
1695
+ /**
1696
+ * Text Transform
1697
+ * @see https://tailwindcss.com/docs/text-transform
1698
+ */
1699
+ 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],
1700
+ /**
1701
+ * Text Overflow
1702
+ * @see https://tailwindcss.com/docs/text-overflow
1703
+ */
1704
+ 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],
1705
+ /**
1706
+ * Text Wrap
1707
+ * @see https://tailwindcss.com/docs/text-wrap
1708
+ */
1709
+ 'text-wrap': [{
1710
+ text: ['wrap', 'nowrap', 'balance', 'pretty']
1711
+ }],
1712
+ /**
1713
+ * Text Indent
1714
+ * @see https://tailwindcss.com/docs/text-indent
1715
+ */
1716
+ indent: [{
1717
+ indent: scaleUnambiguousSpacing()
1718
+ }],
1719
+ /**
1720
+ * Vertical Alignment
1721
+ * @see https://tailwindcss.com/docs/vertical-align
1722
+ */
1723
+ 'vertical-align': [{
1724
+ align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]
1725
+ }],
1726
+ /**
1727
+ * Whitespace
1728
+ * @see https://tailwindcss.com/docs/whitespace
1729
+ */
1730
+ whitespace: [{
1731
+ whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']
1732
+ }],
1733
+ /**
1734
+ * Word Break
1735
+ * @see https://tailwindcss.com/docs/word-break
1736
+ */
1737
+ break: [{
1738
+ break: ['normal', 'words', 'all', 'keep']
1739
+ }],
1740
+ /**
1741
+ * Overflow Wrap
1742
+ * @see https://tailwindcss.com/docs/overflow-wrap
1743
+ */
1744
+ wrap: [{
1745
+ wrap: ['break-word', 'anywhere', 'normal']
1746
+ }],
1747
+ /**
1748
+ * Hyphens
1749
+ * @see https://tailwindcss.com/docs/hyphens
1750
+ */
1751
+ hyphens: [{
1752
+ hyphens: ['none', 'manual', 'auto']
1753
+ }],
1754
+ /**
1755
+ * Content
1756
+ * @see https://tailwindcss.com/docs/content
1757
+ */
1758
+ content: [{
1759
+ content: ['none', isArbitraryVariable, isArbitraryValue]
1760
+ }],
1761
+ // -------------------
1762
+ // --- Backgrounds ---
1763
+ // -------------------
1764
+ /**
1765
+ * Background Attachment
1766
+ * @see https://tailwindcss.com/docs/background-attachment
1767
+ */
1768
+ 'bg-attachment': [{
1769
+ bg: ['fixed', 'local', 'scroll']
1770
+ }],
1771
+ /**
1772
+ * Background Clip
1773
+ * @see https://tailwindcss.com/docs/background-clip
1774
+ */
1775
+ 'bg-clip': [{
1776
+ 'bg-clip': ['border', 'padding', 'content', 'text']
1777
+ }],
1778
+ /**
1779
+ * Background Origin
1780
+ * @see https://tailwindcss.com/docs/background-origin
1781
+ */
1782
+ 'bg-origin': [{
1783
+ 'bg-origin': ['border', 'padding', 'content']
1784
+ }],
1785
+ /**
1786
+ * Background Position
1787
+ * @see https://tailwindcss.com/docs/background-position
1788
+ */
1789
+ 'bg-position': [{
1790
+ bg: scaleBgPosition()
1791
+ }],
1792
+ /**
1793
+ * Background Repeat
1794
+ * @see https://tailwindcss.com/docs/background-repeat
1795
+ */
1796
+ 'bg-repeat': [{
1797
+ bg: scaleBgRepeat()
1798
+ }],
1799
+ /**
1800
+ * Background Size
1801
+ * @see https://tailwindcss.com/docs/background-size
1802
+ */
1803
+ 'bg-size': [{
1804
+ bg: scaleBgSize()
1805
+ }],
1806
+ /**
1807
+ * Background Image
1808
+ * @see https://tailwindcss.com/docs/background-image
1809
+ */
1810
+ 'bg-image': [{
1811
+ bg: ['none', {
1812
+ linear: [{
1813
+ to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']
1814
+ }, isInteger, isArbitraryVariable, isArbitraryValue],
1815
+ radial: ['', isArbitraryVariable, isArbitraryValue],
1816
+ conic: [isInteger, isArbitraryVariable, isArbitraryValue]
1817
+ }, isArbitraryVariableImage, isArbitraryImage]
1818
+ }],
1819
+ /**
1820
+ * Background Color
1821
+ * @see https://tailwindcss.com/docs/background-color
1822
+ */
1823
+ 'bg-color': [{
1824
+ bg: scaleColor()
1825
+ }],
1826
+ /**
1827
+ * Gradient Color Stops From Position
1828
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1829
+ */
1830
+ 'gradient-from-pos': [{
1831
+ from: scaleGradientStopPosition()
1832
+ }],
1833
+ /**
1834
+ * Gradient Color Stops Via Position
1835
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1836
+ */
1837
+ 'gradient-via-pos': [{
1838
+ via: scaleGradientStopPosition()
1839
+ }],
1840
+ /**
1841
+ * Gradient Color Stops To Position
1842
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1843
+ */
1844
+ 'gradient-to-pos': [{
1845
+ to: scaleGradientStopPosition()
1846
+ }],
1847
+ /**
1848
+ * Gradient Color Stops From
1849
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1850
+ */
1851
+ 'gradient-from': [{
1852
+ from: scaleColor()
1853
+ }],
1854
+ /**
1855
+ * Gradient Color Stops Via
1856
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1857
+ */
1858
+ 'gradient-via': [{
1859
+ via: scaleColor()
1860
+ }],
1861
+ /**
1862
+ * Gradient Color Stops To
1863
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1864
+ */
1865
+ 'gradient-to': [{
1866
+ to: scaleColor()
1867
+ }],
1868
+ // ---------------
1869
+ // --- Borders ---
1870
+ // ---------------
1871
+ /**
1872
+ * Border Radius
1873
+ * @see https://tailwindcss.com/docs/border-radius
1874
+ */
1875
+ rounded: [{
1876
+ rounded: scaleRadius()
1877
+ }],
1878
+ /**
1879
+ * Border Radius Start
1880
+ * @see https://tailwindcss.com/docs/border-radius
1881
+ */
1882
+ 'rounded-s': [{
1883
+ 'rounded-s': scaleRadius()
1884
+ }],
1885
+ /**
1886
+ * Border Radius End
1887
+ * @see https://tailwindcss.com/docs/border-radius
1888
+ */
1889
+ 'rounded-e': [{
1890
+ 'rounded-e': scaleRadius()
1891
+ }],
1892
+ /**
1893
+ * Border Radius Top
1894
+ * @see https://tailwindcss.com/docs/border-radius
1895
+ */
1896
+ 'rounded-t': [{
1897
+ 'rounded-t': scaleRadius()
1898
+ }],
1899
+ /**
1900
+ * Border Radius Right
1901
+ * @see https://tailwindcss.com/docs/border-radius
1902
+ */
1903
+ 'rounded-r': [{
1904
+ 'rounded-r': scaleRadius()
1905
+ }],
1906
+ /**
1907
+ * Border Radius Bottom
1908
+ * @see https://tailwindcss.com/docs/border-radius
1909
+ */
1910
+ 'rounded-b': [{
1911
+ 'rounded-b': scaleRadius()
1912
+ }],
1913
+ /**
1914
+ * Border Radius Left
1915
+ * @see https://tailwindcss.com/docs/border-radius
1916
+ */
1917
+ 'rounded-l': [{
1918
+ 'rounded-l': scaleRadius()
1919
+ }],
1920
+ /**
1921
+ * Border Radius Start Start
1922
+ * @see https://tailwindcss.com/docs/border-radius
1923
+ */
1924
+ 'rounded-ss': [{
1925
+ 'rounded-ss': scaleRadius()
1926
+ }],
1927
+ /**
1928
+ * Border Radius Start End
1929
+ * @see https://tailwindcss.com/docs/border-radius
1930
+ */
1931
+ 'rounded-se': [{
1932
+ 'rounded-se': scaleRadius()
1933
+ }],
1934
+ /**
1935
+ * Border Radius End End
1936
+ * @see https://tailwindcss.com/docs/border-radius
1937
+ */
1938
+ 'rounded-ee': [{
1939
+ 'rounded-ee': scaleRadius()
1940
+ }],
1941
+ /**
1942
+ * Border Radius End Start
1943
+ * @see https://tailwindcss.com/docs/border-radius
1944
+ */
1945
+ 'rounded-es': [{
1946
+ 'rounded-es': scaleRadius()
1947
+ }],
1948
+ /**
1949
+ * Border Radius Top Left
1950
+ * @see https://tailwindcss.com/docs/border-radius
1951
+ */
1952
+ 'rounded-tl': [{
1953
+ 'rounded-tl': scaleRadius()
1954
+ }],
1955
+ /**
1956
+ * Border Radius Top Right
1957
+ * @see https://tailwindcss.com/docs/border-radius
1958
+ */
1959
+ 'rounded-tr': [{
1960
+ 'rounded-tr': scaleRadius()
1961
+ }],
1962
+ /**
1963
+ * Border Radius Bottom Right
1964
+ * @see https://tailwindcss.com/docs/border-radius
1965
+ */
1966
+ 'rounded-br': [{
1967
+ 'rounded-br': scaleRadius()
1968
+ }],
1969
+ /**
1970
+ * Border Radius Bottom Left
1971
+ * @see https://tailwindcss.com/docs/border-radius
1972
+ */
1973
+ 'rounded-bl': [{
1974
+ 'rounded-bl': scaleRadius()
1975
+ }],
1976
+ /**
1977
+ * Border Width
1978
+ * @see https://tailwindcss.com/docs/border-width
1979
+ */
1980
+ 'border-w': [{
1981
+ border: scaleBorderWidth()
1982
+ }],
1983
+ /**
1984
+ * Border Width X
1985
+ * @see https://tailwindcss.com/docs/border-width
1986
+ */
1987
+ 'border-w-x': [{
1988
+ 'border-x': scaleBorderWidth()
1989
+ }],
1990
+ /**
1991
+ * Border Width Y
1992
+ * @see https://tailwindcss.com/docs/border-width
1993
+ */
1994
+ 'border-w-y': [{
1995
+ 'border-y': scaleBorderWidth()
1996
+ }],
1997
+ /**
1998
+ * Border Width Start
1999
+ * @see https://tailwindcss.com/docs/border-width
2000
+ */
2001
+ 'border-w-s': [{
2002
+ 'border-s': scaleBorderWidth()
2003
+ }],
2004
+ /**
2005
+ * Border Width End
2006
+ * @see https://tailwindcss.com/docs/border-width
2007
+ */
2008
+ 'border-w-e': [{
2009
+ 'border-e': scaleBorderWidth()
2010
+ }],
2011
+ /**
2012
+ * Border Width Top
2013
+ * @see https://tailwindcss.com/docs/border-width
2014
+ */
2015
+ 'border-w-t': [{
2016
+ 'border-t': scaleBorderWidth()
2017
+ }],
2018
+ /**
2019
+ * Border Width Right
2020
+ * @see https://tailwindcss.com/docs/border-width
2021
+ */
2022
+ 'border-w-r': [{
2023
+ 'border-r': scaleBorderWidth()
2024
+ }],
2025
+ /**
2026
+ * Border Width Bottom
2027
+ * @see https://tailwindcss.com/docs/border-width
2028
+ */
2029
+ 'border-w-b': [{
2030
+ 'border-b': scaleBorderWidth()
2031
+ }],
2032
+ /**
2033
+ * Border Width Left
2034
+ * @see https://tailwindcss.com/docs/border-width
2035
+ */
2036
+ 'border-w-l': [{
2037
+ 'border-l': scaleBorderWidth()
2038
+ }],
2039
+ /**
2040
+ * Divide Width X
2041
+ * @see https://tailwindcss.com/docs/border-width#between-children
2042
+ */
2043
+ 'divide-x': [{
2044
+ 'divide-x': scaleBorderWidth()
2045
+ }],
2046
+ /**
2047
+ * Divide Width X Reverse
2048
+ * @see https://tailwindcss.com/docs/border-width#between-children
2049
+ */
2050
+ 'divide-x-reverse': ['divide-x-reverse'],
2051
+ /**
2052
+ * Divide Width Y
2053
+ * @see https://tailwindcss.com/docs/border-width#between-children
2054
+ */
2055
+ 'divide-y': [{
2056
+ 'divide-y': scaleBorderWidth()
2057
+ }],
2058
+ /**
2059
+ * Divide Width Y Reverse
2060
+ * @see https://tailwindcss.com/docs/border-width#between-children
2061
+ */
2062
+ 'divide-y-reverse': ['divide-y-reverse'],
2063
+ /**
2064
+ * Border Style
2065
+ * @see https://tailwindcss.com/docs/border-style
2066
+ */
2067
+ 'border-style': [{
2068
+ border: [...scaleLineStyle(), 'hidden', 'none']
2069
+ }],
2070
+ /**
2071
+ * Divide Style
2072
+ * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style
2073
+ */
2074
+ 'divide-style': [{
2075
+ divide: [...scaleLineStyle(), 'hidden', 'none']
2076
+ }],
2077
+ /**
2078
+ * Border Color
2079
+ * @see https://tailwindcss.com/docs/border-color
2080
+ */
2081
+ 'border-color': [{
2082
+ border: scaleColor()
2083
+ }],
2084
+ /**
2085
+ * Border Color X
2086
+ * @see https://tailwindcss.com/docs/border-color
2087
+ */
2088
+ 'border-color-x': [{
2089
+ 'border-x': scaleColor()
2090
+ }],
2091
+ /**
2092
+ * Border Color Y
2093
+ * @see https://tailwindcss.com/docs/border-color
2094
+ */
2095
+ 'border-color-y': [{
2096
+ 'border-y': scaleColor()
2097
+ }],
2098
+ /**
2099
+ * Border Color S
2100
+ * @see https://tailwindcss.com/docs/border-color
2101
+ */
2102
+ 'border-color-s': [{
2103
+ 'border-s': scaleColor()
2104
+ }],
2105
+ /**
2106
+ * Border Color E
2107
+ * @see https://tailwindcss.com/docs/border-color
2108
+ */
2109
+ 'border-color-e': [{
2110
+ 'border-e': scaleColor()
2111
+ }],
2112
+ /**
2113
+ * Border Color Top
2114
+ * @see https://tailwindcss.com/docs/border-color
2115
+ */
2116
+ 'border-color-t': [{
2117
+ 'border-t': scaleColor()
2118
+ }],
2119
+ /**
2120
+ * Border Color Right
2121
+ * @see https://tailwindcss.com/docs/border-color
2122
+ */
2123
+ 'border-color-r': [{
2124
+ 'border-r': scaleColor()
2125
+ }],
2126
+ /**
2127
+ * Border Color Bottom
2128
+ * @see https://tailwindcss.com/docs/border-color
2129
+ */
2130
+ 'border-color-b': [{
2131
+ 'border-b': scaleColor()
2132
+ }],
2133
+ /**
2134
+ * Border Color Left
2135
+ * @see https://tailwindcss.com/docs/border-color
2136
+ */
2137
+ 'border-color-l': [{
2138
+ 'border-l': scaleColor()
2139
+ }],
2140
+ /**
2141
+ * Divide Color
2142
+ * @see https://tailwindcss.com/docs/divide-color
2143
+ */
2144
+ 'divide-color': [{
2145
+ divide: scaleColor()
2146
+ }],
2147
+ /**
2148
+ * Outline Style
2149
+ * @see https://tailwindcss.com/docs/outline-style
2150
+ */
2151
+ 'outline-style': [{
2152
+ outline: [...scaleLineStyle(), 'none', 'hidden']
2153
+ }],
2154
+ /**
2155
+ * Outline Offset
2156
+ * @see https://tailwindcss.com/docs/outline-offset
2157
+ */
2158
+ 'outline-offset': [{
2159
+ 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]
2160
+ }],
2161
+ /**
2162
+ * Outline Width
2163
+ * @see https://tailwindcss.com/docs/outline-width
2164
+ */
2165
+ 'outline-w': [{
2166
+ outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]
2167
+ }],
2168
+ /**
2169
+ * Outline Color
2170
+ * @see https://tailwindcss.com/docs/outline-color
2171
+ */
2172
+ 'outline-color': [{
2173
+ outline: scaleColor()
2174
+ }],
2175
+ // ---------------
2176
+ // --- Effects ---
2177
+ // ---------------
2178
+ /**
2179
+ * Box Shadow
2180
+ * @see https://tailwindcss.com/docs/box-shadow
2181
+ */
2182
+ shadow: [{
2183
+ shadow: [
2184
+ // Deprecated since Tailwind CSS v4.0.0
2185
+ '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]
2186
+ }],
2187
+ /**
2188
+ * Box Shadow Color
2189
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color
2190
+ */
2191
+ 'shadow-color': [{
2192
+ shadow: scaleColor()
2193
+ }],
2194
+ /**
2195
+ * Inset Box Shadow
2196
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow
2197
+ */
2198
+ 'inset-shadow': [{
2199
+ 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]
2200
+ }],
2201
+ /**
2202
+ * Inset Box Shadow Color
2203
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color
2204
+ */
2205
+ 'inset-shadow-color': [{
2206
+ 'inset-shadow': scaleColor()
2207
+ }],
2208
+ /**
2209
+ * Ring Width
2210
+ * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring
2211
+ */
2212
+ 'ring-w': [{
2213
+ ring: scaleBorderWidth()
2214
+ }],
2215
+ /**
2216
+ * Ring Width Inset
2217
+ * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings
2218
+ * @deprecated since Tailwind CSS v4.0.0
2219
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2220
+ */
2221
+ 'ring-w-inset': ['ring-inset'],
2222
+ /**
2223
+ * Ring Color
2224
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color
2225
+ */
2226
+ 'ring-color': [{
2227
+ ring: scaleColor()
2228
+ }],
2229
+ /**
2230
+ * Ring Offset Width
2231
+ * @see https://v3.tailwindcss.com/docs/ring-offset-width
2232
+ * @deprecated since Tailwind CSS v4.0.0
2233
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2234
+ */
2235
+ 'ring-offset-w': [{
2236
+ 'ring-offset': [isNumber, isArbitraryLength]
2237
+ }],
2238
+ /**
2239
+ * Ring Offset Color
2240
+ * @see https://v3.tailwindcss.com/docs/ring-offset-color
2241
+ * @deprecated since Tailwind CSS v4.0.0
2242
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2243
+ */
2244
+ 'ring-offset-color': [{
2245
+ 'ring-offset': scaleColor()
2246
+ }],
2247
+ /**
2248
+ * Inset Ring Width
2249
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring
2250
+ */
2251
+ 'inset-ring-w': [{
2252
+ 'inset-ring': scaleBorderWidth()
2253
+ }],
2254
+ /**
2255
+ * Inset Ring Color
2256
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color
2257
+ */
2258
+ 'inset-ring-color': [{
2259
+ 'inset-ring': scaleColor()
2260
+ }],
2261
+ /**
2262
+ * Text Shadow
2263
+ * @see https://tailwindcss.com/docs/text-shadow
2264
+ */
2265
+ 'text-shadow': [{
2266
+ 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]
2267
+ }],
2268
+ /**
2269
+ * Text Shadow Color
2270
+ * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color
2271
+ */
2272
+ 'text-shadow-color': [{
2273
+ 'text-shadow': scaleColor()
2274
+ }],
2275
+ /**
2276
+ * Opacity
2277
+ * @see https://tailwindcss.com/docs/opacity
2278
+ */
2279
+ opacity: [{
2280
+ opacity: [isNumber, isArbitraryVariable, isArbitraryValue]
2281
+ }],
2282
+ /**
2283
+ * Mix Blend Mode
2284
+ * @see https://tailwindcss.com/docs/mix-blend-mode
2285
+ */
2286
+ 'mix-blend': [{
2287
+ 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']
2288
+ }],
2289
+ /**
2290
+ * Background Blend Mode
2291
+ * @see https://tailwindcss.com/docs/background-blend-mode
2292
+ */
2293
+ 'bg-blend': [{
2294
+ 'bg-blend': scaleBlendMode()
2295
+ }],
2296
+ /**
2297
+ * Mask Clip
2298
+ * @see https://tailwindcss.com/docs/mask-clip
2299
+ */
2300
+ 'mask-clip': [{
2301
+ 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']
2302
+ }, 'mask-no-clip'],
2303
+ /**
2304
+ * Mask Composite
2305
+ * @see https://tailwindcss.com/docs/mask-composite
2306
+ */
2307
+ 'mask-composite': [{
2308
+ mask: ['add', 'subtract', 'intersect', 'exclude']
2309
+ }],
2310
+ /**
2311
+ * Mask Image
2312
+ * @see https://tailwindcss.com/docs/mask-image
2313
+ */
2314
+ 'mask-image-linear-pos': [{
2315
+ 'mask-linear': [isNumber]
2316
+ }],
2317
+ 'mask-image-linear-from-pos': [{
2318
+ 'mask-linear-from': scaleMaskImagePosition()
2319
+ }],
2320
+ 'mask-image-linear-to-pos': [{
2321
+ 'mask-linear-to': scaleMaskImagePosition()
2322
+ }],
2323
+ 'mask-image-linear-from-color': [{
2324
+ 'mask-linear-from': scaleColor()
2325
+ }],
2326
+ 'mask-image-linear-to-color': [{
2327
+ 'mask-linear-to': scaleColor()
2328
+ }],
2329
+ 'mask-image-t-from-pos': [{
2330
+ 'mask-t-from': scaleMaskImagePosition()
2331
+ }],
2332
+ 'mask-image-t-to-pos': [{
2333
+ 'mask-t-to': scaleMaskImagePosition()
2334
+ }],
2335
+ 'mask-image-t-from-color': [{
2336
+ 'mask-t-from': scaleColor()
2337
+ }],
2338
+ 'mask-image-t-to-color': [{
2339
+ 'mask-t-to': scaleColor()
2340
+ }],
2341
+ 'mask-image-r-from-pos': [{
2342
+ 'mask-r-from': scaleMaskImagePosition()
2343
+ }],
2344
+ 'mask-image-r-to-pos': [{
2345
+ 'mask-r-to': scaleMaskImagePosition()
2346
+ }],
2347
+ 'mask-image-r-from-color': [{
2348
+ 'mask-r-from': scaleColor()
2349
+ }],
2350
+ 'mask-image-r-to-color': [{
2351
+ 'mask-r-to': scaleColor()
2352
+ }],
2353
+ 'mask-image-b-from-pos': [{
2354
+ 'mask-b-from': scaleMaskImagePosition()
2355
+ }],
2356
+ 'mask-image-b-to-pos': [{
2357
+ 'mask-b-to': scaleMaskImagePosition()
2358
+ }],
2359
+ 'mask-image-b-from-color': [{
2360
+ 'mask-b-from': scaleColor()
2361
+ }],
2362
+ 'mask-image-b-to-color': [{
2363
+ 'mask-b-to': scaleColor()
2364
+ }],
2365
+ 'mask-image-l-from-pos': [{
2366
+ 'mask-l-from': scaleMaskImagePosition()
2367
+ }],
2368
+ 'mask-image-l-to-pos': [{
2369
+ 'mask-l-to': scaleMaskImagePosition()
2370
+ }],
2371
+ 'mask-image-l-from-color': [{
2372
+ 'mask-l-from': scaleColor()
2373
+ }],
2374
+ 'mask-image-l-to-color': [{
2375
+ 'mask-l-to': scaleColor()
2376
+ }],
2377
+ 'mask-image-x-from-pos': [{
2378
+ 'mask-x-from': scaleMaskImagePosition()
2379
+ }],
2380
+ 'mask-image-x-to-pos': [{
2381
+ 'mask-x-to': scaleMaskImagePosition()
2382
+ }],
2383
+ 'mask-image-x-from-color': [{
2384
+ 'mask-x-from': scaleColor()
2385
+ }],
2386
+ 'mask-image-x-to-color': [{
2387
+ 'mask-x-to': scaleColor()
2388
+ }],
2389
+ 'mask-image-y-from-pos': [{
2390
+ 'mask-y-from': scaleMaskImagePosition()
2391
+ }],
2392
+ 'mask-image-y-to-pos': [{
2393
+ 'mask-y-to': scaleMaskImagePosition()
2394
+ }],
2395
+ 'mask-image-y-from-color': [{
2396
+ 'mask-y-from': scaleColor()
2397
+ }],
2398
+ 'mask-image-y-to-color': [{
2399
+ 'mask-y-to': scaleColor()
2400
+ }],
2401
+ 'mask-image-radial': [{
2402
+ 'mask-radial': [isArbitraryVariable, isArbitraryValue]
2403
+ }],
2404
+ 'mask-image-radial-from-pos': [{
2405
+ 'mask-radial-from': scaleMaskImagePosition()
2406
+ }],
2407
+ 'mask-image-radial-to-pos': [{
2408
+ 'mask-radial-to': scaleMaskImagePosition()
2409
+ }],
2410
+ 'mask-image-radial-from-color': [{
2411
+ 'mask-radial-from': scaleColor()
2412
+ }],
2413
+ 'mask-image-radial-to-color': [{
2414
+ 'mask-radial-to': scaleColor()
2415
+ }],
2416
+ 'mask-image-radial-shape': [{
2417
+ 'mask-radial': ['circle', 'ellipse']
2418
+ }],
2419
+ 'mask-image-radial-size': [{
2420
+ 'mask-radial': [{
2421
+ closest: ['side', 'corner'],
2422
+ farthest: ['side', 'corner']
2423
+ }]
2424
+ }],
2425
+ 'mask-image-radial-pos': [{
2426
+ 'mask-radial-at': scalePosition()
2427
+ }],
2428
+ 'mask-image-conic-pos': [{
2429
+ 'mask-conic': [isNumber]
2430
+ }],
2431
+ 'mask-image-conic-from-pos': [{
2432
+ 'mask-conic-from': scaleMaskImagePosition()
2433
+ }],
2434
+ 'mask-image-conic-to-pos': [{
2435
+ 'mask-conic-to': scaleMaskImagePosition()
2436
+ }],
2437
+ 'mask-image-conic-from-color': [{
2438
+ 'mask-conic-from': scaleColor()
2439
+ }],
2440
+ 'mask-image-conic-to-color': [{
2441
+ 'mask-conic-to': scaleColor()
2442
+ }],
2443
+ /**
2444
+ * Mask Mode
2445
+ * @see https://tailwindcss.com/docs/mask-mode
2446
+ */
2447
+ 'mask-mode': [{
2448
+ mask: ['alpha', 'luminance', 'match']
2449
+ }],
2450
+ /**
2451
+ * Mask Origin
2452
+ * @see https://tailwindcss.com/docs/mask-origin
2453
+ */
2454
+ 'mask-origin': [{
2455
+ 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']
2456
+ }],
2457
+ /**
2458
+ * Mask Position
2459
+ * @see https://tailwindcss.com/docs/mask-position
2460
+ */
2461
+ 'mask-position': [{
2462
+ mask: scaleBgPosition()
2463
+ }],
2464
+ /**
2465
+ * Mask Repeat
2466
+ * @see https://tailwindcss.com/docs/mask-repeat
2467
+ */
2468
+ 'mask-repeat': [{
2469
+ mask: scaleBgRepeat()
2470
+ }],
2471
+ /**
2472
+ * Mask Size
2473
+ * @see https://tailwindcss.com/docs/mask-size
2474
+ */
2475
+ 'mask-size': [{
2476
+ mask: scaleBgSize()
2477
+ }],
2478
+ /**
2479
+ * Mask Type
2480
+ * @see https://tailwindcss.com/docs/mask-type
2481
+ */
2482
+ 'mask-type': [{
2483
+ 'mask-type': ['alpha', 'luminance']
2484
+ }],
2485
+ /**
2486
+ * Mask Image
2487
+ * @see https://tailwindcss.com/docs/mask-image
2488
+ */
2489
+ 'mask-image': [{
2490
+ mask: ['none', isArbitraryVariable, isArbitraryValue]
2491
+ }],
2492
+ // ---------------
2493
+ // --- Filters ---
2494
+ // ---------------
2495
+ /**
2496
+ * Filter
2497
+ * @see https://tailwindcss.com/docs/filter
2498
+ */
2499
+ filter: [{
2500
+ filter: [
2501
+ // Deprecated since Tailwind CSS v3.0.0
2502
+ '', 'none', isArbitraryVariable, isArbitraryValue]
2503
+ }],
2504
+ /**
2505
+ * Blur
2506
+ * @see https://tailwindcss.com/docs/blur
2507
+ */
2508
+ blur: [{
2509
+ blur: scaleBlur()
2510
+ }],
2511
+ /**
2512
+ * Brightness
2513
+ * @see https://tailwindcss.com/docs/brightness
2514
+ */
2515
+ brightness: [{
2516
+ brightness: [isNumber, isArbitraryVariable, isArbitraryValue]
2517
+ }],
2518
+ /**
2519
+ * Contrast
2520
+ * @see https://tailwindcss.com/docs/contrast
2521
+ */
2522
+ contrast: [{
2523
+ contrast: [isNumber, isArbitraryVariable, isArbitraryValue]
2524
+ }],
2525
+ /**
2526
+ * Drop Shadow
2527
+ * @see https://tailwindcss.com/docs/drop-shadow
2528
+ */
2529
+ 'drop-shadow': [{
2530
+ 'drop-shadow': [
2531
+ // Deprecated since Tailwind CSS v4.0.0
2532
+ '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]
2533
+ }],
2534
+ /**
2535
+ * Drop Shadow Color
2536
+ * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color
2537
+ */
2538
+ 'drop-shadow-color': [{
2539
+ 'drop-shadow': scaleColor()
2540
+ }],
2541
+ /**
2542
+ * Grayscale
2543
+ * @see https://tailwindcss.com/docs/grayscale
2544
+ */
2545
+ grayscale: [{
2546
+ grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]
2547
+ }],
2548
+ /**
2549
+ * Hue Rotate
2550
+ * @see https://tailwindcss.com/docs/hue-rotate
2551
+ */
2552
+ 'hue-rotate': [{
2553
+ 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]
2554
+ }],
2555
+ /**
2556
+ * Invert
2557
+ * @see https://tailwindcss.com/docs/invert
2558
+ */
2559
+ invert: [{
2560
+ invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]
2561
+ }],
2562
+ /**
2563
+ * Saturate
2564
+ * @see https://tailwindcss.com/docs/saturate
2565
+ */
2566
+ saturate: [{
2567
+ saturate: [isNumber, isArbitraryVariable, isArbitraryValue]
2568
+ }],
2569
+ /**
2570
+ * Sepia
2571
+ * @see https://tailwindcss.com/docs/sepia
2572
+ */
2573
+ sepia: [{
2574
+ sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]
2575
+ }],
2576
+ /**
2577
+ * Backdrop Filter
2578
+ * @see https://tailwindcss.com/docs/backdrop-filter
2579
+ */
2580
+ 'backdrop-filter': [{
2581
+ 'backdrop-filter': [
2582
+ // Deprecated since Tailwind CSS v3.0.0
2583
+ '', 'none', isArbitraryVariable, isArbitraryValue]
2584
+ }],
2585
+ /**
2586
+ * Backdrop Blur
2587
+ * @see https://tailwindcss.com/docs/backdrop-blur
2588
+ */
2589
+ 'backdrop-blur': [{
2590
+ 'backdrop-blur': scaleBlur()
2591
+ }],
2592
+ /**
2593
+ * Backdrop Brightness
2594
+ * @see https://tailwindcss.com/docs/backdrop-brightness
2595
+ */
2596
+ 'backdrop-brightness': [{
2597
+ 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]
2598
+ }],
2599
+ /**
2600
+ * Backdrop Contrast
2601
+ * @see https://tailwindcss.com/docs/backdrop-contrast
2602
+ */
2603
+ 'backdrop-contrast': [{
2604
+ 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]
2605
+ }],
2606
+ /**
2607
+ * Backdrop Grayscale
2608
+ * @see https://tailwindcss.com/docs/backdrop-grayscale
2609
+ */
2610
+ 'backdrop-grayscale': [{
2611
+ 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]
2612
+ }],
2613
+ /**
2614
+ * Backdrop Hue Rotate
2615
+ * @see https://tailwindcss.com/docs/backdrop-hue-rotate
2616
+ */
2617
+ 'backdrop-hue-rotate': [{
2618
+ 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]
2619
+ }],
2620
+ /**
2621
+ * Backdrop Invert
2622
+ * @see https://tailwindcss.com/docs/backdrop-invert
2623
+ */
2624
+ 'backdrop-invert': [{
2625
+ 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]
2626
+ }],
2627
+ /**
2628
+ * Backdrop Opacity
2629
+ * @see https://tailwindcss.com/docs/backdrop-opacity
2630
+ */
2631
+ 'backdrop-opacity': [{
2632
+ 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]
2633
+ }],
2634
+ /**
2635
+ * Backdrop Saturate
2636
+ * @see https://tailwindcss.com/docs/backdrop-saturate
2637
+ */
2638
+ 'backdrop-saturate': [{
2639
+ 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]
2640
+ }],
2641
+ /**
2642
+ * Backdrop Sepia
2643
+ * @see https://tailwindcss.com/docs/backdrop-sepia
2644
+ */
2645
+ 'backdrop-sepia': [{
2646
+ 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]
2647
+ }],
2648
+ // --------------
2649
+ // --- Tables ---
2650
+ // --------------
2651
+ /**
2652
+ * Border Collapse
2653
+ * @see https://tailwindcss.com/docs/border-collapse
2654
+ */
2655
+ 'border-collapse': [{
2656
+ border: ['collapse', 'separate']
2657
+ }],
2658
+ /**
2659
+ * Border Spacing
2660
+ * @see https://tailwindcss.com/docs/border-spacing
2661
+ */
2662
+ 'border-spacing': [{
2663
+ 'border-spacing': scaleUnambiguousSpacing()
2664
+ }],
2665
+ /**
2666
+ * Border Spacing X
2667
+ * @see https://tailwindcss.com/docs/border-spacing
2668
+ */
2669
+ 'border-spacing-x': [{
2670
+ 'border-spacing-x': scaleUnambiguousSpacing()
2671
+ }],
2672
+ /**
2673
+ * Border Spacing Y
2674
+ * @see https://tailwindcss.com/docs/border-spacing
2675
+ */
2676
+ 'border-spacing-y': [{
2677
+ 'border-spacing-y': scaleUnambiguousSpacing()
2678
+ }],
2679
+ /**
2680
+ * Table Layout
2681
+ * @see https://tailwindcss.com/docs/table-layout
2682
+ */
2683
+ 'table-layout': [{
2684
+ table: ['auto', 'fixed']
2685
+ }],
2686
+ /**
2687
+ * Caption Side
2688
+ * @see https://tailwindcss.com/docs/caption-side
2689
+ */
2690
+ caption: [{
2691
+ caption: ['top', 'bottom']
2692
+ }],
2693
+ // ---------------------------------
2694
+ // --- Transitions and Animation ---
2695
+ // ---------------------------------
2696
+ /**
2697
+ * Transition Property
2698
+ * @see https://tailwindcss.com/docs/transition-property
2699
+ */
2700
+ transition: [{
2701
+ transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]
2702
+ }],
2703
+ /**
2704
+ * Transition Behavior
2705
+ * @see https://tailwindcss.com/docs/transition-behavior
2706
+ */
2707
+ 'transition-behavior': [{
2708
+ transition: ['normal', 'discrete']
2709
+ }],
2710
+ /**
2711
+ * Transition Duration
2712
+ * @see https://tailwindcss.com/docs/transition-duration
2713
+ */
2714
+ duration: [{
2715
+ duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]
2716
+ }],
2717
+ /**
2718
+ * Transition Timing Function
2719
+ * @see https://tailwindcss.com/docs/transition-timing-function
2720
+ */
2721
+ ease: [{
2722
+ ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]
2723
+ }],
2724
+ /**
2725
+ * Transition Delay
2726
+ * @see https://tailwindcss.com/docs/transition-delay
2727
+ */
2728
+ delay: [{
2729
+ delay: [isNumber, isArbitraryVariable, isArbitraryValue]
2730
+ }],
2731
+ /**
2732
+ * Animation
2733
+ * @see https://tailwindcss.com/docs/animation
2734
+ */
2735
+ animate: [{
2736
+ animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]
2737
+ }],
2738
+ // ------------------
2739
+ // --- Transforms ---
2740
+ // ------------------
2741
+ /**
2742
+ * Backface Visibility
2743
+ * @see https://tailwindcss.com/docs/backface-visibility
2744
+ */
2745
+ backface: [{
2746
+ backface: ['hidden', 'visible']
2747
+ }],
2748
+ /**
2749
+ * Perspective
2750
+ * @see https://tailwindcss.com/docs/perspective
2751
+ */
2752
+ perspective: [{
2753
+ perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]
2754
+ }],
2755
+ /**
2756
+ * Perspective Origin
2757
+ * @see https://tailwindcss.com/docs/perspective-origin
2758
+ */
2759
+ 'perspective-origin': [{
2760
+ 'perspective-origin': scalePositionWithArbitrary()
2761
+ }],
2762
+ /**
2763
+ * Rotate
2764
+ * @see https://tailwindcss.com/docs/rotate
2765
+ */
2766
+ rotate: [{
2767
+ rotate: scaleRotate()
2768
+ }],
2769
+ /**
2770
+ * Rotate X
2771
+ * @see https://tailwindcss.com/docs/rotate
2772
+ */
2773
+ 'rotate-x': [{
2774
+ 'rotate-x': scaleRotate()
2775
+ }],
2776
+ /**
2777
+ * Rotate Y
2778
+ * @see https://tailwindcss.com/docs/rotate
2779
+ */
2780
+ 'rotate-y': [{
2781
+ 'rotate-y': scaleRotate()
2782
+ }],
2783
+ /**
2784
+ * Rotate Z
2785
+ * @see https://tailwindcss.com/docs/rotate
2786
+ */
2787
+ 'rotate-z': [{
2788
+ 'rotate-z': scaleRotate()
2789
+ }],
2790
+ /**
2791
+ * Scale
2792
+ * @see https://tailwindcss.com/docs/scale
2793
+ */
2794
+ scale: [{
2795
+ scale: scaleScale()
2796
+ }],
2797
+ /**
2798
+ * Scale X
2799
+ * @see https://tailwindcss.com/docs/scale
2800
+ */
2801
+ 'scale-x': [{
2802
+ 'scale-x': scaleScale()
2803
+ }],
2804
+ /**
2805
+ * Scale Y
2806
+ * @see https://tailwindcss.com/docs/scale
2807
+ */
2808
+ 'scale-y': [{
2809
+ 'scale-y': scaleScale()
2810
+ }],
2811
+ /**
2812
+ * Scale Z
2813
+ * @see https://tailwindcss.com/docs/scale
2814
+ */
2815
+ 'scale-z': [{
2816
+ 'scale-z': scaleScale()
2817
+ }],
2818
+ /**
2819
+ * Scale 3D
2820
+ * @see https://tailwindcss.com/docs/scale
2821
+ */
2822
+ 'scale-3d': ['scale-3d'],
2823
+ /**
2824
+ * Skew
2825
+ * @see https://tailwindcss.com/docs/skew
2826
+ */
2827
+ skew: [{
2828
+ skew: scaleSkew()
2829
+ }],
2830
+ /**
2831
+ * Skew X
2832
+ * @see https://tailwindcss.com/docs/skew
2833
+ */
2834
+ 'skew-x': [{
2835
+ 'skew-x': scaleSkew()
2836
+ }],
2837
+ /**
2838
+ * Skew Y
2839
+ * @see https://tailwindcss.com/docs/skew
2840
+ */
2841
+ 'skew-y': [{
2842
+ 'skew-y': scaleSkew()
2843
+ }],
2844
+ /**
2845
+ * Transform
2846
+ * @see https://tailwindcss.com/docs/transform
2847
+ */
2848
+ transform: [{
2849
+ transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']
2850
+ }],
2851
+ /**
2852
+ * Transform Origin
2853
+ * @see https://tailwindcss.com/docs/transform-origin
2854
+ */
2855
+ 'transform-origin': [{
2856
+ origin: scalePositionWithArbitrary()
2857
+ }],
2858
+ /**
2859
+ * Transform Style
2860
+ * @see https://tailwindcss.com/docs/transform-style
2861
+ */
2862
+ 'transform-style': [{
2863
+ transform: ['3d', 'flat']
2864
+ }],
2865
+ /**
2866
+ * Translate
2867
+ * @see https://tailwindcss.com/docs/translate
2868
+ */
2869
+ translate: [{
2870
+ translate: scaleTranslate()
2871
+ }],
2872
+ /**
2873
+ * Translate X
2874
+ * @see https://tailwindcss.com/docs/translate
2875
+ */
2876
+ 'translate-x': [{
2877
+ 'translate-x': scaleTranslate()
2878
+ }],
2879
+ /**
2880
+ * Translate Y
2881
+ * @see https://tailwindcss.com/docs/translate
2882
+ */
2883
+ 'translate-y': [{
2884
+ 'translate-y': scaleTranslate()
2885
+ }],
2886
+ /**
2887
+ * Translate Z
2888
+ * @see https://tailwindcss.com/docs/translate
2889
+ */
2890
+ 'translate-z': [{
2891
+ 'translate-z': scaleTranslate()
2892
+ }],
2893
+ /**
2894
+ * Translate None
2895
+ * @see https://tailwindcss.com/docs/translate
2896
+ */
2897
+ 'translate-none': ['translate-none'],
2898
+ // ---------------------
2899
+ // --- Interactivity ---
2900
+ // ---------------------
2901
+ /**
2902
+ * Accent Color
2903
+ * @see https://tailwindcss.com/docs/accent-color
2904
+ */
2905
+ accent: [{
2906
+ accent: scaleColor()
2907
+ }],
2908
+ /**
2909
+ * Appearance
2910
+ * @see https://tailwindcss.com/docs/appearance
2911
+ */
2912
+ appearance: [{
2913
+ appearance: ['none', 'auto']
2914
+ }],
2915
+ /**
2916
+ * Caret Color
2917
+ * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
2918
+ */
2919
+ 'caret-color': [{
2920
+ caret: scaleColor()
2921
+ }],
2922
+ /**
2923
+ * Color Scheme
2924
+ * @see https://tailwindcss.com/docs/color-scheme
2925
+ */
2926
+ 'color-scheme': [{
2927
+ scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']
2928
+ }],
2929
+ /**
2930
+ * Cursor
2931
+ * @see https://tailwindcss.com/docs/cursor
2932
+ */
2933
+ cursor: [{
2934
+ cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]
2935
+ }],
2936
+ /**
2937
+ * Field Sizing
2938
+ * @see https://tailwindcss.com/docs/field-sizing
2939
+ */
2940
+ 'field-sizing': [{
2941
+ 'field-sizing': ['fixed', 'content']
2942
+ }],
2943
+ /**
2944
+ * Pointer Events
2945
+ * @see https://tailwindcss.com/docs/pointer-events
2946
+ */
2947
+ 'pointer-events': [{
2948
+ 'pointer-events': ['auto', 'none']
2949
+ }],
2950
+ /**
2951
+ * Resize
2952
+ * @see https://tailwindcss.com/docs/resize
2953
+ */
2954
+ resize: [{
2955
+ resize: ['none', '', 'y', 'x']
2956
+ }],
2957
+ /**
2958
+ * Scroll Behavior
2959
+ * @see https://tailwindcss.com/docs/scroll-behavior
2960
+ */
2961
+ 'scroll-behavior': [{
2962
+ scroll: ['auto', 'smooth']
2963
+ }],
2964
+ /**
2965
+ * Scroll Margin
2966
+ * @see https://tailwindcss.com/docs/scroll-margin
2967
+ */
2968
+ 'scroll-m': [{
2969
+ 'scroll-m': scaleUnambiguousSpacing()
2970
+ }],
2971
+ /**
2972
+ * Scroll Margin X
2973
+ * @see https://tailwindcss.com/docs/scroll-margin
2974
+ */
2975
+ 'scroll-mx': [{
2976
+ 'scroll-mx': scaleUnambiguousSpacing()
2977
+ }],
2978
+ /**
2979
+ * Scroll Margin Y
2980
+ * @see https://tailwindcss.com/docs/scroll-margin
2981
+ */
2982
+ 'scroll-my': [{
2983
+ 'scroll-my': scaleUnambiguousSpacing()
2984
+ }],
2985
+ /**
2986
+ * Scroll Margin Start
2987
+ * @see https://tailwindcss.com/docs/scroll-margin
2988
+ */
2989
+ 'scroll-ms': [{
2990
+ 'scroll-ms': scaleUnambiguousSpacing()
2991
+ }],
2992
+ /**
2993
+ * Scroll Margin End
2994
+ * @see https://tailwindcss.com/docs/scroll-margin
2995
+ */
2996
+ 'scroll-me': [{
2997
+ 'scroll-me': scaleUnambiguousSpacing()
2998
+ }],
2999
+ /**
3000
+ * Scroll Margin Top
3001
+ * @see https://tailwindcss.com/docs/scroll-margin
3002
+ */
3003
+ 'scroll-mt': [{
3004
+ 'scroll-mt': scaleUnambiguousSpacing()
3005
+ }],
3006
+ /**
3007
+ * Scroll Margin Right
3008
+ * @see https://tailwindcss.com/docs/scroll-margin
3009
+ */
3010
+ 'scroll-mr': [{
3011
+ 'scroll-mr': scaleUnambiguousSpacing()
3012
+ }],
3013
+ /**
3014
+ * Scroll Margin Bottom
3015
+ * @see https://tailwindcss.com/docs/scroll-margin
3016
+ */
3017
+ 'scroll-mb': [{
3018
+ 'scroll-mb': scaleUnambiguousSpacing()
3019
+ }],
3020
+ /**
3021
+ * Scroll Margin Left
3022
+ * @see https://tailwindcss.com/docs/scroll-margin
3023
+ */
3024
+ 'scroll-ml': [{
3025
+ 'scroll-ml': scaleUnambiguousSpacing()
3026
+ }],
3027
+ /**
3028
+ * Scroll Padding
3029
+ * @see https://tailwindcss.com/docs/scroll-padding
3030
+ */
3031
+ 'scroll-p': [{
3032
+ 'scroll-p': scaleUnambiguousSpacing()
3033
+ }],
3034
+ /**
3035
+ * Scroll Padding X
3036
+ * @see https://tailwindcss.com/docs/scroll-padding
3037
+ */
3038
+ 'scroll-px': [{
3039
+ 'scroll-px': scaleUnambiguousSpacing()
3040
+ }],
3041
+ /**
3042
+ * Scroll Padding Y
3043
+ * @see https://tailwindcss.com/docs/scroll-padding
3044
+ */
3045
+ 'scroll-py': [{
3046
+ 'scroll-py': scaleUnambiguousSpacing()
3047
+ }],
3048
+ /**
3049
+ * Scroll Padding Start
3050
+ * @see https://tailwindcss.com/docs/scroll-padding
3051
+ */
3052
+ 'scroll-ps': [{
3053
+ 'scroll-ps': scaleUnambiguousSpacing()
3054
+ }],
3055
+ /**
3056
+ * Scroll Padding End
3057
+ * @see https://tailwindcss.com/docs/scroll-padding
3058
+ */
3059
+ 'scroll-pe': [{
3060
+ 'scroll-pe': scaleUnambiguousSpacing()
3061
+ }],
3062
+ /**
3063
+ * Scroll Padding Top
3064
+ * @see https://tailwindcss.com/docs/scroll-padding
3065
+ */
3066
+ 'scroll-pt': [{
3067
+ 'scroll-pt': scaleUnambiguousSpacing()
3068
+ }],
3069
+ /**
3070
+ * Scroll Padding Right
3071
+ * @see https://tailwindcss.com/docs/scroll-padding
3072
+ */
3073
+ 'scroll-pr': [{
3074
+ 'scroll-pr': scaleUnambiguousSpacing()
3075
+ }],
3076
+ /**
3077
+ * Scroll Padding Bottom
3078
+ * @see https://tailwindcss.com/docs/scroll-padding
3079
+ */
3080
+ 'scroll-pb': [{
3081
+ 'scroll-pb': scaleUnambiguousSpacing()
3082
+ }],
3083
+ /**
3084
+ * Scroll Padding Left
3085
+ * @see https://tailwindcss.com/docs/scroll-padding
3086
+ */
3087
+ 'scroll-pl': [{
3088
+ 'scroll-pl': scaleUnambiguousSpacing()
3089
+ }],
3090
+ /**
3091
+ * Scroll Snap Align
3092
+ * @see https://tailwindcss.com/docs/scroll-snap-align
3093
+ */
3094
+ 'snap-align': [{
3095
+ snap: ['start', 'end', 'center', 'align-none']
3096
+ }],
3097
+ /**
3098
+ * Scroll Snap Stop
3099
+ * @see https://tailwindcss.com/docs/scroll-snap-stop
3100
+ */
3101
+ 'snap-stop': [{
3102
+ snap: ['normal', 'always']
3103
+ }],
3104
+ /**
3105
+ * Scroll Snap Type
3106
+ * @see https://tailwindcss.com/docs/scroll-snap-type
3107
+ */
3108
+ 'snap-type': [{
3109
+ snap: ['none', 'x', 'y', 'both']
3110
+ }],
3111
+ /**
3112
+ * Scroll Snap Type Strictness
3113
+ * @see https://tailwindcss.com/docs/scroll-snap-type
3114
+ */
3115
+ 'snap-strictness': [{
3116
+ snap: ['mandatory', 'proximity']
3117
+ }],
3118
+ /**
3119
+ * Touch Action
3120
+ * @see https://tailwindcss.com/docs/touch-action
3121
+ */
3122
+ touch: [{
3123
+ touch: ['auto', 'none', 'manipulation']
3124
+ }],
3125
+ /**
3126
+ * Touch Action X
3127
+ * @see https://tailwindcss.com/docs/touch-action
3128
+ */
3129
+ 'touch-x': [{
3130
+ 'touch-pan': ['x', 'left', 'right']
3131
+ }],
3132
+ /**
3133
+ * Touch Action Y
3134
+ * @see https://tailwindcss.com/docs/touch-action
3135
+ */
3136
+ 'touch-y': [{
3137
+ 'touch-pan': ['y', 'up', 'down']
3138
+ }],
3139
+ /**
3140
+ * Touch Action Pinch Zoom
3141
+ * @see https://tailwindcss.com/docs/touch-action
3142
+ */
3143
+ 'touch-pz': ['touch-pinch-zoom'],
3144
+ /**
3145
+ * User Select
3146
+ * @see https://tailwindcss.com/docs/user-select
3147
+ */
3148
+ select: [{
3149
+ select: ['none', 'text', 'all', 'auto']
3150
+ }],
3151
+ /**
3152
+ * Will Change
3153
+ * @see https://tailwindcss.com/docs/will-change
3154
+ */
3155
+ 'will-change': [{
3156
+ 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]
3157
+ }],
3158
+ // -----------
3159
+ // --- SVG ---
3160
+ // -----------
3161
+ /**
3162
+ * Fill
3163
+ * @see https://tailwindcss.com/docs/fill
3164
+ */
3165
+ fill: [{
3166
+ fill: ['none', ...scaleColor()]
3167
+ }],
3168
+ /**
3169
+ * Stroke Width
3170
+ * @see https://tailwindcss.com/docs/stroke-width
3171
+ */
3172
+ 'stroke-w': [{
3173
+ stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]
3174
+ }],
3175
+ /**
3176
+ * Stroke
3177
+ * @see https://tailwindcss.com/docs/stroke
3178
+ */
3179
+ stroke: [{
3180
+ stroke: ['none', ...scaleColor()]
3181
+ }],
3182
+ // ---------------------
3183
+ // --- Accessibility ---
3184
+ // ---------------------
3185
+ /**
3186
+ * Forced Color Adjust
3187
+ * @see https://tailwindcss.com/docs/forced-color-adjust
3188
+ */
3189
+ 'forced-color-adjust': [{
3190
+ 'forced-color-adjust': ['auto', 'none']
3191
+ }]
3192
+ },
3193
+ conflictingClassGroups: {
3194
+ overflow: ['overflow-x', 'overflow-y'],
3195
+ overscroll: ['overscroll-x', 'overscroll-y'],
3196
+ inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],
3197
+ 'inset-x': ['right', 'left'],
3198
+ 'inset-y': ['top', 'bottom'],
3199
+ flex: ['basis', 'grow', 'shrink'],
3200
+ gap: ['gap-x', 'gap-y'],
3201
+ p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],
3202
+ px: ['pr', 'pl'],
3203
+ py: ['pt', 'pb'],
3204
+ m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],
3205
+ mx: ['mr', 'ml'],
3206
+ my: ['mt', 'mb'],
3207
+ size: ['w', 'h'],
3208
+ 'font-size': ['leading'],
3209
+ 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],
3210
+ 'fvn-ordinal': ['fvn-normal'],
3211
+ 'fvn-slashed-zero': ['fvn-normal'],
3212
+ 'fvn-figure': ['fvn-normal'],
3213
+ 'fvn-spacing': ['fvn-normal'],
3214
+ 'fvn-fraction': ['fvn-normal'],
3215
+ 'line-clamp': ['display', 'overflow'],
3216
+ rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],
3217
+ 'rounded-s': ['rounded-ss', 'rounded-es'],
3218
+ 'rounded-e': ['rounded-se', 'rounded-ee'],
3219
+ 'rounded-t': ['rounded-tl', 'rounded-tr'],
3220
+ 'rounded-r': ['rounded-tr', 'rounded-br'],
3221
+ 'rounded-b': ['rounded-br', 'rounded-bl'],
3222
+ 'rounded-l': ['rounded-tl', 'rounded-bl'],
3223
+ 'border-spacing': ['border-spacing-x', 'border-spacing-y'],
3224
+ 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],
3225
+ 'border-w-x': ['border-w-r', 'border-w-l'],
3226
+ 'border-w-y': ['border-w-t', 'border-w-b'],
3227
+ 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],
3228
+ 'border-color-x': ['border-color-r', 'border-color-l'],
3229
+ 'border-color-y': ['border-color-t', 'border-color-b'],
3230
+ translate: ['translate-x', 'translate-y', 'translate-none'],
3231
+ 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],
3232
+ 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],
3233
+ 'scroll-mx': ['scroll-mr', 'scroll-ml'],
3234
+ 'scroll-my': ['scroll-mt', 'scroll-mb'],
3235
+ 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],
3236
+ 'scroll-px': ['scroll-pr', 'scroll-pl'],
3237
+ 'scroll-py': ['scroll-pt', 'scroll-pb'],
3238
+ touch: ['touch-x', 'touch-y', 'touch-pz'],
3239
+ 'touch-x': ['touch'],
3240
+ 'touch-y': ['touch'],
3241
+ 'touch-pz': ['touch']
3242
+ },
3243
+ conflictingClassGroupModifiers: {
3244
+ 'font-size': ['leading']
3245
+ },
3246
+ orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']
3247
+ };
3248
+ };
3249
+ const twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);
3250
+
3251
+ function cn(...inputs) {
3252
+ return twMerge(clsx(inputs));
3253
+ }
3254
+
3255
+ const buttonVariants = cva([
3256
+ "inline-flex",
3257
+ "items-center",
3258
+ "justify-center",
3259
+ "gap-2",
3260
+ "whitespace-nowrap",
3261
+ "rounded-[0.33em]",
3262
+ "text-sm",
3263
+ "font-medium",
3264
+ "transition-colors",
3265
+ "focus:outline-none",
3266
+ "focus:ring-transparent",
3267
+ "disabled:pointer-events-none",
3268
+ "disabled:opacity-50",
3269
+ "[&_svg]:pointer-events-none",
3270
+ "[&_svg]:size-4",
3271
+ "[&_svg]:shrink-0",
3272
+ ], {
3273
+ variants: {
3274
+ variant: {
3275
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
3276
+ outline: "border border-gray-300 text-gray-700 bg-background hover:bg-accent",
3277
+ ghost: "hover:bg-accent text-gray-700 hover:text-accent-foreground",
3278
+ link: "text-primary underline-offset-4 hover:underline",
3279
+ },
3280
+ scheme: {
3281
+ default: "",
3282
+ primary: "bg-primary text-primary-foreground hover:bg-primary/90",
3283
+ supportive: "bg-supportive text-supportive-foreground hover:bg-supportive/90",
3284
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
3285
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
3286
+ },
3287
+ size: {
3288
+ default: "h-8 px-[1em] py-[0.33em]",
3289
+ sm: "h-8 px-3",
3290
+ lg: "h-11 px-8",
3291
+ md: "h-10 px-6",
3292
+ icon: "h-10 w-10",
3293
+ xs: "h-6 px-3 text-xs",
3294
+ },
3295
+ },
3296
+ compoundVariants: [
3297
+ {
3298
+ variant: "outline",
3299
+ scheme: "primary",
3300
+ class: "bg-background border border-primary text-primary hover:bg-blue-50",
3301
+ },
3302
+ {
3303
+ variant: "outline",
3304
+ scheme: "supportive",
3305
+ class: "bg-background border border-supportive text-supportive hover:bg-green-50",
3306
+ },
3307
+ {
3308
+ variant: "outline",
3309
+ scheme: "destructive",
3310
+ class: "bg-background border border-destructive text-destructive hover:bg-red-50",
3311
+ },
3312
+ ],
3313
+ defaultVariants: {
3314
+ variant: "default",
3315
+ size: "default",
3316
+ },
3317
+ });
3318
+ const Button = React__default.forwardRef(({ className, variant, scheme, size, asChild = false, ...props }, ref) => {
3319
+ const Comp = asChild ? Slot : "button";
3320
+ return (jsx(Comp, { className: cn(buttonVariants({ variant, scheme, size, className })), ref: ref, ...props }));
3321
+ });
3322
+ Button.displayName = "Button";
3323
+
3324
+ // src/subscribable.ts
3325
+ var Subscribable = class {
3326
+ constructor() {
3327
+ this.listeners = /* @__PURE__ */ new Set();
3328
+ this.subscribe = this.subscribe.bind(this);
3329
+ }
3330
+ subscribe(listener) {
3331
+ this.listeners.add(listener);
3332
+ this.onSubscribe();
3333
+ return () => {
3334
+ this.listeners.delete(listener);
3335
+ this.onUnsubscribe();
3336
+ };
3337
+ }
3338
+ hasListeners() {
3339
+ return this.listeners.size > 0;
3340
+ }
3341
+ onSubscribe() {
3342
+ }
3343
+ onUnsubscribe() {
3344
+ }
3345
+ };
3346
+
3347
+ // src/timeoutManager.ts
3348
+ var defaultTimeoutProvider = {
3349
+ // We need the wrapper function syntax below instead of direct references to
3350
+ // global setTimeout etc.
3351
+ //
3352
+ // BAD: `setTimeout: setTimeout`
3353
+ // GOOD: `setTimeout: (cb, delay) => setTimeout(cb, delay)`
3354
+ //
3355
+ // If we use direct references here, then anything that wants to spy on or
3356
+ // replace the global setTimeout (like tests) won't work since we'll already
3357
+ // have a hard reference to the original implementation at the time when this
3358
+ // file was imported.
3359
+ setTimeout: (callback, delay) => setTimeout(callback, delay),
3360
+ clearTimeout: (timeoutId) => clearTimeout(timeoutId),
3361
+ setInterval: (callback, delay) => setInterval(callback, delay),
3362
+ clearInterval: (intervalId) => clearInterval(intervalId)
3363
+ };
3364
+ var TimeoutManager = class {
3365
+ // We cannot have TimeoutManager<T> as we must instantiate it with a concrete
3366
+ // type at app boot; and if we leave that type, then any new timer provider
3367
+ // would need to support ReturnType<typeof setTimeout>, which is infeasible.
3368
+ //
3369
+ // We settle for type safety for the TimeoutProvider type, and accept that
3370
+ // this class is unsafe internally to allow for extension.
3371
+ #provider = defaultTimeoutProvider;
3372
+ #providerCalled = false;
3373
+ setTimeoutProvider(provider) {
3374
+ if (process.env.NODE_ENV !== "production") {
3375
+ if (this.#providerCalled && provider !== this.#provider) {
3376
+ console.error(
3377
+ `[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`,
3378
+ { previous: this.#provider, provider }
3379
+ );
3380
+ }
3381
+ }
3382
+ this.#provider = provider;
3383
+ if (process.env.NODE_ENV !== "production") {
3384
+ this.#providerCalled = false;
3385
+ }
3386
+ }
3387
+ setTimeout(callback, delay) {
3388
+ if (process.env.NODE_ENV !== "production") {
3389
+ this.#providerCalled = true;
3390
+ }
3391
+ return this.#provider.setTimeout(callback, delay);
3392
+ }
3393
+ clearTimeout(timeoutId) {
3394
+ this.#provider.clearTimeout(timeoutId);
3395
+ }
3396
+ setInterval(callback, delay) {
3397
+ if (process.env.NODE_ENV !== "production") {
3398
+ this.#providerCalled = true;
3399
+ }
3400
+ return this.#provider.setInterval(callback, delay);
3401
+ }
3402
+ clearInterval(intervalId) {
3403
+ this.#provider.clearInterval(intervalId);
3404
+ }
3405
+ };
3406
+ var timeoutManager = new TimeoutManager();
3407
+ function systemSetTimeoutZero(callback) {
3408
+ setTimeout(callback, 0);
3409
+ }
3410
+
3411
+ // src/utils.ts
3412
+ var isServer = typeof window === "undefined" || "Deno" in globalThis;
3413
+ function noop() {
3414
+ }
3415
+ function isValidTimeout(value) {
3416
+ return typeof value === "number" && value >= 0 && value !== Infinity;
3417
+ }
3418
+ function timeUntilStale(updatedAt, staleTime) {
3419
+ return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);
3420
+ }
3421
+ function resolveStaleTime(staleTime, query) {
3422
+ return typeof staleTime === "function" ? staleTime(query) : staleTime;
3423
+ }
3424
+ function resolveEnabled(enabled, query) {
3425
+ return typeof enabled === "function" ? enabled(query) : enabled;
3426
+ }
3427
+ var hasOwn = Object.prototype.hasOwnProperty;
3428
+ function replaceEqualDeep(a, b, depth = 0) {
3429
+ if (a === b) {
3430
+ return a;
3431
+ }
3432
+ if (depth > 500) return b;
3433
+ const array = isPlainArray(a) && isPlainArray(b);
3434
+ if (!array && !(isPlainObject(a) && isPlainObject(b))) return b;
3435
+ const aItems = array ? a : Object.keys(a);
3436
+ const aSize = aItems.length;
3437
+ const bItems = array ? b : Object.keys(b);
3438
+ const bSize = bItems.length;
3439
+ const copy = array ? new Array(bSize) : {};
3440
+ let equalItems = 0;
3441
+ for (let i = 0; i < bSize; i++) {
3442
+ const key = array ? i : bItems[i];
3443
+ const aItem = a[key];
3444
+ const bItem = b[key];
3445
+ if (aItem === bItem) {
3446
+ copy[key] = aItem;
3447
+ if (array ? i < aSize : hasOwn.call(a, key)) equalItems++;
3448
+ continue;
3449
+ }
3450
+ if (aItem === null || bItem === null || typeof aItem !== "object" || typeof bItem !== "object") {
3451
+ copy[key] = bItem;
3452
+ continue;
3453
+ }
3454
+ const v = replaceEqualDeep(aItem, bItem, depth + 1);
3455
+ copy[key] = v;
3456
+ if (v === aItem) equalItems++;
3457
+ }
3458
+ return aSize === bSize && equalItems === aSize ? a : copy;
3459
+ }
3460
+ function shallowEqualObjects(a, b) {
3461
+ if (!b || Object.keys(a).length !== Object.keys(b).length) {
3462
+ return false;
3463
+ }
3464
+ for (const key in a) {
3465
+ if (a[key] !== b[key]) {
3466
+ return false;
3467
+ }
3468
+ }
3469
+ return true;
3470
+ }
3471
+ function isPlainArray(value) {
3472
+ return Array.isArray(value) && value.length === Object.keys(value).length;
3473
+ }
3474
+ function isPlainObject(o) {
3475
+ if (!hasObjectPrototype(o)) {
3476
+ return false;
3477
+ }
3478
+ const ctor = o.constructor;
3479
+ if (ctor === void 0) {
3480
+ return true;
3481
+ }
3482
+ const prot = ctor.prototype;
3483
+ if (!hasObjectPrototype(prot)) {
3484
+ return false;
3485
+ }
3486
+ if (!prot.hasOwnProperty("isPrototypeOf")) {
3487
+ return false;
3488
+ }
3489
+ if (Object.getPrototypeOf(o) !== Object.prototype) {
3490
+ return false;
3491
+ }
3492
+ return true;
3493
+ }
3494
+ function hasObjectPrototype(o) {
3495
+ return Object.prototype.toString.call(o) === "[object Object]";
3496
+ }
3497
+ function replaceData(prevData, data, options) {
3498
+ if (typeof options.structuralSharing === "function") {
3499
+ return options.structuralSharing(prevData, data);
3500
+ } else if (options.structuralSharing !== false) {
3501
+ if (process.env.NODE_ENV !== "production") {
3502
+ try {
3503
+ return replaceEqualDeep(prevData, data);
3504
+ } catch (error) {
3505
+ console.error(
3506
+ `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`
3507
+ );
3508
+ throw error;
3509
+ }
3510
+ }
3511
+ return replaceEqualDeep(prevData, data);
3512
+ }
3513
+ return data;
3514
+ }
3515
+ function shouldThrowError(throwOnError, params) {
3516
+ if (typeof throwOnError === "function") {
3517
+ return throwOnError(...params);
3518
+ }
3519
+ return !!throwOnError;
3520
+ }
3521
+
3522
+ // src/focusManager.ts
3523
+ var FocusManager = class extends Subscribable {
3524
+ #focused;
3525
+ #cleanup;
3526
+ #setup;
3527
+ constructor() {
3528
+ super();
3529
+ this.#setup = (onFocus) => {
3530
+ if (!isServer && window.addEventListener) {
3531
+ const listener = () => onFocus();
3532
+ window.addEventListener("visibilitychange", listener, false);
3533
+ return () => {
3534
+ window.removeEventListener("visibilitychange", listener);
3535
+ };
3536
+ }
3537
+ return;
3538
+ };
3539
+ }
3540
+ onSubscribe() {
3541
+ if (!this.#cleanup) {
3542
+ this.setEventListener(this.#setup);
3543
+ }
3544
+ }
3545
+ onUnsubscribe() {
3546
+ if (!this.hasListeners()) {
3547
+ this.#cleanup?.();
3548
+ this.#cleanup = void 0;
3549
+ }
3550
+ }
3551
+ setEventListener(setup) {
3552
+ this.#setup = setup;
3553
+ this.#cleanup?.();
3554
+ this.#cleanup = setup((focused) => {
3555
+ if (typeof focused === "boolean") {
3556
+ this.setFocused(focused);
3557
+ } else {
3558
+ this.onFocus();
3559
+ }
3560
+ });
3561
+ }
3562
+ setFocused(focused) {
3563
+ const changed = this.#focused !== focused;
3564
+ if (changed) {
3565
+ this.#focused = focused;
3566
+ this.onFocus();
3567
+ }
3568
+ }
3569
+ onFocus() {
3570
+ const isFocused = this.isFocused();
3571
+ this.listeners.forEach((listener) => {
3572
+ listener(isFocused);
3573
+ });
3574
+ }
3575
+ isFocused() {
3576
+ if (typeof this.#focused === "boolean") {
3577
+ return this.#focused;
3578
+ }
3579
+ return globalThis.document?.visibilityState !== "hidden";
3580
+ }
3581
+ };
3582
+ var focusManager = new FocusManager();
3583
+
3584
+ // src/thenable.ts
3585
+ function pendingThenable() {
3586
+ let resolve;
3587
+ let reject;
3588
+ const thenable = new Promise((_resolve, _reject) => {
3589
+ resolve = _resolve;
3590
+ reject = _reject;
3591
+ });
3592
+ thenable.status = "pending";
3593
+ thenable.catch(() => {
3594
+ });
3595
+ function finalize(data) {
3596
+ Object.assign(thenable, data);
3597
+ delete thenable.resolve;
3598
+ delete thenable.reject;
3599
+ }
3600
+ thenable.resolve = (value) => {
3601
+ finalize({
3602
+ status: "fulfilled",
3603
+ value
3604
+ });
3605
+ resolve(value);
3606
+ };
3607
+ thenable.reject = (reason) => {
3608
+ finalize({
3609
+ status: "rejected",
3610
+ reason
3611
+ });
3612
+ reject(reason);
3613
+ };
3614
+ return thenable;
3615
+ }
3616
+
3617
+ // src/notifyManager.ts
3618
+ var defaultScheduler = systemSetTimeoutZero;
3619
+ function createNotifyManager() {
3620
+ let queue = [];
3621
+ let transactions = 0;
3622
+ let notifyFn = (callback) => {
3623
+ callback();
3624
+ };
3625
+ let batchNotifyFn = (callback) => {
3626
+ callback();
3627
+ };
3628
+ let scheduleFn = defaultScheduler;
3629
+ const schedule = (callback) => {
3630
+ if (transactions) {
3631
+ queue.push(callback);
3632
+ } else {
3633
+ scheduleFn(() => {
3634
+ notifyFn(callback);
3635
+ });
3636
+ }
3637
+ };
3638
+ const flush = () => {
3639
+ const originalQueue = queue;
3640
+ queue = [];
3641
+ if (originalQueue.length) {
3642
+ scheduleFn(() => {
3643
+ batchNotifyFn(() => {
3644
+ originalQueue.forEach((callback) => {
3645
+ notifyFn(callback);
3646
+ });
3647
+ });
3648
+ });
3649
+ }
3650
+ };
3651
+ return {
3652
+ batch: (callback) => {
3653
+ let result;
3654
+ transactions++;
3655
+ try {
3656
+ result = callback();
3657
+ } finally {
3658
+ transactions--;
3659
+ if (!transactions) {
3660
+ flush();
3661
+ }
3662
+ }
3663
+ return result;
3664
+ },
3665
+ /**
3666
+ * All calls to the wrapped function will be batched.
3667
+ */
3668
+ batchCalls: (callback) => {
3669
+ return (...args) => {
3670
+ schedule(() => {
3671
+ callback(...args);
3672
+ });
3673
+ };
3674
+ },
3675
+ schedule,
3676
+ /**
3677
+ * Use this method to set a custom notify function.
3678
+ * This can be used to for example wrap notifications with `React.act` while running tests.
3679
+ */
3680
+ setNotifyFunction: (fn) => {
3681
+ notifyFn = fn;
3682
+ },
3683
+ /**
3684
+ * Use this method to set a custom function to batch notifications together into a single tick.
3685
+ * By default React Query will use the batch function provided by ReactDOM or React Native.
3686
+ */
3687
+ setBatchNotifyFunction: (fn) => {
3688
+ batchNotifyFn = fn;
3689
+ },
3690
+ setScheduler: (fn) => {
3691
+ scheduleFn = fn;
3692
+ }
3693
+ };
3694
+ }
3695
+ var notifyManager = createNotifyManager();
3696
+
3697
+ // src/onlineManager.ts
3698
+ var OnlineManager = class extends Subscribable {
3699
+ #online = true;
3700
+ #cleanup;
3701
+ #setup;
3702
+ constructor() {
3703
+ super();
3704
+ this.#setup = (onOnline) => {
3705
+ if (!isServer && window.addEventListener) {
3706
+ const onlineListener = () => onOnline(true);
3707
+ const offlineListener = () => onOnline(false);
3708
+ window.addEventListener("online", onlineListener, false);
3709
+ window.addEventListener("offline", offlineListener, false);
3710
+ return () => {
3711
+ window.removeEventListener("online", onlineListener);
3712
+ window.removeEventListener("offline", offlineListener);
3713
+ };
3714
+ }
3715
+ return;
3716
+ };
3717
+ }
3718
+ onSubscribe() {
3719
+ if (!this.#cleanup) {
3720
+ this.setEventListener(this.#setup);
3721
+ }
3722
+ }
3723
+ onUnsubscribe() {
3724
+ if (!this.hasListeners()) {
3725
+ this.#cleanup?.();
3726
+ this.#cleanup = void 0;
3727
+ }
3728
+ }
3729
+ setEventListener(setup) {
3730
+ this.#setup = setup;
3731
+ this.#cleanup?.();
3732
+ this.#cleanup = setup(this.setOnline.bind(this));
3733
+ }
3734
+ setOnline(online) {
3735
+ const changed = this.#online !== online;
3736
+ if (changed) {
3737
+ this.#online = online;
3738
+ this.listeners.forEach((listener) => {
3739
+ listener(online);
3740
+ });
3741
+ }
3742
+ }
3743
+ isOnline() {
3744
+ return this.#online;
3745
+ }
3746
+ };
3747
+ var onlineManager = new OnlineManager();
3748
+
3749
+ // src/retryer.ts
3750
+ function canFetch(networkMode) {
3751
+ return (networkMode ?? "online") === "online" ? onlineManager.isOnline() : true;
3752
+ }
3753
+
3754
+ // src/query.ts
3755
+ function fetchState(data, options) {
3756
+ return {
3757
+ fetchFailureCount: 0,
3758
+ fetchFailureReason: null,
3759
+ fetchStatus: canFetch(options.networkMode) ? "fetching" : "paused",
3760
+ ...data === void 0 && {
3761
+ error: null,
3762
+ status: "pending"
3763
+ }
3764
+ };
3765
+ }
3766
+
3767
+ // src/queryObserver.ts
3768
+ var QueryObserver = class extends Subscribable {
3769
+ constructor(client, options) {
3770
+ super();
3771
+ this.options = options;
3772
+ this.#client = client;
3773
+ this.#selectError = null;
3774
+ this.#currentThenable = pendingThenable();
3775
+ this.bindMethods();
3776
+ this.setOptions(options);
3777
+ }
3778
+ #client;
3779
+ #currentQuery = void 0;
3780
+ #currentQueryInitialState = void 0;
3781
+ #currentResult = void 0;
3782
+ #currentResultState;
3783
+ #currentResultOptions;
3784
+ #currentThenable;
3785
+ #selectError;
3786
+ #selectFn;
3787
+ #selectResult;
3788
+ // This property keeps track of the last query with defined data.
3789
+ // It will be used to pass the previous data and query to the placeholder function between renders.
3790
+ #lastQueryWithDefinedData;
3791
+ #staleTimeoutId;
3792
+ #refetchIntervalId;
3793
+ #currentRefetchInterval;
3794
+ #trackedProps = /* @__PURE__ */ new Set();
3795
+ bindMethods() {
3796
+ this.refetch = this.refetch.bind(this);
3797
+ }
3798
+ onSubscribe() {
3799
+ if (this.listeners.size === 1) {
3800
+ this.#currentQuery.addObserver(this);
3801
+ if (shouldFetchOnMount(this.#currentQuery, this.options)) {
3802
+ this.#executeFetch();
3803
+ } else {
3804
+ this.updateResult();
3805
+ }
3806
+ this.#updateTimers();
3807
+ }
3808
+ }
3809
+ onUnsubscribe() {
3810
+ if (!this.hasListeners()) {
3811
+ this.destroy();
3812
+ }
3813
+ }
3814
+ shouldFetchOnReconnect() {
3815
+ return shouldFetchOn(
3816
+ this.#currentQuery,
3817
+ this.options,
3818
+ this.options.refetchOnReconnect
3819
+ );
3820
+ }
3821
+ shouldFetchOnWindowFocus() {
3822
+ return shouldFetchOn(
3823
+ this.#currentQuery,
3824
+ this.options,
3825
+ this.options.refetchOnWindowFocus
3826
+ );
3827
+ }
3828
+ destroy() {
3829
+ this.listeners = /* @__PURE__ */ new Set();
3830
+ this.#clearStaleTimeout();
3831
+ this.#clearRefetchInterval();
3832
+ this.#currentQuery.removeObserver(this);
3833
+ }
3834
+ setOptions(options) {
3835
+ const prevOptions = this.options;
3836
+ const prevQuery = this.#currentQuery;
3837
+ this.options = this.#client.defaultQueryOptions(options);
3838
+ if (this.options.enabled !== void 0 && typeof this.options.enabled !== "boolean" && typeof this.options.enabled !== "function" && typeof resolveEnabled(this.options.enabled, this.#currentQuery) !== "boolean") {
3839
+ throw new Error(
3840
+ "Expected enabled to be a boolean or a callback that returns a boolean"
3841
+ );
3842
+ }
3843
+ this.#updateQuery();
3844
+ this.#currentQuery.setOptions(this.options);
3845
+ if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {
3846
+ this.#client.getQueryCache().notify({
3847
+ type: "observerOptionsUpdated",
3848
+ query: this.#currentQuery,
3849
+ observer: this
3850
+ });
3851
+ }
3852
+ const mounted = this.hasListeners();
3853
+ if (mounted && shouldFetchOptionally(
3854
+ this.#currentQuery,
3855
+ prevQuery,
3856
+ this.options,
3857
+ prevOptions
3858
+ )) {
3859
+ this.#executeFetch();
3860
+ }
3861
+ this.updateResult();
3862
+ if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {
3863
+ this.#updateStaleTimeout();
3864
+ }
3865
+ const nextRefetchInterval = this.#computeRefetchInterval();
3866
+ if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {
3867
+ this.#updateRefetchInterval(nextRefetchInterval);
3868
+ }
3869
+ }
3870
+ getOptimisticResult(options) {
3871
+ const query = this.#client.getQueryCache().build(this.#client, options);
3872
+ const result = this.createResult(query, options);
3873
+ if (shouldAssignObserverCurrentProperties(this, result)) {
3874
+ this.#currentResult = result;
3875
+ this.#currentResultOptions = this.options;
3876
+ this.#currentResultState = this.#currentQuery.state;
3877
+ }
3878
+ return result;
3879
+ }
3880
+ getCurrentResult() {
3881
+ return this.#currentResult;
3882
+ }
3883
+ trackResult(result, onPropTracked) {
3884
+ return new Proxy(result, {
3885
+ get: (target, key) => {
3886
+ this.trackProp(key);
3887
+ onPropTracked?.(key);
3888
+ if (key === "promise") {
3889
+ this.trackProp("data");
3890
+ if (!this.options.experimental_prefetchInRender && this.#currentThenable.status === "pending") {
3891
+ this.#currentThenable.reject(
3892
+ new Error(
3893
+ "experimental_prefetchInRender feature flag is not enabled"
3894
+ )
3895
+ );
3896
+ }
3897
+ }
3898
+ return Reflect.get(target, key);
3899
+ }
3900
+ });
3901
+ }
3902
+ trackProp(key) {
3903
+ this.#trackedProps.add(key);
3904
+ }
3905
+ getCurrentQuery() {
3906
+ return this.#currentQuery;
3907
+ }
3908
+ refetch({ ...options } = {}) {
3909
+ return this.fetch({
3910
+ ...options
3911
+ });
3912
+ }
3913
+ fetchOptimistic(options) {
3914
+ const defaultedOptions = this.#client.defaultQueryOptions(options);
3915
+ const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);
3916
+ return query.fetch().then(() => this.createResult(query, defaultedOptions));
3917
+ }
3918
+ fetch(fetchOptions) {
3919
+ return this.#executeFetch({
3920
+ ...fetchOptions,
3921
+ cancelRefetch: fetchOptions.cancelRefetch ?? true
3922
+ }).then(() => {
3923
+ this.updateResult();
3924
+ return this.#currentResult;
3925
+ });
3926
+ }
3927
+ #executeFetch(fetchOptions) {
3928
+ this.#updateQuery();
3929
+ let promise = this.#currentQuery.fetch(
3930
+ this.options,
3931
+ fetchOptions
3932
+ );
3933
+ if (!fetchOptions?.throwOnError) {
3934
+ promise = promise.catch(noop);
3935
+ }
3936
+ return promise;
3937
+ }
3938
+ #updateStaleTimeout() {
3939
+ this.#clearStaleTimeout();
3940
+ const staleTime = resolveStaleTime(
3941
+ this.options.staleTime,
3942
+ this.#currentQuery
3943
+ );
3944
+ if (isServer || this.#currentResult.isStale || !isValidTimeout(staleTime)) {
3945
+ return;
3946
+ }
3947
+ const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);
3948
+ const timeout = time + 1;
3949
+ this.#staleTimeoutId = timeoutManager.setTimeout(() => {
3950
+ if (!this.#currentResult.isStale) {
3951
+ this.updateResult();
3952
+ }
3953
+ }, timeout);
3954
+ }
3955
+ #computeRefetchInterval() {
3956
+ return (typeof this.options.refetchInterval === "function" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;
3957
+ }
3958
+ #updateRefetchInterval(nextInterval) {
3959
+ this.#clearRefetchInterval();
3960
+ this.#currentRefetchInterval = nextInterval;
3961
+ if (isServer || resolveEnabled(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {
3962
+ return;
3963
+ }
3964
+ this.#refetchIntervalId = timeoutManager.setInterval(() => {
3965
+ if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {
3966
+ this.#executeFetch();
3967
+ }
3968
+ }, this.#currentRefetchInterval);
3969
+ }
3970
+ #updateTimers() {
3971
+ this.#updateStaleTimeout();
3972
+ this.#updateRefetchInterval(this.#computeRefetchInterval());
3973
+ }
3974
+ #clearStaleTimeout() {
3975
+ if (this.#staleTimeoutId) {
3976
+ timeoutManager.clearTimeout(this.#staleTimeoutId);
3977
+ this.#staleTimeoutId = void 0;
3978
+ }
3979
+ }
3980
+ #clearRefetchInterval() {
3981
+ if (this.#refetchIntervalId) {
3982
+ timeoutManager.clearInterval(this.#refetchIntervalId);
3983
+ this.#refetchIntervalId = void 0;
3984
+ }
3985
+ }
3986
+ createResult(query, options) {
3987
+ const prevQuery = this.#currentQuery;
3988
+ const prevOptions = this.options;
3989
+ const prevResult = this.#currentResult;
3990
+ const prevResultState = this.#currentResultState;
3991
+ const prevResultOptions = this.#currentResultOptions;
3992
+ const queryChange = query !== prevQuery;
3993
+ const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;
3994
+ const { state } = query;
3995
+ let newState = { ...state };
3996
+ let isPlaceholderData = false;
3997
+ let data;
3998
+ if (options._optimisticResults) {
3999
+ const mounted = this.hasListeners();
4000
+ const fetchOnMount = !mounted && shouldFetchOnMount(query, options);
4001
+ const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);
4002
+ if (fetchOnMount || fetchOptionally) {
4003
+ newState = {
4004
+ ...newState,
4005
+ ...fetchState(state.data, query.options)
4006
+ };
4007
+ }
4008
+ if (options._optimisticResults === "isRestoring") {
4009
+ newState.fetchStatus = "idle";
4010
+ }
4011
+ }
4012
+ let { error, errorUpdatedAt, status } = newState;
4013
+ data = newState.data;
4014
+ let skipSelect = false;
4015
+ if (options.placeholderData !== void 0 && data === void 0 && status === "pending") {
4016
+ let placeholderData;
4017
+ if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {
4018
+ placeholderData = prevResult.data;
4019
+ skipSelect = true;
4020
+ } else {
4021
+ placeholderData = typeof options.placeholderData === "function" ? options.placeholderData(
4022
+ this.#lastQueryWithDefinedData?.state.data,
4023
+ this.#lastQueryWithDefinedData
4024
+ ) : options.placeholderData;
4025
+ }
4026
+ if (placeholderData !== void 0) {
4027
+ status = "success";
4028
+ data = replaceData(
4029
+ prevResult?.data,
4030
+ placeholderData,
4031
+ options
4032
+ );
4033
+ isPlaceholderData = true;
4034
+ }
4035
+ }
4036
+ if (options.select && data !== void 0 && !skipSelect) {
4037
+ if (prevResult && data === prevResultState?.data && options.select === this.#selectFn) {
4038
+ data = this.#selectResult;
4039
+ } else {
4040
+ try {
4041
+ this.#selectFn = options.select;
4042
+ data = options.select(data);
4043
+ data = replaceData(prevResult?.data, data, options);
4044
+ this.#selectResult = data;
4045
+ this.#selectError = null;
4046
+ } catch (selectError) {
4047
+ this.#selectError = selectError;
4048
+ }
4049
+ }
4050
+ }
4051
+ if (this.#selectError) {
4052
+ error = this.#selectError;
4053
+ data = this.#selectResult;
4054
+ errorUpdatedAt = Date.now();
4055
+ status = "error";
4056
+ }
4057
+ const isFetching = newState.fetchStatus === "fetching";
4058
+ const isPending = status === "pending";
4059
+ const isError = status === "error";
4060
+ const isLoading = isPending && isFetching;
4061
+ const hasData = data !== void 0;
4062
+ const result = {
4063
+ status,
4064
+ fetchStatus: newState.fetchStatus,
4065
+ isPending,
4066
+ isSuccess: status === "success",
4067
+ isError,
4068
+ isInitialLoading: isLoading,
4069
+ isLoading,
4070
+ data,
4071
+ dataUpdatedAt: newState.dataUpdatedAt,
4072
+ error,
4073
+ errorUpdatedAt,
4074
+ failureCount: newState.fetchFailureCount,
4075
+ failureReason: newState.fetchFailureReason,
4076
+ errorUpdateCount: newState.errorUpdateCount,
4077
+ isFetched: newState.dataUpdateCount > 0 || newState.errorUpdateCount > 0,
4078
+ isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,
4079
+ isFetching,
4080
+ isRefetching: isFetching && !isPending,
4081
+ isLoadingError: isError && !hasData,
4082
+ isPaused: newState.fetchStatus === "paused",
4083
+ isPlaceholderData,
4084
+ isRefetchError: isError && hasData,
4085
+ isStale: isStale(query, options),
4086
+ refetch: this.refetch,
4087
+ promise: this.#currentThenable,
4088
+ isEnabled: resolveEnabled(options.enabled, query) !== false
4089
+ };
4090
+ const nextResult = result;
4091
+ if (this.options.experimental_prefetchInRender) {
4092
+ const hasResultData = nextResult.data !== void 0;
4093
+ const isErrorWithoutData = nextResult.status === "error" && !hasResultData;
4094
+ const finalizeThenableIfPossible = (thenable) => {
4095
+ if (isErrorWithoutData) {
4096
+ thenable.reject(nextResult.error);
4097
+ } else if (hasResultData) {
4098
+ thenable.resolve(nextResult.data);
4099
+ }
4100
+ };
4101
+ const recreateThenable = () => {
4102
+ const pending = this.#currentThenable = nextResult.promise = pendingThenable();
4103
+ finalizeThenableIfPossible(pending);
4104
+ };
4105
+ const prevThenable = this.#currentThenable;
4106
+ switch (prevThenable.status) {
4107
+ case "pending":
4108
+ if (query.queryHash === prevQuery.queryHash) {
4109
+ finalizeThenableIfPossible(prevThenable);
4110
+ }
4111
+ break;
4112
+ case "fulfilled":
4113
+ if (isErrorWithoutData || nextResult.data !== prevThenable.value) {
4114
+ recreateThenable();
4115
+ }
4116
+ break;
4117
+ case "rejected":
4118
+ if (!isErrorWithoutData || nextResult.error !== prevThenable.reason) {
4119
+ recreateThenable();
4120
+ }
4121
+ break;
4122
+ }
4123
+ }
4124
+ return nextResult;
4125
+ }
4126
+ updateResult() {
4127
+ const prevResult = this.#currentResult;
4128
+ const nextResult = this.createResult(this.#currentQuery, this.options);
4129
+ this.#currentResultState = this.#currentQuery.state;
4130
+ this.#currentResultOptions = this.options;
4131
+ if (this.#currentResultState.data !== void 0) {
4132
+ this.#lastQueryWithDefinedData = this.#currentQuery;
4133
+ }
4134
+ if (shallowEqualObjects(nextResult, prevResult)) {
4135
+ return;
4136
+ }
4137
+ this.#currentResult = nextResult;
4138
+ const shouldNotifyListeners = () => {
4139
+ if (!prevResult) {
4140
+ return true;
4141
+ }
4142
+ const { notifyOnChangeProps } = this.options;
4143
+ const notifyOnChangePropsValue = typeof notifyOnChangeProps === "function" ? notifyOnChangeProps() : notifyOnChangeProps;
4144
+ if (notifyOnChangePropsValue === "all" || !notifyOnChangePropsValue && !this.#trackedProps.size) {
4145
+ return true;
4146
+ }
4147
+ const includedProps = new Set(
4148
+ notifyOnChangePropsValue ?? this.#trackedProps
4149
+ );
4150
+ if (this.options.throwOnError) {
4151
+ includedProps.add("error");
4152
+ }
4153
+ return Object.keys(this.#currentResult).some((key) => {
4154
+ const typedKey = key;
4155
+ const changed = this.#currentResult[typedKey] !== prevResult[typedKey];
4156
+ return changed && includedProps.has(typedKey);
4157
+ });
4158
+ };
4159
+ this.#notify({ listeners: shouldNotifyListeners() });
4160
+ }
4161
+ #updateQuery() {
4162
+ const query = this.#client.getQueryCache().build(this.#client, this.options);
4163
+ if (query === this.#currentQuery) {
4164
+ return;
4165
+ }
4166
+ const prevQuery = this.#currentQuery;
4167
+ this.#currentQuery = query;
4168
+ this.#currentQueryInitialState = query.state;
4169
+ if (this.hasListeners()) {
4170
+ prevQuery?.removeObserver(this);
4171
+ query.addObserver(this);
4172
+ }
4173
+ }
4174
+ onQueryUpdate() {
4175
+ this.updateResult();
4176
+ if (this.hasListeners()) {
4177
+ this.#updateTimers();
4178
+ }
4179
+ }
4180
+ #notify(notifyOptions) {
4181
+ notifyManager.batch(() => {
4182
+ if (notifyOptions.listeners) {
4183
+ this.listeners.forEach((listener) => {
4184
+ listener(this.#currentResult);
4185
+ });
4186
+ }
4187
+ this.#client.getQueryCache().notify({
4188
+ query: this.#currentQuery,
4189
+ type: "observerResultsUpdated"
4190
+ });
4191
+ });
4192
+ }
4193
+ };
4194
+ function shouldLoadOnMount(query, options) {
4195
+ return resolveEnabled(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === "error" && options.retryOnMount === false);
4196
+ }
4197
+ function shouldFetchOnMount(query, options) {
4198
+ return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);
4199
+ }
4200
+ function shouldFetchOn(query, options, field) {
4201
+ if (resolveEnabled(options.enabled, query) !== false && resolveStaleTime(options.staleTime, query) !== "static") {
4202
+ const value = typeof field === "function" ? field(query) : field;
4203
+ return value === "always" || value !== false && isStale(query, options);
4204
+ }
4205
+ return false;
4206
+ }
4207
+ function shouldFetchOptionally(query, prevQuery, options, prevOptions) {
4208
+ return (query !== prevQuery || resolveEnabled(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== "error") && isStale(query, options);
4209
+ }
4210
+ function isStale(query, options) {
4211
+ return resolveEnabled(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));
4212
+ }
4213
+ function shouldAssignObserverCurrentProperties(observer, optimisticResult) {
4214
+ if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {
4215
+ return true;
4216
+ }
4217
+ return false;
4218
+ }
4219
+
4220
+ var QueryClientContext = React.createContext(
4221
+ void 0
4222
+ );
4223
+ var useQueryClient = (queryClient) => {
4224
+ const client = React.useContext(QueryClientContext);
4225
+ if (!client) {
4226
+ throw new Error("No QueryClient set, use QueryClientProvider to set one");
4227
+ }
4228
+ return client;
4229
+ };
4230
+
4231
+ var IsRestoringContext = React.createContext(false);
4232
+ var useIsRestoring = () => React.useContext(IsRestoringContext);
4233
+ IsRestoringContext.Provider;
4234
+
4235
+ function createValue() {
4236
+ let isReset = false;
4237
+ return {
4238
+ clearReset: () => {
4239
+ isReset = false;
4240
+ },
4241
+ reset: () => {
4242
+ isReset = true;
4243
+ },
4244
+ isReset: () => {
4245
+ return isReset;
4246
+ }
4247
+ };
4248
+ }
4249
+ var QueryErrorResetBoundaryContext = React.createContext(createValue());
4250
+ var useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);
4251
+
4252
+ var ensurePreventErrorBoundaryRetry = (options, errorResetBoundary, query) => {
4253
+ const throwOnError = query?.state.error && typeof options.throwOnError === "function" ? shouldThrowError(options.throwOnError, [query.state.error, query]) : options.throwOnError;
4254
+ if (options.suspense || options.experimental_prefetchInRender || throwOnError) {
4255
+ if (!errorResetBoundary.isReset()) {
4256
+ options.retryOnMount = false;
4257
+ }
4258
+ }
4259
+ };
4260
+ var useClearResetErrorBoundary = (errorResetBoundary) => {
4261
+ React.useEffect(() => {
4262
+ errorResetBoundary.clearReset();
4263
+ }, [errorResetBoundary]);
4264
+ };
4265
+ var getHasError = ({
4266
+ result,
4267
+ errorResetBoundary,
4268
+ throwOnError,
4269
+ query,
4270
+ suspense
4271
+ }) => {
4272
+ return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));
4273
+ };
4274
+
4275
+ // src/suspense.ts
4276
+ var ensureSuspenseTimers = (defaultedOptions) => {
4277
+ if (defaultedOptions.suspense) {
4278
+ const MIN_SUSPENSE_TIME_MS = 1e3;
4279
+ const clamp = (value) => value === "static" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);
4280
+ const originalStaleTime = defaultedOptions.staleTime;
4281
+ defaultedOptions.staleTime = typeof originalStaleTime === "function" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);
4282
+ if (typeof defaultedOptions.gcTime === "number") {
4283
+ defaultedOptions.gcTime = Math.max(
4284
+ defaultedOptions.gcTime,
4285
+ MIN_SUSPENSE_TIME_MS
4286
+ );
4287
+ }
4288
+ }
4289
+ };
4290
+ var willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;
4291
+ var shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;
4292
+ var fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {
4293
+ errorResetBoundary.clearReset();
4294
+ });
4295
+
4296
+ function useBaseQuery(options, Observer, queryClient) {
4297
+ if (process.env.NODE_ENV !== "production") {
4298
+ if (typeof options !== "object" || Array.isArray(options)) {
4299
+ throw new Error(
4300
+ 'Bad argument type. Starting with v5, only the "Object" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object'
4301
+ );
4302
+ }
4303
+ }
4304
+ const isRestoring = useIsRestoring();
4305
+ const errorResetBoundary = useQueryErrorResetBoundary();
4306
+ const client = useQueryClient();
4307
+ const defaultedOptions = client.defaultQueryOptions(options);
4308
+ client.getDefaultOptions().queries?._experimental_beforeQuery?.(
4309
+ defaultedOptions
4310
+ );
4311
+ const query = client.getQueryCache().get(defaultedOptions.queryHash);
4312
+ if (process.env.NODE_ENV !== "production") {
4313
+ if (!defaultedOptions.queryFn) {
4314
+ console.error(
4315
+ `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`
4316
+ );
4317
+ }
4318
+ }
4319
+ defaultedOptions._optimisticResults = isRestoring ? "isRestoring" : "optimistic";
4320
+ ensureSuspenseTimers(defaultedOptions);
4321
+ ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query);
4322
+ useClearResetErrorBoundary(errorResetBoundary);
4323
+ const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash);
4324
+ const [observer] = React.useState(
4325
+ () => new Observer(
4326
+ client,
4327
+ defaultedOptions
4328
+ )
4329
+ );
4330
+ const result = observer.getOptimisticResult(defaultedOptions);
4331
+ const shouldSubscribe = !isRestoring && options.subscribed !== false;
4332
+ React.useSyncExternalStore(
4333
+ React.useCallback(
4334
+ (onStoreChange) => {
4335
+ const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;
4336
+ observer.updateResult();
4337
+ return unsubscribe;
4338
+ },
4339
+ [observer, shouldSubscribe]
4340
+ ),
4341
+ () => observer.getCurrentResult(),
4342
+ () => observer.getCurrentResult()
4343
+ );
4344
+ React.useEffect(() => {
4345
+ observer.setOptions(defaultedOptions);
4346
+ }, [defaultedOptions, observer]);
4347
+ if (shouldSuspend(defaultedOptions, result)) {
4348
+ throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);
4349
+ }
4350
+ if (getHasError({
4351
+ result,
4352
+ errorResetBoundary,
4353
+ throwOnError: defaultedOptions.throwOnError,
4354
+ query,
4355
+ suspense: defaultedOptions.suspense
4356
+ })) {
4357
+ throw result.error;
4358
+ }
4359
+ client.getDefaultOptions().queries?._experimental_afterQuery?.(
4360
+ defaultedOptions,
4361
+ result
4362
+ );
4363
+ if (defaultedOptions.experimental_prefetchInRender && !isServer && willFetch(result, isRestoring)) {
4364
+ const promise = isNewCacheEntry ? (
4365
+ // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted
4366
+ fetchOptimistic(defaultedOptions, observer, errorResetBoundary)
4367
+ ) : (
4368
+ // subscribe to the "cache promise" so that we can finalize the currentThenable once data comes in
4369
+ query?.promise
4370
+ );
4371
+ promise?.catch(noop).finally(() => {
4372
+ observer.updateResult();
4373
+ });
4374
+ }
4375
+ return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;
4376
+ }
4377
+
4378
+ function useQuery(options, queryClient) {
4379
+ return useBaseQuery(options, QueryObserver);
4380
+ }
4381
+
4382
+ /**
4383
+ * The orchestrator service to get the process from.
4384
+ *
4385
+ * @param processId
4386
+ * @returns
4387
+ */
4388
+ const orchestratorFetcher = (processId) => fetch(`${config.orchestratorApi}/${encodeURIComponent(processId)}`, {
4389
+ method: "GET",
4390
+ headers: {
4391
+ "Content-Type": "application/json",
4392
+ },
4393
+ });
4394
+ /**
4395
+ * Hook for handling async processes on client.
4396
+ *
4397
+ * @hook
4398
+ * @param UseAsyncProcessOptions
4399
+ * @returns
4400
+ */
4401
+ function useAsyncProcess({ processId, baseInterval = 1000, maxInterval = 30000, }) {
4402
+ const [status, setStatus] = useState("pending");
4403
+ const attemptRef = useRef(0);
4404
+ const query = useQuery({
4405
+ queryKey: ["process", processId],
4406
+ queryFn: async () => {
4407
+ if (!processId)
4408
+ throw new Error("No processId");
4409
+ const res = await orchestratorFetcher(processId);
4410
+ if (res.status === "pending") {
4411
+ setStatus("pending");
4412
+ }
4413
+ else if (res.status === "handled") {
4414
+ setStatus("handled");
4415
+ }
4416
+ else if (res.status === "failed") {
4417
+ setStatus("failed");
4418
+ }
4419
+ return res;
4420
+ },
4421
+ // Fetching only works if the task hasn't been resolved
4422
+ enabled: !!processId && status !== "handled" && status !== "failed",
4423
+ // Returns the next interval length to use to wait for fetch
4424
+ refetchInterval: (query) => {
4425
+ const data = query.state.data;
4426
+ if (data && data?.status !== "pending")
4427
+ return false;
4428
+ const interval = Math.min(baseInterval * 2 ** attemptRef.current, maxInterval);
4429
+ attemptRef.current += 1;
4430
+ return interval;
4431
+ },
4432
+ });
4433
+ return {
4434
+ status,
4435
+ attempts: attemptRef.current,
4436
+ result: query.data?.result,
4437
+ error: query.data?.error,
4438
+ isFetching: query.isFetching,
4439
+ };
4440
+ }
4441
+
4442
+ export { Button, buttonVariants, config, configure, useAsyncProcess };
9
4443
  //# sourceMappingURL=index.esm.js.map