@poco-ai/agentero-dsh-host 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/lib/bookmarks-write.d.ts +24 -0
  2. package/lib/bookmarks-write.js +181 -0
  3. package/lib/bookmarks-write.js.map +1 -0
  4. package/lib/catalog.d.ts +28 -0
  5. package/lib/catalog.js +58 -0
  6. package/lib/catalog.js.map +1 -0
  7. package/lib/cli-run.d.ts +15 -0
  8. package/lib/cli-run.js +102 -0
  9. package/lib/cli-run.js.map +1 -0
  10. package/lib/client/index.d.ts +71 -0
  11. package/lib/client/settings-model.d.ts +28 -0
  12. package/lib/client/settings.d.ts +27 -0
  13. package/lib/client/ui/button.d.ts +10 -0
  14. package/lib/client/ui/input.d.ts +2 -0
  15. package/lib/client/utils.d.ts +2 -0
  16. package/lib/client.js +4071 -0
  17. package/lib/index.d.ts +55 -0
  18. package/lib/index.js +1100 -0
  19. package/lib/index.js.map +1 -0
  20. package/lib/marks-store.d.ts +80 -0
  21. package/lib/marks-store.js +393 -0
  22. package/lib/marks-store.js.map +1 -0
  23. package/lib/notes-files.d.ts +47 -0
  24. package/lib/notes-files.js +427 -0
  25. package/lib/notes-files.js.map +1 -0
  26. package/lib/pdf-file.d.ts +23 -0
  27. package/lib/pdf-file.js +84 -0
  28. package/lib/pdf-file.js.map +1 -0
  29. package/lib/tools.d.ts +8 -0
  30. package/lib/tools.js +204 -0
  31. package/lib/tools.js.map +1 -0
  32. package/lib/translate.d.ts +70 -0
  33. package/lib/translate.js +80 -0
  34. package/lib/translate.js.map +1 -0
  35. package/lib/translation/batches.d.ts +21 -0
  36. package/lib/translation/batches.js +88 -0
  37. package/lib/translation/batches.js.map +1 -0
  38. package/lib/translation/chunks.d.ts +2 -0
  39. package/lib/translation/chunks.js +36 -0
  40. package/lib/translation/chunks.js.map +1 -0
  41. package/lib/translation/mask.d.ts +22 -0
  42. package/lib/translation/mask.js +69 -0
  43. package/lib/translation/mask.js.map +1 -0
  44. package/lib/translation/pipeline.d.ts +3 -0
  45. package/lib/translation/pipeline.js +119 -0
  46. package/lib/translation/pipeline.js.map +1 -0
  47. package/lib/translation/preserved-links.d.ts +26 -0
  48. package/lib/translation/preserved-links.js +127 -0
  49. package/lib/translation/preserved-links.js.map +1 -0
  50. package/lib/translation/prompt.d.ts +99 -0
  51. package/lib/translation/prompt.js +224 -0
  52. package/lib/translation/prompt.js.map +1 -0
  53. package/lib/translation/retry.d.ts +3 -0
  54. package/lib/translation/retry.js +30 -0
  55. package/lib/translation/retry.js.map +1 -0
  56. package/lib/translation/sentences.d.ts +5 -0
  57. package/lib/translation/sentences.js +77 -0
  58. package/lib/translation/sentences.js.map +1 -0
  59. package/lib/vault.d.ts +21 -0
  60. package/lib/vault.js +69 -0
  61. package/lib/vault.js.map +1 -0
  62. package/package.json +44 -3
  63. package/src/translation/MOTIF-LICENSE.txt +21 -0
  64. package/README.md +0 -3
package/lib/client.js ADDED
@@ -0,0 +1,4071 @@
1
+ window.__ModuleLoader__.load({
2
+ id: "@poco-ai/agentero-dsh-host",
3
+ factory: (require) => {
4
+ var module = { exports: {} };
5
+ var exports = module.exports;
6
+ if (typeof document !== "undefined") {
7
+ var styleId = "@poco-ai/agentero-dsh-host-tailwind";
8
+ if (!document.getElementById(styleId)) {
9
+ var style = document.createElement("style");
10
+ style.id = styleId;
11
+ style.textContent = "/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){.agentero-settings *, .agentero-settings*,.agentero-settings :before, .agentero-settings:before,.agentero-settings :after, .agentero-settings:after,.agentero-settings ::backdrop, .agentero-settings::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-outline-style:solid;--tw-duration: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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@layer theme{:root,.agentero-settings :host, .agentero-settings:host{--spacing:.25rem;--font-weight-normal:400;--radius-md:calc(var(--radius) * .8);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer base{.agentero-surface,.agentero-surface *,.agentero-surface:before,.agentero-surface:after,.agentero-surface :before,.agentero-surface :after{box-sizing:border-box;border:0 solid}.agentero-surface button,.agentero-surface input,.agentero-surface select,.agentero-surface textarea,.agentero-surface fieldset{font:inherit;letter-spacing:inherit;color:inherit;background-color:#0000;margin:0;padding:0}.agentero-surface{color:var(--foreground);font-family:var(--agentero-font-sans);font-size:.8125rem;line-height:1.3846}}@layer utilities{.agentero-settings .visible, .agentero-settings.visible{visibility:visible}.agentero-settings .absolute, .agentero-settings.absolute{position:absolute}.agentero-settings .relative, .agentero-settings.relative{position:relative}.agentero-settings .m-0, .agentero-settings.m-0{margin:0}.agentero-settings .block, .agentero-settings.block{display:block}.agentero-settings .contents, .agentero-settings.contents{display:contents}.agentero-settings .flex, .agentero-settings.flex{display:flex}.agentero-settings .inline, .agentero-settings.inline{display:inline}.agentero-settings .inline-flex, .agentero-settings.inline-flex{display:inline-flex}.agentero-settings .size-3, .agentero-settings.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.agentero-settings .size-8, .agentero-settings.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.agentero-settings .h-7, .agentero-settings.h-7{height:calc(var(--spacing) * 7)}.agentero-settings .h-8, .agentero-settings.h-8{height:calc(var(--spacing) * 8)}.agentero-settings .w-full, .agentero-settings.w-full{width:100%}.agentero-settings .min-w-0, .agentero-settings.min-w-0{min-width:0}.agentero-settings .shrink-0, .agentero-settings.shrink-0{flex-shrink:0}.agentero-settings .cursor-pointer, .agentero-settings.cursor-pointer{cursor:pointer}.agentero-settings .appearance-none, .agentero-settings.appearance-none{appearance:none}.agentero-settings .flex-col, .agentero-settings.flex-col{flex-direction:column}.agentero-settings .items-center, .agentero-settings.items-center{align-items:center}.agentero-settings .justify-center, .agentero-settings.justify-center{justify-content:center}.agentero-settings .gap-1, .agentero-settings.gap-1{gap:var(--spacing)}.agentero-settings .gap-1\\.5, .agentero-settings.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.agentero-settings .gap-2, .agentero-settings.gap-2{gap:calc(var(--spacing) * 2)}.agentero-settings .gap-6, .agentero-settings.gap-6{gap:calc(var(--spacing) * 6)}.agentero-settings .rounded-\\[min\\(var\\(--radius-md\\)\\, .agentero-settings.rounded-\\[min\\(var\\(--radius-md\\)\\,.agentero-settings 12px\\)\\], .agentero-settings12px\\)\\]{border-radius:min(var(--radius-md), 12px)}.agentero-settings .rounded-lg, .agentero-settings.rounded-lg{border-radius:var(--radius)}.agentero-settings .border, .agentero-settings.border{border-style:var(--tw-border-style);border-width:1px}.agentero-settings .border-border, .agentero-settings.border-border{border-color:var(--border)}.agentero-settings .border-input, .agentero-settings.border-input{border-color:var(--input)}.agentero-settings .border-transparent, .agentero-settings.border-transparent{border-color:#0000}.agentero-settings .bg-background, .agentero-settings.bg-background{background-color:var(--background)}.agentero-settings .bg-destructive\\/10, .agentero-settings.bg-destructive\\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .bg-destructive\\/10, .agentero-settings.bg-destructive\\/10{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}.agentero-settings .bg-primary, .agentero-settings.bg-primary{background-color:var(--primary)}.agentero-settings .bg-secondary, .agentero-settings.bg-secondary{background-color:var(--secondary)}.agentero-settings .bg-transparent, .agentero-settings.bg-transparent{background-color:#0000}.agentero-settings .bg-clip-padding, .agentero-settings.bg-clip-padding{background-clip:padding-box}.agentero-settings .px-2\\.5, .agentero-settings.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.agentero-settings .py-1, .agentero-settings.py-1{padding-block:var(--spacing)}.agentero-settings .font-\\[inherit\\], .agentero-settings.font-\\[inherit\\]{font-family:inherit}.agentero-settings .font-mono, .agentero-settings.font-mono{font-family:var(--agentero-font-mono)}.agentero-settings .text-sm, .agentero-settings.text-sm{font-size:.8125rem;line-height:var(--tw-leading,1.3846);letter-spacing:var(--tw-tracking,0em)}.agentero-settings .text-xs, .agentero-settings.text-xs{font-size:.75rem;line-height:var(--tw-leading,1.35);letter-spacing:var(--tw-tracking,.006em)}.agentero-settings .text-\\[0\\.875rem\\], .agentero-settings.text-\\[0\\.875rem\\]{font-size:.875rem}.agentero-settings .font-medium, .agentero-settings.font-medium{--tw-font-weight:510;font-weight:510}.agentero-settings .font-normal, .agentero-settings.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.agentero-settings .whitespace-nowrap, .agentero-settings.whitespace-nowrap{white-space:nowrap}.agentero-settings .text-destructive, .agentero-settings.text-destructive{color:var(--destructive)}.agentero-settings .text-muted-foreground, .agentero-settings.text-muted-foreground{color:var(--muted-foreground)}.agentero-settings .text-primary, .agentero-settings.text-primary{color:var(--primary)}.agentero-settings .text-primary-foreground, .agentero-settings.text-primary-foreground{color:var(--primary-foreground)}.agentero-settings .text-secondary-foreground, .agentero-settings.text-secondary-foreground{color:var(--secondary-foreground)}.agentero-settings .underline-offset-4, .agentero-settings.underline-offset-4{text-underline-offset:4px}.agentero-settings .outline, .agentero-settings.outline{outline-style:var(--tw-outline-style);outline-width:1px}.agentero-settings .transition-\\[color\\, .agentero-settings.transition-\\[color\\,.agentero-settings background-color\\, .agentero-settingsbackground-color\\,.agentero-settings border-color\\, .agentero-settingsborder-color\\,.agentero-settings box-shadow\\, .agentero-settingsbox-shadow\\,.agentero-settings transform\\, .agentero-settingstransform\\,.agentero-settings opacity\\], .agentero-settingsopacity\\]{transition-property:color,background-color,border-color,box-shadow,transform,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.agentero-settings .transition-colors, .agentero-settings.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.agentero-settings .duration-100, .agentero-settings.duration-100{--tw-duration:.1s;transition-duration:.1s}.agentero-settings .outline-none, .agentero-settings.outline-none{--tw-outline-style:none;outline-style:none}.agentero-settings .select-none, .agentero-settings.select-none{-webkit-user-select:none;user-select:none}.agentero-settings .select-text, .agentero-settings.select-text{-webkit-user-select:text;user-select:text}.agentero-settings .placeholder\\:text-muted-foreground::placeholder, .agentero-settings.placeholder\\:text-muted-foreground::placeholder{color:var(--muted-foreground)}@media (hover:hover){.agentero-settings .hover\\:bg-\\[color-mix\\(in_oklch\\, .agentero-settings.hover\\:bg-\\[color-mix\\(in_oklch\\,.agentero-settings var\\(--secondary\\)\\, .agentero-settingsvar\\(--secondary\\)\\,.agentero-settings var\\(--foreground\\)_5\\%\\)\\]:hover, .agentero-settingsvar\\(--foreground\\)_5\\%\\)\\]:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .hover\\:bg-\\[color-mix\\(in_oklch\\, .agentero-settings.hover\\:bg-\\[color-mix\\(in_oklch\\,.agentero-settings var\\(--secondary\\)\\, .agentero-settingsvar\\(--secondary\\)\\,.agentero-settings var\\(--foreground\\)_5\\%\\)\\]:hover, .agentero-settingsvar\\(--foreground\\)_5\\%\\)\\]:hover{background-color:color-mix(in oklch,var(--secondary),var(--foreground) 5%)}}.agentero-settings .hover\\:bg-destructive\\/20:hover, .agentero-settings.hover\\:bg-destructive\\/20:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .hover\\:bg-destructive\\/20:hover, .agentero-settings.hover\\:bg-destructive\\/20:hover{background-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.agentero-settings .hover\\:bg-muted:hover, .agentero-settings.hover\\:bg-muted:hover{background-color:var(--muted)}.agentero-settings .hover\\:bg-primary\\/80:hover, .agentero-settings.hover\\:bg-primary\\/80:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .hover\\:bg-primary\\/80:hover, .agentero-settings.hover\\:bg-primary\\/80:hover{background-color:color-mix(in oklab, var(--primary) 80%, transparent)}}.agentero-settings .hover\\:text-foreground:hover, .agentero-settings.hover\\:text-foreground:hover{color:var(--foreground)}.agentero-settings .hover\\:underline:hover, .agentero-settings.hover\\:underline:hover{text-decoration-line:underline}}.agentero-settings .focus-visible\\:border-destructive\\/40:focus-visible, .agentero-settings.focus-visible\\:border-destructive\\/40:focus-visible{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .focus-visible\\:border-destructive\\/40:focus-visible, .agentero-settings.focus-visible\\:border-destructive\\/40:focus-visible{border-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.agentero-settings .focus-visible\\:border-ring:focus-visible, .agentero-settings.focus-visible\\:border-ring:focus-visible{border-color:var(--ring)}.agentero-settings .focus-visible\\:ring-3:focus-visible, .agentero-settings.focus-visible\\:ring-3:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.agentero-settings .focus-visible\\:ring-destructive\\/20:focus-visible, .agentero-settings.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .focus-visible\\:ring-destructive\\/20:focus-visible, .agentero-settings.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.agentero-settings .focus-visible\\:ring-ring\\/50:focus-visible, .agentero-settings.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .focus-visible\\:ring-ring\\/50:focus-visible, .agentero-settings.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.agentero-settings .active\\:bg-\\[color-mix\\(in_oklch\\, .agentero-settings.active\\:bg-\\[color-mix\\(in_oklch\\,.agentero-settings var\\(--secondary\\)\\, .agentero-settingsvar\\(--secondary\\)\\,.agentero-settings var\\(--foreground\\)_10\\%\\)\\]:active, .agentero-settingsvar\\(--foreground\\)_10\\%\\)\\]:active{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .active\\:bg-\\[color-mix\\(in_oklch\\, .agentero-settings.active\\:bg-\\[color-mix\\(in_oklch\\,.agentero-settings var\\(--secondary\\)\\, .agentero-settingsvar\\(--secondary\\)\\,.agentero-settings var\\(--foreground\\)_10\\%\\)\\]:active, .agentero-settingsvar\\(--foreground\\)_10\\%\\)\\]:active{background-color:color-mix(in oklch,var(--secondary),var(--foreground) 10%)}}.agentero-settings .active\\:bg-destructive\\/30:active, .agentero-settings.active\\:bg-destructive\\/30:active{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .active\\:bg-destructive\\/30:active, .agentero-settings.active\\:bg-destructive\\/30:active{background-color:color-mix(in oklab, var(--destructive) 30%, transparent)}}.agentero-settings .active\\:bg-muted:active, .agentero-settings.active\\:bg-muted:active,.agentero-settings .active\\:bg-muted\\/80:active, .agentero-settings.active\\:bg-muted\\/80:active{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .active\\:bg-muted\\/80:active, .agentero-settings.active\\:bg-muted\\/80:active{background-color:color-mix(in oklab, var(--muted) 80%, transparent)}}.agentero-settings .active\\:bg-primary\\/70:active, .agentero-settings.active\\:bg-primary\\/70:active{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .active\\:bg-primary\\/70:active, .agentero-settings.active\\:bg-primary\\/70:active{background-color:color-mix(in oklab, var(--primary) 70%, transparent)}}.agentero-settings .active\\:text-foreground:active, .agentero-settings.active\\:text-foreground:active{color:var(--foreground)}.agentero-settings .active\\:opacity-70:active, .agentero-settings.active\\:opacity-70:active{opacity:.7}.agentero-settings .active\\:not-aria-\\[haspopup\\]\\:translate-y-px:active:not([aria-haspopup]), .agentero-settings.active\\:not-aria-\\[haspopup\\]\\:translate-y-px:active:not([aria-haspopup]){--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.agentero-settings .active\\:not-aria-\\[haspopup\\]\\:scale-\\[0\\.97\\]:active:not([aria-haspopup]), .agentero-settings.active\\:not-aria-\\[haspopup\\]\\:scale-\\[0\\.97\\]:active:not([aria-haspopup]){scale:.97}.agentero-settings .disabled\\:pointer-events-none:disabled, .agentero-settings.disabled\\:pointer-events-none:disabled{pointer-events:none}.agentero-settings .disabled\\:cursor-not-allowed:disabled, .agentero-settings.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.agentero-settings .disabled\\:bg-input\\/50:disabled, .agentero-settings.disabled\\:bg-input\\/50:disabled{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .disabled\\:bg-input\\/50:disabled, .agentero-settings.disabled\\:bg-input\\/50:disabled{background-color:color-mix(in oklab, var(--input) 50%, transparent)}}.agentero-settings .disabled\\:opacity-50:disabled, .agentero-settings.disabled\\:opacity-50:disabled{opacity:.5}.agentero-settings .aria-expanded\\:bg-muted[aria-expanded=true], .agentero-settings.aria-expanded\\:bg-muted[aria-expanded=true]{background-color:var(--muted)}.agentero-settings .aria-expanded\\:bg-secondary[aria-expanded=true], .agentero-settings.aria-expanded\\:bg-secondary[aria-expanded=true]{background-color:var(--secondary)}.agentero-settings .aria-expanded\\:text-foreground[aria-expanded=true], .agentero-settings.aria-expanded\\:text-foreground[aria-expanded=true]{color:var(--foreground)}.agentero-settings .aria-expanded\\:text-secondary-foreground[aria-expanded=true], .agentero-settings.aria-expanded\\:text-secondary-foreground[aria-expanded=true]{color:var(--secondary-foreground)}.agentero-settings .aria-invalid\\:border-destructive[aria-invalid=true], .agentero-settings.aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.agentero-settings .aria-invalid\\:ring-3[aria-invalid=true], .agentero-settings.aria-invalid\\:ring-3[aria-invalid=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.agentero-settings .aria-invalid\\:ring-destructive\\/20[aria-invalid=true], .agentero-settings.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .aria-invalid\\:ring-destructive\\/20[aria-invalid=true], .agentero-settings.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.agentero-settings .dark\\:border-input:where(body[data-ds-dark-theme] *), .agentero-settings.dark\\:border-input:where(body[data-ds-dark-theme] *){border-color:var(--input)}.agentero-settings .dark\\:bg-destructive\\/20:where(body[data-ds-dark-theme] *), .agentero-settings.dark\\:bg-destructive\\/20:where(body[data-ds-dark-theme] *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .dark\\:bg-destructive\\/20:where(body[data-ds-dark-theme] *), .agentero-settings.dark\\:bg-destructive\\/20:where(body[data-ds-dark-theme] *){background-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.agentero-settings .dark\\:bg-input\\/30:where(body[data-ds-dark-theme] *), .agentero-settings.dark\\:bg-input\\/30:where(body[data-ds-dark-theme] *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .dark\\:bg-input\\/30:where(body[data-ds-dark-theme] *), .agentero-settings.dark\\:bg-input\\/30:where(body[data-ds-dark-theme] *){background-color:color-mix(in oklab, var(--input) 30%, transparent)}}@media (hover:hover){.agentero-settings .dark\\:hover\\:bg-destructive\\/30:where(body[data-ds-dark-theme] *):hover, .agentero-settings.dark\\:hover\\:bg-destructive\\/30:where(body[data-ds-dark-theme] *):hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .dark\\:hover\\:bg-destructive\\/30:where(body[data-ds-dark-theme] *):hover, .agentero-settings.dark\\:hover\\:bg-destructive\\/30:where(body[data-ds-dark-theme] *):hover{background-color:color-mix(in oklab, var(--destructive) 30%, transparent)}}.agentero-settings .dark\\:hover\\:bg-input\\/50:where(body[data-ds-dark-theme] *):hover, .agentero-settings.dark\\:hover\\:bg-input\\/50:where(body[data-ds-dark-theme] *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .dark\\:hover\\:bg-input\\/50:where(body[data-ds-dark-theme] *):hover, .agentero-settings.dark\\:hover\\:bg-input\\/50:where(body[data-ds-dark-theme] *):hover{background-color:color-mix(in oklab, var(--input) 50%, transparent)}}.agentero-settings .dark\\:hover\\:bg-muted\\/50:where(body[data-ds-dark-theme] *):hover, .agentero-settings.dark\\:hover\\:bg-muted\\/50:where(body[data-ds-dark-theme] *):hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .dark\\:hover\\:bg-muted\\/50:where(body[data-ds-dark-theme] *):hover, .agentero-settings.dark\\:hover\\:bg-muted\\/50:where(body[data-ds-dark-theme] *):hover{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}}.agentero-settings .dark\\:focus-visible\\:ring-destructive\\/40:where(body[data-ds-dark-theme] *):focus-visible, .agentero-settings.dark\\:focus-visible\\:ring-destructive\\/40:where(body[data-ds-dark-theme] *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .dark\\:focus-visible\\:ring-destructive\\/40:where(body[data-ds-dark-theme] *):focus-visible, .agentero-settings.dark\\:focus-visible\\:ring-destructive\\/40:where(body[data-ds-dark-theme] *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.agentero-settings .dark\\:active\\:bg-destructive\\/40:where(body[data-ds-dark-theme] *):active, .agentero-settings.dark\\:active\\:bg-destructive\\/40:where(body[data-ds-dark-theme] *):active{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .dark\\:active\\:bg-destructive\\/40:where(body[data-ds-dark-theme] *):active, .agentero-settings.dark\\:active\\:bg-destructive\\/40:where(body[data-ds-dark-theme] *):active{background-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.agentero-settings .dark\\:active\\:bg-input\\/60:where(body[data-ds-dark-theme] *):active, .agentero-settings.dark\\:active\\:bg-input\\/60:where(body[data-ds-dark-theme] *):active{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .dark\\:active\\:bg-input\\/60:where(body[data-ds-dark-theme] *):active, .agentero-settings.dark\\:active\\:bg-input\\/60:where(body[data-ds-dark-theme] *):active{background-color:color-mix(in oklab, var(--input) 60%, transparent)}}.agentero-settings .dark\\:active\\:bg-muted\\/70:where(body[data-ds-dark-theme] *):active, .agentero-settings.dark\\:active\\:bg-muted\\/70:where(body[data-ds-dark-theme] *):active{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .dark\\:active\\:bg-muted\\/70:where(body[data-ds-dark-theme] *):active, .agentero-settings.dark\\:active\\:bg-muted\\/70:where(body[data-ds-dark-theme] *):active{background-color:color-mix(in oklab, var(--muted) 70%, transparent)}}.agentero-settings .dark\\:disabled\\:bg-input\\/80:where(body[data-ds-dark-theme] *):disabled, .agentero-settings.dark\\:disabled\\:bg-input\\/80:where(body[data-ds-dark-theme] *):disabled{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .dark\\:disabled\\:bg-input\\/80:where(body[data-ds-dark-theme] *):disabled, .agentero-settings.dark\\:disabled\\:bg-input\\/80:where(body[data-ds-dark-theme] *):disabled{background-color:color-mix(in oklab, var(--input) 80%, transparent)}}.agentero-settings .dark\\:aria-invalid\\:border-destructive\\/50:where(body[data-ds-dark-theme] *)[aria-invalid=true], .agentero-settings.dark\\:aria-invalid\\:border-destructive\\/50:where(body[data-ds-dark-theme] *)[aria-invalid=true]{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .dark\\:aria-invalid\\:border-destructive\\/50:where(body[data-ds-dark-theme] *)[aria-invalid=true], .agentero-settings.dark\\:aria-invalid\\:border-destructive\\/50:where(body[data-ds-dark-theme] *)[aria-invalid=true]{border-color:color-mix(in oklab, var(--destructive) 50%, transparent)}}.agentero-settings .dark\\:aria-invalid\\:ring-destructive\\/40:where(body[data-ds-dark-theme] *)[aria-invalid=true], .agentero-settings.dark\\:aria-invalid\\:ring-destructive\\/40:where(body[data-ds-dark-theme] *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.agentero-settings .dark\\:aria-invalid\\:ring-destructive\\/40:where(body[data-ds-dark-theme] *)[aria-invalid=true], .agentero-settings.dark\\:aria-invalid\\:ring-destructive\\/40:where(body[data-ds-dark-theme] *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.agentero-settings .\\[\\&_svg\\]\\:pointer-events-none svg, .agentero-settings.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.agentero-settings .\\[\\&_svg\\]\\:shrink-0 svg, .agentero-settings.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.agentero-settings .\\[\\&_svg\\:not\\(\\[class\\*\\=\\\"size-\\\"\\]\\)\\]\\:size-3\\.5 svg:not([class*=size-]), .agentero-settings.\\[\\&_svg\\:not\\(\\[class\\*\\=\\\"size-\\\"\\]\\)\\]\\:size-3\\.5 svg:not([class*=size-]){width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.agentero-settings .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]), .agentero-settings.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}}:root{--agentero-font-sans:system-ui, \"Segoe UI\", -apple-system, BlinkMacSystemFont, Roboto, \"Helvetica Neue\", Arial, \"PingFang SC\", \"Hiragino Sans GB\", \"Microsoft YaHei UI\", \"Microsoft YaHei\", \"Noto Sans SC\", sans-serif;--agentero-font-heading:var(--agentero-font-sans);--agentero-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, \"Cascadia Mono\", Consolas, \"Liberation Mono\", \"Courier New\", monospace}.agentero-surface{--background:oklch(99.5% .002 260);--foreground:oklch(21% .008 260);--card:oklch(100% .001 260);--card-foreground:oklch(21% .008 260);--popover:oklch(100% .001 260);--popover-foreground:oklch(21% .008 260);--primary:oklch(25% .012 260);--primary-foreground:oklch(99% .001 260);--default-primary:oklch(25% .012 260);--default-ring:oklch(62% .02 260);--secondary:oklch(96% .006 260);--secondary-foreground:oklch(25% .012 260);--muted:oklch(96.2% .006 260);--muted-foreground:oklch(48% .014 260);--accent:oklch(95.2% .008 260);--accent-foreground:oklch(25% .012 260);--destructive:oklch(57.7% .245 27.325);--border:oklch(90.5% .008 260);--input:oklch(90.5% .008 260);--ring:oklch(62% .02 260);--chart-1:oklch(87% .01 260);--chart-2:oklch(55.6% .014 260);--chart-3:oklch(43.9% .014 260);--chart-4:oklch(37.1% .012 260);--chart-5:oklch(26.9% .01 260);--radius:.5rem;--sidebar:oklch(96.5% .007 260);--sidebar-foreground:oklch(21% .008 260);--sidebar-primary:oklch(25% .012 260);--sidebar-primary-foreground:oklch(99% .001 260);--sidebar-accent:oklch(93.5% .01 260);--sidebar-accent-foreground:oklch(25% .012 260);--sidebar-border:oklch(90% .008 260);--sidebar-ring:oklch(62% .02 260);--brand:oklch(62.3% .214 259.815);--highlight:oklch(85.2% .199 91.936);--color-background:var(--background);--color-foreground:var(--foreground);--color-card:var(--card);--color-card-foreground:var(--card-foreground);--color-popover:var(--popover);--color-popover-foreground:var(--popover-foreground);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-secondary:var(--secondary);--color-secondary-foreground:var(--secondary-foreground);--color-muted:var(--muted);--color-muted-foreground:var(--muted-foreground);--color-accent:var(--accent);--color-accent-foreground:var(--accent-foreground);--color-destructive:var(--destructive);--color-border:var(--border);--color-input:var(--input);--color-ring:var(--ring);color-scheme:light;min-width:0;height:100%;min-height:0}body[data-ds-dark-theme] .agentero-surface,html.dark .agentero-surface,html[data-theme=dark] .agentero-surface{--background:oklch(15.5% .006 260);--foreground:oklch(98% .004 260);--card:oklch(21.5% .008 260);--card-foreground:oklch(98% .004 260);--popover:oklch(21.5% .008 260);--popover-foreground:oklch(98% .004 260);--primary:oklch(94% .006 260);--primary-foreground:oklch(22% .01 260);--default-primary:oklch(94% .006 260);--default-ring:oklch(58% .02 260);--secondary:oklch(25.5% .008 260);--secondary-foreground:oklch(98% .004 260);--muted:oklch(25.5% .008 260);--muted-foreground:oklch(72% .012 260);--accent:oklch(27% .01 260);--accent-foreground:oklch(98% .004 260);--destructive:oklch(70.4% .191 22.216);--border:oklch(98% .004 260/.12);--input:oklch(98% .004 260/.16);--ring:oklch(58% .02 260);--chart-1:oklch(87% .01 260);--chart-2:oklch(55.6% .014 260);--chart-3:oklch(43.9% .014 260);--chart-4:oklch(37.1% .012 260);--chart-5:oklch(26.9% .01 260);--sidebar:oklch(18% .007 260);--sidebar-foreground:oklch(98% .004 260);--sidebar-primary:oklch(62% .18 255);--sidebar-primary-foreground:oklch(99% .001 260);--sidebar-accent:oklch(27% .01 260);--sidebar-accent-foreground:oklch(98% .004 260);--sidebar-border:oklch(98% .004 260/.12);--sidebar-ring:oklch(58% .02 260);--brand:oklch(70.7% .165 254.624);--highlight:oklch(85.2% .199 91.936);color-scheme:dark}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-duration{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-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}\n";
12
+ document.head.appendChild(style);
13
+ }
14
+ }
15
+
16
+ "use strict";
17
+ var __create = Object.create;
18
+ var __defProp = Object.defineProperty;
19
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
20
+ var __getOwnPropNames = Object.getOwnPropertyNames;
21
+ var __getProtoOf = Object.getPrototypeOf;
22
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
23
+ var __export = (target, all) => {
24
+ for (var name2 in all)
25
+ __defProp(target, name2, { get: all[name2], enumerable: true });
26
+ };
27
+ var __copyProps = (to, from, except, desc) => {
28
+ if (from && typeof from === "object" || typeof from === "function") {
29
+ for (let key of __getOwnPropNames(from))
30
+ if (!__hasOwnProp.call(to, key) && key !== except)
31
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
32
+ }
33
+ return to;
34
+ };
35
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
36
+ // If the importer is in node compatibility mode or this is not an ESM
37
+ // file that has been converted to a CommonJS file using a Babel-
38
+ // compatible transform (i.e. "__esModule" has not been set), then set
39
+ // "default" to the CommonJS "module.exports" for node compatibility.
40
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
41
+ mod
42
+ ));
43
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
44
+
45
+ // src/client/index.ts
46
+ var index_exports = {};
47
+ __export(index_exports, {
48
+ apply: () => apply,
49
+ inject: () => inject,
50
+ name: () => name
51
+ });
52
+ module.exports = __toCommonJS(index_exports);
53
+
54
+ // ../../node_modules/.pnpm/lucide-react@0.554.0/node_modules/lucide-react/dist/esm/createLucideIcon.js
55
+ var import_react2 = require("react");
56
+
57
+ // ../../node_modules/.pnpm/lucide-react@0.554.0/node_modules/lucide-react/dist/esm/shared/src/utils.js
58
+ var toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
59
+ var toCamelCase = (string) => string.replace(
60
+ /^([A-Z])|[\s-_]+(\w)/g,
61
+ (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()
62
+ );
63
+ var toPascalCase = (string) => {
64
+ const camelCase = toCamelCase(string);
65
+ return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
66
+ };
67
+ var mergeClasses = (...classes) => classes.filter((className, index, array) => {
68
+ return Boolean(className) && className.trim() !== "" && array.indexOf(className) === index;
69
+ }).join(" ").trim();
70
+ var hasA11yProp = (props) => {
71
+ for (const prop in props) {
72
+ if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
73
+ return true;
74
+ }
75
+ }
76
+ };
77
+
78
+ // ../../node_modules/.pnpm/lucide-react@0.554.0/node_modules/lucide-react/dist/esm/Icon.js
79
+ var import_react = require("react");
80
+
81
+ // ../../node_modules/.pnpm/lucide-react@0.554.0/node_modules/lucide-react/dist/esm/defaultAttributes.js
82
+ var defaultAttributes = {
83
+ xmlns: "http://www.w3.org/2000/svg",
84
+ width: 24,
85
+ height: 24,
86
+ viewBox: "0 0 24 24",
87
+ fill: "none",
88
+ stroke: "currentColor",
89
+ strokeWidth: 2,
90
+ strokeLinecap: "round",
91
+ strokeLinejoin: "round"
92
+ };
93
+
94
+ // ../../node_modules/.pnpm/lucide-react@0.554.0/node_modules/lucide-react/dist/esm/Icon.js
95
+ var Icon = (0, import_react.forwardRef)(
96
+ ({
97
+ color = "currentColor",
98
+ size = 24,
99
+ strokeWidth = 2,
100
+ absoluteStrokeWidth,
101
+ className = "",
102
+ children,
103
+ iconNode,
104
+ ...rest
105
+ }, ref) => (0, import_react.createElement)(
106
+ "svg",
107
+ {
108
+ ref,
109
+ ...defaultAttributes,
110
+ width: size,
111
+ height: size,
112
+ stroke: color,
113
+ strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,
114
+ className: mergeClasses("lucide", className),
115
+ ...!children && !hasA11yProp(rest) && { "aria-hidden": "true" },
116
+ ...rest
117
+ },
118
+ [
119
+ ...iconNode.map(([tag, attrs]) => (0, import_react.createElement)(tag, attrs)),
120
+ ...Array.isArray(children) ? children : [children]
121
+ ]
122
+ )
123
+ );
124
+
125
+ // ../../node_modules/.pnpm/lucide-react@0.554.0/node_modules/lucide-react/dist/esm/createLucideIcon.js
126
+ var createLucideIcon = (iconName, iconNode) => {
127
+ const Component = (0, import_react2.forwardRef)(
128
+ ({ className, ...props }, ref) => (0, import_react2.createElement)(Icon, {
129
+ ref,
130
+ iconNode,
131
+ className: mergeClasses(
132
+ `lucide-${toKebabCase(toPascalCase(iconName))}`,
133
+ `lucide-${iconName}`,
134
+ className
135
+ ),
136
+ ...props
137
+ })
138
+ );
139
+ Component.displayName = toPascalCase(iconName);
140
+ return Component;
141
+ };
142
+
143
+ // ../../node_modules/.pnpm/lucide-react@0.554.0/node_modules/lucide-react/dist/esm/icons/check.js
144
+ var __iconNode = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
145
+ var Check = createLucideIcon("check", __iconNode);
146
+
147
+ // ../../node_modules/.pnpm/lucide-react@0.554.0/node_modules/lucide-react/dist/esm/icons/folder-open.js
148
+ var __iconNode2 = [
149
+ [
150
+ "path",
151
+ {
152
+ d: "m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",
153
+ key: "usdka0"
154
+ }
155
+ ]
156
+ ];
157
+ var FolderOpen = createLucideIcon("folder-open", __iconNode2);
158
+
159
+ // src/client/settings.tsx
160
+ var import_react4 = require("react");
161
+
162
+ // ../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
163
+ function r(e) {
164
+ var t, f, n = "";
165
+ if ("string" == typeof e || "number" == typeof e) n += e;
166
+ else if ("object" == typeof e) if (Array.isArray(e)) {
167
+ var o = e.length;
168
+ for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
169
+ } else for (f in e) e[f] && (n && (n += " "), n += f);
170
+ return n;
171
+ }
172
+ function clsx() {
173
+ for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
174
+ return n;
175
+ }
176
+
177
+ // ../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs
178
+ var falsyToString = (value) => typeof value === "boolean" ? `${value}` : value === 0 ? "0" : value;
179
+ var cx = clsx;
180
+ var cva = (base, config) => (props) => {
181
+ var _config_compoundVariants;
182
+ 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);
183
+ const { variants, defaultVariants } = config;
184
+ const getVariantClassNames = Object.keys(variants).map((variant) => {
185
+ const variantProp = props === null || props === void 0 ? void 0 : props[variant];
186
+ const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];
187
+ if (variantProp === null) return null;
188
+ const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);
189
+ return variants[variant][variantKey];
190
+ });
191
+ const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param) => {
192
+ let [key, value] = param;
193
+ if (value === void 0) {
194
+ return acc;
195
+ }
196
+ acc[key] = value;
197
+ return acc;
198
+ }, {});
199
+ 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) => {
200
+ let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;
201
+ return Object.entries(compoundVariantOptions).every((param2) => {
202
+ let [key, value] = param2;
203
+ return Array.isArray(value) ? value.includes({
204
+ ...defaultVariants,
205
+ ...propsWithoutUndefined
206
+ }[key]) : {
207
+ ...defaultVariants,
208
+ ...propsWithoutUndefined
209
+ }[key] === value;
210
+ }) ? [
211
+ ...acc,
212
+ cvClass,
213
+ cvClassName
214
+ ] : acc;
215
+ }, []);
216
+ return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);
217
+ };
218
+
219
+ // ../../node_modules/.pnpm/@radix-ui+react-slot@1.5.0_@types+react@18.3.31/node_modules/@radix-ui/react-slot/dist/index.mjs
220
+ var dist_exports = {};
221
+ __export(dist_exports, {
222
+ Root: () => Slot,
223
+ Slot: () => Slot,
224
+ Slottable: () => Slottable,
225
+ createSlot: () => createSlot,
226
+ createSlottable: () => createSlottable
227
+ });
228
+ var React2 = __toESM(require("react"), 1);
229
+
230
+ // ../../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.5_@types+react@18.3.31/node_modules/@radix-ui/react-compose-refs/dist/index.mjs
231
+ var React = __toESM(require("react"), 1);
232
+ var __defProp2 = Object.defineProperty;
233
+ var __name = (target, value) => __defProp2(target, "name", { value, configurable: true });
234
+ function setRef(ref, value) {
235
+ if (typeof ref === "function") {
236
+ return ref(value);
237
+ } else if (ref !== null && ref !== void 0) {
238
+ ref.current = value;
239
+ }
240
+ }
241
+ __name(setRef, "setRef");
242
+ function composeRefs(...refs) {
243
+ return (node) => {
244
+ let hasCleanup = false;
245
+ const cleanups = refs.map((ref) => {
246
+ const cleanup = setRef(ref, node);
247
+ if (!hasCleanup && typeof cleanup == "function") {
248
+ hasCleanup = true;
249
+ }
250
+ return cleanup;
251
+ });
252
+ if (hasCleanup) {
253
+ return () => {
254
+ for (let i = 0; i < cleanups.length; i++) {
255
+ const cleanup = cleanups[i];
256
+ if (typeof cleanup == "function") {
257
+ cleanup();
258
+ } else {
259
+ setRef(refs[i], null);
260
+ }
261
+ }
262
+ };
263
+ }
264
+ };
265
+ }
266
+ __name(composeRefs, "composeRefs");
267
+ function useComposedRefs(...refs) {
268
+ return React.useCallback(composeRefs(...refs), refs);
269
+ }
270
+ __name(useComposedRefs, "useComposedRefs");
271
+
272
+ // ../../node_modules/.pnpm/@radix-ui+react-slot@1.5.0_@types+react@18.3.31/node_modules/@radix-ui/react-slot/dist/index.mjs
273
+ var __defProp3 = Object.defineProperty;
274
+ var __name2 = (target, value) => __defProp3(target, "name", { value, configurable: true });
275
+ // @__NO_SIDE_EFFECTS__
276
+ function createSlot(ownerName) {
277
+ const Slot2 = React2.forwardRef((props, forwardedRef) => {
278
+ let { children, ...slotProps } = props;
279
+ let slottableElement = null;
280
+ let hasSlottable = false;
281
+ const newChildren = [];
282
+ children = useUnwrappedLazy(children);
283
+ React2.Children.forEach(children, (maybeSlottable) => {
284
+ if (isSlottable(maybeSlottable)) {
285
+ hasSlottable = true;
286
+ const slottable = maybeSlottable;
287
+ let child = "child" in slottable.props ? slottable.props.child : slottable.props.children;
288
+ while (isLazyComponent(child) && typeof use === "function") {
289
+ child = use(child._payload);
290
+ }
291
+ slottableElement = getSlottableElementFromSlottable(slottable, child);
292
+ newChildren.push(slottableElement?.props?.children);
293
+ } else {
294
+ newChildren.push(maybeSlottable);
295
+ }
296
+ });
297
+ if (slottableElement) {
298
+ slottableElement = React2.cloneElement(slottableElement, void 0, newChildren);
299
+ } else if (
300
+ // A `Slottable` was found but it didn't resolve to a single element (e.g.
301
+ // it wrapped multiple elements, text, or a render-prop `child` that
302
+ // wasn't an element). Don't fall back to treating the `Slottable` wrapper
303
+ // itself as the slot target — throw a descriptive error below instead.
304
+ !hasSlottable && React2.Children.count(children) === 1 && React2.isValidElement(children)
305
+ ) {
306
+ slottableElement = children;
307
+ }
308
+ const slottableElementRef = slottableElement ? getElementRef(slottableElement) : void 0;
309
+ const composedRef = useComposedRefs(forwardedRef, slottableElementRef);
310
+ if (!slottableElement) {
311
+ if (children || children === 0) {
312
+ throw new Error(
313
+ hasSlottable ? createSlottableError(ownerName) : createSlotError(ownerName)
314
+ );
315
+ }
316
+ return children;
317
+ }
318
+ const mergedProps = mergeProps(slotProps, slottableElement.props ?? {});
319
+ if (slottableElement.type !== React2.Fragment) {
320
+ mergedProps.ref = forwardedRef ? composedRef : slottableElementRef;
321
+ }
322
+ return React2.cloneElement(slottableElement, mergedProps);
323
+ });
324
+ Slot2.displayName = `${ownerName}.Slot`;
325
+ return Slot2;
326
+ }
327
+ __name2(createSlot, "createSlot");
328
+ var Slot = /* @__PURE__ */ createSlot("Slot");
329
+ var SLOTTABLE_IDENTIFIER = Symbol.for("radix.slottable");
330
+ // @__NO_SIDE_EFFECTS__
331
+ function createSlottable(ownerName) {
332
+ const Slottable2 = /* @__PURE__ */ __name2((props) => "child" in props ? props.children(props.child) : props.children, "Slottable");
333
+ Slottable2.displayName = `${ownerName}.Slottable`;
334
+ Slottable2.__radixId = SLOTTABLE_IDENTIFIER;
335
+ return Slottable2;
336
+ }
337
+ __name2(createSlottable, "createSlottable");
338
+ var Slottable = /* @__PURE__ */ createSlottable("Slottable");
339
+ var getSlottableElementFromSlottable = /* @__PURE__ */ __name2((slottable, child) => {
340
+ if ("child" in slottable.props) {
341
+ if (!React2.isValidElement(child)) return null;
342
+ return React2.cloneElement(child, void 0, slottable.props.children(child.props.children));
343
+ }
344
+ return React2.isValidElement(child) ? child : null;
345
+ }, "getSlottableElementFromSlottable");
346
+ function mergeProps(slotProps, childProps) {
347
+ const overrideProps = { ...childProps };
348
+ for (const propName in childProps) {
349
+ const slotPropValue = slotProps[propName];
350
+ const childPropValue = childProps[propName];
351
+ const isHandler = /^on[A-Z]/.test(propName);
352
+ if (isHandler) {
353
+ if (slotPropValue && childPropValue) {
354
+ overrideProps[propName] = (...args) => {
355
+ const result = childPropValue(...args);
356
+ slotPropValue(...args);
357
+ return result;
358
+ };
359
+ } else if (slotPropValue) {
360
+ overrideProps[propName] = slotPropValue;
361
+ }
362
+ } else if (propName === "style") {
363
+ overrideProps[propName] = { ...slotPropValue, ...childPropValue };
364
+ } else if (propName === "className") {
365
+ overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" ");
366
+ } else if (propName === "aria-describedby") {
367
+ overrideProps[propName] = concatAriaDescribedby(childPropValue, slotPropValue);
368
+ }
369
+ }
370
+ return { ...slotProps, ...overrideProps };
371
+ }
372
+ __name2(mergeProps, "mergeProps");
373
+ function getElementRef(element) {
374
+ let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
375
+ let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
376
+ if (mayWarn) {
377
+ return element.ref;
378
+ }
379
+ getter = Object.getOwnPropertyDescriptor(element, "ref")?.get;
380
+ mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
381
+ if (mayWarn) {
382
+ return element.props.ref;
383
+ }
384
+ return element.props.ref || element.ref;
385
+ }
386
+ __name2(getElementRef, "getElementRef");
387
+ function isSlottable(child) {
388
+ return React2.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;
389
+ }
390
+ __name2(isSlottable, "isSlottable");
391
+ var REACT_LAZY_TYPE = Symbol.for("react.lazy");
392
+ function isLazyComponent(element) {
393
+ return element != null && typeof element === "object" && "$$typeof" in element && element.$$typeof === REACT_LAZY_TYPE && "_payload" in element && isPromiseLike(element._payload);
394
+ }
395
+ __name2(isLazyComponent, "isLazyComponent");
396
+ function isPromiseLike(value) {
397
+ return typeof value === "object" && value !== null && "then" in value;
398
+ }
399
+ __name2(isPromiseLike, "isPromiseLike");
400
+ function useUnwrappedLazy(value) {
401
+ let unwrapped = value;
402
+ while (isLazyComponent(unwrapped) && typeof use === "function") {
403
+ unwrapped = use(unwrapped._payload);
404
+ }
405
+ return unwrapped;
406
+ }
407
+ __name2(useUnwrappedLazy, "useUnwrappedLazy");
408
+ function concatAriaDescribedby(...values) {
409
+ const ids = /* @__PURE__ */ new Set();
410
+ for (const value of values) {
411
+ if (typeof value !== "string") continue;
412
+ for (const id of String(value).trim().split(/\s+/)) {
413
+ if (id) ids.add(id);
414
+ }
415
+ }
416
+ return ids.size > 0 ? Array.from(ids).join(" ") : void 0;
417
+ }
418
+ __name2(concatAriaDescribedby, "concatAriaDescribedby");
419
+ var createSlotError = /* @__PURE__ */ __name2((ownerName) => {
420
+ return `${ownerName} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`;
421
+ }, "createSlotError");
422
+ var createSlottableError = /* @__PURE__ */ __name2((ownerName) => {
423
+ return `${ownerName} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`;
424
+ }, "createSlottableError");
425
+ var use = React2[" use ".trim().toString()];
426
+
427
+ // ../../node_modules/.pnpm/tailwind-merge@3.7.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs
428
+ var concatArrays = (array1, array2) => {
429
+ const combinedArray = new Array(array1.length + array2.length);
430
+ for (let i = 0; i < array1.length; i++) {
431
+ combinedArray[i] = array1[i];
432
+ }
433
+ for (let i = 0; i < array2.length; i++) {
434
+ combinedArray[array1.length + i] = array2[i];
435
+ }
436
+ return combinedArray;
437
+ };
438
+ var createClassValidatorObject = (classGroupId, validator) => ({
439
+ classGroupId,
440
+ validator
441
+ });
442
+ var createClassPartObject = (nextPart = /* @__PURE__ */ new Map(), validators = null, classGroupId) => ({
443
+ nextPart,
444
+ validators,
445
+ classGroupId
446
+ });
447
+ var CLASS_PART_SEPARATOR = "-";
448
+ var EMPTY_CONFLICTS = [];
449
+ var ARBITRARY_PROPERTY_PREFIX = "arbitrary..";
450
+ var createClassGroupUtils = (config) => {
451
+ const classMap = createClassMap(config);
452
+ const {
453
+ conflictingClassGroups,
454
+ conflictingClassGroupModifiers
455
+ } = config;
456
+ const getClassGroupId = (className) => {
457
+ if (className.startsWith("[") && className.endsWith("]")) {
458
+ return getGroupIdForArbitraryProperty(className);
459
+ }
460
+ const classParts = className.split(CLASS_PART_SEPARATOR);
461
+ const startIndex = classParts[0] === "" && classParts.length > 1 ? 1 : 0;
462
+ return getGroupRecursive(classParts, startIndex, classMap);
463
+ };
464
+ const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {
465
+ if (hasPostfixModifier) {
466
+ const modifierConflicts = conflictingClassGroupModifiers[classGroupId];
467
+ const baseConflicts = conflictingClassGroups[classGroupId];
468
+ if (modifierConflicts) {
469
+ if (baseConflicts) {
470
+ return concatArrays(baseConflicts, modifierConflicts);
471
+ }
472
+ return modifierConflicts;
473
+ }
474
+ return baseConflicts || EMPTY_CONFLICTS;
475
+ }
476
+ return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;
477
+ };
478
+ return {
479
+ getClassGroupId,
480
+ getConflictingClassGroupIds
481
+ };
482
+ };
483
+ var getGroupRecursive = (classParts, startIndex, classPartObject) => {
484
+ const classPathsLength = classParts.length - startIndex;
485
+ if (classPathsLength === 0) {
486
+ return classPartObject.classGroupId;
487
+ }
488
+ const currentClassPart = classParts[startIndex];
489
+ const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);
490
+ if (nextClassPartObject) {
491
+ const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);
492
+ if (result) return result;
493
+ }
494
+ const validators = classPartObject.validators;
495
+ if (validators === null) {
496
+ return void 0;
497
+ }
498
+ const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);
499
+ const validatorsLength = validators.length;
500
+ for (let i = 0; i < validatorsLength; i++) {
501
+ const validatorObj = validators[i];
502
+ if (validatorObj.validator(classRest)) {
503
+ return validatorObj.classGroupId;
504
+ }
505
+ }
506
+ return void 0;
507
+ };
508
+ var getGroupIdForArbitraryProperty = (className) => className.slice(1, -1).indexOf(":") === -1 ? void 0 : (() => {
509
+ const content = className.slice(1, -1);
510
+ const colonIndex = content.indexOf(":");
511
+ const property = content.slice(0, colonIndex);
512
+ return property ? ARBITRARY_PROPERTY_PREFIX + property : void 0;
513
+ })();
514
+ var createClassMap = (config) => {
515
+ const {
516
+ theme,
517
+ classGroups
518
+ } = config;
519
+ return processClassGroups(classGroups, theme);
520
+ };
521
+ var processClassGroups = (classGroups, theme) => {
522
+ const classMap = createClassPartObject();
523
+ for (const classGroupId in classGroups) {
524
+ const group = classGroups[classGroupId];
525
+ processClassesRecursively(group, classMap, classGroupId, theme);
526
+ }
527
+ return classMap;
528
+ };
529
+ var processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {
530
+ const len = classGroup.length;
531
+ for (let i = 0; i < len; i++) {
532
+ const classDefinition = classGroup[i];
533
+ processClassDefinition(classDefinition, classPartObject, classGroupId, theme);
534
+ }
535
+ };
536
+ var processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
537
+ if (typeof classDefinition === "string") {
538
+ processStringDefinition(classDefinition, classPartObject, classGroupId);
539
+ return;
540
+ }
541
+ if (typeof classDefinition === "function") {
542
+ processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);
543
+ return;
544
+ }
545
+ processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);
546
+ };
547
+ var processStringDefinition = (classDefinition, classPartObject, classGroupId) => {
548
+ const classPartObjectToEdit = classDefinition === "" ? classPartObject : getPart(classPartObject, classDefinition);
549
+ classPartObjectToEdit.classGroupId = classGroupId;
550
+ };
551
+ var processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
552
+ if (isThemeGetter(classDefinition)) {
553
+ processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);
554
+ return;
555
+ }
556
+ if (classPartObject.validators === null) {
557
+ classPartObject.validators = [];
558
+ }
559
+ classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));
560
+ };
561
+ var processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
562
+ const entries = Object.entries(classDefinition);
563
+ const len = entries.length;
564
+ for (let i = 0; i < len; i++) {
565
+ const [key, value] = entries[i];
566
+ processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);
567
+ }
568
+ };
569
+ var getPart = (classPartObject, path) => {
570
+ let current = classPartObject;
571
+ const parts = path.split(CLASS_PART_SEPARATOR);
572
+ const len = parts.length;
573
+ for (let i = 0; i < len; i++) {
574
+ const part = parts[i];
575
+ let next = current.nextPart.get(part);
576
+ if (!next) {
577
+ next = createClassPartObject();
578
+ current.nextPart.set(part, next);
579
+ }
580
+ current = next;
581
+ }
582
+ return current;
583
+ };
584
+ var isThemeGetter = (func) => "isThemeGetter" in func && func.isThemeGetter === true;
585
+ var createLruCache = (maxCacheSize) => {
586
+ if (maxCacheSize < 1) {
587
+ return {
588
+ get: () => void 0,
589
+ set: () => {
590
+ }
591
+ };
592
+ }
593
+ let cacheSize = 0;
594
+ let cache = /* @__PURE__ */ Object.create(null);
595
+ let previousCache = /* @__PURE__ */ Object.create(null);
596
+ const update = (key, value) => {
597
+ cache[key] = value;
598
+ cacheSize++;
599
+ if (cacheSize > maxCacheSize) {
600
+ cacheSize = 0;
601
+ previousCache = cache;
602
+ cache = /* @__PURE__ */ Object.create(null);
603
+ }
604
+ };
605
+ return {
606
+ get(key) {
607
+ let value = cache[key];
608
+ if (value !== void 0) {
609
+ return value;
610
+ }
611
+ if ((value = previousCache[key]) !== void 0) {
612
+ update(key, value);
613
+ return value;
614
+ }
615
+ },
616
+ set(key, value) {
617
+ if (key in cache) {
618
+ cache[key] = value;
619
+ } else {
620
+ update(key, value);
621
+ }
622
+ }
623
+ };
624
+ };
625
+ var IMPORTANT_MODIFIER = "!";
626
+ var MODIFIER_SEPARATOR = ":";
627
+ var EMPTY_MODIFIERS = [];
628
+ var createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({
629
+ modifiers,
630
+ hasImportantModifier,
631
+ baseClassName,
632
+ maybePostfixModifierPosition,
633
+ isExternal
634
+ });
635
+ var createParseClassName = (config) => {
636
+ const {
637
+ prefix,
638
+ experimentalParseClassName
639
+ } = config;
640
+ let parseClassName = (className) => {
641
+ const modifiers = [];
642
+ let bracketDepth = 0;
643
+ let parenDepth = 0;
644
+ let modifierStart = 0;
645
+ let postfixModifierPosition;
646
+ const len = className.length;
647
+ for (let index = 0; index < len; index++) {
648
+ const currentCharacter = className[index];
649
+ if (bracketDepth === 0 && parenDepth === 0) {
650
+ if (currentCharacter === MODIFIER_SEPARATOR) {
651
+ modifiers.push(className.slice(modifierStart, index));
652
+ modifierStart = index + 1;
653
+ continue;
654
+ }
655
+ if (currentCharacter === "/") {
656
+ postfixModifierPosition = index;
657
+ continue;
658
+ }
659
+ }
660
+ if (currentCharacter === "[") bracketDepth++;
661
+ else if (currentCharacter === "]") bracketDepth--;
662
+ else if (currentCharacter === "(") parenDepth++;
663
+ else if (currentCharacter === ")") parenDepth--;
664
+ }
665
+ const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);
666
+ let baseClassName = baseClassNameWithImportantModifier;
667
+ let hasImportantModifier = false;
668
+ if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {
669
+ baseClassName = baseClassNameWithImportantModifier.slice(0, -1);
670
+ hasImportantModifier = true;
671
+ } else if (
672
+ /**
673
+ * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.
674
+ * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864
675
+ */
676
+ baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)
677
+ ) {
678
+ baseClassName = baseClassNameWithImportantModifier.slice(1);
679
+ hasImportantModifier = true;
680
+ }
681
+ const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : void 0;
682
+ return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);
683
+ };
684
+ if (prefix) {
685
+ const fullPrefix = prefix + MODIFIER_SEPARATOR;
686
+ const parseClassNameOriginal = parseClassName;
687
+ parseClassName = (className) => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, void 0, true);
688
+ }
689
+ if (experimentalParseClassName) {
690
+ const parseClassNameOriginal = parseClassName;
691
+ parseClassName = (className) => experimentalParseClassName({
692
+ className,
693
+ parseClassName: parseClassNameOriginal
694
+ });
695
+ }
696
+ return parseClassName;
697
+ };
698
+ var createSortModifiers = (config) => {
699
+ const modifierWeights = /* @__PURE__ */ new Map();
700
+ config.orderSensitiveModifiers.forEach((mod, index) => {
701
+ modifierWeights.set(mod, 1e6 + index);
702
+ });
703
+ return (modifiers) => {
704
+ const result = [];
705
+ let currentSegment = [];
706
+ for (let i = 0; i < modifiers.length; i++) {
707
+ const modifier = modifiers[i];
708
+ const isArbitrary = modifier[0] === "[";
709
+ const isOrderSensitive = modifierWeights.has(modifier);
710
+ if (isArbitrary || isOrderSensitive) {
711
+ if (currentSegment.length > 0) {
712
+ currentSegment.sort();
713
+ result.push(...currentSegment);
714
+ currentSegment = [];
715
+ }
716
+ result.push(modifier);
717
+ } else {
718
+ currentSegment.push(modifier);
719
+ }
720
+ }
721
+ if (currentSegment.length > 0) {
722
+ currentSegment.sort();
723
+ result.push(...currentSegment);
724
+ }
725
+ return result;
726
+ };
727
+ };
728
+ var createConfigUtils = (config) => ({
729
+ cache: createLruCache(config.cacheSize),
730
+ parseClassName: createParseClassName(config),
731
+ sortModifiers: createSortModifiers(config),
732
+ postfixLookupClassGroupIds: createPostfixLookupClassGroupIds(config),
733
+ ...createClassGroupUtils(config)
734
+ });
735
+ var createPostfixLookupClassGroupIds = (config) => {
736
+ const lookup = /* @__PURE__ */ Object.create(null);
737
+ const classGroupIds = config.postfixLookupClassGroups;
738
+ if (classGroupIds) {
739
+ for (let i = 0; i < classGroupIds.length; i++) {
740
+ lookup[classGroupIds[i]] = true;
741
+ }
742
+ }
743
+ return lookup;
744
+ };
745
+ var SPLIT_CLASSES_REGEX = /\s+/;
746
+ var mergeClassList = (classList, configUtils) => {
747
+ const {
748
+ parseClassName,
749
+ getClassGroupId,
750
+ getConflictingClassGroupIds,
751
+ sortModifiers,
752
+ postfixLookupClassGroupIds
753
+ } = configUtils;
754
+ const classGroupsInConflict = [];
755
+ const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);
756
+ let result = "";
757
+ for (let index = classNames.length - 1; index >= 0; index -= 1) {
758
+ const originalClassName = classNames[index];
759
+ const {
760
+ isExternal,
761
+ modifiers,
762
+ hasImportantModifier,
763
+ baseClassName,
764
+ maybePostfixModifierPosition
765
+ } = parseClassName(originalClassName);
766
+ if (isExternal) {
767
+ result = originalClassName + (result.length > 0 ? " " + result : result);
768
+ continue;
769
+ }
770
+ let hasPostfixModifier = !!maybePostfixModifierPosition;
771
+ let classGroupId;
772
+ if (hasPostfixModifier) {
773
+ const baseClassNameWithoutPostfix = baseClassName.substring(0, maybePostfixModifierPosition);
774
+ classGroupId = getClassGroupId(baseClassNameWithoutPostfix);
775
+ const classGroupIdWithPostfix = classGroupId && postfixLookupClassGroupIds[classGroupId] ? getClassGroupId(baseClassName) : void 0;
776
+ if (classGroupIdWithPostfix && classGroupIdWithPostfix !== classGroupId) {
777
+ classGroupId = classGroupIdWithPostfix;
778
+ hasPostfixModifier = false;
779
+ }
780
+ } else {
781
+ classGroupId = getClassGroupId(baseClassName);
782
+ }
783
+ if (!classGroupId) {
784
+ if (!hasPostfixModifier) {
785
+ result = originalClassName + (result.length > 0 ? " " + result : result);
786
+ continue;
787
+ }
788
+ classGroupId = getClassGroupId(baseClassName);
789
+ if (!classGroupId) {
790
+ result = originalClassName + (result.length > 0 ? " " + result : result);
791
+ continue;
792
+ }
793
+ hasPostfixModifier = false;
794
+ }
795
+ const variantModifier = modifiers.length === 0 ? "" : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(":");
796
+ const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;
797
+ const classId = modifierId + classGroupId;
798
+ if (classGroupsInConflict.indexOf(classId) > -1) {
799
+ continue;
800
+ }
801
+ classGroupsInConflict.push(classId);
802
+ const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);
803
+ for (let i = 0; i < conflictGroups.length; ++i) {
804
+ const group = conflictGroups[i];
805
+ classGroupsInConflict.push(modifierId + group);
806
+ }
807
+ result = originalClassName + (result.length > 0 ? " " + result : result);
808
+ }
809
+ return result;
810
+ };
811
+ var twJoin = (...classLists) => {
812
+ let index = 0;
813
+ let argument;
814
+ let resolvedValue;
815
+ let string = "";
816
+ while (index < classLists.length) {
817
+ if (argument = classLists[index++]) {
818
+ if (resolvedValue = toValue(argument)) {
819
+ string && (string += " ");
820
+ string += resolvedValue;
821
+ }
822
+ }
823
+ }
824
+ return string;
825
+ };
826
+ var toValue = (mix) => {
827
+ if (typeof mix === "string") {
828
+ return mix;
829
+ }
830
+ let resolvedValue;
831
+ let string = "";
832
+ for (let k = 0; k < mix.length; k++) {
833
+ if (mix[k]) {
834
+ if (resolvedValue = toValue(mix[k])) {
835
+ string && (string += " ");
836
+ string += resolvedValue;
837
+ }
838
+ }
839
+ }
840
+ return string;
841
+ };
842
+ var createTailwindMerge = (createConfigFirst, ...createConfigRest) => {
843
+ let configUtils;
844
+ let cacheGet;
845
+ let cacheSet;
846
+ let functionToCall;
847
+ const initTailwindMerge = (classList) => {
848
+ const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());
849
+ configUtils = createConfigUtils(config);
850
+ cacheGet = configUtils.cache.get;
851
+ cacheSet = configUtils.cache.set;
852
+ functionToCall = tailwindMerge;
853
+ return tailwindMerge(classList);
854
+ };
855
+ const tailwindMerge = (classList) => {
856
+ const cachedResult = cacheGet(classList);
857
+ if (cachedResult) {
858
+ return cachedResult;
859
+ }
860
+ const result = mergeClassList(classList, configUtils);
861
+ cacheSet(classList, result);
862
+ return result;
863
+ };
864
+ functionToCall = initTailwindMerge;
865
+ return (...args) => functionToCall(twJoin(...args));
866
+ };
867
+ var fallbackThemeArr = [];
868
+ var fromTheme = (key) => {
869
+ const themeGetter = (theme) => theme[key] || fallbackThemeArr;
870
+ themeGetter.isThemeGetter = true;
871
+ themeGetter.themeKey = key;
872
+ return themeGetter;
873
+ };
874
+ var arbitraryValueRegex = /^\[(?:(\w[\w-]*):)?(.+)\]$/i;
875
+ var arbitraryVariableRegex = /^\((?:(\w[\w-]*):)?(.+)\)$/i;
876
+ var fractionRegex = /^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/;
877
+ var tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
878
+ var 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$/;
879
+ var colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix|color|light-dark)\(.+\)$/;
880
+ var shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
881
+ var imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
882
+ var isFraction = (value) => fractionRegex.test(value);
883
+ var isNumber = (value) => !!value && !Number.isNaN(Number(value));
884
+ var isInteger = (value) => !!value && Number.isInteger(Number(value));
885
+ var isPercent = (value) => value.endsWith("%") && isNumber(value.slice(0, -1));
886
+ var isTshirtSize = (value) => tshirtUnitRegex.test(value);
887
+ var isAny = () => true;
888
+ var isLengthOnly = (value) => (
889
+ // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
890
+ // For example, `hsl(0 0% 0%)` would be classified as a length without this check.
891
+ // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
892
+ lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)
893
+ );
894
+ var isNever = () => false;
895
+ var isShadow = (value) => shadowRegex.test(value);
896
+ var isImage = (value) => imageRegex.test(value);
897
+ var isAnyNonArbitrary = (value) => !isArbitraryValue(value) && !isArbitraryVariable(value);
898
+ var isNamedContainerQuery = (value) => value.startsWith("@container") && (value[10] === "/" && value[11] !== void 0 || value[11] === "s" && value[16] !== void 0 && value.startsWith("-size/", 10) || value[11] === "n" && value[18] !== void 0 && value.startsWith("-normal/", 10));
899
+ var isArbitrarySize = (value) => getIsArbitraryValue(value, isLabelSize, isNever);
900
+ var isArbitraryValue = (value) => arbitraryValueRegex.test(value);
901
+ var isArbitraryLength = (value) => getIsArbitraryValue(value, isLabelLength, isLengthOnly);
902
+ var isArbitraryNumber = (value) => getIsArbitraryValue(value, isLabelNumber, isNumber);
903
+ var isArbitraryWeight = (value) => getIsArbitraryValue(value, isLabelWeight, isAny);
904
+ var isArbitraryFamilyName = (value) => getIsArbitraryValue(value, isLabelFamilyName, isNever);
905
+ var isArbitraryPosition = (value) => getIsArbitraryValue(value, isLabelPosition, isNever);
906
+ var isArbitraryImage = (value) => getIsArbitraryValue(value, isLabelImage, isImage);
907
+ var isArbitraryShadow = (value) => getIsArbitraryValue(value, isLabelShadow, isShadow);
908
+ var isArbitraryVariable = (value) => arbitraryVariableRegex.test(value);
909
+ var isArbitraryVariableLength = (value) => getIsArbitraryVariable(value, isLabelLength);
910
+ var isArbitraryVariableFamilyName = (value) => getIsArbitraryVariable(value, isLabelFamilyName);
911
+ var isArbitraryVariablePosition = (value) => getIsArbitraryVariable(value, isLabelPosition);
912
+ var isArbitraryVariableSize = (value) => getIsArbitraryVariable(value, isLabelSize);
913
+ var isArbitraryVariableImage = (value) => getIsArbitraryVariable(value, isLabelImage);
914
+ var isArbitraryVariableShadow = (value) => getIsArbitraryVariable(value, isLabelShadow, true);
915
+ var isArbitraryVariableWeight = (value) => getIsArbitraryVariable(value, isLabelWeight, true);
916
+ var getIsArbitraryValue = (value, testLabel, testValue) => {
917
+ const result = arbitraryValueRegex.exec(value);
918
+ if (result) {
919
+ if (result[1]) {
920
+ return testLabel(result[1]);
921
+ }
922
+ return testValue(result[2]);
923
+ }
924
+ return false;
925
+ };
926
+ var getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {
927
+ const result = arbitraryVariableRegex.exec(value);
928
+ if (result) {
929
+ if (result[1]) {
930
+ return testLabel(result[1]);
931
+ }
932
+ return shouldMatchNoLabel;
933
+ }
934
+ return false;
935
+ };
936
+ var isLabelPosition = (label) => label === "position" || label === "percentage";
937
+ var isLabelImage = (label) => label === "image" || label === "url";
938
+ var isLabelSize = (label) => label === "length" || label === "size" || label === "bg-size";
939
+ var isLabelLength = (label) => label === "length";
940
+ var isLabelNumber = (label) => label === "number";
941
+ var isLabelFamilyName = (label) => label === "family-name";
942
+ var isLabelWeight = (label) => label === "number" || label === "weight";
943
+ var isLabelShadow = (label) => label === "shadow";
944
+ var getDefaultConfig = () => {
945
+ const themeColor = fromTheme("color");
946
+ const themeFont = fromTheme("font");
947
+ const themeText = fromTheme("text");
948
+ const themeFontWeight = fromTheme("font-weight");
949
+ const themeTracking = fromTheme("tracking");
950
+ const themeLeading = fromTheme("leading");
951
+ const themeBreakpoint = fromTheme("breakpoint");
952
+ const themeContainer = fromTheme("container");
953
+ const themeSpacing = fromTheme("spacing");
954
+ const themeRadius = fromTheme("radius");
955
+ const themeShadow = fromTheme("shadow");
956
+ const themeInsetShadow = fromTheme("inset-shadow");
957
+ const themeTextShadow = fromTheme("text-shadow");
958
+ const themeDropShadow = fromTheme("drop-shadow");
959
+ const themeBlur = fromTheme("blur");
960
+ const themePerspective = fromTheme("perspective");
961
+ const themeAspect = fromTheme("aspect");
962
+ const themeEase = fromTheme("ease");
963
+ const themeAnimate = fromTheme("animate");
964
+ const scaleBreak = () => ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"];
965
+ const scalePosition = () => [
966
+ "center",
967
+ "top",
968
+ "bottom",
969
+ "left",
970
+ "right",
971
+ "top-left",
972
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
973
+ "left-top",
974
+ "top-right",
975
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
976
+ "right-top",
977
+ "bottom-right",
978
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
979
+ "right-bottom",
980
+ "bottom-left",
981
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
982
+ "left-bottom"
983
+ ];
984
+ const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];
985
+ const scaleOverflow = () => ["auto", "hidden", "clip", "visible", "scroll"];
986
+ const scaleOverscroll = () => ["auto", "contain", "none"];
987
+ const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];
988
+ const scaleInset = () => [isFraction, "full", "auto", ...scaleUnambiguousSpacing()];
989
+ const scaleGridTemplateColsRows = () => [isInteger, "none", "subgrid", isArbitraryVariable, isArbitraryValue];
990
+ const scaleGridColRowStartAndEnd = () => ["auto", {
991
+ span: ["full", isInteger, isArbitraryVariable, isArbitraryValue]
992
+ }, isInteger, isArbitraryVariable, isArbitraryValue];
993
+ const scaleGridColRowStartOrEnd = () => [isInteger, "auto", isArbitraryVariable, isArbitraryValue];
994
+ const scaleGridAutoColsRows = () => ["auto", "min", "max", "fr", isArbitraryVariable, isArbitraryValue];
995
+ const scaleAlignPrimaryAxis = () => ["start", "end", "center", "between", "around", "evenly", "stretch", "baseline", "center-safe", "end-safe"];
996
+ const scaleAlignSecondaryAxis = () => ["start", "end", "center", "stretch", "center-safe", "end-safe"];
997
+ const scaleMargin = () => ["auto", ...scaleUnambiguousSpacing()];
998
+ const scaleSizing = () => [isFraction, "auto", "full", "dvw", "dvh", "lvw", "lvh", "svw", "svh", "min", "max", "fit", ...scaleUnambiguousSpacing()];
999
+ const scaleSizingInline = () => [themeContainer, isFraction, "screen", "full", "dvw", "lvw", "svw", "min", "max", "fit", ...scaleUnambiguousSpacing()];
1000
+ const scaleSizingBlock = () => [isFraction, "screen", "full", "lh", "dvh", "lvh", "svh", "min", "max", "fit", ...scaleUnambiguousSpacing()];
1001
+ const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];
1002
+ const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {
1003
+ position: [isArbitraryVariable, isArbitraryValue]
1004
+ }];
1005
+ const scaleBgRepeat = () => ["no-repeat", {
1006
+ repeat: ["", "x", "y", "space", "round"]
1007
+ }];
1008
+ const scaleBgSize = () => ["auto", "cover", "contain", isArbitraryVariableSize, isArbitrarySize, {
1009
+ size: [isArbitraryVariable, isArbitraryValue]
1010
+ }];
1011
+ const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];
1012
+ const scaleRadius = () => [
1013
+ // Deprecated since Tailwind CSS v4.0.0
1014
+ "",
1015
+ "none",
1016
+ "full",
1017
+ themeRadius,
1018
+ isArbitraryVariable,
1019
+ isArbitraryValue
1020
+ ];
1021
+ const scaleBorderWidth = () => ["", isNumber, isArbitraryVariableLength, isArbitraryLength];
1022
+ const scaleLineStyle = () => ["solid", "dashed", "dotted", "double"];
1023
+ const scaleBlendMode = () => ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"];
1024
+ const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];
1025
+ const scaleBlur = () => [
1026
+ // Deprecated since Tailwind CSS v4.0.0
1027
+ "",
1028
+ "none",
1029
+ themeBlur,
1030
+ isArbitraryVariable,
1031
+ isArbitraryValue
1032
+ ];
1033
+ const scaleRotate = () => ["none", isNumber, isArbitraryVariable, isArbitraryValue];
1034
+ const scaleScale = () => ["none", isNumber, isArbitraryVariable, isArbitraryValue];
1035
+ const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];
1036
+ const scaleTranslate = () => [isFraction, "full", ...scaleUnambiguousSpacing()];
1037
+ return {
1038
+ cacheSize: 500,
1039
+ theme: {
1040
+ animate: ["spin", "ping", "pulse", "bounce"],
1041
+ aspect: ["video"],
1042
+ blur: [isTshirtSize],
1043
+ breakpoint: [isTshirtSize],
1044
+ color: [isAny],
1045
+ container: [isTshirtSize],
1046
+ "drop-shadow": [isTshirtSize],
1047
+ ease: ["in", "out", "in-out"],
1048
+ font: [isAnyNonArbitrary],
1049
+ "font-weight": ["thin", "extralight", "light", "normal", "medium", "semibold", "bold", "extrabold", "black"],
1050
+ "inset-shadow": [isTshirtSize],
1051
+ leading: ["none", "tight", "snug", "normal", "relaxed", "loose"],
1052
+ perspective: ["dramatic", "near", "normal", "midrange", "distant", "none"],
1053
+ radius: [isTshirtSize],
1054
+ shadow: [isTshirtSize],
1055
+ spacing: ["px", isNumber],
1056
+ text: [isTshirtSize],
1057
+ "text-shadow": [isTshirtSize],
1058
+ tracking: ["tighter", "tight", "normal", "wide", "wider", "widest"]
1059
+ },
1060
+ classGroups: {
1061
+ // --------------
1062
+ // --- Layout ---
1063
+ // --------------
1064
+ /**
1065
+ * Aspect Ratio
1066
+ * @see https://tailwindcss.com/docs/aspect-ratio
1067
+ */
1068
+ aspect: [{
1069
+ aspect: ["auto", "square", isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]
1070
+ }],
1071
+ /**
1072
+ * Container
1073
+ * @see https://tailwindcss.com/docs/container
1074
+ * @deprecated since Tailwind CSS v4.0.0
1075
+ */
1076
+ container: ["container"],
1077
+ /**
1078
+ * Container Type
1079
+ * @see https://tailwindcss.com/docs/responsive-design#container-queries
1080
+ */
1081
+ "container-type": [{
1082
+ "@container": ["", "normal", "size", isArbitraryVariable, isArbitraryValue]
1083
+ }],
1084
+ /**
1085
+ * Container Name
1086
+ * @see https://tailwindcss.com/docs/responsive-design#named-containers
1087
+ */
1088
+ "container-named": [isNamedContainerQuery],
1089
+ /**
1090
+ * Columns
1091
+ * @see https://tailwindcss.com/docs/columns
1092
+ */
1093
+ columns: [{
1094
+ columns: [isNumber, "auto", isArbitraryValue, isArbitraryVariable, themeContainer]
1095
+ }],
1096
+ /**
1097
+ * Break After
1098
+ * @see https://tailwindcss.com/docs/break-after
1099
+ */
1100
+ "break-after": [{
1101
+ "break-after": scaleBreak()
1102
+ }],
1103
+ /**
1104
+ * Break Before
1105
+ * @see https://tailwindcss.com/docs/break-before
1106
+ */
1107
+ "break-before": [{
1108
+ "break-before": scaleBreak()
1109
+ }],
1110
+ /**
1111
+ * Break Inside
1112
+ * @see https://tailwindcss.com/docs/break-inside
1113
+ */
1114
+ "break-inside": [{
1115
+ "break-inside": ["auto", "avoid", "avoid-page", "avoid-column"]
1116
+ }],
1117
+ /**
1118
+ * Box Decoration Break
1119
+ * @see https://tailwindcss.com/docs/box-decoration-break
1120
+ */
1121
+ "box-decoration": [{
1122
+ "box-decoration": ["slice", "clone"]
1123
+ }],
1124
+ /**
1125
+ * Box Sizing
1126
+ * @see https://tailwindcss.com/docs/box-sizing
1127
+ */
1128
+ box: [{
1129
+ box: ["border", "content"]
1130
+ }],
1131
+ /**
1132
+ * Display
1133
+ * @see https://tailwindcss.com/docs/display
1134
+ */
1135
+ 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"],
1136
+ /**
1137
+ * Screen Reader Only
1138
+ * @see https://tailwindcss.com/docs/display#screen-reader-only
1139
+ */
1140
+ sr: ["sr-only", "not-sr-only"],
1141
+ /**
1142
+ * Floats
1143
+ * @see https://tailwindcss.com/docs/float
1144
+ */
1145
+ float: [{
1146
+ float: ["right", "left", "none", "start", "end"]
1147
+ }],
1148
+ /**
1149
+ * Clear
1150
+ * @see https://tailwindcss.com/docs/clear
1151
+ */
1152
+ clear: [{
1153
+ clear: ["left", "right", "both", "none", "start", "end"]
1154
+ }],
1155
+ /**
1156
+ * Isolation
1157
+ * @see https://tailwindcss.com/docs/isolation
1158
+ */
1159
+ isolation: ["isolate", "isolation-auto"],
1160
+ /**
1161
+ * Object Fit
1162
+ * @see https://tailwindcss.com/docs/object-fit
1163
+ */
1164
+ "object-fit": [{
1165
+ object: ["contain", "cover", "fill", "none", "scale-down"]
1166
+ }],
1167
+ /**
1168
+ * Object Position
1169
+ * @see https://tailwindcss.com/docs/object-position
1170
+ */
1171
+ "object-position": [{
1172
+ object: scalePositionWithArbitrary()
1173
+ }],
1174
+ /**
1175
+ * Overflow
1176
+ * @see https://tailwindcss.com/docs/overflow
1177
+ */
1178
+ overflow: [{
1179
+ overflow: scaleOverflow()
1180
+ }],
1181
+ /**
1182
+ * Overflow X
1183
+ * @see https://tailwindcss.com/docs/overflow
1184
+ */
1185
+ "overflow-x": [{
1186
+ "overflow-x": scaleOverflow()
1187
+ }],
1188
+ /**
1189
+ * Overflow Y
1190
+ * @see https://tailwindcss.com/docs/overflow
1191
+ */
1192
+ "overflow-y": [{
1193
+ "overflow-y": scaleOverflow()
1194
+ }],
1195
+ /**
1196
+ * Overscroll Behavior
1197
+ * @see https://tailwindcss.com/docs/overscroll-behavior
1198
+ */
1199
+ overscroll: [{
1200
+ overscroll: scaleOverscroll()
1201
+ }],
1202
+ /**
1203
+ * Overscroll Behavior X
1204
+ * @see https://tailwindcss.com/docs/overscroll-behavior
1205
+ */
1206
+ "overscroll-x": [{
1207
+ "overscroll-x": scaleOverscroll()
1208
+ }],
1209
+ /**
1210
+ * Overscroll Behavior Y
1211
+ * @see https://tailwindcss.com/docs/overscroll-behavior
1212
+ */
1213
+ "overscroll-y": [{
1214
+ "overscroll-y": scaleOverscroll()
1215
+ }],
1216
+ /**
1217
+ * Position
1218
+ * @see https://tailwindcss.com/docs/position
1219
+ */
1220
+ position: ["static", "fixed", "absolute", "relative", "sticky"],
1221
+ /**
1222
+ * Inset
1223
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1224
+ */
1225
+ inset: [{
1226
+ inset: scaleInset()
1227
+ }],
1228
+ /**
1229
+ * Inset Inline
1230
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1231
+ */
1232
+ "inset-x": [{
1233
+ "inset-x": scaleInset()
1234
+ }],
1235
+ /**
1236
+ * Inset Block
1237
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1238
+ */
1239
+ "inset-y": [{
1240
+ "inset-y": scaleInset()
1241
+ }],
1242
+ /**
1243
+ * Inset Inline Start
1244
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1245
+ * @todo class group will be renamed to `inset-s` in next major release
1246
+ */
1247
+ start: [{
1248
+ "inset-s": scaleInset(),
1249
+ /**
1250
+ * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.
1251
+ * @see https://github.com/tailwindlabs/tailwindcss/pull/19613
1252
+ */
1253
+ start: scaleInset()
1254
+ }],
1255
+ /**
1256
+ * Inset Inline End
1257
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1258
+ * @todo class group will be renamed to `inset-e` in next major release
1259
+ */
1260
+ end: [{
1261
+ "inset-e": scaleInset(),
1262
+ /**
1263
+ * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.
1264
+ * @see https://github.com/tailwindlabs/tailwindcss/pull/19613
1265
+ */
1266
+ end: scaleInset()
1267
+ }],
1268
+ /**
1269
+ * Inset Block Start
1270
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1271
+ */
1272
+ "inset-bs": [{
1273
+ "inset-bs": scaleInset()
1274
+ }],
1275
+ /**
1276
+ * Inset Block End
1277
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1278
+ */
1279
+ "inset-be": [{
1280
+ "inset-be": scaleInset()
1281
+ }],
1282
+ /**
1283
+ * Top
1284
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1285
+ */
1286
+ top: [{
1287
+ top: scaleInset()
1288
+ }],
1289
+ /**
1290
+ * Right
1291
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1292
+ */
1293
+ right: [{
1294
+ right: scaleInset()
1295
+ }],
1296
+ /**
1297
+ * Bottom
1298
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1299
+ */
1300
+ bottom: [{
1301
+ bottom: scaleInset()
1302
+ }],
1303
+ /**
1304
+ * Left
1305
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1306
+ */
1307
+ left: [{
1308
+ left: scaleInset()
1309
+ }],
1310
+ /**
1311
+ * Visibility
1312
+ * @see https://tailwindcss.com/docs/visibility
1313
+ */
1314
+ visibility: ["visible", "invisible", "collapse"],
1315
+ /**
1316
+ * Z-Index
1317
+ * @see https://tailwindcss.com/docs/z-index
1318
+ */
1319
+ z: [{
1320
+ z: [isInteger, "auto", isArbitraryVariable, isArbitraryValue]
1321
+ }],
1322
+ // ------------------------
1323
+ // --- Flexbox and Grid ---
1324
+ // ------------------------
1325
+ /**
1326
+ * Flex Basis
1327
+ * @see https://tailwindcss.com/docs/flex-basis
1328
+ */
1329
+ basis: [{
1330
+ basis: [isFraction, "full", "auto", themeContainer, ...scaleUnambiguousSpacing()]
1331
+ }],
1332
+ /**
1333
+ * Flex Direction
1334
+ * @see https://tailwindcss.com/docs/flex-direction
1335
+ */
1336
+ "flex-direction": [{
1337
+ flex: ["row", "row-reverse", "col", "col-reverse"]
1338
+ }],
1339
+ /**
1340
+ * Flex Wrap
1341
+ * @see https://tailwindcss.com/docs/flex-wrap
1342
+ */
1343
+ "flex-wrap": [{
1344
+ flex: ["nowrap", "wrap", "wrap-reverse"]
1345
+ }],
1346
+ /**
1347
+ * Flex
1348
+ * @see https://tailwindcss.com/docs/flex
1349
+ */
1350
+ flex: [{
1351
+ flex: [isNumber, isFraction, "auto", "initial", "none", isArbitraryValue]
1352
+ }],
1353
+ /**
1354
+ * Flex Grow
1355
+ * @see https://tailwindcss.com/docs/flex-grow
1356
+ */
1357
+ grow: [{
1358
+ grow: ["", isNumber, isArbitraryVariable, isArbitraryValue]
1359
+ }],
1360
+ /**
1361
+ * Flex Shrink
1362
+ * @see https://tailwindcss.com/docs/flex-shrink
1363
+ */
1364
+ shrink: [{
1365
+ shrink: ["", isNumber, isArbitraryVariable, isArbitraryValue]
1366
+ }],
1367
+ /**
1368
+ * Order
1369
+ * @see https://tailwindcss.com/docs/order
1370
+ */
1371
+ order: [{
1372
+ order: [isInteger, "first", "last", "none", isArbitraryVariable, isArbitraryValue]
1373
+ }],
1374
+ /**
1375
+ * Grid Template Columns
1376
+ * @see https://tailwindcss.com/docs/grid-template-columns
1377
+ */
1378
+ "grid-cols": [{
1379
+ "grid-cols": scaleGridTemplateColsRows()
1380
+ }],
1381
+ /**
1382
+ * Grid Column Start / End
1383
+ * @see https://tailwindcss.com/docs/grid-column
1384
+ */
1385
+ "col-start-end": [{
1386
+ col: scaleGridColRowStartAndEnd()
1387
+ }],
1388
+ /**
1389
+ * Grid Column Start
1390
+ * @see https://tailwindcss.com/docs/grid-column
1391
+ */
1392
+ "col-start": [{
1393
+ "col-start": scaleGridColRowStartOrEnd()
1394
+ }],
1395
+ /**
1396
+ * Grid Column End
1397
+ * @see https://tailwindcss.com/docs/grid-column
1398
+ */
1399
+ "col-end": [{
1400
+ "col-end": scaleGridColRowStartOrEnd()
1401
+ }],
1402
+ /**
1403
+ * Grid Template Rows
1404
+ * @see https://tailwindcss.com/docs/grid-template-rows
1405
+ */
1406
+ "grid-rows": [{
1407
+ "grid-rows": scaleGridTemplateColsRows()
1408
+ }],
1409
+ /**
1410
+ * Grid Row Start / End
1411
+ * @see https://tailwindcss.com/docs/grid-row
1412
+ */
1413
+ "row-start-end": [{
1414
+ row: scaleGridColRowStartAndEnd()
1415
+ }],
1416
+ /**
1417
+ * Grid Row Start
1418
+ * @see https://tailwindcss.com/docs/grid-row
1419
+ */
1420
+ "row-start": [{
1421
+ "row-start": scaleGridColRowStartOrEnd()
1422
+ }],
1423
+ /**
1424
+ * Grid Row End
1425
+ * @see https://tailwindcss.com/docs/grid-row
1426
+ */
1427
+ "row-end": [{
1428
+ "row-end": scaleGridColRowStartOrEnd()
1429
+ }],
1430
+ /**
1431
+ * Grid Auto Flow
1432
+ * @see https://tailwindcss.com/docs/grid-auto-flow
1433
+ */
1434
+ "grid-flow": [{
1435
+ "grid-flow": ["row", "col", "dense", "row-dense", "col-dense"]
1436
+ }],
1437
+ /**
1438
+ * Grid Auto Columns
1439
+ * @see https://tailwindcss.com/docs/grid-auto-columns
1440
+ */
1441
+ "auto-cols": [{
1442
+ "auto-cols": scaleGridAutoColsRows()
1443
+ }],
1444
+ /**
1445
+ * Grid Auto Rows
1446
+ * @see https://tailwindcss.com/docs/grid-auto-rows
1447
+ */
1448
+ "auto-rows": [{
1449
+ "auto-rows": scaleGridAutoColsRows()
1450
+ }],
1451
+ /**
1452
+ * Gap
1453
+ * @see https://tailwindcss.com/docs/gap
1454
+ */
1455
+ gap: [{
1456
+ gap: scaleUnambiguousSpacing()
1457
+ }],
1458
+ /**
1459
+ * Gap X
1460
+ * @see https://tailwindcss.com/docs/gap
1461
+ */
1462
+ "gap-x": [{
1463
+ "gap-x": scaleUnambiguousSpacing()
1464
+ }],
1465
+ /**
1466
+ * Gap Y
1467
+ * @see https://tailwindcss.com/docs/gap
1468
+ */
1469
+ "gap-y": [{
1470
+ "gap-y": scaleUnambiguousSpacing()
1471
+ }],
1472
+ /**
1473
+ * Justify Content
1474
+ * @see https://tailwindcss.com/docs/justify-content
1475
+ */
1476
+ "justify-content": [{
1477
+ justify: [...scaleAlignPrimaryAxis(), "normal"]
1478
+ }],
1479
+ /**
1480
+ * Justify Items
1481
+ * @see https://tailwindcss.com/docs/justify-items
1482
+ */
1483
+ "justify-items": [{
1484
+ "justify-items": [...scaleAlignSecondaryAxis(), "normal"]
1485
+ }],
1486
+ /**
1487
+ * Justify Self
1488
+ * @see https://tailwindcss.com/docs/justify-self
1489
+ */
1490
+ "justify-self": [{
1491
+ "justify-self": ["auto", ...scaleAlignSecondaryAxis()]
1492
+ }],
1493
+ /**
1494
+ * Align Content
1495
+ * @see https://tailwindcss.com/docs/align-content
1496
+ */
1497
+ "align-content": [{
1498
+ content: ["normal", ...scaleAlignPrimaryAxis()]
1499
+ }],
1500
+ /**
1501
+ * Align Items
1502
+ * @see https://tailwindcss.com/docs/align-items
1503
+ */
1504
+ "align-items": [{
1505
+ items: [...scaleAlignSecondaryAxis(), {
1506
+ baseline: ["", "last"]
1507
+ }]
1508
+ }],
1509
+ /**
1510
+ * Align Self
1511
+ * @see https://tailwindcss.com/docs/align-self
1512
+ */
1513
+ "align-self": [{
1514
+ self: ["auto", ...scaleAlignSecondaryAxis(), {
1515
+ baseline: ["", "last"]
1516
+ }]
1517
+ }],
1518
+ /**
1519
+ * Place Content
1520
+ * @see https://tailwindcss.com/docs/place-content
1521
+ */
1522
+ "place-content": [{
1523
+ "place-content": scaleAlignPrimaryAxis()
1524
+ }],
1525
+ /**
1526
+ * Place Items
1527
+ * @see https://tailwindcss.com/docs/place-items
1528
+ */
1529
+ "place-items": [{
1530
+ "place-items": [...scaleAlignSecondaryAxis(), "baseline"]
1531
+ }],
1532
+ /**
1533
+ * Place Self
1534
+ * @see https://tailwindcss.com/docs/place-self
1535
+ */
1536
+ "place-self": [{
1537
+ "place-self": ["auto", ...scaleAlignSecondaryAxis()]
1538
+ }],
1539
+ // Spacing
1540
+ /**
1541
+ * Padding
1542
+ * @see https://tailwindcss.com/docs/padding
1543
+ */
1544
+ p: [{
1545
+ p: scaleUnambiguousSpacing()
1546
+ }],
1547
+ /**
1548
+ * Padding Inline
1549
+ * @see https://tailwindcss.com/docs/padding
1550
+ */
1551
+ px: [{
1552
+ px: scaleUnambiguousSpacing()
1553
+ }],
1554
+ /**
1555
+ * Padding Block
1556
+ * @see https://tailwindcss.com/docs/padding
1557
+ */
1558
+ py: [{
1559
+ py: scaleUnambiguousSpacing()
1560
+ }],
1561
+ /**
1562
+ * Padding Inline Start
1563
+ * @see https://tailwindcss.com/docs/padding
1564
+ */
1565
+ ps: [{
1566
+ ps: scaleUnambiguousSpacing()
1567
+ }],
1568
+ /**
1569
+ * Padding Inline End
1570
+ * @see https://tailwindcss.com/docs/padding
1571
+ */
1572
+ pe: [{
1573
+ pe: scaleUnambiguousSpacing()
1574
+ }],
1575
+ /**
1576
+ * Padding Block Start
1577
+ * @see https://tailwindcss.com/docs/padding
1578
+ */
1579
+ pbs: [{
1580
+ pbs: scaleUnambiguousSpacing()
1581
+ }],
1582
+ /**
1583
+ * Padding Block End
1584
+ * @see https://tailwindcss.com/docs/padding
1585
+ */
1586
+ pbe: [{
1587
+ pbe: scaleUnambiguousSpacing()
1588
+ }],
1589
+ /**
1590
+ * Padding Top
1591
+ * @see https://tailwindcss.com/docs/padding
1592
+ */
1593
+ pt: [{
1594
+ pt: scaleUnambiguousSpacing()
1595
+ }],
1596
+ /**
1597
+ * Padding Right
1598
+ * @see https://tailwindcss.com/docs/padding
1599
+ */
1600
+ pr: [{
1601
+ pr: scaleUnambiguousSpacing()
1602
+ }],
1603
+ /**
1604
+ * Padding Bottom
1605
+ * @see https://tailwindcss.com/docs/padding
1606
+ */
1607
+ pb: [{
1608
+ pb: scaleUnambiguousSpacing()
1609
+ }],
1610
+ /**
1611
+ * Padding Left
1612
+ * @see https://tailwindcss.com/docs/padding
1613
+ */
1614
+ pl: [{
1615
+ pl: scaleUnambiguousSpacing()
1616
+ }],
1617
+ /**
1618
+ * Margin
1619
+ * @see https://tailwindcss.com/docs/margin
1620
+ */
1621
+ m: [{
1622
+ m: scaleMargin()
1623
+ }],
1624
+ /**
1625
+ * Margin Inline
1626
+ * @see https://tailwindcss.com/docs/margin
1627
+ */
1628
+ mx: [{
1629
+ mx: scaleMargin()
1630
+ }],
1631
+ /**
1632
+ * Margin Block
1633
+ * @see https://tailwindcss.com/docs/margin
1634
+ */
1635
+ my: [{
1636
+ my: scaleMargin()
1637
+ }],
1638
+ /**
1639
+ * Margin Inline Start
1640
+ * @see https://tailwindcss.com/docs/margin
1641
+ */
1642
+ ms: [{
1643
+ ms: scaleMargin()
1644
+ }],
1645
+ /**
1646
+ * Margin Inline End
1647
+ * @see https://tailwindcss.com/docs/margin
1648
+ */
1649
+ me: [{
1650
+ me: scaleMargin()
1651
+ }],
1652
+ /**
1653
+ * Margin Block Start
1654
+ * @see https://tailwindcss.com/docs/margin
1655
+ */
1656
+ mbs: [{
1657
+ mbs: scaleMargin()
1658
+ }],
1659
+ /**
1660
+ * Margin Block End
1661
+ * @see https://tailwindcss.com/docs/margin
1662
+ */
1663
+ mbe: [{
1664
+ mbe: scaleMargin()
1665
+ }],
1666
+ /**
1667
+ * Margin Top
1668
+ * @see https://tailwindcss.com/docs/margin
1669
+ */
1670
+ mt: [{
1671
+ mt: scaleMargin()
1672
+ }],
1673
+ /**
1674
+ * Margin Right
1675
+ * @see https://tailwindcss.com/docs/margin
1676
+ */
1677
+ mr: [{
1678
+ mr: scaleMargin()
1679
+ }],
1680
+ /**
1681
+ * Margin Bottom
1682
+ * @see https://tailwindcss.com/docs/margin
1683
+ */
1684
+ mb: [{
1685
+ mb: scaleMargin()
1686
+ }],
1687
+ /**
1688
+ * Margin Left
1689
+ * @see https://tailwindcss.com/docs/margin
1690
+ */
1691
+ ml: [{
1692
+ ml: scaleMargin()
1693
+ }],
1694
+ /**
1695
+ * Space Between X
1696
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1697
+ */
1698
+ "space-x": [{
1699
+ "space-x": scaleUnambiguousSpacing()
1700
+ }],
1701
+ /**
1702
+ * Space Between X Reverse
1703
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1704
+ */
1705
+ "space-x-reverse": ["space-x-reverse"],
1706
+ /**
1707
+ * Space Between Y
1708
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1709
+ */
1710
+ "space-y": [{
1711
+ "space-y": scaleUnambiguousSpacing()
1712
+ }],
1713
+ /**
1714
+ * Space Between Y Reverse
1715
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1716
+ */
1717
+ "space-y-reverse": ["space-y-reverse"],
1718
+ // --------------
1719
+ // --- Sizing ---
1720
+ // --------------
1721
+ /**
1722
+ * Size
1723
+ * @see https://tailwindcss.com/docs/width#setting-both-width-and-height
1724
+ */
1725
+ size: [{
1726
+ size: scaleSizing()
1727
+ }],
1728
+ /**
1729
+ * Inline Size
1730
+ * @see https://tailwindcss.com/docs/inline-size
1731
+ */
1732
+ "inline-size": [{
1733
+ inline: ["auto", ...scaleSizingInline()]
1734
+ }],
1735
+ /**
1736
+ * Min-Inline Size
1737
+ * @see https://tailwindcss.com/docs/min-inline-size
1738
+ */
1739
+ "min-inline-size": [{
1740
+ "min-inline": ["auto", ...scaleSizingInline()]
1741
+ }],
1742
+ /**
1743
+ * Max-Inline Size
1744
+ * @see https://tailwindcss.com/docs/max-inline-size
1745
+ */
1746
+ "max-inline-size": [{
1747
+ "max-inline": ["none", ...scaleSizingInline()]
1748
+ }],
1749
+ /**
1750
+ * Block Size
1751
+ * @see https://tailwindcss.com/docs/block-size
1752
+ */
1753
+ "block-size": [{
1754
+ block: ["auto", ...scaleSizingBlock()]
1755
+ }],
1756
+ /**
1757
+ * Min-Block Size
1758
+ * @see https://tailwindcss.com/docs/min-block-size
1759
+ */
1760
+ "min-block-size": [{
1761
+ "min-block": ["auto", ...scaleSizingBlock()]
1762
+ }],
1763
+ /**
1764
+ * Max-Block Size
1765
+ * @see https://tailwindcss.com/docs/max-block-size
1766
+ */
1767
+ "max-block-size": [{
1768
+ "max-block": ["none", ...scaleSizingBlock()]
1769
+ }],
1770
+ /**
1771
+ * Width
1772
+ * @see https://tailwindcss.com/docs/width
1773
+ */
1774
+ w: [{
1775
+ w: [themeContainer, "screen", ...scaleSizing()]
1776
+ }],
1777
+ /**
1778
+ * Min-Width
1779
+ * @see https://tailwindcss.com/docs/min-width
1780
+ */
1781
+ "min-w": [{
1782
+ "min-w": [
1783
+ themeContainer,
1784
+ "screen",
1785
+ /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1786
+ "none",
1787
+ ...scaleSizing()
1788
+ ]
1789
+ }],
1790
+ /**
1791
+ * Max-Width
1792
+ * @see https://tailwindcss.com/docs/max-width
1793
+ */
1794
+ "max-w": [{
1795
+ "max-w": [
1796
+ themeContainer,
1797
+ "screen",
1798
+ "none",
1799
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1800
+ "prose",
1801
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1802
+ {
1803
+ screen: [themeBreakpoint]
1804
+ },
1805
+ ...scaleSizing()
1806
+ ]
1807
+ }],
1808
+ /**
1809
+ * Height
1810
+ * @see https://tailwindcss.com/docs/height
1811
+ */
1812
+ h: [{
1813
+ h: ["screen", "lh", ...scaleSizing()]
1814
+ }],
1815
+ /**
1816
+ * Min-Height
1817
+ * @see https://tailwindcss.com/docs/min-height
1818
+ */
1819
+ "min-h": [{
1820
+ "min-h": ["screen", "lh", "none", ...scaleSizing()]
1821
+ }],
1822
+ /**
1823
+ * Max-Height
1824
+ * @see https://tailwindcss.com/docs/max-height
1825
+ */
1826
+ "max-h": [{
1827
+ "max-h": ["screen", "lh", "none", ...scaleSizing()]
1828
+ }],
1829
+ // ------------------
1830
+ // --- Typography ---
1831
+ // ------------------
1832
+ /**
1833
+ * Font Size
1834
+ * @see https://tailwindcss.com/docs/font-size
1835
+ */
1836
+ "font-size": [{
1837
+ text: ["base", themeText, isArbitraryVariableLength, isArbitraryLength]
1838
+ }],
1839
+ /**
1840
+ * Font Smoothing
1841
+ * @see https://tailwindcss.com/docs/font-smoothing
1842
+ */
1843
+ "font-smoothing": ["antialiased", "subpixel-antialiased"],
1844
+ /**
1845
+ * Font Style
1846
+ * @see https://tailwindcss.com/docs/font-style
1847
+ */
1848
+ "font-style": ["italic", "not-italic"],
1849
+ /**
1850
+ * Font Weight
1851
+ * @see https://tailwindcss.com/docs/font-weight
1852
+ */
1853
+ "font-weight": [{
1854
+ font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]
1855
+ }],
1856
+ /**
1857
+ * Font Stretch
1858
+ * @see https://tailwindcss.com/docs/font-stretch
1859
+ */
1860
+ "font-stretch": [{
1861
+ "font-stretch": ["ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "normal", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded", isPercent, isArbitraryValue]
1862
+ }],
1863
+ /**
1864
+ * Font Family
1865
+ * @see https://tailwindcss.com/docs/font-family
1866
+ */
1867
+ "font-family": [{
1868
+ font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]
1869
+ }],
1870
+ /**
1871
+ * Font Feature Settings
1872
+ * @see https://tailwindcss.com/docs/font-feature-settings
1873
+ */
1874
+ "font-features": [{
1875
+ "font-features": [isArbitraryValue]
1876
+ }],
1877
+ /**
1878
+ * Font Variant Numeric
1879
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1880
+ */
1881
+ "fvn-normal": ["normal-nums"],
1882
+ /**
1883
+ * Font Variant Numeric
1884
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1885
+ */
1886
+ "fvn-ordinal": ["ordinal"],
1887
+ /**
1888
+ * Font Variant Numeric
1889
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1890
+ */
1891
+ "fvn-slashed-zero": ["slashed-zero"],
1892
+ /**
1893
+ * Font Variant Numeric
1894
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1895
+ */
1896
+ "fvn-figure": ["lining-nums", "oldstyle-nums"],
1897
+ /**
1898
+ * Font Variant Numeric
1899
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1900
+ */
1901
+ "fvn-spacing": ["proportional-nums", "tabular-nums"],
1902
+ /**
1903
+ * Font Variant Numeric
1904
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1905
+ */
1906
+ "fvn-fraction": ["diagonal-fractions", "stacked-fractions"],
1907
+ /**
1908
+ * Letter Spacing
1909
+ * @see https://tailwindcss.com/docs/letter-spacing
1910
+ */
1911
+ tracking: [{
1912
+ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]
1913
+ }],
1914
+ /**
1915
+ * Line Clamp
1916
+ * @see https://tailwindcss.com/docs/line-clamp
1917
+ */
1918
+ "line-clamp": [{
1919
+ "line-clamp": [isNumber, "none", isArbitraryVariable, isArbitraryNumber]
1920
+ }],
1921
+ /**
1922
+ * Line Height
1923
+ * @see https://tailwindcss.com/docs/line-height
1924
+ */
1925
+ leading: [{
1926
+ leading: [
1927
+ "none",
1928
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1929
+ themeLeading,
1930
+ ...scaleUnambiguousSpacing()
1931
+ ]
1932
+ }],
1933
+ /**
1934
+ * List Style Image
1935
+ * @see https://tailwindcss.com/docs/list-style-image
1936
+ */
1937
+ "list-image": [{
1938
+ "list-image": ["none", isArbitraryVariable, isArbitraryValue]
1939
+ }],
1940
+ /**
1941
+ * List Style Position
1942
+ * @see https://tailwindcss.com/docs/list-style-position
1943
+ */
1944
+ "list-style-position": [{
1945
+ list: ["inside", "outside"]
1946
+ }],
1947
+ /**
1948
+ * List Style Type
1949
+ * @see https://tailwindcss.com/docs/list-style-type
1950
+ */
1951
+ "list-style-type": [{
1952
+ list: ["disc", "decimal", "none", isArbitraryVariable, isArbitraryValue]
1953
+ }],
1954
+ /**
1955
+ * Text Alignment
1956
+ * @see https://tailwindcss.com/docs/text-align
1957
+ */
1958
+ "text-alignment": [{
1959
+ text: ["left", "center", "right", "justify", "start", "end"]
1960
+ }],
1961
+ /**
1962
+ * Placeholder Color
1963
+ * @deprecated since Tailwind CSS v3.0.0
1964
+ * @see https://v3.tailwindcss.com/docs/placeholder-color
1965
+ */
1966
+ "placeholder-color": [{
1967
+ placeholder: scaleColor()
1968
+ }],
1969
+ /**
1970
+ * Text Color
1971
+ * @see https://tailwindcss.com/docs/text-color
1972
+ */
1973
+ "text-color": [{
1974
+ text: scaleColor()
1975
+ }],
1976
+ /**
1977
+ * Text Decoration
1978
+ * @see https://tailwindcss.com/docs/text-decoration
1979
+ */
1980
+ "text-decoration": ["underline", "overline", "line-through", "no-underline"],
1981
+ /**
1982
+ * Text Decoration Style
1983
+ * @see https://tailwindcss.com/docs/text-decoration-style
1984
+ */
1985
+ "text-decoration-style": [{
1986
+ decoration: [...scaleLineStyle(), "wavy"]
1987
+ }],
1988
+ /**
1989
+ * Text Decoration Thickness
1990
+ * @see https://tailwindcss.com/docs/text-decoration-thickness
1991
+ */
1992
+ "text-decoration-thickness": [{
1993
+ decoration: [isNumber, "from-font", "auto", isArbitraryVariable, isArbitraryLength]
1994
+ }],
1995
+ /**
1996
+ * Text Decoration Color
1997
+ * @see https://tailwindcss.com/docs/text-decoration-color
1998
+ */
1999
+ "text-decoration-color": [{
2000
+ decoration: scaleColor()
2001
+ }],
2002
+ /**
2003
+ * Text Underline Offset
2004
+ * @see https://tailwindcss.com/docs/text-underline-offset
2005
+ */
2006
+ "underline-offset": [{
2007
+ "underline-offset": [isNumber, "auto", isArbitraryVariable, isArbitraryValue]
2008
+ }],
2009
+ /**
2010
+ * Text Transform
2011
+ * @see https://tailwindcss.com/docs/text-transform
2012
+ */
2013
+ "text-transform": ["uppercase", "lowercase", "capitalize", "normal-case"],
2014
+ /**
2015
+ * Text Overflow
2016
+ * @see https://tailwindcss.com/docs/text-overflow
2017
+ */
2018
+ "text-overflow": ["truncate", "text-ellipsis", "text-clip"],
2019
+ /**
2020
+ * Text Wrap
2021
+ * @see https://tailwindcss.com/docs/text-wrap
2022
+ */
2023
+ "text-wrap": [{
2024
+ text: ["wrap", "nowrap", "balance", "pretty"]
2025
+ }],
2026
+ /**
2027
+ * Text Indent
2028
+ * @see https://tailwindcss.com/docs/text-indent
2029
+ */
2030
+ indent: [{
2031
+ indent: scaleUnambiguousSpacing()
2032
+ }],
2033
+ /**
2034
+ * Tab Size
2035
+ * @see https://tailwindcss.com/docs/tab-size
2036
+ */
2037
+ "tab-size": [{
2038
+ tab: [isInteger, isArbitraryVariable, isArbitraryValue]
2039
+ }],
2040
+ /**
2041
+ * Vertical Alignment
2042
+ * @see https://tailwindcss.com/docs/vertical-align
2043
+ */
2044
+ "vertical-align": [{
2045
+ align: ["baseline", "top", "middle", "bottom", "text-top", "text-bottom", "sub", "super", isArbitraryVariable, isArbitraryValue]
2046
+ }],
2047
+ /**
2048
+ * Whitespace
2049
+ * @see https://tailwindcss.com/docs/whitespace
2050
+ */
2051
+ whitespace: [{
2052
+ whitespace: ["normal", "nowrap", "pre", "pre-line", "pre-wrap", "break-spaces"]
2053
+ }],
2054
+ /**
2055
+ * Word Break
2056
+ * @see https://tailwindcss.com/docs/word-break
2057
+ */
2058
+ break: [{
2059
+ break: ["normal", "words", "all", "keep"]
2060
+ }],
2061
+ /**
2062
+ * Overflow Wrap
2063
+ * @see https://tailwindcss.com/docs/overflow-wrap
2064
+ */
2065
+ wrap: [{
2066
+ wrap: ["break-word", "anywhere", "normal"]
2067
+ }],
2068
+ /**
2069
+ * Hyphens
2070
+ * @see https://tailwindcss.com/docs/hyphens
2071
+ */
2072
+ hyphens: [{
2073
+ hyphens: ["none", "manual", "auto"]
2074
+ }],
2075
+ /**
2076
+ * Content
2077
+ * @see https://tailwindcss.com/docs/content
2078
+ */
2079
+ content: [{
2080
+ content: ["none", isArbitraryVariable, isArbitraryValue]
2081
+ }],
2082
+ // -------------------
2083
+ // --- Backgrounds ---
2084
+ // -------------------
2085
+ /**
2086
+ * Background Attachment
2087
+ * @see https://tailwindcss.com/docs/background-attachment
2088
+ */
2089
+ "bg-attachment": [{
2090
+ bg: ["fixed", "local", "scroll"]
2091
+ }],
2092
+ /**
2093
+ * Background Clip
2094
+ * @see https://tailwindcss.com/docs/background-clip
2095
+ */
2096
+ "bg-clip": [{
2097
+ "bg-clip": ["border", "padding", "content", "text"]
2098
+ }],
2099
+ /**
2100
+ * Background Origin
2101
+ * @see https://tailwindcss.com/docs/background-origin
2102
+ */
2103
+ "bg-origin": [{
2104
+ "bg-origin": ["border", "padding", "content"]
2105
+ }],
2106
+ /**
2107
+ * Background Position
2108
+ * @see https://tailwindcss.com/docs/background-position
2109
+ */
2110
+ "bg-position": [{
2111
+ bg: scaleBgPosition()
2112
+ }],
2113
+ /**
2114
+ * Background Repeat
2115
+ * @see https://tailwindcss.com/docs/background-repeat
2116
+ */
2117
+ "bg-repeat": [{
2118
+ bg: scaleBgRepeat()
2119
+ }],
2120
+ /**
2121
+ * Background Size
2122
+ * @see https://tailwindcss.com/docs/background-size
2123
+ */
2124
+ "bg-size": [{
2125
+ bg: scaleBgSize()
2126
+ }],
2127
+ /**
2128
+ * Background Image
2129
+ * @see https://tailwindcss.com/docs/background-image
2130
+ */
2131
+ "bg-image": [{
2132
+ bg: ["none", {
2133
+ linear: [{
2134
+ to: ["t", "tr", "r", "br", "b", "bl", "l", "tl"]
2135
+ }, isInteger, isArbitraryVariable, isArbitraryValue],
2136
+ radial: ["", isArbitraryVariable, isArbitraryValue],
2137
+ conic: ["", isInteger, isArbitraryVariable, isArbitraryValue]
2138
+ }, isArbitraryVariableImage, isArbitraryImage]
2139
+ }],
2140
+ /**
2141
+ * Background Color
2142
+ * @see https://tailwindcss.com/docs/background-color
2143
+ */
2144
+ "bg-color": [{
2145
+ bg: scaleColor()
2146
+ }],
2147
+ /**
2148
+ * Gradient Color Stops From Position
2149
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2150
+ */
2151
+ "gradient-from-pos": [{
2152
+ from: scaleGradientStopPosition()
2153
+ }],
2154
+ /**
2155
+ * Gradient Color Stops Via Position
2156
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2157
+ */
2158
+ "gradient-via-pos": [{
2159
+ via: scaleGradientStopPosition()
2160
+ }],
2161
+ /**
2162
+ * Gradient Color Stops To Position
2163
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2164
+ */
2165
+ "gradient-to-pos": [{
2166
+ to: scaleGradientStopPosition()
2167
+ }],
2168
+ /**
2169
+ * Gradient Color Stops From
2170
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2171
+ */
2172
+ "gradient-from": [{
2173
+ from: scaleColor()
2174
+ }],
2175
+ /**
2176
+ * Gradient Color Stops Via
2177
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2178
+ */
2179
+ "gradient-via": [{
2180
+ via: scaleColor()
2181
+ }],
2182
+ /**
2183
+ * Gradient Color Stops To
2184
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2185
+ */
2186
+ "gradient-to": [{
2187
+ to: scaleColor()
2188
+ }],
2189
+ // ---------------
2190
+ // --- Borders ---
2191
+ // ---------------
2192
+ /**
2193
+ * Border Radius
2194
+ * @see https://tailwindcss.com/docs/border-radius
2195
+ */
2196
+ rounded: [{
2197
+ rounded: scaleRadius()
2198
+ }],
2199
+ /**
2200
+ * Border Radius Start
2201
+ * @see https://tailwindcss.com/docs/border-radius
2202
+ */
2203
+ "rounded-s": [{
2204
+ "rounded-s": scaleRadius()
2205
+ }],
2206
+ /**
2207
+ * Border Radius End
2208
+ * @see https://tailwindcss.com/docs/border-radius
2209
+ */
2210
+ "rounded-e": [{
2211
+ "rounded-e": scaleRadius()
2212
+ }],
2213
+ /**
2214
+ * Border Radius Top
2215
+ * @see https://tailwindcss.com/docs/border-radius
2216
+ */
2217
+ "rounded-t": [{
2218
+ "rounded-t": scaleRadius()
2219
+ }],
2220
+ /**
2221
+ * Border Radius Right
2222
+ * @see https://tailwindcss.com/docs/border-radius
2223
+ */
2224
+ "rounded-r": [{
2225
+ "rounded-r": scaleRadius()
2226
+ }],
2227
+ /**
2228
+ * Border Radius Bottom
2229
+ * @see https://tailwindcss.com/docs/border-radius
2230
+ */
2231
+ "rounded-b": [{
2232
+ "rounded-b": scaleRadius()
2233
+ }],
2234
+ /**
2235
+ * Border Radius Left
2236
+ * @see https://tailwindcss.com/docs/border-radius
2237
+ */
2238
+ "rounded-l": [{
2239
+ "rounded-l": scaleRadius()
2240
+ }],
2241
+ /**
2242
+ * Border Radius Start Start
2243
+ * @see https://tailwindcss.com/docs/border-radius
2244
+ */
2245
+ "rounded-ss": [{
2246
+ "rounded-ss": scaleRadius()
2247
+ }],
2248
+ /**
2249
+ * Border Radius Start End
2250
+ * @see https://tailwindcss.com/docs/border-radius
2251
+ */
2252
+ "rounded-se": [{
2253
+ "rounded-se": scaleRadius()
2254
+ }],
2255
+ /**
2256
+ * Border Radius End End
2257
+ * @see https://tailwindcss.com/docs/border-radius
2258
+ */
2259
+ "rounded-ee": [{
2260
+ "rounded-ee": scaleRadius()
2261
+ }],
2262
+ /**
2263
+ * Border Radius End Start
2264
+ * @see https://tailwindcss.com/docs/border-radius
2265
+ */
2266
+ "rounded-es": [{
2267
+ "rounded-es": scaleRadius()
2268
+ }],
2269
+ /**
2270
+ * Border Radius Top Left
2271
+ * @see https://tailwindcss.com/docs/border-radius
2272
+ */
2273
+ "rounded-tl": [{
2274
+ "rounded-tl": scaleRadius()
2275
+ }],
2276
+ /**
2277
+ * Border Radius Top Right
2278
+ * @see https://tailwindcss.com/docs/border-radius
2279
+ */
2280
+ "rounded-tr": [{
2281
+ "rounded-tr": scaleRadius()
2282
+ }],
2283
+ /**
2284
+ * Border Radius Bottom Right
2285
+ * @see https://tailwindcss.com/docs/border-radius
2286
+ */
2287
+ "rounded-br": [{
2288
+ "rounded-br": scaleRadius()
2289
+ }],
2290
+ /**
2291
+ * Border Radius Bottom Left
2292
+ * @see https://tailwindcss.com/docs/border-radius
2293
+ */
2294
+ "rounded-bl": [{
2295
+ "rounded-bl": scaleRadius()
2296
+ }],
2297
+ /**
2298
+ * Border Width
2299
+ * @see https://tailwindcss.com/docs/border-width
2300
+ */
2301
+ "border-w": [{
2302
+ border: scaleBorderWidth()
2303
+ }],
2304
+ /**
2305
+ * Border Width Inline
2306
+ * @see https://tailwindcss.com/docs/border-width
2307
+ */
2308
+ "border-w-x": [{
2309
+ "border-x": scaleBorderWidth()
2310
+ }],
2311
+ /**
2312
+ * Border Width Block
2313
+ * @see https://tailwindcss.com/docs/border-width
2314
+ */
2315
+ "border-w-y": [{
2316
+ "border-y": scaleBorderWidth()
2317
+ }],
2318
+ /**
2319
+ * Border Width Inline Start
2320
+ * @see https://tailwindcss.com/docs/border-width
2321
+ */
2322
+ "border-w-s": [{
2323
+ "border-s": scaleBorderWidth()
2324
+ }],
2325
+ /**
2326
+ * Border Width Inline End
2327
+ * @see https://tailwindcss.com/docs/border-width
2328
+ */
2329
+ "border-w-e": [{
2330
+ "border-e": scaleBorderWidth()
2331
+ }],
2332
+ /**
2333
+ * Border Width Block Start
2334
+ * @see https://tailwindcss.com/docs/border-width
2335
+ */
2336
+ "border-w-bs": [{
2337
+ "border-bs": scaleBorderWidth()
2338
+ }],
2339
+ /**
2340
+ * Border Width Block End
2341
+ * @see https://tailwindcss.com/docs/border-width
2342
+ */
2343
+ "border-w-be": [{
2344
+ "border-be": scaleBorderWidth()
2345
+ }],
2346
+ /**
2347
+ * Border Width Top
2348
+ * @see https://tailwindcss.com/docs/border-width
2349
+ */
2350
+ "border-w-t": [{
2351
+ "border-t": scaleBorderWidth()
2352
+ }],
2353
+ /**
2354
+ * Border Width Right
2355
+ * @see https://tailwindcss.com/docs/border-width
2356
+ */
2357
+ "border-w-r": [{
2358
+ "border-r": scaleBorderWidth()
2359
+ }],
2360
+ /**
2361
+ * Border Width Bottom
2362
+ * @see https://tailwindcss.com/docs/border-width
2363
+ */
2364
+ "border-w-b": [{
2365
+ "border-b": scaleBorderWidth()
2366
+ }],
2367
+ /**
2368
+ * Border Width Left
2369
+ * @see https://tailwindcss.com/docs/border-width
2370
+ */
2371
+ "border-w-l": [{
2372
+ "border-l": scaleBorderWidth()
2373
+ }],
2374
+ /**
2375
+ * Divide Width X
2376
+ * @see https://tailwindcss.com/docs/border-width#between-children
2377
+ */
2378
+ "divide-x": [{
2379
+ "divide-x": scaleBorderWidth()
2380
+ }],
2381
+ /**
2382
+ * Divide Width X Reverse
2383
+ * @see https://tailwindcss.com/docs/border-width#between-children
2384
+ */
2385
+ "divide-x-reverse": ["divide-x-reverse"],
2386
+ /**
2387
+ * Divide Width Y
2388
+ * @see https://tailwindcss.com/docs/border-width#between-children
2389
+ */
2390
+ "divide-y": [{
2391
+ "divide-y": scaleBorderWidth()
2392
+ }],
2393
+ /**
2394
+ * Divide Width Y Reverse
2395
+ * @see https://tailwindcss.com/docs/border-width#between-children
2396
+ */
2397
+ "divide-y-reverse": ["divide-y-reverse"],
2398
+ /**
2399
+ * Border Style
2400
+ * @see https://tailwindcss.com/docs/border-style
2401
+ */
2402
+ "border-style": [{
2403
+ border: [...scaleLineStyle(), "hidden", "none"]
2404
+ }],
2405
+ /**
2406
+ * Divide Style
2407
+ * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style
2408
+ */
2409
+ "divide-style": [{
2410
+ divide: [...scaleLineStyle(), "hidden", "none"]
2411
+ }],
2412
+ /**
2413
+ * Border Color
2414
+ * @see https://tailwindcss.com/docs/border-color
2415
+ */
2416
+ "border-color": [{
2417
+ border: scaleColor()
2418
+ }],
2419
+ /**
2420
+ * Border Color Inline
2421
+ * @see https://tailwindcss.com/docs/border-color
2422
+ */
2423
+ "border-color-x": [{
2424
+ "border-x": scaleColor()
2425
+ }],
2426
+ /**
2427
+ * Border Color Block
2428
+ * @see https://tailwindcss.com/docs/border-color
2429
+ */
2430
+ "border-color-y": [{
2431
+ "border-y": scaleColor()
2432
+ }],
2433
+ /**
2434
+ * Border Color Inline Start
2435
+ * @see https://tailwindcss.com/docs/border-color
2436
+ */
2437
+ "border-color-s": [{
2438
+ "border-s": scaleColor()
2439
+ }],
2440
+ /**
2441
+ * Border Color Inline End
2442
+ * @see https://tailwindcss.com/docs/border-color
2443
+ */
2444
+ "border-color-e": [{
2445
+ "border-e": scaleColor()
2446
+ }],
2447
+ /**
2448
+ * Border Color Block Start
2449
+ * @see https://tailwindcss.com/docs/border-color
2450
+ */
2451
+ "border-color-bs": [{
2452
+ "border-bs": scaleColor()
2453
+ }],
2454
+ /**
2455
+ * Border Color Block End
2456
+ * @see https://tailwindcss.com/docs/border-color
2457
+ */
2458
+ "border-color-be": [{
2459
+ "border-be": scaleColor()
2460
+ }],
2461
+ /**
2462
+ * Border Color Top
2463
+ * @see https://tailwindcss.com/docs/border-color
2464
+ */
2465
+ "border-color-t": [{
2466
+ "border-t": scaleColor()
2467
+ }],
2468
+ /**
2469
+ * Border Color Right
2470
+ * @see https://tailwindcss.com/docs/border-color
2471
+ */
2472
+ "border-color-r": [{
2473
+ "border-r": scaleColor()
2474
+ }],
2475
+ /**
2476
+ * Border Color Bottom
2477
+ * @see https://tailwindcss.com/docs/border-color
2478
+ */
2479
+ "border-color-b": [{
2480
+ "border-b": scaleColor()
2481
+ }],
2482
+ /**
2483
+ * Border Color Left
2484
+ * @see https://tailwindcss.com/docs/border-color
2485
+ */
2486
+ "border-color-l": [{
2487
+ "border-l": scaleColor()
2488
+ }],
2489
+ /**
2490
+ * Divide Color
2491
+ * @see https://tailwindcss.com/docs/divide-color
2492
+ */
2493
+ "divide-color": [{
2494
+ divide: scaleColor()
2495
+ }],
2496
+ /**
2497
+ * Outline Style
2498
+ * @see https://tailwindcss.com/docs/outline-style
2499
+ */
2500
+ "outline-style": [{
2501
+ outline: [...scaleLineStyle(), "none", "hidden"]
2502
+ }],
2503
+ /**
2504
+ * Outline Offset
2505
+ * @see https://tailwindcss.com/docs/outline-offset
2506
+ */
2507
+ "outline-offset": [{
2508
+ "outline-offset": [isNumber, isArbitraryVariable, isArbitraryValue]
2509
+ }],
2510
+ /**
2511
+ * Outline Width
2512
+ * @see https://tailwindcss.com/docs/outline-width
2513
+ */
2514
+ "outline-w": [{
2515
+ outline: ["", isNumber, isArbitraryVariableLength, isArbitraryLength]
2516
+ }],
2517
+ /**
2518
+ * Outline Color
2519
+ * @see https://tailwindcss.com/docs/outline-color
2520
+ */
2521
+ "outline-color": [{
2522
+ outline: scaleColor()
2523
+ }],
2524
+ // ---------------
2525
+ // --- Effects ---
2526
+ // ---------------
2527
+ /**
2528
+ * Box Shadow
2529
+ * @see https://tailwindcss.com/docs/box-shadow
2530
+ */
2531
+ shadow: [{
2532
+ shadow: [
2533
+ // Deprecated since Tailwind CSS v4.0.0
2534
+ "",
2535
+ // Deprecated since Tailwind CSS v4.0.0
2536
+ "inner",
2537
+ "none",
2538
+ themeShadow,
2539
+ isArbitraryVariableShadow,
2540
+ isArbitraryShadow
2541
+ ]
2542
+ }],
2543
+ /**
2544
+ * Box Shadow Color
2545
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color
2546
+ */
2547
+ "shadow-color": [{
2548
+ shadow: scaleColor()
2549
+ }],
2550
+ /**
2551
+ * Inset Box Shadow
2552
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow
2553
+ */
2554
+ "inset-shadow": [{
2555
+ "inset-shadow": ["none", themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]
2556
+ }],
2557
+ /**
2558
+ * Inset Box Shadow Color
2559
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color
2560
+ */
2561
+ "inset-shadow-color": [{
2562
+ "inset-shadow": scaleColor()
2563
+ }],
2564
+ /**
2565
+ * Ring Width
2566
+ * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring
2567
+ */
2568
+ "ring-w": [{
2569
+ ring: scaleBorderWidth()
2570
+ }],
2571
+ /**
2572
+ * Ring Width Inset
2573
+ * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings
2574
+ * @deprecated since Tailwind CSS v4.0.0
2575
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2576
+ */
2577
+ "ring-w-inset": ["ring-inset"],
2578
+ /**
2579
+ * Ring Color
2580
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color
2581
+ */
2582
+ "ring-color": [{
2583
+ ring: scaleColor()
2584
+ }],
2585
+ /**
2586
+ * Ring Offset Width
2587
+ * @see https://v3.tailwindcss.com/docs/ring-offset-width
2588
+ * @deprecated since Tailwind CSS v4.0.0
2589
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2590
+ */
2591
+ "ring-offset-w": [{
2592
+ "ring-offset": [isNumber, isArbitraryLength]
2593
+ }],
2594
+ /**
2595
+ * Ring Offset Color
2596
+ * @see https://v3.tailwindcss.com/docs/ring-offset-color
2597
+ * @deprecated since Tailwind CSS v4.0.0
2598
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2599
+ */
2600
+ "ring-offset-color": [{
2601
+ "ring-offset": scaleColor()
2602
+ }],
2603
+ /**
2604
+ * Inset Ring Width
2605
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring
2606
+ */
2607
+ "inset-ring-w": [{
2608
+ "inset-ring": scaleBorderWidth()
2609
+ }],
2610
+ /**
2611
+ * Inset Ring Color
2612
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color
2613
+ */
2614
+ "inset-ring-color": [{
2615
+ "inset-ring": scaleColor()
2616
+ }],
2617
+ /**
2618
+ * Text Shadow
2619
+ * @see https://tailwindcss.com/docs/text-shadow
2620
+ */
2621
+ "text-shadow": [{
2622
+ "text-shadow": ["none", themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]
2623
+ }],
2624
+ /**
2625
+ * Text Shadow Color
2626
+ * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color
2627
+ */
2628
+ "text-shadow-color": [{
2629
+ "text-shadow": scaleColor()
2630
+ }],
2631
+ /**
2632
+ * Opacity
2633
+ * @see https://tailwindcss.com/docs/opacity
2634
+ */
2635
+ opacity: [{
2636
+ opacity: [isNumber, isArbitraryVariable, isArbitraryValue]
2637
+ }],
2638
+ /**
2639
+ * Mix Blend Mode
2640
+ * @see https://tailwindcss.com/docs/mix-blend-mode
2641
+ */
2642
+ "mix-blend": [{
2643
+ "mix-blend": [...scaleBlendMode(), "plus-darker", "plus-lighter"]
2644
+ }],
2645
+ /**
2646
+ * Background Blend Mode
2647
+ * @see https://tailwindcss.com/docs/background-blend-mode
2648
+ */
2649
+ "bg-blend": [{
2650
+ "bg-blend": scaleBlendMode()
2651
+ }],
2652
+ /**
2653
+ * Mask Clip
2654
+ * @see https://tailwindcss.com/docs/mask-clip
2655
+ */
2656
+ "mask-clip": [{
2657
+ "mask-clip": ["border", "padding", "content", "fill", "stroke", "view"]
2658
+ }, "mask-no-clip"],
2659
+ /**
2660
+ * Mask Composite
2661
+ * @see https://tailwindcss.com/docs/mask-composite
2662
+ */
2663
+ "mask-composite": [{
2664
+ mask: ["add", "subtract", "intersect", "exclude"]
2665
+ }],
2666
+ /**
2667
+ * Mask Image
2668
+ * @see https://tailwindcss.com/docs/mask-image
2669
+ */
2670
+ "mask-image-linear-pos": [{
2671
+ "mask-linear": [isNumber]
2672
+ }],
2673
+ "mask-image-linear-from-pos": [{
2674
+ "mask-linear-from": scaleMaskImagePosition()
2675
+ }],
2676
+ "mask-image-linear-to-pos": [{
2677
+ "mask-linear-to": scaleMaskImagePosition()
2678
+ }],
2679
+ "mask-image-linear-from-color": [{
2680
+ "mask-linear-from": scaleColor()
2681
+ }],
2682
+ "mask-image-linear-to-color": [{
2683
+ "mask-linear-to": scaleColor()
2684
+ }],
2685
+ "mask-image-t-from-pos": [{
2686
+ "mask-t-from": scaleMaskImagePosition()
2687
+ }],
2688
+ "mask-image-t-to-pos": [{
2689
+ "mask-t-to": scaleMaskImagePosition()
2690
+ }],
2691
+ "mask-image-t-from-color": [{
2692
+ "mask-t-from": scaleColor()
2693
+ }],
2694
+ "mask-image-t-to-color": [{
2695
+ "mask-t-to": scaleColor()
2696
+ }],
2697
+ "mask-image-r-from-pos": [{
2698
+ "mask-r-from": scaleMaskImagePosition()
2699
+ }],
2700
+ "mask-image-r-to-pos": [{
2701
+ "mask-r-to": scaleMaskImagePosition()
2702
+ }],
2703
+ "mask-image-r-from-color": [{
2704
+ "mask-r-from": scaleColor()
2705
+ }],
2706
+ "mask-image-r-to-color": [{
2707
+ "mask-r-to": scaleColor()
2708
+ }],
2709
+ "mask-image-b-from-pos": [{
2710
+ "mask-b-from": scaleMaskImagePosition()
2711
+ }],
2712
+ "mask-image-b-to-pos": [{
2713
+ "mask-b-to": scaleMaskImagePosition()
2714
+ }],
2715
+ "mask-image-b-from-color": [{
2716
+ "mask-b-from": scaleColor()
2717
+ }],
2718
+ "mask-image-b-to-color": [{
2719
+ "mask-b-to": scaleColor()
2720
+ }],
2721
+ "mask-image-l-from-pos": [{
2722
+ "mask-l-from": scaleMaskImagePosition()
2723
+ }],
2724
+ "mask-image-l-to-pos": [{
2725
+ "mask-l-to": scaleMaskImagePosition()
2726
+ }],
2727
+ "mask-image-l-from-color": [{
2728
+ "mask-l-from": scaleColor()
2729
+ }],
2730
+ "mask-image-l-to-color": [{
2731
+ "mask-l-to": scaleColor()
2732
+ }],
2733
+ "mask-image-x-from-pos": [{
2734
+ "mask-x-from": scaleMaskImagePosition()
2735
+ }],
2736
+ "mask-image-x-to-pos": [{
2737
+ "mask-x-to": scaleMaskImagePosition()
2738
+ }],
2739
+ "mask-image-x-from-color": [{
2740
+ "mask-x-from": scaleColor()
2741
+ }],
2742
+ "mask-image-x-to-color": [{
2743
+ "mask-x-to": scaleColor()
2744
+ }],
2745
+ "mask-image-y-from-pos": [{
2746
+ "mask-y-from": scaleMaskImagePosition()
2747
+ }],
2748
+ "mask-image-y-to-pos": [{
2749
+ "mask-y-to": scaleMaskImagePosition()
2750
+ }],
2751
+ "mask-image-y-from-color": [{
2752
+ "mask-y-from": scaleColor()
2753
+ }],
2754
+ "mask-image-y-to-color": [{
2755
+ "mask-y-to": scaleColor()
2756
+ }],
2757
+ "mask-image-radial": [{
2758
+ "mask-radial": [isArbitraryVariable, isArbitraryValue]
2759
+ }],
2760
+ "mask-image-radial-from-pos": [{
2761
+ "mask-radial-from": scaleMaskImagePosition()
2762
+ }],
2763
+ "mask-image-radial-to-pos": [{
2764
+ "mask-radial-to": scaleMaskImagePosition()
2765
+ }],
2766
+ "mask-image-radial-from-color": [{
2767
+ "mask-radial-from": scaleColor()
2768
+ }],
2769
+ "mask-image-radial-to-color": [{
2770
+ "mask-radial-to": scaleColor()
2771
+ }],
2772
+ "mask-image-radial-shape": [{
2773
+ "mask-radial": ["circle", "ellipse"]
2774
+ }],
2775
+ "mask-image-radial-size": [{
2776
+ "mask-radial": [{
2777
+ closest: ["side", "corner"],
2778
+ farthest: ["side", "corner"]
2779
+ }]
2780
+ }],
2781
+ "mask-image-radial-pos": [{
2782
+ "mask-radial-at": scalePosition()
2783
+ }],
2784
+ "mask-image-conic-pos": [{
2785
+ "mask-conic": [isNumber]
2786
+ }],
2787
+ "mask-image-conic-from-pos": [{
2788
+ "mask-conic-from": scaleMaskImagePosition()
2789
+ }],
2790
+ "mask-image-conic-to-pos": [{
2791
+ "mask-conic-to": scaleMaskImagePosition()
2792
+ }],
2793
+ "mask-image-conic-from-color": [{
2794
+ "mask-conic-from": scaleColor()
2795
+ }],
2796
+ "mask-image-conic-to-color": [{
2797
+ "mask-conic-to": scaleColor()
2798
+ }],
2799
+ /**
2800
+ * Mask Mode
2801
+ * @see https://tailwindcss.com/docs/mask-mode
2802
+ */
2803
+ "mask-mode": [{
2804
+ mask: ["alpha", "luminance", "match"]
2805
+ }],
2806
+ /**
2807
+ * Mask Origin
2808
+ * @see https://tailwindcss.com/docs/mask-origin
2809
+ */
2810
+ "mask-origin": [{
2811
+ "mask-origin": ["border", "padding", "content", "fill", "stroke", "view"]
2812
+ }],
2813
+ /**
2814
+ * Mask Position
2815
+ * @see https://tailwindcss.com/docs/mask-position
2816
+ */
2817
+ "mask-position": [{
2818
+ mask: scaleBgPosition()
2819
+ }],
2820
+ /**
2821
+ * Mask Repeat
2822
+ * @see https://tailwindcss.com/docs/mask-repeat
2823
+ */
2824
+ "mask-repeat": [{
2825
+ mask: scaleBgRepeat()
2826
+ }],
2827
+ /**
2828
+ * Mask Size
2829
+ * @see https://tailwindcss.com/docs/mask-size
2830
+ */
2831
+ "mask-size": [{
2832
+ mask: scaleBgSize()
2833
+ }],
2834
+ /**
2835
+ * Mask Type
2836
+ * @see https://tailwindcss.com/docs/mask-type
2837
+ */
2838
+ "mask-type": [{
2839
+ "mask-type": ["alpha", "luminance"]
2840
+ }],
2841
+ /**
2842
+ * Mask Image
2843
+ * @see https://tailwindcss.com/docs/mask-image
2844
+ */
2845
+ "mask-image": [{
2846
+ mask: ["none", isArbitraryVariable, isArbitraryValue]
2847
+ }],
2848
+ // ---------------
2849
+ // --- Filters ---
2850
+ // ---------------
2851
+ /**
2852
+ * Filter
2853
+ * @see https://tailwindcss.com/docs/filter
2854
+ */
2855
+ filter: [{
2856
+ filter: [
2857
+ // Deprecated since Tailwind CSS v3.0.0
2858
+ "",
2859
+ "none",
2860
+ isArbitraryVariable,
2861
+ isArbitraryValue
2862
+ ]
2863
+ }],
2864
+ /**
2865
+ * Blur
2866
+ * @see https://tailwindcss.com/docs/blur
2867
+ */
2868
+ blur: [{
2869
+ blur: scaleBlur()
2870
+ }],
2871
+ /**
2872
+ * Brightness
2873
+ * @see https://tailwindcss.com/docs/brightness
2874
+ */
2875
+ brightness: [{
2876
+ brightness: [isNumber, isArbitraryVariable, isArbitraryValue]
2877
+ }],
2878
+ /**
2879
+ * Contrast
2880
+ * @see https://tailwindcss.com/docs/contrast
2881
+ */
2882
+ contrast: [{
2883
+ contrast: [isNumber, isArbitraryVariable, isArbitraryValue]
2884
+ }],
2885
+ /**
2886
+ * Drop Shadow
2887
+ * @see https://tailwindcss.com/docs/drop-shadow
2888
+ */
2889
+ "drop-shadow": [{
2890
+ "drop-shadow": [
2891
+ // Deprecated since Tailwind CSS v4.0.0
2892
+ "",
2893
+ "none",
2894
+ themeDropShadow,
2895
+ isArbitraryVariableShadow,
2896
+ isArbitraryShadow
2897
+ ]
2898
+ }],
2899
+ /**
2900
+ * Drop Shadow Color
2901
+ * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color
2902
+ */
2903
+ "drop-shadow-color": [{
2904
+ "drop-shadow": scaleColor()
2905
+ }],
2906
+ /**
2907
+ * Grayscale
2908
+ * @see https://tailwindcss.com/docs/grayscale
2909
+ */
2910
+ grayscale: [{
2911
+ grayscale: ["", isNumber, isArbitraryVariable, isArbitraryValue]
2912
+ }],
2913
+ /**
2914
+ * Hue Rotate
2915
+ * @see https://tailwindcss.com/docs/hue-rotate
2916
+ */
2917
+ "hue-rotate": [{
2918
+ "hue-rotate": [isNumber, isArbitraryVariable, isArbitraryValue]
2919
+ }],
2920
+ /**
2921
+ * Invert
2922
+ * @see https://tailwindcss.com/docs/invert
2923
+ */
2924
+ invert: [{
2925
+ invert: ["", isNumber, isArbitraryVariable, isArbitraryValue]
2926
+ }],
2927
+ /**
2928
+ * Saturate
2929
+ * @see https://tailwindcss.com/docs/saturate
2930
+ */
2931
+ saturate: [{
2932
+ saturate: [isNumber, isArbitraryVariable, isArbitraryValue]
2933
+ }],
2934
+ /**
2935
+ * Sepia
2936
+ * @see https://tailwindcss.com/docs/sepia
2937
+ */
2938
+ sepia: [{
2939
+ sepia: ["", isNumber, isArbitraryVariable, isArbitraryValue]
2940
+ }],
2941
+ /**
2942
+ * Backdrop Filter
2943
+ * @see https://tailwindcss.com/docs/backdrop-filter
2944
+ */
2945
+ "backdrop-filter": [{
2946
+ "backdrop-filter": [
2947
+ // Deprecated since Tailwind CSS v3.0.0
2948
+ "",
2949
+ "none",
2950
+ isArbitraryVariable,
2951
+ isArbitraryValue
2952
+ ]
2953
+ }],
2954
+ /**
2955
+ * Backdrop Blur
2956
+ * @see https://tailwindcss.com/docs/backdrop-blur
2957
+ */
2958
+ "backdrop-blur": [{
2959
+ "backdrop-blur": scaleBlur()
2960
+ }],
2961
+ /**
2962
+ * Backdrop Brightness
2963
+ * @see https://tailwindcss.com/docs/backdrop-brightness
2964
+ */
2965
+ "backdrop-brightness": [{
2966
+ "backdrop-brightness": [isNumber, isArbitraryVariable, isArbitraryValue]
2967
+ }],
2968
+ /**
2969
+ * Backdrop Contrast
2970
+ * @see https://tailwindcss.com/docs/backdrop-contrast
2971
+ */
2972
+ "backdrop-contrast": [{
2973
+ "backdrop-contrast": [isNumber, isArbitraryVariable, isArbitraryValue]
2974
+ }],
2975
+ /**
2976
+ * Backdrop Grayscale
2977
+ * @see https://tailwindcss.com/docs/backdrop-grayscale
2978
+ */
2979
+ "backdrop-grayscale": [{
2980
+ "backdrop-grayscale": ["", isNumber, isArbitraryVariable, isArbitraryValue]
2981
+ }],
2982
+ /**
2983
+ * Backdrop Hue Rotate
2984
+ * @see https://tailwindcss.com/docs/backdrop-hue-rotate
2985
+ */
2986
+ "backdrop-hue-rotate": [{
2987
+ "backdrop-hue-rotate": [isNumber, isArbitraryVariable, isArbitraryValue]
2988
+ }],
2989
+ /**
2990
+ * Backdrop Invert
2991
+ * @see https://tailwindcss.com/docs/backdrop-invert
2992
+ */
2993
+ "backdrop-invert": [{
2994
+ "backdrop-invert": ["", isNumber, isArbitraryVariable, isArbitraryValue]
2995
+ }],
2996
+ /**
2997
+ * Backdrop Opacity
2998
+ * @see https://tailwindcss.com/docs/backdrop-opacity
2999
+ */
3000
+ "backdrop-opacity": [{
3001
+ "backdrop-opacity": [isNumber, isArbitraryVariable, isArbitraryValue]
3002
+ }],
3003
+ /**
3004
+ * Backdrop Saturate
3005
+ * @see https://tailwindcss.com/docs/backdrop-saturate
3006
+ */
3007
+ "backdrop-saturate": [{
3008
+ "backdrop-saturate": [isNumber, isArbitraryVariable, isArbitraryValue]
3009
+ }],
3010
+ /**
3011
+ * Backdrop Sepia
3012
+ * @see https://tailwindcss.com/docs/backdrop-sepia
3013
+ */
3014
+ "backdrop-sepia": [{
3015
+ "backdrop-sepia": ["", isNumber, isArbitraryVariable, isArbitraryValue]
3016
+ }],
3017
+ // --------------
3018
+ // --- Tables ---
3019
+ // --------------
3020
+ /**
3021
+ * Border Collapse
3022
+ * @see https://tailwindcss.com/docs/border-collapse
3023
+ */
3024
+ "border-collapse": [{
3025
+ border: ["collapse", "separate"]
3026
+ }],
3027
+ /**
3028
+ * Border Spacing
3029
+ * @see https://tailwindcss.com/docs/border-spacing
3030
+ */
3031
+ "border-spacing": [{
3032
+ "border-spacing": scaleUnambiguousSpacing()
3033
+ }],
3034
+ /**
3035
+ * Border Spacing X
3036
+ * @see https://tailwindcss.com/docs/border-spacing
3037
+ */
3038
+ "border-spacing-x": [{
3039
+ "border-spacing-x": scaleUnambiguousSpacing()
3040
+ }],
3041
+ /**
3042
+ * Border Spacing Y
3043
+ * @see https://tailwindcss.com/docs/border-spacing
3044
+ */
3045
+ "border-spacing-y": [{
3046
+ "border-spacing-y": scaleUnambiguousSpacing()
3047
+ }],
3048
+ /**
3049
+ * Table Layout
3050
+ * @see https://tailwindcss.com/docs/table-layout
3051
+ */
3052
+ "table-layout": [{
3053
+ table: ["auto", "fixed"]
3054
+ }],
3055
+ /**
3056
+ * Caption Side
3057
+ * @see https://tailwindcss.com/docs/caption-side
3058
+ */
3059
+ caption: [{
3060
+ caption: ["top", "bottom"]
3061
+ }],
3062
+ // ---------------------------------
3063
+ // --- Transitions and Animation ---
3064
+ // ---------------------------------
3065
+ /**
3066
+ * Transition Property
3067
+ * @see https://tailwindcss.com/docs/transition-property
3068
+ */
3069
+ transition: [{
3070
+ transition: ["", "all", "colors", "opacity", "shadow", "transform", "none", isArbitraryVariable, isArbitraryValue]
3071
+ }],
3072
+ /**
3073
+ * Transition Behavior
3074
+ * @see https://tailwindcss.com/docs/transition-behavior
3075
+ */
3076
+ "transition-behavior": [{
3077
+ transition: ["normal", "discrete"]
3078
+ }],
3079
+ /**
3080
+ * Transition Duration
3081
+ * @see https://tailwindcss.com/docs/transition-duration
3082
+ */
3083
+ duration: [{
3084
+ duration: [isNumber, "initial", isArbitraryVariable, isArbitraryValue]
3085
+ }],
3086
+ /**
3087
+ * Transition Timing Function
3088
+ * @see https://tailwindcss.com/docs/transition-timing-function
3089
+ */
3090
+ ease: [{
3091
+ ease: ["linear", "initial", themeEase, isArbitraryVariable, isArbitraryValue]
3092
+ }],
3093
+ /**
3094
+ * Transition Delay
3095
+ * @see https://tailwindcss.com/docs/transition-delay
3096
+ */
3097
+ delay: [{
3098
+ delay: [isNumber, isArbitraryVariable, isArbitraryValue]
3099
+ }],
3100
+ /**
3101
+ * Animation
3102
+ * @see https://tailwindcss.com/docs/animation
3103
+ */
3104
+ animate: [{
3105
+ animate: ["none", themeAnimate, isArbitraryVariable, isArbitraryValue]
3106
+ }],
3107
+ // ------------------
3108
+ // --- Transforms ---
3109
+ // ------------------
3110
+ /**
3111
+ * Backface Visibility
3112
+ * @see https://tailwindcss.com/docs/backface-visibility
3113
+ */
3114
+ backface: [{
3115
+ backface: ["hidden", "visible"]
3116
+ }],
3117
+ /**
3118
+ * Perspective
3119
+ * @see https://tailwindcss.com/docs/perspective
3120
+ */
3121
+ perspective: [{
3122
+ perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]
3123
+ }],
3124
+ /**
3125
+ * Perspective Origin
3126
+ * @see https://tailwindcss.com/docs/perspective-origin
3127
+ */
3128
+ "perspective-origin": [{
3129
+ "perspective-origin": scalePositionWithArbitrary()
3130
+ }],
3131
+ /**
3132
+ * Rotate
3133
+ * @see https://tailwindcss.com/docs/rotate
3134
+ */
3135
+ rotate: [{
3136
+ rotate: scaleRotate()
3137
+ }],
3138
+ /**
3139
+ * Rotate X
3140
+ * @see https://tailwindcss.com/docs/rotate
3141
+ */
3142
+ "rotate-x": [{
3143
+ "rotate-x": scaleRotate()
3144
+ }],
3145
+ /**
3146
+ * Rotate Y
3147
+ * @see https://tailwindcss.com/docs/rotate
3148
+ */
3149
+ "rotate-y": [{
3150
+ "rotate-y": scaleRotate()
3151
+ }],
3152
+ /**
3153
+ * Rotate Z
3154
+ * @see https://tailwindcss.com/docs/rotate
3155
+ */
3156
+ "rotate-z": [{
3157
+ "rotate-z": scaleRotate()
3158
+ }],
3159
+ /**
3160
+ * Scale
3161
+ * @see https://tailwindcss.com/docs/scale
3162
+ */
3163
+ scale: [{
3164
+ scale: scaleScale()
3165
+ }],
3166
+ /**
3167
+ * Scale X
3168
+ * @see https://tailwindcss.com/docs/scale
3169
+ */
3170
+ "scale-x": [{
3171
+ "scale-x": scaleScale()
3172
+ }],
3173
+ /**
3174
+ * Scale Y
3175
+ * @see https://tailwindcss.com/docs/scale
3176
+ */
3177
+ "scale-y": [{
3178
+ "scale-y": scaleScale()
3179
+ }],
3180
+ /**
3181
+ * Scale Z
3182
+ * @see https://tailwindcss.com/docs/scale
3183
+ */
3184
+ "scale-z": [{
3185
+ "scale-z": scaleScale()
3186
+ }],
3187
+ /**
3188
+ * Scale 3D
3189
+ * @see https://tailwindcss.com/docs/scale
3190
+ */
3191
+ "scale-3d": ["scale-3d"],
3192
+ /**
3193
+ * Skew
3194
+ * @see https://tailwindcss.com/docs/skew
3195
+ */
3196
+ skew: [{
3197
+ skew: scaleSkew()
3198
+ }],
3199
+ /**
3200
+ * Skew X
3201
+ * @see https://tailwindcss.com/docs/skew
3202
+ */
3203
+ "skew-x": [{
3204
+ "skew-x": scaleSkew()
3205
+ }],
3206
+ /**
3207
+ * Skew Y
3208
+ * @see https://tailwindcss.com/docs/skew
3209
+ */
3210
+ "skew-y": [{
3211
+ "skew-y": scaleSkew()
3212
+ }],
3213
+ /**
3214
+ * Transform
3215
+ * @see https://tailwindcss.com/docs/transform
3216
+ */
3217
+ transform: [{
3218
+ transform: [isArbitraryVariable, isArbitraryValue, "", "none", "gpu", "cpu"]
3219
+ }],
3220
+ /**
3221
+ * Transform Origin
3222
+ * @see https://tailwindcss.com/docs/transform-origin
3223
+ */
3224
+ "transform-origin": [{
3225
+ origin: scalePositionWithArbitrary()
3226
+ }],
3227
+ /**
3228
+ * Transform Style
3229
+ * @see https://tailwindcss.com/docs/transform-style
3230
+ */
3231
+ "transform-style": [{
3232
+ transform: ["3d", "flat"]
3233
+ }],
3234
+ /**
3235
+ * Translate
3236
+ * @see https://tailwindcss.com/docs/translate
3237
+ */
3238
+ translate: [{
3239
+ translate: scaleTranslate()
3240
+ }],
3241
+ /**
3242
+ * Translate X
3243
+ * @see https://tailwindcss.com/docs/translate
3244
+ */
3245
+ "translate-x": [{
3246
+ "translate-x": scaleTranslate()
3247
+ }],
3248
+ /**
3249
+ * Translate Y
3250
+ * @see https://tailwindcss.com/docs/translate
3251
+ */
3252
+ "translate-y": [{
3253
+ "translate-y": scaleTranslate()
3254
+ }],
3255
+ /**
3256
+ * Translate Z
3257
+ * @see https://tailwindcss.com/docs/translate
3258
+ */
3259
+ "translate-z": [{
3260
+ "translate-z": scaleTranslate()
3261
+ }],
3262
+ /**
3263
+ * Translate None
3264
+ * @see https://tailwindcss.com/docs/translate
3265
+ */
3266
+ "translate-none": ["translate-none"],
3267
+ /**
3268
+ * Zoom
3269
+ * @see https://tailwindcss.com/docs/zoom
3270
+ */
3271
+ zoom: [{
3272
+ zoom: [isInteger, isArbitraryVariable, isArbitraryValue]
3273
+ }],
3274
+ // ---------------------
3275
+ // --- Interactivity ---
3276
+ // ---------------------
3277
+ /**
3278
+ * Accent Color
3279
+ * @see https://tailwindcss.com/docs/accent-color
3280
+ */
3281
+ accent: [{
3282
+ accent: scaleColor()
3283
+ }],
3284
+ /**
3285
+ * Appearance
3286
+ * @see https://tailwindcss.com/docs/appearance
3287
+ */
3288
+ appearance: [{
3289
+ appearance: ["none", "auto"]
3290
+ }],
3291
+ /**
3292
+ * Caret Color
3293
+ * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
3294
+ */
3295
+ "caret-color": [{
3296
+ caret: scaleColor()
3297
+ }],
3298
+ /**
3299
+ * Color Scheme
3300
+ * @see https://tailwindcss.com/docs/color-scheme
3301
+ */
3302
+ "color-scheme": [{
3303
+ scheme: ["normal", "dark", "light", "light-dark", "only-dark", "only-light"]
3304
+ }],
3305
+ /**
3306
+ * Cursor
3307
+ * @see https://tailwindcss.com/docs/cursor
3308
+ */
3309
+ cursor: [{
3310
+ 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]
3311
+ }],
3312
+ /**
3313
+ * Field Sizing
3314
+ * @see https://tailwindcss.com/docs/field-sizing
3315
+ */
3316
+ "field-sizing": [{
3317
+ "field-sizing": ["fixed", "content"]
3318
+ }],
3319
+ /**
3320
+ * Pointer Events
3321
+ * @see https://tailwindcss.com/docs/pointer-events
3322
+ */
3323
+ "pointer-events": [{
3324
+ "pointer-events": ["auto", "none"]
3325
+ }],
3326
+ /**
3327
+ * Resize
3328
+ * @see https://tailwindcss.com/docs/resize
3329
+ */
3330
+ resize: [{
3331
+ resize: ["none", "", "y", "x"]
3332
+ }],
3333
+ /**
3334
+ * Scroll Behavior
3335
+ * @see https://tailwindcss.com/docs/scroll-behavior
3336
+ */
3337
+ "scroll-behavior": [{
3338
+ scroll: ["auto", "smooth"]
3339
+ }],
3340
+ /**
3341
+ * Scrollbar Thumb Color
3342
+ * @see https://tailwindcss.com/docs/scrollbar-color
3343
+ */
3344
+ "scrollbar-thumb-color": [{
3345
+ "scrollbar-thumb": scaleColor()
3346
+ }],
3347
+ /**
3348
+ * Scrollbar Track Color
3349
+ * @see https://tailwindcss.com/docs/scrollbar-color
3350
+ */
3351
+ "scrollbar-track-color": [{
3352
+ "scrollbar-track": scaleColor()
3353
+ }],
3354
+ /**
3355
+ * Scrollbar Gutter
3356
+ * @see https://tailwindcss.com/docs/scrollbar-gutter
3357
+ */
3358
+ "scrollbar-gutter": [{
3359
+ "scrollbar-gutter": ["auto", "stable", "both"]
3360
+ }],
3361
+ /**
3362
+ * Scrollbar Width
3363
+ * @see https://tailwindcss.com/docs/scrollbar-width
3364
+ */
3365
+ "scrollbar-w": [{
3366
+ scrollbar: ["auto", "thin", "none"]
3367
+ }],
3368
+ /**
3369
+ * Scroll Margin
3370
+ * @see https://tailwindcss.com/docs/scroll-margin
3371
+ */
3372
+ "scroll-m": [{
3373
+ "scroll-m": scaleUnambiguousSpacing()
3374
+ }],
3375
+ /**
3376
+ * Scroll Margin Inline
3377
+ * @see https://tailwindcss.com/docs/scroll-margin
3378
+ */
3379
+ "scroll-mx": [{
3380
+ "scroll-mx": scaleUnambiguousSpacing()
3381
+ }],
3382
+ /**
3383
+ * Scroll Margin Block
3384
+ * @see https://tailwindcss.com/docs/scroll-margin
3385
+ */
3386
+ "scroll-my": [{
3387
+ "scroll-my": scaleUnambiguousSpacing()
3388
+ }],
3389
+ /**
3390
+ * Scroll Margin Inline Start
3391
+ * @see https://tailwindcss.com/docs/scroll-margin
3392
+ */
3393
+ "scroll-ms": [{
3394
+ "scroll-ms": scaleUnambiguousSpacing()
3395
+ }],
3396
+ /**
3397
+ * Scroll Margin Inline End
3398
+ * @see https://tailwindcss.com/docs/scroll-margin
3399
+ */
3400
+ "scroll-me": [{
3401
+ "scroll-me": scaleUnambiguousSpacing()
3402
+ }],
3403
+ /**
3404
+ * Scroll Margin Block Start
3405
+ * @see https://tailwindcss.com/docs/scroll-margin
3406
+ */
3407
+ "scroll-mbs": [{
3408
+ "scroll-mbs": scaleUnambiguousSpacing()
3409
+ }],
3410
+ /**
3411
+ * Scroll Margin Block End
3412
+ * @see https://tailwindcss.com/docs/scroll-margin
3413
+ */
3414
+ "scroll-mbe": [{
3415
+ "scroll-mbe": scaleUnambiguousSpacing()
3416
+ }],
3417
+ /**
3418
+ * Scroll Margin Top
3419
+ * @see https://tailwindcss.com/docs/scroll-margin
3420
+ */
3421
+ "scroll-mt": [{
3422
+ "scroll-mt": scaleUnambiguousSpacing()
3423
+ }],
3424
+ /**
3425
+ * Scroll Margin Right
3426
+ * @see https://tailwindcss.com/docs/scroll-margin
3427
+ */
3428
+ "scroll-mr": [{
3429
+ "scroll-mr": scaleUnambiguousSpacing()
3430
+ }],
3431
+ /**
3432
+ * Scroll Margin Bottom
3433
+ * @see https://tailwindcss.com/docs/scroll-margin
3434
+ */
3435
+ "scroll-mb": [{
3436
+ "scroll-mb": scaleUnambiguousSpacing()
3437
+ }],
3438
+ /**
3439
+ * Scroll Margin Left
3440
+ * @see https://tailwindcss.com/docs/scroll-margin
3441
+ */
3442
+ "scroll-ml": [{
3443
+ "scroll-ml": scaleUnambiguousSpacing()
3444
+ }],
3445
+ /**
3446
+ * Scroll Padding
3447
+ * @see https://tailwindcss.com/docs/scroll-padding
3448
+ */
3449
+ "scroll-p": [{
3450
+ "scroll-p": scaleUnambiguousSpacing()
3451
+ }],
3452
+ /**
3453
+ * Scroll Padding Inline
3454
+ * @see https://tailwindcss.com/docs/scroll-padding
3455
+ */
3456
+ "scroll-px": [{
3457
+ "scroll-px": scaleUnambiguousSpacing()
3458
+ }],
3459
+ /**
3460
+ * Scroll Padding Block
3461
+ * @see https://tailwindcss.com/docs/scroll-padding
3462
+ */
3463
+ "scroll-py": [{
3464
+ "scroll-py": scaleUnambiguousSpacing()
3465
+ }],
3466
+ /**
3467
+ * Scroll Padding Inline Start
3468
+ * @see https://tailwindcss.com/docs/scroll-padding
3469
+ */
3470
+ "scroll-ps": [{
3471
+ "scroll-ps": scaleUnambiguousSpacing()
3472
+ }],
3473
+ /**
3474
+ * Scroll Padding Inline End
3475
+ * @see https://tailwindcss.com/docs/scroll-padding
3476
+ */
3477
+ "scroll-pe": [{
3478
+ "scroll-pe": scaleUnambiguousSpacing()
3479
+ }],
3480
+ /**
3481
+ * Scroll Padding Block Start
3482
+ * @see https://tailwindcss.com/docs/scroll-padding
3483
+ */
3484
+ "scroll-pbs": [{
3485
+ "scroll-pbs": scaleUnambiguousSpacing()
3486
+ }],
3487
+ /**
3488
+ * Scroll Padding Block End
3489
+ * @see https://tailwindcss.com/docs/scroll-padding
3490
+ */
3491
+ "scroll-pbe": [{
3492
+ "scroll-pbe": scaleUnambiguousSpacing()
3493
+ }],
3494
+ /**
3495
+ * Scroll Padding Top
3496
+ * @see https://tailwindcss.com/docs/scroll-padding
3497
+ */
3498
+ "scroll-pt": [{
3499
+ "scroll-pt": scaleUnambiguousSpacing()
3500
+ }],
3501
+ /**
3502
+ * Scroll Padding Right
3503
+ * @see https://tailwindcss.com/docs/scroll-padding
3504
+ */
3505
+ "scroll-pr": [{
3506
+ "scroll-pr": scaleUnambiguousSpacing()
3507
+ }],
3508
+ /**
3509
+ * Scroll Padding Bottom
3510
+ * @see https://tailwindcss.com/docs/scroll-padding
3511
+ */
3512
+ "scroll-pb": [{
3513
+ "scroll-pb": scaleUnambiguousSpacing()
3514
+ }],
3515
+ /**
3516
+ * Scroll Padding Left
3517
+ * @see https://tailwindcss.com/docs/scroll-padding
3518
+ */
3519
+ "scroll-pl": [{
3520
+ "scroll-pl": scaleUnambiguousSpacing()
3521
+ }],
3522
+ /**
3523
+ * Scroll Snap Align
3524
+ * @see https://tailwindcss.com/docs/scroll-snap-align
3525
+ */
3526
+ "snap-align": [{
3527
+ snap: ["start", "end", "center", "align-none"]
3528
+ }],
3529
+ /**
3530
+ * Scroll Snap Stop
3531
+ * @see https://tailwindcss.com/docs/scroll-snap-stop
3532
+ */
3533
+ "snap-stop": [{
3534
+ snap: ["normal", "always"]
3535
+ }],
3536
+ /**
3537
+ * Scroll Snap Type
3538
+ * @see https://tailwindcss.com/docs/scroll-snap-type
3539
+ */
3540
+ "snap-type": [{
3541
+ snap: ["none", "x", "y", "both"]
3542
+ }],
3543
+ /**
3544
+ * Scroll Snap Type Strictness
3545
+ * @see https://tailwindcss.com/docs/scroll-snap-type
3546
+ */
3547
+ "snap-strictness": [{
3548
+ snap: ["mandatory", "proximity"]
3549
+ }],
3550
+ /**
3551
+ * Touch Action
3552
+ * @see https://tailwindcss.com/docs/touch-action
3553
+ */
3554
+ touch: [{
3555
+ touch: ["auto", "none", "manipulation"]
3556
+ }],
3557
+ /**
3558
+ * Touch Action X
3559
+ * @see https://tailwindcss.com/docs/touch-action
3560
+ */
3561
+ "touch-x": [{
3562
+ "touch-pan": ["x", "left", "right"]
3563
+ }],
3564
+ /**
3565
+ * Touch Action Y
3566
+ * @see https://tailwindcss.com/docs/touch-action
3567
+ */
3568
+ "touch-y": [{
3569
+ "touch-pan": ["y", "up", "down"]
3570
+ }],
3571
+ /**
3572
+ * Touch Action Pinch Zoom
3573
+ * @see https://tailwindcss.com/docs/touch-action
3574
+ */
3575
+ "touch-pz": ["touch-pinch-zoom"],
3576
+ /**
3577
+ * User Select
3578
+ * @see https://tailwindcss.com/docs/user-select
3579
+ */
3580
+ select: [{
3581
+ select: ["none", "text", "all", "auto"]
3582
+ }],
3583
+ /**
3584
+ * Will Change
3585
+ * @see https://tailwindcss.com/docs/will-change
3586
+ */
3587
+ "will-change": [{
3588
+ "will-change": ["auto", "scroll", "contents", "transform", isArbitraryVariable, isArbitraryValue]
3589
+ }],
3590
+ // -----------
3591
+ // --- SVG ---
3592
+ // -----------
3593
+ /**
3594
+ * Fill
3595
+ * @see https://tailwindcss.com/docs/fill
3596
+ */
3597
+ fill: [{
3598
+ fill: ["none", ...scaleColor()]
3599
+ }],
3600
+ /**
3601
+ * Stroke Width
3602
+ * @see https://tailwindcss.com/docs/stroke-width
3603
+ */
3604
+ "stroke-w": [{
3605
+ stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]
3606
+ }],
3607
+ /**
3608
+ * Stroke
3609
+ * @see https://tailwindcss.com/docs/stroke
3610
+ */
3611
+ stroke: [{
3612
+ stroke: ["none", ...scaleColor()]
3613
+ }],
3614
+ // ---------------------
3615
+ // --- Accessibility ---
3616
+ // ---------------------
3617
+ /**
3618
+ * Forced Color Adjust
3619
+ * @see https://tailwindcss.com/docs/forced-color-adjust
3620
+ */
3621
+ "forced-color-adjust": [{
3622
+ "forced-color-adjust": ["auto", "none"]
3623
+ }]
3624
+ },
3625
+ conflictingClassGroups: {
3626
+ "container-named": ["container-type"],
3627
+ overflow: ["overflow-x", "overflow-y"],
3628
+ overscroll: ["overscroll-x", "overscroll-y"],
3629
+ inset: ["inset-x", "inset-y", "inset-bs", "inset-be", "start", "end", "top", "right", "bottom", "left"],
3630
+ "inset-x": ["start", "end", "right", "left"],
3631
+ "inset-y": ["inset-bs", "inset-be", "top", "bottom"],
3632
+ flex: ["basis", "grow", "shrink"],
3633
+ gap: ["gap-x", "gap-y"],
3634
+ p: ["px", "py", "ps", "pe", "pbs", "pbe", "pt", "pr", "pb", "pl"],
3635
+ px: ["ps", "pe", "pr", "pl"],
3636
+ py: ["pbs", "pbe", "pt", "pb"],
3637
+ m: ["mx", "my", "ms", "me", "mbs", "mbe", "mt", "mr", "mb", "ml"],
3638
+ mx: ["ms", "me", "mr", "ml"],
3639
+ my: ["mbs", "mbe", "mt", "mb"],
3640
+ size: ["w", "h"],
3641
+ "font-size": ["leading"],
3642
+ "fvn-normal": ["fvn-ordinal", "fvn-slashed-zero", "fvn-figure", "fvn-spacing", "fvn-fraction"],
3643
+ "fvn-ordinal": ["fvn-normal"],
3644
+ "fvn-slashed-zero": ["fvn-normal"],
3645
+ "fvn-figure": ["fvn-normal"],
3646
+ "fvn-spacing": ["fvn-normal"],
3647
+ "fvn-fraction": ["fvn-normal"],
3648
+ "line-clamp": ["display", "overflow"],
3649
+ 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"],
3650
+ "rounded-s": ["rounded-ss", "rounded-es"],
3651
+ "rounded-e": ["rounded-se", "rounded-ee"],
3652
+ "rounded-t": ["rounded-tl", "rounded-tr"],
3653
+ "rounded-r": ["rounded-tr", "rounded-br"],
3654
+ "rounded-b": ["rounded-br", "rounded-bl"],
3655
+ "rounded-l": ["rounded-tl", "rounded-bl"],
3656
+ "border-spacing": ["border-spacing-x", "border-spacing-y"],
3657
+ "border-w": ["border-w-x", "border-w-y", "border-w-s", "border-w-e", "border-w-bs", "border-w-be", "border-w-t", "border-w-r", "border-w-b", "border-w-l"],
3658
+ "border-w-x": ["border-w-s", "border-w-e", "border-w-r", "border-w-l"],
3659
+ "border-w-y": ["border-w-bs", "border-w-be", "border-w-t", "border-w-b"],
3660
+ "border-color": ["border-color-x", "border-color-y", "border-color-s", "border-color-e", "border-color-bs", "border-color-be", "border-color-t", "border-color-r", "border-color-b", "border-color-l"],
3661
+ "border-color-x": ["border-color-s", "border-color-e", "border-color-r", "border-color-l"],
3662
+ "border-color-y": ["border-color-bs", "border-color-be", "border-color-t", "border-color-b"],
3663
+ translate: ["translate-x", "translate-y", "translate-none"],
3664
+ "translate-none": ["translate", "translate-x", "translate-y", "translate-z"],
3665
+ "scroll-m": ["scroll-mx", "scroll-my", "scroll-ms", "scroll-me", "scroll-mbs", "scroll-mbe", "scroll-mt", "scroll-mr", "scroll-mb", "scroll-ml"],
3666
+ "scroll-mx": ["scroll-ms", "scroll-me", "scroll-mr", "scroll-ml"],
3667
+ "scroll-my": ["scroll-mbs", "scroll-mbe", "scroll-mt", "scroll-mb"],
3668
+ "scroll-p": ["scroll-px", "scroll-py", "scroll-ps", "scroll-pe", "scroll-pbs", "scroll-pbe", "scroll-pt", "scroll-pr", "scroll-pb", "scroll-pl"],
3669
+ "scroll-px": ["scroll-ps", "scroll-pe", "scroll-pr", "scroll-pl"],
3670
+ "scroll-py": ["scroll-pbs", "scroll-pbe", "scroll-pt", "scroll-pb"],
3671
+ touch: ["touch-x", "touch-y", "touch-pz"],
3672
+ "touch-x": ["touch"],
3673
+ "touch-y": ["touch"],
3674
+ "touch-pz": ["touch"]
3675
+ },
3676
+ conflictingClassGroupModifiers: {
3677
+ "font-size": ["leading"]
3678
+ },
3679
+ postfixLookupClassGroups: ["container-type"],
3680
+ orderSensitiveModifiers: ["*", "**", "after", "backdrop", "before", "details-content", "file", "first-letter", "first-line", "marker", "placeholder", "selection"]
3681
+ };
3682
+ };
3683
+ var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
3684
+
3685
+ // src/client/utils.ts
3686
+ function cn(...inputs) {
3687
+ return twMerge(clsx(inputs));
3688
+ }
3689
+
3690
+ // src/client/ui/button.tsx
3691
+ var import_jsx_runtime = require("react/jsx-runtime");
3692
+ var buttonVariants = cva(
3693
+ "group/button inline-flex shrink-0 cursor-pointer items-center justify-center appearance-none rounded-lg border border-transparent bg-clip-padding font-[inherit] text-sm font-medium whitespace-nowrap transition-[color,background-color,border-color,box-shadow,transform,opacity] duration-100 outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px active:not-aria-[haspopup]:scale-[0.97] disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3694
+ {
3695
+ variants: {
3696
+ variant: {
3697
+ default: "bg-primary text-primary-foreground hover:bg-primary/80 active:bg-primary/70",
3698
+ outline: "border-border bg-background hover:bg-muted hover:text-foreground active:bg-muted/80 aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 dark:active:bg-input/60",
3699
+ secondary: "bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] active:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_10%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
3700
+ ghost: "hover:bg-muted hover:text-foreground active:bg-muted active:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50 dark:active:bg-muted/70",
3701
+ destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 active:bg-destructive/30 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:active:bg-destructive/40 dark:focus-visible:ring-destructive/40",
3702
+ link: "text-primary underline-offset-4 hover:underline active:opacity-70"
3703
+ },
3704
+ size: {
3705
+ default: "h-8 gap-1.5 px-2.5",
3706
+ sm: 'h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-xs [&_svg:not([class*="size-"])]:size-3.5',
3707
+ icon: "size-8"
3708
+ }
3709
+ },
3710
+ defaultVariants: {
3711
+ variant: "default",
3712
+ size: "default"
3713
+ }
3714
+ }
3715
+ );
3716
+ function Button({
3717
+ className,
3718
+ variant = "default",
3719
+ size = "default",
3720
+ asChild = false,
3721
+ ...props
3722
+ }) {
3723
+ const Comp = asChild ? dist_exports.Root : "button";
3724
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
3725
+ Comp,
3726
+ {
3727
+ "data-slot": "button",
3728
+ "data-variant": variant,
3729
+ "data-size": size,
3730
+ className: cn(buttonVariants({ variant, size, className })),
3731
+ ...props
3732
+ }
3733
+ );
3734
+ }
3735
+
3736
+ // src/client/ui/input.tsx
3737
+ var import_react3 = require("react");
3738
+ var import_jsx_runtime2 = require("react/jsx-runtime");
3739
+ var Input = (0, import_react3.forwardRef)(function Input2({ className, type, ...props }, ref) {
3740
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
3741
+ "input",
3742
+ {
3743
+ ref,
3744
+ type,
3745
+ "data-slot": "input",
3746
+ className: cn(
3747
+ "h-8 w-full min-w-0 appearance-none rounded-lg border border-input bg-transparent px-2.5 py-1 font-[inherit] text-sm transition-colors outline-none select-text placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:bg-input/30 dark:disabled:bg-input/80",
3748
+ className
3749
+ ),
3750
+ ...props
3751
+ }
3752
+ );
3753
+ });
3754
+
3755
+ // src/client/settings.tsx
3756
+ var import_jsx_runtime3 = require("react/jsx-runtime");
3757
+ var en = {
3758
+ nav: "Agentero",
3759
+ vaultTitle: "Knowledge base",
3760
+ vaultPlaceholder: "/path/to/vault",
3761
+ choose: "Choose folder",
3762
+ apply: "Apply",
3763
+ applying: "Applying\u2026",
3764
+ invalidVault: "Choose an existing Agentero Vault folder.",
3765
+ cliTitle: "Agentero CLI",
3766
+ cliPlaceholder: "agentero",
3767
+ save: "Save",
3768
+ saving: "Saving\u2026",
3769
+ saved: "Saved",
3770
+ saveFailed: "The Host did not accept this change.",
3771
+ reset: "Reset to default",
3772
+ loadFailed: "Could not read the current knowledge base.",
3773
+ unavailable: "These settings are not available in this deployment."
3774
+ };
3775
+ var zh = {
3776
+ nav: "Agentero",
3777
+ vaultTitle: "\u77E5\u8BC6\u5E93",
3778
+ vaultPlaceholder: "/path/to/vault",
3779
+ choose: "\u9009\u62E9\u76EE\u5F55",
3780
+ apply: "\u5E94\u7528",
3781
+ applying: "\u5E94\u7528\u4E2D\u2026",
3782
+ invalidVault: "\u8BF7\u9009\u62E9\u4E00\u4E2A\u6709\u6548\u7684 Agentero Vault \u76EE\u5F55\u3002",
3783
+ cliTitle: "Agentero CLI",
3784
+ cliPlaceholder: "agentero",
3785
+ save: "\u4FDD\u5B58",
3786
+ saving: "\u4FDD\u5B58\u4E2D\u2026",
3787
+ saved: "\u5DF2\u4FDD\u5B58",
3788
+ saveFailed: "Host \u6CA1\u6709\u63A5\u53D7\u8FD9\u6B21\u4FEE\u6539\u3002",
3789
+ reset: "\u6062\u590D\u9ED8\u8BA4",
3790
+ loadFailed: "\u65E0\u6CD5\u8BFB\u53D6\u5F53\u524D\u77E5\u8BC6\u5E93\u3002",
3791
+ unavailable: "\u5F53\u524D\u90E8\u7F72\u4E0D\u63D0\u4F9B\u8FD9\u9879\u8BBE\u7F6E\u3002"
3792
+ };
3793
+ function messageOf(error, fallback) {
3794
+ return error instanceof Error && error.message !== "" ? error.message : fallback;
3795
+ }
3796
+ function AgenteroSettings(props) {
3797
+ const { t } = props;
3798
+ const state = props.useAgenteroSettings((snapshot) => snapshot);
3799
+ const [vault, setVault] = (0, import_react4.useState)("");
3800
+ const [vaultDraft, setVaultDraft] = (0, import_react4.useState)("");
3801
+ const [canPick, setCanPick] = (0, import_react4.useState)(false);
3802
+ const [picking, setPicking] = (0, import_react4.useState)(false);
3803
+ const [applying, setApplying] = (0, import_react4.useState)(false);
3804
+ const [vaultError, setVaultError] = (0, import_react4.useState)("");
3805
+ const [saved, setSaved] = (0, import_react4.useState)(false);
3806
+ const saving = (0, import_react4.useRef)(false);
3807
+ (0, import_react4.useEffect)(() => {
3808
+ let cancelled = false;
3809
+ props.loadVault().then((info) => {
3810
+ if (cancelled) return;
3811
+ setVault(info.path);
3812
+ setVaultDraft(info.path);
3813
+ setCanPick(info.canPick);
3814
+ }).catch((error) => {
3815
+ if (!cancelled) setVaultError(messageOf(error, t("loadFailed")));
3816
+ });
3817
+ return () => {
3818
+ cancelled = true;
3819
+ };
3820
+ }, [props.loadVault, t]);
3821
+ (0, import_react4.useEffect)(() => {
3822
+ if (state.saving) {
3823
+ saving.current = true;
3824
+ setSaved(false);
3825
+ return;
3826
+ }
3827
+ if (!saving.current) return;
3828
+ saving.current = false;
3829
+ if (!state.failed) setSaved(true);
3830
+ }, [state.saving, state.failed]);
3831
+ const busy = picking || applying;
3832
+ const draft = vaultDraft.trim();
3833
+ const vaultReady = draft !== "" && draft !== vault && !busy;
3834
+ const disabled = !state.writable || state.saving;
3835
+ const pick = async () => {
3836
+ setPicking(true);
3837
+ setVaultError("");
3838
+ try {
3839
+ const path = await props.pickVault();
3840
+ if (path !== null) setVaultDraft(path);
3841
+ } catch (error) {
3842
+ setVaultError(messageOf(error, t("loadFailed")));
3843
+ } finally {
3844
+ setPicking(false);
3845
+ }
3846
+ };
3847
+ const applyVault = async () => {
3848
+ if (!vaultReady) return;
3849
+ setApplying(true);
3850
+ setVaultError("");
3851
+ try {
3852
+ await props.saveVault(draft);
3853
+ props.reload();
3854
+ } catch (error) {
3855
+ const message = messageOf(error, t("saveFailed"));
3856
+ setVaultError(message === "invalid vault" ? t("invalidVault") : message);
3857
+ } finally {
3858
+ setApplying(false);
3859
+ }
3860
+ };
3861
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "agentero-settings agentero-surface flex flex-col gap-6 py-1", children: [
3862
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("section", { className: "flex flex-col gap-2", children: [
3863
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h3", { className: "m-0 text-[0.875rem] font-normal", children: t("vaultTitle") }),
3864
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex items-center gap-2", children: [
3865
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
3866
+ Input,
3867
+ {
3868
+ value: vaultDraft,
3869
+ "aria-label": t("vaultTitle"),
3870
+ placeholder: t("vaultPlaceholder"),
3871
+ spellCheck: false,
3872
+ disabled: busy,
3873
+ className: "font-mono text-xs",
3874
+ onChange: (event) => {
3875
+ setVaultDraft(event.target.value);
3876
+ }
3877
+ }
3878
+ ),
3879
+ canPick ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Button, { type: "button", variant: "outline", size: "sm", disabled: busy, onClick: () => {
3880
+ void pick();
3881
+ }, children: [
3882
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(FolderOpen, { "aria-hidden": true }),
3883
+ t("choose")
3884
+ ] }) : null,
3885
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Button, { type: "button", size: "sm", disabled: !vaultReady, onClick: () => {
3886
+ void applyVault();
3887
+ }, children: applying ? t("applying") : t("apply") })
3888
+ ] }),
3889
+ vaultError !== "" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { role: "status", className: "text-xs text-destructive", children: vaultError }) : null
3890
+ ] }),
3891
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("section", { className: "flex flex-col gap-2", children: [
3892
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h3", { className: "m-0 text-[0.875rem] font-normal", children: t("cliTitle") }),
3893
+ !state.available ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { role: "status", className: "text-xs text-muted-foreground", children: t("unavailable") }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex items-center gap-2", children: [
3894
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
3895
+ Input,
3896
+ {
3897
+ value: state.agenteroBin.text,
3898
+ "aria-label": t("cliTitle"),
3899
+ placeholder: t("cliPlaceholder"),
3900
+ spellCheck: false,
3901
+ disabled,
3902
+ className: "font-mono text-xs",
3903
+ onChange: (event) => {
3904
+ props.edit("agenteroBin", event.target.value);
3905
+ setSaved(false);
3906
+ }
3907
+ }
3908
+ ),
3909
+ state.agenteroBin.overridden ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Button, { type: "button", variant: "ghost", size: "sm", disabled, onClick: () => {
3910
+ props.resetField("agenteroBin");
3911
+ setSaved(false);
3912
+ }, children: t("reset") }) : null,
3913
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Button, { type: "button", size: "sm", disabled: disabled || !state.dirty || state.invalid, onClick: () => {
3914
+ props.save();
3915
+ }, children: state.saving ? t("saving") : t("save") })
3916
+ ] }),
3917
+ state.failed ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { role: "status", className: "text-xs text-destructive", children: t("saveFailed") }) : null,
3918
+ saved && !state.failed ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { className: "flex items-center gap-1 text-xs text-muted-foreground", children: [
3919
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Check, { className: "size-3", "aria-hidden": true }),
3920
+ t("saved")
3921
+ ] }) : null
3922
+ ] })
3923
+ ] });
3924
+ }
3925
+
3926
+ // src/client/settings-model.ts
3927
+ var import_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
3928
+ var AgenteroSettingsModel = class {
3929
+ form;
3930
+ state;
3931
+ /** @param scope - the shared configuration form of the `agentero-host` entry. */
3932
+ constructor(scope) {
3933
+ this.form = new import_dsh_client_ui_primitives.SettingsFormModel(scope, [(0, import_dsh_client_ui_primitives.settingsTextField)("agenteroBin")]);
3934
+ this.state = this.form.bind(() => ({ ...this.form.shell(), agenteroBin: this.form.field("agenteroBin") }));
3935
+ }
3936
+ /** Build the face the settings section injects. */
3937
+ inject() {
3938
+ return { hooks: { agenteroSettings: this.state }, ...this.form.actions() };
3939
+ }
3940
+ /** Release the entry subscription. */
3941
+ dispose() {
3942
+ this.form.dispose();
3943
+ }
3944
+ };
3945
+
3946
+ // src/client/index.ts
3947
+ var name = "agentero";
3948
+ var inject = ["slots", "locale", "configForms"];
3949
+ var SETTINGS_NS = "agentero.settings";
3950
+ async function bodyOf(response) {
3951
+ const text = await response.text();
3952
+ if (text.trim() === "") return void 0;
3953
+ try {
3954
+ return JSON.parse(text);
3955
+ } catch {
3956
+ return void 0;
3957
+ }
3958
+ }
3959
+ function failureText(body) {
3960
+ if (body === null || typeof body !== "object" || !("error" in body)) return void 0;
3961
+ const error = body.error;
3962
+ if (typeof error === "string" && error.trim() !== "") return error;
3963
+ return void 0;
3964
+ }
3965
+ function apply(ctx) {
3966
+ ctx.effect(() => ctx.locale.register("agentero.host", {
3967
+ en: {
3968
+ vaultChanged: "The knowledge base has changed. Save any unsaved text elsewhere, then reload this page.",
3969
+ unavailable: "Could not connect to the knowledge base."
3970
+ },
3971
+ zh: {
3972
+ vaultChanged: "\u77E5\u8BC6\u5E93\u5DF2\u5207\u6362\uFF0C\u8BF7\u53E6\u5B58\u672A\u4FDD\u5B58\u7684\u5185\u5BB9\u540E\u5237\u65B0\u9875\u9762\u3002",
3973
+ unavailable: "\u65E0\u6CD5\u8FDE\u63A5\u77E5\u8BC6\u5E93\u3002"
3974
+ }
3975
+ }));
3976
+ const t = ctx.locale.bind("agentero.host");
3977
+ let source;
3978
+ const getVault = () => {
3979
+ source ??= fetch("/agentero/api/vault", { cache: "no-store" }).then(async (response) => {
3980
+ const text = await response.text();
3981
+ let body;
3982
+ try {
3983
+ body = text.trim() === "" ? void 0 : JSON.parse(text);
3984
+ } catch {
3985
+ body = void 0;
3986
+ }
3987
+ if (!response.ok || body === null || typeof body !== "object" || !("path" in body) || typeof body.path !== "string" || !("scope" in body) || typeof body.scope !== "string") throw new Error(t("unavailable"));
3988
+ return body;
3989
+ }).catch((error) => {
3990
+ source = void 0;
3991
+ throw error;
3992
+ });
3993
+ return source;
3994
+ };
3995
+ const openers = /* @__PURE__ */ new Map();
3996
+ const agentero = {
3997
+ getVault,
3998
+ async request(url, init) {
3999
+ const vault = await getVault();
4000
+ const headers = new Headers(init?.headers);
4001
+ headers.set("x-agentero-vault", vault.scope);
4002
+ const response = await fetch(url, { ...init, headers });
4003
+ if (response.status === 409) {
4004
+ const body = await response.clone().json();
4005
+ if (body.error === "vault changed") return new Response(JSON.stringify({ error: t("vaultChanged") }), {
4006
+ status: 409,
4007
+ headers: { "content-type": "application/json" }
4008
+ });
4009
+ }
4010
+ return response;
4011
+ },
4012
+ registerOpener(kind, opener) {
4013
+ openers.set(kind, opener);
4014
+ return () => {
4015
+ if (openers.get(kind) === opener) openers.delete(kind);
4016
+ };
4017
+ },
4018
+ open(kind, id) {
4019
+ const opener = openers.get(kind);
4020
+ if (opener === void 0) return false;
4021
+ opener(id);
4022
+ return true;
4023
+ }
4024
+ };
4025
+ ctx.provide("agentero", agentero);
4026
+ ctx.effect(() => ctx.locale.register(SETTINGS_NS, { en, zh }));
4027
+ const tSettings = ctx.locale.bind(SETTINGS_NS);
4028
+ const settingsFace = {
4029
+ async loadVault() {
4030
+ const vault = await getVault();
4031
+ return { path: vault.path, canPick: vault.canPick };
4032
+ },
4033
+ async pickVault() {
4034
+ const response = await agentero.request("/agentero/api/vault/pick", {
4035
+ method: "POST",
4036
+ headers: { "content-type": "application/json" },
4037
+ body: "{}"
4038
+ });
4039
+ const body = await bodyOf(response);
4040
+ if (!response.ok) throw new Error(failureText(body) ?? "directory picker unavailable");
4041
+ const path = body !== null && typeof body === "object" ? body.path : void 0;
4042
+ return typeof path === "string" ? path : null;
4043
+ },
4044
+ async saveVault(path) {
4045
+ const response = await agentero.request("/agentero/api/vault", {
4046
+ method: "PUT",
4047
+ headers: { "content-type": "application/json" },
4048
+ body: JSON.stringify({ path })
4049
+ });
4050
+ if (!response.ok) throw new Error(failureText(await bodyOf(response)) ?? "invalid vault");
4051
+ },
4052
+ reload() {
4053
+ window.location.reload();
4054
+ }
4055
+ };
4056
+ const settingsModel = new AgenteroSettingsModel(ctx.configForms.get("agentero-host"));
4057
+ ctx.effect(() => () => {
4058
+ settingsModel.dispose();
4059
+ });
4060
+ ctx.slots.inject("settings.section", () => ctx.slots.register({
4061
+ name: "settings.section",
4062
+ id: "agentero",
4063
+ order: 16,
4064
+ label: () => tSettings("nav"),
4065
+ locale: SETTINGS_NS,
4066
+ inject: () => ({ ...settingsFace, ...settingsModel.inject() })
4067
+ }, AgenteroSettings));
4068
+ }
4069
+ return module.exports;
4070
+ }
4071
+ });