@usememos/ui 26.10.0 → 26.10.2

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 (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +67 -92
  3. package/dist/index.js +3 -48
  4. package/dist/index.js.map +7 -0
  5. package/dist/styles.css +1 -0
  6. package/dist/tokens.css +1 -0
  7. package/dist/types/components/avatar/index.d.ts +16 -0
  8. package/dist/types/components/badge/index.d.ts +10 -0
  9. package/dist/types/components/button/index.d.ts +29 -0
  10. package/dist/types/components/checkbox/index.d.ts +11 -0
  11. package/dist/types/components/collapsible/index.d.ts +15 -0
  12. package/dist/types/components/combobox/index.d.ts +66 -0
  13. package/dist/types/components/dialog/alert-dialog.d.ts +19 -0
  14. package/dist/types/components/dialog/index.d.ts +22 -0
  15. package/dist/types/components/dialog/parts.d.ts +34 -0
  16. package/dist/types/components/field/fieldset.d.ts +11 -0
  17. package/dist/types/components/field/index.d.ts +24 -0
  18. package/dist/types/components/input/index.d.ts +19 -0
  19. package/dist/types/components/kbd/index.d.ts +5 -0
  20. package/dist/types/components/link/index.d.ts +11 -0
  21. package/dist/types/components/menu/index.d.ts +67 -0
  22. package/dist/types/components/popover/index.d.ts +28 -0
  23. package/dist/types/components/prose/index.d.ts +11 -0
  24. package/dist/types/components/radio-group/index.d.ts +15 -0
  25. package/dist/types/components/select/index.d.ts +46 -0
  26. package/dist/types/components/separator/index.d.ts +5 -0
  27. package/dist/types/components/skeleton/index.d.ts +13 -0
  28. package/dist/types/components/spinner/index.d.ts +10 -0
  29. package/dist/types/components/switch/index.d.ts +11 -0
  30. package/dist/types/components/table/index.d.ts +42 -0
  31. package/dist/types/components/tabs/index.d.ts +22 -0
  32. package/dist/types/components/textarea/index.d.ts +9 -0
  33. package/dist/types/components/toast/index.d.ts +19 -0
  34. package/dist/types/components/toggle/index.d.ts +11 -0
  35. package/dist/types/components/toggle-group/index.d.ts +13 -0
  36. package/dist/types/components/tooltip/index.d.ts +24 -0
  37. package/dist/types/index.d.ts +30 -0
  38. package/dist/types/internal/class-name.d.ts +7 -0
  39. package/dist/types/internal/popup.d.ts +9 -0
  40. package/dist/types/internal/size.d.ts +5 -0
  41. package/dist/types/types.d.ts +7 -0
  42. package/llms-full.txt +2181 -0
  43. package/llms.txt +53 -0
  44. package/package.json +34 -157
  45. package/dist/button.cjs +0 -74
  46. package/dist/button.d.cts +0 -15
  47. package/dist/button.d.ts +0 -15
  48. package/dist/button.js +0 -7
  49. package/dist/checkbox.cjs +0 -98
  50. package/dist/checkbox.d.cts +0 -16
  51. package/dist/checkbox.d.ts +0 -16
  52. package/dist/checkbox.js +0 -7
  53. package/dist/chunk-3DNMGJFC.js +0 -216
  54. package/dist/chunk-3VYNJ6UM.js +0 -27
  55. package/dist/chunk-3YY2G3JK.js +0 -125
  56. package/dist/chunk-5GQEJQKE.js +0 -60
  57. package/dist/chunk-6TNEFWVX.js +0 -9
  58. package/dist/chunk-BH4MPO4N.js +0 -25
  59. package/dist/chunk-F6GH4X7N.js +0 -34
  60. package/dist/chunk-HYN2P4OY.js +0 -84
  61. package/dist/chunk-OIUVLPTE.js +0 -54
  62. package/dist/chunk-S6LVYCE6.js +0 -157
  63. package/dist/chunk-SNSDJKJP.js +0 -44
  64. package/dist/chunk-WPO54YPG.js +0 -328
  65. package/dist/chunk-Z3ME5VRQ.js +0 -98
  66. package/dist/control-size-Bz2gyuyO.d.cts +0 -3
  67. package/dist/control-size-Bz2gyuyO.d.ts +0 -3
  68. package/dist/dialog.cjs +0 -203
  69. package/dist/dialog.d.cts +0 -34
  70. package/dist/dialog.d.ts +0 -34
  71. package/dist/dialog.js +0 -8
  72. package/dist/dropdown-menu.cjs +0 -378
  73. package/dist/dropdown-menu.d.cts +0 -60
  74. package/dist/dropdown-menu.d.ts +0 -60
  75. package/dist/dropdown-menu.js +0 -8
  76. package/dist/index.cjs +0 -1223
  77. package/dist/index.d.cts +0 -21
  78. package/dist/index.d.ts +0 -21
  79. package/dist/input.cjs +0 -67
  80. package/dist/input.d.cts +0 -11
  81. package/dist/input.d.ts +0 -11
  82. package/dist/input.js +0 -7
  83. package/dist/popover.cjs +0 -175
  84. package/dist/popover.d.cts +0 -53
  85. package/dist/popover.d.ts +0 -53
  86. package/dist/popover.js +0 -8
  87. package/dist/radio-group.cjs +0 -122
  88. package/dist/radio-group.d.cts +0 -25
  89. package/dist/radio-group.d.ts +0 -25
  90. package/dist/radio-group.js +0 -7
  91. package/dist/select.cjs +0 -266
  92. package/dist/select.d.cts +0 -45
  93. package/dist/select.d.ts +0 -45
  94. package/dist/select.js +0 -8
  95. package/dist/separator.cjs +0 -82
  96. package/dist/separator.d.cts +0 -12
  97. package/dist/separator.d.ts +0 -12
  98. package/dist/separator.js +0 -7
  99. package/dist/switch.cjs +0 -92
  100. package/dist/switch.d.cts +0 -16
  101. package/dist/switch.d.ts +0 -16
  102. package/dist/switch.js +0 -7
  103. package/dist/theme.css +0 -1097
  104. package/dist/tooltip.cjs +0 -148
  105. package/dist/tooltip.d.cts +0 -24
  106. package/dist/tooltip.d.ts +0 -24
  107. package/dist/tooltip.js +0 -8
@@ -0,0 +1 @@
1
+ @layer mu{.mu-s-sm{--h: var(--mu-control-sm);--px: var(--mu-space-2);--pxi: 6px;--fs: 12px;--lh: 16px;--r: var(--mu-radius-sm);--gap: var(--mu-space-1);--icon: var(--mu-icon-sm);--icon-stroke: 1.25px;--box: 16px}.mu-s-md{--h: var(--mu-control-md);--px: var(--mu-space-3);--pxi: 10px;--fs: 14px;--lh: 20px;--r: var(--mu-radius-md);--gap: 6px;--icon: var(--mu-icon-md);--icon-stroke: 1.5px;--box: 18px}.mu-s-lg{--h: var(--mu-control-lg);--px: var(--mu-space-4);--pxi: var(--mu-space-3);--fs: 16px;--lh: 24px;--r: var(--mu-radius-lg);--gap: var(--mu-space-2);--icon: var(--mu-icon-lg);--icon-stroke: 1.5px;--box: 20px}.mu-recessed{background-color:var(--mu-well);box-shadow:inset 0 0 0 1px var(--mu-edge),var(--mu-shadow-track)}.mu-raised{background-color:var(--mu-key);background-image:linear-gradient(180deg,var(--mu-key-sheen),rgba(255,255,255,0) 60%);box-shadow:var(--mu-shadow-raised)}.mu-key{background-color:var(--mu-key);background-image:linear-gradient(180deg,var(--mu-key-sheen),rgba(255,255,255,0) 60%);box-shadow:var(--mu-shadow-key)}.mu-popup{background:var(--mu-surface);box-shadow:var(--mu-shadow-pop);border-radius:var(--mu-radius-xl)}.mu-positioner{z-index:var(--mu-layer-popup);outline:0}.mu-popup-motion{transition:opacity var(--mu-duration-fade) var(--mu-ease-out),translate var(--mu-duration-fade) var(--mu-ease-out)}.mu-popup-motion[data-starting-style],.mu-popup-motion[data-ending-style]{opacity:0;translate:0 var(--mu-space-1)}.mu-popup-motion[data-instant]{transition:none}@media(prefers-reduced-motion:reduce){.mu-popup-motion[data-starting-style],.mu-popup-motion[data-ending-style]{translate:none}}.mu-base{font-family:var(--mu-font-sans);font-size:var(--fs, 14px);line-height:var(--lh, 20px);font-weight:500;letter-spacing:0;color:var(--mu-ink);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent}.mu-base ::selection,.mu-base::selection{background:var(--mu-selection)}.mu-visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.mu-focus:focus-visible{outline:var(--mu-focus-width) solid var(--mu-focus);outline-offset:var(--mu-focus-width)}.mu-hit{position:relative}@media(pointer:coarse){.mu-hit:after{content:"";position:absolute;left:50%;top:50%;width:max(100%,var(--mu-hit-area));height:max(100%,var(--mu-hit-area));transform:translate(-50%,-50%)}}.mu-icon,.mu-base svg.lucide,.mu-prose svg.lucide{width:var(--icon, 16px);height:var(--icon, 16px);flex:none;display:block;stroke-width:var(--icon-stroke, 1.5px)}.mu-icon *,.mu-base svg.lucide *,.mu-prose svg.lucide *{vector-effect:non-scaling-stroke}.mu-label-xs{font-family:var(--mu-font-sans);font-size:11px;line-height:16px;font-weight:500}.mu-caption{font-family:var(--mu-font-sans);font-size:12px;line-height:16px;font-weight:400}.mu-label-sm{font-family:var(--mu-font-sans);font-size:12px;line-height:16px;font-weight:500}.mu-body-sm{font-family:var(--mu-font-sans);font-size:13px;line-height:18px;font-weight:400}.mu-body{font-family:var(--mu-font-sans);font-size:14px;line-height:20px;font-weight:400}.mu-label{font-family:var(--mu-font-sans);font-size:14px;line-height:20px;font-weight:500}.mu-body-lg{font-family:var(--mu-font-sans);font-size:16px;line-height:24px;font-weight:400}.mu-label-lg{font-family:var(--mu-font-sans);font-size:16px;line-height:24px;font-weight:500}.mu-title{font-family:var(--mu-font-display);font-size:18px;line-height:28px;font-weight:600}.mu-heading-3{font-family:var(--mu-font-display);font-size:20px;line-height:28px;font-weight:600}.mu-heading-2{font-family:var(--mu-font-display);font-size:24px;line-height:32px;font-weight:600;letter-spacing:-.01em}.mu-heading-1{font-family:var(--mu-font-display);font-size:32px;line-height:40px;font-weight:600;letter-spacing:-.01em}.mu-display{font-family:var(--mu-font-display);font-size:40px;line-height:48px;font-weight:600;letter-spacing:-.02em}.mu-prose{--prose-fs: 15px;--prose-lh: 24px;--prose-h1: 20px;--prose-h1-lh: 28px;--prose-h2: 17px;--prose-h2-lh: 24px;--prose-head: 12px;--prose-head-lh: 16px}.mu-prose-sm{--prose-fs: 14px;--prose-lh: 22px}}@layer mu{.mu-spinner{display:inline-block;flex:none;box-sizing:border-box;width:var(--icon);height:var(--icon);border:var(--icon-stroke) solid currentColor;border-top-color:transparent;border-radius:var(--mu-radius-full);animation:mu-spin var(--mu-duration-spin) linear infinite}@keyframes mu-spin{to{rotate:1turn}}}@layer mu{.mu-button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--gap);box-sizing:border-box;height:var(--h);margin:0;padding:0 var(--px);border:0;border-radius:var(--r);color:var(--mu-ink);background-color:var(--mu-key);background-image:linear-gradient(180deg,var(--mu-key-sheen),transparent 60%);box-shadow:var(--mu-shadow-raised);white-space:nowrap;text-decoration:none;cursor:pointer;user-select:none;transition-property:background-color,box-shadow,color,translate;transition-duration:var(--mu-duration-press);transition-timing-function:var(--mu-ease-out)}.mu-button:has(>svg:first-child){padding-inline-start:var(--pxi)}.mu-button.mu-button-icon{width:var(--h);padding:0}.mu-button-label{min-width:0;overflow:hidden;text-overflow:ellipsis}@media(hover:hover){.mu-button:hover:not([data-disabled]){background-color:var(--mu-key-hover)}.mu-button-primary:hover:not([data-disabled]){background-color:var(--mu-primary-hover)}.mu-button-danger:hover:not([data-disabled]){background-color:var(--mu-danger-key);filter:brightness(1.08)}.mu-button-ghost:hover:not([data-disabled]){background-color:var(--mu-hover);color:var(--mu-ink)}}.mu-button:active:not([data-disabled]){translate:0 .5px;box-shadow:var(--mu-shadow-pressed)}.mu-button-primary{color:var(--mu-on-primary);background-color:var(--mu-primary)}.mu-button-danger{color:var(--mu-on-danger);background-color:var(--mu-danger-key)}.mu-button-ghost{color:var(--mu-ink-muted);background-color:transparent;background-image:none;box-shadow:none}.mu-button-ghost[data-popup-open]{background-color:var(--mu-hover);color:var(--mu-ink)}.mu-button-ghost:active:not([data-disabled]){translate:none;background-color:var(--mu-well);box-shadow:var(--mu-shadow-track)}.mu-button[data-disabled]:not([data-loading]){opacity:.45;cursor:not-allowed}.mu-button[data-loading]{cursor:progress}.mu-button[data-loading]>:not(.mu-spinner){opacity:0}.mu-button>.mu-spinner{position:absolute;inset:0;margin:auto}@media(prefers-reduced-motion:reduce){.mu-button:active:not([data-disabled]){translate:none}}}@layer mu{.mu-kbd{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:calc(var(--mu-control-sm) - 2 * var(--mu-inset));height:calc(var(--mu-control-sm) - 2 * var(--mu-inset));padding:0 var(--mu-space-1);border-radius:var(--mu-radius-sm);color:var(--mu-ink-muted);background-color:var(--mu-key);background-image:linear-gradient(180deg,var(--mu-key-sheen),transparent 60%);box-shadow:var(--mu-shadow-raised);white-space:nowrap}}@layer mu{.mu-separator{flex:none;align-self:stretch;margin:0;border:0;background-color:var(--mu-line)}.mu-separator[data-orientation=horizontal]{height:1px}.mu-separator[data-orientation=vertical]{width:1px}}@layer mu{.mu-badge{--icon: calc(var(--mu-icon-sm) - var(--mu-inset));display:inline-flex;align-items:center;gap:var(--mu-space-1);box-sizing:border-box;height:calc(var(--mu-control-sm) - 2 * var(--mu-inset));padding:0 calc(var(--mu-space-1) + var(--mu-inset));border-radius:var(--mu-radius-sm);white-space:nowrap;vertical-align:middle}.mu-badge-neutral{color:var(--mu-ink);background-color:var(--mu-well)}.mu-badge-outline{color:var(--mu-ink-muted);box-shadow:inset 0 0 0 1px var(--mu-edge)}.mu-badge-success{color:var(--mu-success);background-color:var(--mu-success-soft)}.mu-badge-warning{color:var(--mu-warning);background-color:var(--mu-warning-soft)}.mu-badge-danger{color:var(--mu-danger);background-color:var(--mu-danger-soft)}}@layer mu{.mu-avatar-root{display:inline-flex;flex:none;align-items:center;justify-content:center;overflow:hidden;box-sizing:border-box;width:var(--h);height:var(--h);border-radius:var(--mu-radius-full);color:var(--mu-ink-muted);background-color:var(--mu-well);vertical-align:middle;user-select:none}.mu-avatar-image{width:100%;height:100%;object-fit:cover}.mu-avatar-fallback{display:flex;align-items:center;justify-content:center;width:100%;height:100%}}@layer mu{.mu-link{color:var(--mu-accent);text-decoration:none;text-underline-offset:.2em;border-radius:var(--mu-radius-xs);cursor:pointer}.mu-link:hover,.mu-link:focus-visible,.mu-link-underline{text-decoration:underline}[data-theme=contrast] .mu-link{text-decoration:underline}.mu-link-muted{color:var(--mu-ink-muted)}.mu-link-muted:hover{color:var(--mu-ink)}.mu-link>.mu-icon{display:inline-block;width:.85em;height:.85em;margin-inline-start:.1em;vertical-align:-.05em}}@layer mu{.mu-skeleton{box-sizing:border-box;width:100%;height:var(--lh);border-radius:var(--mu-radius-sm);background-color:var(--mu-well);background-image:linear-gradient(90deg,transparent 0%,var(--mu-hover) 50%,transparent 100%);background-size:200% 100%;background-repeat:no-repeat;animation:mu-shimmer var(--mu-duration-shimmer) ease-in-out infinite}.mu-skeleton-round{width:var(--h);height:var(--h);border-radius:var(--mu-radius-full)}@keyframes mu-shimmer{0%{background-position:150% 0}to{background-position:-50% 0}}@media(prefers-reduced-motion:reduce){.mu-skeleton{animation:none;background-image:none}}}@layer mu{.mu-field-root{display:flex;flex-direction:column;gap:var(--mu-space-1);min-width:0}.mu-field-label{color:var(--mu-ink)}.mu-field-item{display:flex}.mu-field-label:has(>.mu-checkbox,>.mu-switch,>.mu-radio){display:inline-flex;align-items:center;gap:var(--mu-space-2);font-weight:400;cursor:pointer}.mu-field-label[data-disabled]{opacity:.45;cursor:not-allowed}.mu-field-description{margin:0;color:var(--mu-ink-muted)}.mu-field-root[data-invalid]>.mu-field-description{display:none}.mu-field-error{display:flex;align-items:flex-start;gap:var(--mu-space-1);color:var(--mu-danger)}.mu-field-error>.mu-icon{--icon: var(--mu-icon-sm);margin-block:calc((1lh - var(--mu-icon-sm)) / 2)}.mu-fieldset-root{display:flex;flex-direction:column;gap:var(--mu-space-3);min-width:0;margin:0;padding:0;border:0}.mu-fieldset-legend{margin-bottom:var(--mu-space-1);padding:0;color:var(--mu-ink)}}@layer mu{.mu-input-root{display:flex;align-items:center;gap:var(--gap);box-sizing:border-box;width:100%;min-width:0;height:var(--h);padding:0 var(--px);border-radius:var(--r);color:var(--mu-ink);background-color:var(--mu-surface);box-shadow:inset 0 0 0 1px var(--mu-edge),var(--mu-shadow-track);cursor:text;transition:box-shadow var(--mu-duration-fade) var(--mu-ease-out)}.mu-input-root:has(>.mu-input-prefix){padding-inline-start:var(--pxi)}.mu-input-root:has(>.mu-input-suffix){padding-inline-end:var(--pxi)}@media(hover:hover){.mu-input-root:hover:not(:has(>[data-disabled])){box-shadow:inset 0 0 0 1px var(--mu-ink-muted),var(--mu-shadow-track)}}.mu-input-root:has(>.mu-input:focus){outline:var(--mu-focus-width) solid var(--mu-focus);outline-offset:var(--mu-focus-width)}.mu-input-root:has(>[data-invalid]){box-shadow:inset 0 0 0 1px var(--mu-danger),var(--mu-shadow-track)}.mu-input-root:has(>[data-disabled]){opacity:.45;cursor:not-allowed}.mu-input{flex:1;min-width:0;height:100%;margin:0;padding:0;border:0;outline:none;color:inherit;background:none;font:inherit;font-weight:400}.mu-input::placeholder{color:var(--mu-ink-muted);opacity:1}.mu-input[data-disabled]{cursor:not-allowed}.mu-input-prefix,.mu-input-suffix{display:flex;flex:none;align-items:center;gap:var(--mu-space-1);color:var(--mu-ink-muted)}}@layer mu{.mu-textarea{display:block;box-sizing:border-box;width:100%;min-height:var(--h);margin:0;padding:calc((var(--h) - var(--lh)) / 2) var(--px);border:0;border-radius:var(--r);color:var(--mu-ink);background-color:var(--mu-surface);box-shadow:inset 0 0 0 1px var(--mu-edge),var(--mu-shadow-track);font-weight:400;resize:vertical;transition:box-shadow var(--mu-duration-fade) var(--mu-ease-out)}.mu-textarea::placeholder{color:var(--mu-ink-muted);opacity:1}@media(hover:hover){.mu-textarea:hover:not([data-disabled]){box-shadow:inset 0 0 0 1px var(--mu-ink-muted),var(--mu-shadow-track)}}.mu-textarea:focus{outline:var(--mu-focus-width) solid var(--mu-focus);outline-offset:var(--mu-focus-width)}.mu-textarea[data-invalid]{box-shadow:inset 0 0 0 1px var(--mu-danger),var(--mu-shadow-track)}.mu-textarea[data-disabled]{opacity:.45;cursor:not-allowed}}@layer mu{.mu-checkbox{display:inline-flex;flex:none;align-items:center;justify-content:center;box-sizing:border-box;width:var(--box);height:var(--box);border-radius:var(--mu-radius-sm);color:var(--mu-on-primary);background-color:var(--mu-well);box-shadow:inset 0 0 0 1px var(--mu-edge),var(--mu-shadow-track);cursor:pointer;transition-property:background-color,box-shadow,scale;transition-duration:var(--mu-duration-press);transition-timing-function:var(--mu-ease-out)}.mu-checkbox[data-checked],.mu-checkbox[data-indeterminate]{background-color:var(--mu-primary);box-shadow:none}.mu-checkbox[data-invalid]{box-shadow:inset 0 0 0 1px var(--mu-danger),var(--mu-shadow-track)}.mu-checkbox:active:not([data-disabled],[data-readonly]){scale:.94}.mu-checkbox[data-disabled]{opacity:.45;cursor:not-allowed}.mu-checkbox-indicator{display:flex;transition:opacity var(--mu-duration-fade) var(--mu-ease-out) var(--mu-duration-press),scale var(--mu-duration-fade) var(--mu-ease-out) var(--mu-duration-press)}.mu-checkbox-indicator[data-starting-style],.mu-checkbox-indicator[data-ending-style]{opacity:0;scale:.6}.mu-checkbox-indicator>svg{width:calc(var(--box) - 2 * var(--mu-inset));height:calc(var(--box) - 2 * var(--mu-inset));stroke-width:2}.mu-checkbox-indicator>svg *{vector-effect:non-scaling-stroke}@media(prefers-reduced-motion:reduce){.mu-checkbox:active:not([data-disabled],[data-readonly]){scale:none}.mu-checkbox-indicator[data-starting-style],.mu-checkbox-indicator[data-ending-style]{scale:none}}}@layer mu{.mu-switch{--switch-h: calc(var(--box) + var(--mu-inset));--switch-w: calc(var(--switch-h) * 1.7);--knob: calc(var(--switch-h) - 2 * var(--mu-inset));position:relative;display:inline-flex;flex:none;align-items:center;box-sizing:border-box;width:var(--switch-w);height:var(--switch-h);padding:var(--mu-inset);border-radius:var(--mu-radius-full);background-color:var(--mu-well);box-shadow:inset 0 0 0 1px var(--mu-edge),var(--mu-shadow-track);cursor:pointer;transition:background-color var(--mu-duration-settle) var(--mu-ease-settle),box-shadow var(--mu-duration-settle) var(--mu-ease-settle)}.mu-switch[data-checked]{background-color:var(--mu-primary);box-shadow:inset 0 0 0 1px var(--mu-primary)}.mu-switch[data-invalid]{box-shadow:inset 0 0 0 1px var(--mu-danger),var(--mu-shadow-track)}.mu-switch[data-disabled]{opacity:.45;cursor:not-allowed}.mu-switch-thumb{display:block;width:var(--knob);height:var(--knob);border-radius:var(--mu-radius-full);background-color:var(--mu-key);background-image:linear-gradient(180deg,var(--mu-key-sheen),transparent 60%);box-shadow:var(--mu-shadow-key);transition:translate var(--mu-duration-settle) var(--mu-ease-settle),scale var(--mu-duration-press) var(--mu-ease-out),background-color var(--mu-duration-settle) var(--mu-ease-settle)}.mu-switch-thumb[data-checked]{translate:calc(var(--switch-w) - var(--switch-h)) 0;background-color:var(--mu-on-primary)}.mu-switch:active:not([data-disabled],[data-readonly])>.mu-switch-thumb{scale:1.1}@media(prefers-reduced-motion:reduce){.mu-switch-thumb{transition-property:background-color}.mu-switch:active:not([data-disabled],[data-readonly])>.mu-switch-thumb{scale:none}}}@layer mu{.mu-radio-group{display:flex;flex-direction:column;align-items:flex-start;gap:var(--mu-space-3)}.mu-radio-group[data-orientation=horizontal]{flex-direction:row;flex-wrap:wrap;gap:var(--mu-space-3) var(--mu-space-4)}.mu-radio-group[data-orientation=horizontal]>.mu-fieldset-legend{flex-basis:100%}.mu-radio{display:inline-flex;flex:none;align-items:center;justify-content:center;box-sizing:border-box;width:var(--box);height:var(--box);border-radius:var(--mu-radius-full);background-color:var(--mu-well);box-shadow:inset 0 0 0 1px var(--mu-edge),var(--mu-shadow-track);cursor:pointer;transition-property:background-color,box-shadow,scale;transition-duration:var(--mu-duration-press);transition-timing-function:var(--mu-ease-out)}.mu-radio[data-checked]{background-color:var(--mu-primary);box-shadow:none}.mu-radio[data-invalid]{box-shadow:inset 0 0 0 1px var(--mu-danger),var(--mu-shadow-track)}.mu-radio:active:not([data-disabled],[data-readonly]){scale:.94}.mu-radio[data-disabled]{opacity:.45;cursor:not-allowed}.mu-radio-indicator{width:calc(var(--box) / 2.5);height:calc(var(--box) / 2.5);border-radius:var(--mu-radius-full);background-color:var(--mu-on-primary);transition:opacity var(--mu-duration-fade) var(--mu-ease-out) var(--mu-duration-press),scale var(--mu-duration-fade) var(--mu-ease-out) var(--mu-duration-press)}.mu-radio-indicator[data-starting-style],.mu-radio-indicator[data-ending-style]{opacity:0;scale:.4}@media(prefers-reduced-motion:reduce){.mu-radio:active:not([data-disabled],[data-readonly]){scale:none}.mu-radio-indicator[data-starting-style],.mu-radio-indicator[data-ending-style]{scale:none}}}@layer mu{.mu-toggle{position:relative;display:inline-flex;flex:none;align-items:center;justify-content:center;gap:var(--gap);box-sizing:border-box;height:var(--h);margin:0;padding:0 var(--px);border:0;border-radius:var(--r);color:var(--mu-ink-muted);background-color:transparent;white-space:nowrap;cursor:pointer;user-select:none;transition-property:background-color,box-shadow,color;transition-duration:var(--mu-duration-press);transition-timing-function:var(--mu-ease-out)}.mu-toggle:has(>svg:first-child){padding-inline-start:var(--pxi)}.mu-toggle.mu-toggle-icon{width:var(--h);padding:0}@media(hover:hover){.mu-toggle:hover:not([data-disabled]){color:var(--mu-ink);background-color:var(--mu-hover)}}.mu-toggle[data-pressed],.mu-toggle:active:not([data-disabled]){color:var(--mu-ink);background-color:var(--mu-well);box-shadow:inset 0 0 0 1px var(--mu-edge),var(--mu-shadow-track)}.mu-toggle[data-disabled]{opacity:.45;cursor:not-allowed}}@layer mu{.mu-segmented{position:relative;display:inline-flex;align-items:stretch;gap:0;box-sizing:border-box;height:var(--h);padding:var(--mu-inset);border-radius:var(--r);background-color:var(--mu-well);box-shadow:inset 0 0 0 1px var(--mu-edge),var(--mu-shadow-track)}.mu-segmented-key{position:absolute;top:var(--mu-inset);left:0;width:var(--key-width);height:calc(var(--h) - 2 * var(--mu-inset));translate:var(--key-left) 0;border-radius:calc(var(--r) - var(--mu-inset));background-color:var(--mu-key);background-image:linear-gradient(180deg,var(--mu-key-sheen),transparent 60%);box-shadow:var(--mu-shadow-key);transition:translate var(--mu-duration-settle) var(--mu-ease-settle),width var(--mu-duration-settle) var(--mu-ease-settle)}.mu-toggle-group.mu-segmented:not([data-keyed])>.mu-segmented-key{display:none}.mu-tabs-indicator{--key-left: var(--active-tab-left);--key-width: var(--active-tab-width)}.mu-segmented-item,.mu-segmented>.mu-toggle{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--gap);box-sizing:border-box;height:100%;margin:0;padding:0 calc(var(--px) - var(--mu-inset));border:0;border-radius:calc(var(--r) - var(--mu-inset));color:var(--mu-ink-muted);background:none;box-shadow:none;font:inherit;white-space:nowrap;cursor:pointer;user-select:none;transition:color var(--mu-duration-fade) var(--mu-ease-out)}.mu-segmented>.mu-toggle.mu-toggle-icon{width:calc(var(--h) - 2 * var(--mu-inset));padding:0}@media(hover:hover){.mu-segmented-item:hover:not([data-disabled]),.mu-segmented>.mu-toggle:hover:not([data-disabled]){color:var(--mu-ink);background:none}}.mu-segmented-item[data-active],.mu-segmented>.mu-toggle[data-pressed],.mu-segmented>.mu-toggle:active:not([data-disabled]){color:var(--mu-ink);background:none;box-shadow:none}.mu-segmented-item[data-disabled]{opacity:.45;cursor:not-allowed}.mu-tabs-root{display:flex;flex-direction:column;gap:var(--mu-space-4)}.mu-tabs-list{align-self:flex-start}.mu-tabs-panel{border-radius:var(--mu-radius-sm)}@media(prefers-reduced-motion:reduce){.mu-segmented-key{transition:none}}}@layer mu{.mu-toggle-group{display:inline-flex;align-items:center;gap:var(--mu-inset)}.mu-toggle-group>.mu-separator{align-self:center;height:calc(var(--h) - 2 * var(--mu-space-2));margin-inline:var(--mu-space-1)}}@layer mu{.mu-tooltip-popup{display:flex;align-items:center;gap:var(--mu-space-2);box-sizing:border-box;max-width:var(--mu-tooltip-width);padding:var(--mu-space-1) var(--mu-space-2);border-radius:var(--mu-radius-md);color:var(--mu-on-primary);background-color:var(--mu-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mu-tooltip-shortcut{opacity:.65}}@layer mu{.mu-popover-popup{display:flex;flex-direction:column;gap:var(--mu-space-3);box-sizing:border-box;width:var(--mu-popover-width);max-width:var(--available-width);padding:var(--mu-space-4);outline:0}.mu-popover-title{margin:0;color:var(--mu-ink)}.mu-popover-description{margin:calc(-1 * var(--mu-space-2)) 0 0;color:var(--mu-ink-muted)}}@layer mu{.mu-menu-popup{box-sizing:border-box;min-width:var(--mu-menu-width);max-height:var(--available-height);overflow-y:auto;padding:var(--mu-space-1);outline:0}.mu-menu-item{display:flex;align-items:center;gap:var(--mu-space-2);box-sizing:border-box;height:var(--h);padding:0 var(--px);border-radius:calc(var(--mu-radius-xl) - var(--mu-space-1));color:var(--mu-ink);font-weight:400;white-space:nowrap;cursor:default;user-select:none;outline:0}.mu-menu-item:has(>svg:first-child){padding-inline-start:var(--pxi)}.mu-menu-item>svg{color:var(--mu-ink-muted)}.mu-menu-item[data-highlighted],.mu-menu-submenu-trigger[data-popup-open]{background-color:var(--mu-hover)}.mu-menu-item[data-disabled]{opacity:.45}.mu-menu-item-danger,.mu-menu-item-danger>svg{color:var(--mu-danger)}.mu-menu-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.mu-menu-shortcut{margin-inline-start:var(--mu-space-4);color:var(--mu-ink-muted)}.mu-menu-indicator{display:grid;flex:none;place-items:center;width:var(--icon);height:var(--icon);margin-inline-start:var(--mu-space-2)}.mu-menu-indicator>svg{color:var(--mu-ink)}.mu-menu-chevron{margin-inline-end:calc(var(--pxi) - var(--px));color:var(--mu-ink-muted)}.mu-menu-group-label{padding:var(--mu-space-2) var(--px) var(--mu-space-1);color:var(--mu-ink-muted)}.mu-menu-separator{height:1px;margin:var(--mu-space-1) calc(-1 * var(--mu-space-1));background-color:var(--mu-line)}}@layer mu{.mu-select-trigger{justify-content:space-between;min-width:0;padding-inline-end:var(--pxi);text-align:start}.mu-select-value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mu-select-value[data-placeholder]{color:var(--mu-ink-muted);font-weight:400}.mu-select-icon{display:flex;flex:none;color:var(--mu-ink-muted)}.mu-select-trigger[data-invalid]{box-shadow:inset 0 0 0 1px var(--mu-danger),var(--mu-shadow-key)}.mu-select-positioner{outline:0}.mu-select-popup{box-sizing:border-box;min-width:max(var(--mu-menu-width),var(--anchor-width));max-height:var(--available-height);padding:var(--mu-space-1);outline:0}.mu-select-list{overflow-y:auto;max-height:var(--available-height);scroll-padding-block:var(--mu-space-1);outline:0}.mu-select-item{display:flex;align-items:center;gap:var(--mu-space-2);box-sizing:border-box;height:var(--h);padding:0 var(--px);border-radius:calc(var(--mu-radius-xl) - var(--mu-space-1));color:var(--mu-ink);font-weight:400;white-space:nowrap;cursor:default;user-select:none;outline:0}.mu-select-item:has(>svg:first-child){padding-inline-start:var(--pxi)}.mu-select-item>svg{color:var(--mu-ink-muted)}.mu-select-item[data-highlighted]{background-color:var(--mu-hover)}.mu-select-item[data-disabled]{opacity:.45}.mu-select-item-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.mu-select-indicator{display:grid;flex:none;place-items:center;width:var(--icon);height:var(--icon);margin-inline-start:var(--mu-space-2);color:var(--mu-ink)}.mu-select-group-label{padding:var(--mu-space-2) var(--px) var(--mu-space-1);color:var(--mu-ink-muted)}.mu-select-separator{height:1px;margin:var(--mu-space-1) calc(-1 * var(--mu-space-1));background-color:var(--mu-line)}.mu-select-scroll-arrow{display:grid;place-items:center;height:var(--mu-space-4);color:var(--mu-ink-muted)}}@layer mu{.mu-dialog-backdrop{position:fixed;inset:0;z-index:var(--mu-layer-overlay);background-color:var(--mu-overlay);transition:opacity var(--mu-duration-settle) var(--mu-ease-out)}.mu-dialog-backdrop[data-starting-style],.mu-dialog-backdrop[data-ending-style]{opacity:0}.mu-dialog-viewport{position:fixed;inset:0;z-index:var(--mu-layer-overlay);display:grid;place-items:safe center;box-sizing:border-box;padding:var(--mu-space-6) var(--mu-space-4);overflow-y:auto}.mu-dialog-popup{position:relative;display:flex;flex-direction:column;gap:var(--mu-space-4);box-sizing:border-box;width:var(--mu-dialog-width);max-width:100%;padding:var(--mu-space-5);border-radius:var(--mu-radius-2xl);outline:0;transition:opacity var(--mu-duration-settle) var(--mu-ease-out),translate var(--mu-duration-settle) var(--mu-ease-out)}.mu-dialog-popup[data-starting-style],.mu-dialog-popup[data-ending-style]{opacity:0;translate:0 var(--mu-space-1)}.mu-dialog-popup:has(>.mu-dialog-x)>.mu-dialog-title{padding-inline-end:var(--mu-space-6)}.mu-dialog-title{margin:0;color:var(--mu-ink)}.mu-dialog-description{margin:calc(-1 * var(--mu-space-2)) 0 0;color:var(--mu-ink-muted)}.mu-dialog-x{position:absolute;top:var(--mu-space-4);right:var(--mu-space-4)}.mu-dialog-footer{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--mu-space-2);margin-top:var(--mu-space-2)}@media(max-width:639.98px){.mu-dialog-sheet{place-items:end stretch;padding:var(--mu-space-6) 0 0}.mu-dialog-sheet>.mu-dialog-popup{width:100%;padding-bottom:max(var(--mu-space-5),env(safe-area-inset-bottom));border-end-start-radius:0;border-end-end-radius:0}.mu-dialog-sheet>.mu-dialog-popup[data-starting-style],.mu-dialog-sheet>.mu-dialog-popup[data-ending-style]{translate:0 var(--mu-space-6)}.mu-dialog-sheet .mu-dialog-footer{flex-direction:column-reverse}.mu-dialog-sheet .mu-dialog-footer>*{width:100%}}@media(prefers-reduced-motion:reduce){.mu-dialog-popup[data-starting-style],.mu-dialog-popup[data-ending-style],.mu-dialog-sheet>.mu-dialog-popup[data-starting-style],.mu-dialog-sheet>.mu-dialog-popup[data-ending-style]{translate:none}}}@layer mu{.mu-toast-viewport{position:fixed;right:var(--mu-space-6);bottom:var(--mu-space-6);z-index:var(--mu-layer-toast);width:var(--mu-toast-width);outline:0}@media(max-width:639.98px){.mu-toast-viewport{right:var(--mu-space-4);bottom:var(--mu-space-4);left:var(--mu-space-4);width:auto}}.mu-toast{--gap: var(--mu-space-3);--peek: var(--mu-space-2);--scale: max(0, 1 - var(--toast-index) * .05);--shrink: calc(1 - var(--scale));--height: var(--toast-frontmost-height, var(--toast-height));--offset-y: calc(var(--toast-offset-y) * -1 - var(--toast-index) * var(--gap) + var(--toast-swipe-movement-y));position:absolute;right:0;bottom:0;z-index:calc(var(--mu-layer-toast) - var(--toast-index));box-sizing:border-box;width:100%;height:var(--height);transform-origin:bottom center;translate:var(--toast-swipe-movement-x) calc(var(--toast-swipe-movement-y) - var(--toast-index) * var(--peek) - var(--shrink) * var(--height));scale:var(--scale);user-select:none;outline:0;transition:translate var(--mu-duration-settle) var(--mu-ease-settle),scale var(--mu-duration-settle) var(--mu-ease-settle),opacity var(--mu-duration-settle) var(--mu-ease-out),height var(--mu-duration-fade) var(--mu-ease-out)}.mu-toast[data-expanded]{height:var(--toast-height);translate:var(--toast-swipe-movement-x) var(--offset-y);scale:1}.mu-toast[data-starting-style],.mu-toast[data-ending-style]{translate:0 150%}.mu-toast[data-ending-style]{opacity:0}.mu-toast[data-ending-style][data-swipe-direction=up]{translate:0 calc(var(--toast-swipe-movement-y) - 150%)}.mu-toast[data-ending-style][data-swipe-direction=down]{translate:0 calc(var(--toast-swipe-movement-y) + 150%)}.mu-toast[data-ending-style][data-swipe-direction=left]{translate:calc(var(--toast-swipe-movement-x) - 150%) var(--offset-y)}.mu-toast[data-ending-style][data-swipe-direction=right]{translate:calc(var(--toast-swipe-movement-x) + 150%) var(--offset-y)}.mu-toast[data-limited]{opacity:0}.mu-toast:focus-visible{outline:var(--mu-focus-width) solid var(--mu-focus);outline-offset:var(--mu-focus-width)}.mu-toast:after{content:"";position:absolute;top:100%;left:0;width:100%;height:calc(var(--gap) + 1px)}.mu-toast-content{display:flex;align-items:flex-start;gap:var(--mu-space-3);box-sizing:border-box;height:100%;padding:var(--mu-space-3) var(--mu-space-3) var(--mu-space-3) var(--mu-space-4);overflow:hidden;transition:opacity var(--mu-duration-settle) var(--mu-ease-out)}.mu-toast-content[data-behind]{opacity:0}.mu-toast-content[data-expanded]{opacity:1}.mu-toast-icon{margin-block:calc((var(--h) - var(--icon)) / 2);color:var(--mu-ink-muted)}.mu-toast-success .mu-toast-icon{color:var(--mu-success)}.mu-toast-warning .mu-toast-icon{color:var(--mu-warning)}.mu-toast-danger .mu-toast-icon{color:var(--mu-danger)}.mu-toast-text{display:flex;flex:1;flex-direction:column;min-width:0;padding-block:calc((var(--h) - var(--lh)) / 2)}.mu-toast-title{margin:0;color:var(--mu-ink)}.mu-toast-description{margin:0;color:var(--mu-ink-muted)}.mu-toast-action,.mu-toast-close{margin-block:calc((var(--mu-control-md) - var(--mu-control-sm)) / 2)}@media(prefers-reduced-motion:reduce){.mu-toast{transition-property:opacity,height}.mu-toast[data-starting-style],.mu-toast[data-ending-style]{translate:var(--toast-swipe-movement-x) var(--offset-y)}}}@layer mu{.mu-input-root.mu-combobox-input-root{padding-inline-end:calc(var(--pxi) - var(--mu-space-1))}.mu-combobox-trigger{display:grid;place-items:center;width:calc(var(--icon) + var(--mu-space-2));height:calc(var(--icon) + var(--mu-space-2));margin:0;padding:0;border:0;border-radius:var(--mu-radius-sm);color:var(--mu-ink-muted);background:none;cursor:pointer}.mu-combobox-trigger:hover:not([data-disabled]){color:var(--mu-ink)}.mu-combobox-trigger[data-disabled]{cursor:not-allowed}.mu-combobox-popup{box-sizing:border-box;width:var(--anchor-width);min-width:var(--mu-menu-width);max-width:var(--available-width);outline:0}.mu-combobox-list{box-sizing:border-box;max-height:min(var(--mu-list-height),var(--available-height));overflow-y:auto;overscroll-behavior:contain;padding:var(--mu-space-1);scroll-padding-block:var(--mu-space-1);outline:0}.mu-combobox-list[data-empty]{padding:0}.mu-combobox-item{display:flex;align-items:center;gap:var(--mu-space-2);box-sizing:border-box;height:var(--h);padding:0 var(--px);border-radius:calc(var(--mu-radius-xl) - var(--mu-space-1));color:var(--mu-ink);font-weight:400;white-space:nowrap;cursor:default;user-select:none;outline:0}.mu-combobox-item:has(>svg:first-child){padding-inline-start:var(--pxi)}.mu-combobox-item>svg{color:var(--mu-ink-muted)}.mu-combobox-item[data-highlighted]{background-color:var(--mu-hover)}.mu-combobox-item[data-disabled]{opacity:.45}.mu-combobox-item-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.mu-combobox-indicator{display:grid;flex:none;place-items:center;width:var(--icon);height:var(--icon);margin-inline-start:var(--mu-space-2);color:var(--mu-ink)}.mu-combobox-empty:not(:empty){padding:var(--mu-space-3) var(--mu-space-4);color:var(--mu-ink-muted)}.mu-combobox-group-label{padding:var(--mu-space-2) var(--px) var(--mu-space-1);color:var(--mu-ink-muted)}.mu-combobox-separator{height:1px;margin:var(--mu-space-1) calc(-1 * var(--mu-space-1));background-color:var(--mu-line)}}@layer mu{.mu-button.mu-collapsible-trigger{margin-inline-start:calc(-1 * var(--px));padding-inline-end:var(--pxi)}.mu-collapsible-chevron{color:var(--mu-ink-muted);transition:rotate var(--mu-duration-settle) var(--mu-ease-settle)}.mu-collapsible-trigger[data-panel-open]>.mu-collapsible-chevron{rotate:180deg}.mu-collapsible-panel{transition:opacity var(--mu-duration-fade) var(--mu-ease-out),translate var(--mu-duration-fade) var(--mu-ease-out)}.mu-collapsible-panel[data-starting-style],.mu-collapsible-panel[data-ending-style]{opacity:0;translate:0 var(--mu-space-1)}@media(prefers-reduced-motion:reduce){.mu-collapsible-chevron{transition:none}.mu-collapsible-panel[data-starting-style],.mu-collapsible-panel[data-ending-style]{translate:none}}}@layer mu{.mu-table-scroll{overflow-x:auto;max-width:100%}.mu-table{width:100%;border-collapse:collapse;color:var(--mu-ink);font-variant-numeric:tabular-nums;text-align:start}.mu-table-head,.mu-table-cell{padding:0 var(--px);text-align:start;vertical-align:middle}.mu-table-head{height:var(--h);color:var(--mu-ink-muted);white-space:nowrap;border-bottom:1px solid var(--mu-line)}.mu-table-cell{padding-block:calc((var(--h) - var(--lh)) / 2 + var(--mu-space-1))}.mu-table-body>.mu-table-row+.mu-table-row>.mu-table-cell{border-top:1px solid var(--mu-line)}.mu-table-body>.mu-table-row:hover>.mu-table-cell{background-color:var(--mu-hover)}.mu-table-cell>.mu-button{margin-block:calc((var(--lh) - var(--h)) / 2);vertical-align:top}.mu-table-num{text-align:end}.mu-table-muted{color:var(--mu-ink-muted)}.mu-table-caption{caption-side:bottom;padding:var(--mu-space-2) var(--px) 0;color:var(--mu-ink-muted);text-align:start}}@layer mu{.mu-prose{color:var(--mu-ink);font-family:var(--mu-font-sans);font-size:var(--prose-fs);line-height:var(--prose-lh);font-weight:400;overflow-wrap:break-word;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mu-prose ::selection{background:var(--mu-selection)}.mu-prose :where(p,ul,ol,pre,blockquote,table,figure,img,video,hr){margin:0 0 var(--mu-space-3)}.mu-prose :where(h1,h2,h3,h4,h5,h6){margin:var(--mu-space-5) 0 var(--mu-space-2);font-family:var(--mu-font-display);font-weight:600;letter-spacing:0}.mu-prose>:first-child{margin-top:0}.mu-prose>:last-child{margin-bottom:0}.mu-prose h1{font-size:var(--prose-h1);line-height:var(--prose-h1-lh)}.mu-prose h2{font-size:var(--prose-h2);line-height:var(--prose-h2-lh)}.mu-prose :where(h3,h4,h5,h6){font-size:var(--prose-fs);line-height:var(--prose-lh)}.mu-prose :where(strong,b){font-weight:600}.mu-prose del{color:var(--mu-ink-muted)}.mu-prose a{color:var(--mu-accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.2em;border-radius:var(--mu-radius-xs)}.mu-prose a:focus-visible{outline:var(--mu-focus-width) solid var(--mu-focus);outline-offset:var(--mu-focus-width)}.mu-prose :where(ul,ol){padding-inline-start:var(--mu-space-6)}.mu-prose li+li{margin-top:var(--mu-space-1)}.mu-prose li>:where(ul,ol){margin:var(--mu-space-1) 0 0}.mu-prose li>p{margin:0}.mu-prose li::marker{color:var(--mu-ink-muted)}.mu-prose li:has(>input[type=checkbox]:first-child){position:relative;list-style:none}.mu-prose li>input[type=checkbox]:first-child{appearance:none;position:absolute;inset-inline-start:calc(-1 * (var(--mu-space-4) + var(--mu-space-2)));top:calc((var(--prose-lh) - var(--mu-space-4)) / 2);box-sizing:border-box;width:var(--mu-space-4);height:var(--mu-space-4);margin:0;border-radius:var(--mu-radius-sm);background-color:var(--mu-well);box-shadow:inset 0 0 0 1px var(--mu-edge),var(--mu-shadow-track);cursor:pointer}.mu-prose li>input[type=checkbox]:first-child:disabled{cursor:default}.mu-prose li>input[type=checkbox]:first-child:focus-visible{outline:var(--mu-focus-width) solid var(--mu-focus);outline-offset:var(--mu-focus-width)}.mu-prose li>input[type=checkbox]:first-child:checked{background-color:var(--mu-primary);box-shadow:none}.mu-prose li>input[type=checkbox]:first-child:checked:after{content:"";position:absolute;inset:var(--mu-inset);background-color:var(--mu-on-primary);mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E") center / contain no-repeat}.mu-prose li:has(>input[type=checkbox]:first-child:checked){color:var(--mu-ink-muted);text-decoration:line-through}.mu-prose :where(code,kbd,samp,pre){font-family:var(--mu-font-mono);font-size:.875em}.mu-prose :not(pre)>code{padding:.1em .3em;border-radius:var(--mu-radius-xs);background-color:var(--mu-well)}.mu-prose pre{overflow-x:auto;padding:var(--mu-space-3) var(--mu-space-4);border-radius:var(--mu-radius-md);background-color:var(--mu-well);line-height:1.6}.mu-prose pre>code{font-size:inherit}.mu-prose blockquote{margin-inline:0;padding-inline-start:var(--mu-space-4);border-inline-start:var(--mu-inset) solid var(--mu-edge);color:var(--mu-ink-muted)}.mu-prose hr{height:1px;margin-block:var(--mu-space-5);border:0;background-color:var(--mu-line)}.mu-prose :where(img,video){display:block;max-width:100%;height:auto;border-radius:var(--mu-radius-lg)}.mu-prose table{display:block;width:max-content;max-width:100%;overflow-x:auto;border-collapse:collapse;font-variant-numeric:tabular-nums}.mu-prose :where(th,td){padding:var(--mu-space-2) var(--mu-space-3);text-align:start;vertical-align:top}.mu-prose th{color:var(--mu-ink-muted);font-size:var(--prose-head);line-height:var(--prose-head-lh);font-weight:500;white-space:nowrap;border-bottom:1px solid var(--mu-line)}.mu-prose tr+tr>td{border-top:1px solid var(--mu-line)}.mu-prose-tag{padding:0 .25em;border-radius:var(--mu-radius-xs);color:var(--mu-ink-muted);background-color:var(--mu-well)}}
@@ -0,0 +1 @@
1
+ @layer mu{:where(:root,:host,.mu-root:not([data-theme] *)),[data-theme=light]{color-scheme:light;--mu-canvas: #f9f9f9;--mu-surface: #ffffff;--mu-well: #e4e4e4;--mu-hover: #ededed;--mu-key: #ffffff;--mu-key-hover: #fbfbfb;--mu-key-sheen: rgba(255,255,255,.18);--mu-edge: #d0d0d0;--mu-line: #e0e0e0;--mu-overlay: rgba(0,0,0,.32);--mu-ink: #1a1a1a;--mu-ink-muted: #5e5e5e;--mu-primary: #1f1f1f;--mu-primary-hover: #333333;--mu-on-primary: #ffffff;--mu-accent: oklch(.5 .13 255);--mu-selection: rgba(40,99,171,.18);--mu-success: oklch(.52 .13 150);--mu-success-soft: #e9f4ec;--mu-warning: oklch(.5 .11 70);--mu-warning-soft: #fbf1df;--mu-danger: oklch(.53 .19 27);--mu-danger-key: oklch(.53 .19 27);--mu-danger-soft: #fbeaea;--mu-on-danger: #ffffff;--mu-focus: var(--mu-accent);--mu-shadow-track: inset 0 1px 2px rgba(0,0,0,.1);--mu-shadow-key: 0 1px 2px rgba(0,0,0,.16), 0 2px 6px rgba(0,0,0,.08), inset 0 1px 0 rgba(255,255,255,.9), inset 0 -1px 0 rgba(0,0,0,.05);--mu-shadow-raised: inset 0 1px 0 rgba(255,255,255,.25), inset 0 -1px 0 rgba(0,0,0,.1), 0 0 0 .5px rgba(0,0,0,.12), 0 1px 2px rgba(0,0,0,.12);--mu-shadow-pressed: inset 0 1px 3px rgba(0,0,0,.22), 0 0 0 .5px rgba(0,0,0,.12);--mu-shadow-pop: 0 8px 24px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.08), 0 0 0 .5px rgba(0,0,0,.08), inset 0 1px 0 rgba(255,255,255,.8)}[data-theme=dark]{--mu-canvas: #0f0f0f;--mu-surface: #1a1a1a;--mu-well: #262626;--mu-hover: #242424;--mu-key: #343434;--mu-key-hover: #3c3c3c;--mu-key-sheen: rgba(255,255,255,.08);--mu-edge: #353535;--mu-line: #262626;--mu-overlay: rgba(0,0,0,.6);--mu-ink: #ededed;--mu-ink-muted: #adadad;--mu-primary: #e6e6e6;--mu-primary-hover: #f5f5f5;--mu-on-primary: #111111;--mu-accent: oklch(.78 .11 255);--mu-selection: rgba(135,186,253,.28);--mu-success: oklch(.78 .14 150);--mu-success-soft: #14261a;--mu-warning: oklch(.8 .13 75);--mu-warning-soft: #2a2112;--mu-danger: oklch(.72 .16 25);--mu-danger-key: oklch(.55 .17 25);--mu-danger-soft: #2c1616;--mu-on-danger: #ffffff;--mu-focus: var(--mu-accent);--mu-shadow-track: inset 0 1px 2px rgba(0,0,0,.55), inset 0 -.5px 0 rgba(255,255,255,.06);--mu-shadow-key: 0 1px 2px rgba(0,0,0,.6), 0 2px 6px rgba(0,0,0,.3), inset 0 1px 0 rgba(255,255,255,.1);--mu-shadow-raised: inset 0 1px 0 rgba(255,255,255,.1), inset 0 -1px 0 rgba(0,0,0,.25), 0 0 0 .5px rgba(0,0,0,.6), 0 1px 2px rgba(0,0,0,.5);--mu-shadow-pressed: inset 0 1px 3px rgba(0,0,0,.6), 0 0 0 .5px rgba(0,0,0,.6);--mu-shadow-pop: 0 8px 24px rgba(0,0,0,.6), 0 0 0 1px rgba(255,255,255,.06), inset 0 1px 0 rgba(255,255,255,.06);color-scheme:dark}[data-theme=contrast]{color-scheme:light;--mu-canvas: #ffffff;--mu-surface: #ffffff;--mu-well: #e6e6e6;--mu-hover: #d9d9d9;--mu-key: #ffffff;--mu-key-hover: #f2f2f2;--mu-key-sheen: #ffffff00;--mu-edge: #6b6b6b;--mu-line: #6b6b6b;--mu-overlay: rgba(0,0,0,.6);--mu-ink: #000000;--mu-ink-muted: #333333;--mu-primary: #000000;--mu-primary-hover: #262626;--mu-on-primary: #ffffff;--mu-accent: oklch(.42 .14 255);--mu-selection: rgba(0,75,151,.25);--mu-success: oklch(.42 .12 150);--mu-success-soft: #e9f4ec;--mu-warning: oklch(.45 .11 70);--mu-warning-soft: #fbf1df;--mu-danger: oklch(.45 .18 27);--mu-danger-key: oklch(.45 .18 27);--mu-danger-soft: #fbeaea;--mu-on-danger: #ffffff;--mu-focus: var(--mu-accent);--mu-shadow-track: 0 0 0 0 rgba(0,0,0,0);--mu-shadow-key: 0 0 0 1px #6b6b6b;--mu-shadow-raised: 0 0 0 1px #000000;--mu-shadow-pressed: inset 0 0 0 2px #000000;--mu-shadow-pop: 0 0 0 1px #000000}:where(:root,:host,.mu-root){--mu-space-0_5: 2px;--mu-space-1: 4px;--mu-space-2: 8px;--mu-space-3: 12px;--mu-space-4: 16px;--mu-space-5: 20px;--mu-space-6: 24px;--mu-space-8: 32px;--mu-space-12: 48px;--mu-space-16: 64px;--mu-radius-xs: 2px;--mu-radius-sm: 4px;--mu-radius-md: 6px;--mu-radius-lg: 8px;--mu-radius-xl: 12px;--mu-radius-2xl: 16px;--mu-radius-full: 9999px;--mu-control-sm: 24px;--mu-control-md: 32px;--mu-control-lg: 40px;--mu-inset: 2px;--mu-hit-area: 44px;--mu-focus-width: 2px;--mu-icon-sm: 14px;--mu-icon-md: 16px;--mu-icon-lg: 20px;--mu-content-width: 720px;--mu-sidebar-width: 240px;--mu-menu-width: 200px;--mu-list-height: 240px;--mu-popover-width: 280px;--mu-tooltip-width: 240px;--mu-toast-width: 360px;--mu-dialog-width: 440px;--mu-breakpoint-sm: 640px;--mu-breakpoint-md: 1024px;--mu-layer-popup: 50;--mu-layer-overlay: 50;--mu-layer-toast: 60;--mu-duration-press: 80ms;--mu-duration-settle: .15s;--mu-duration-fade: .1s;--mu-duration-spin: .8s;--mu-duration-shimmer: 1.4s;--mu-ease-settle: cubic-bezier(.2, .9, .3, 1);--mu-ease-out: cubic-bezier(.2, 0, 0, 1);--mu-font-sans: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mu-font-display: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mu-font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace}}
@@ -0,0 +1,16 @@
1
+ import { Avatar as BaseAvatar } from '@base-ui/react/avatar';
2
+ import type { Size } from '../../types.js';
3
+ export interface RootProps extends BaseAvatar.Root.Props {
4
+ /** 24, 32 or 40px. */
5
+ size?: Size;
6
+ }
7
+ /** The circle. Holds an Image and a Fallback. */
8
+ export declare const Root: import("react").ForwardRefExoticComponent<Omit<RootProps, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
9
+ export interface ImageProps extends BaseAvatar.Image.Props {
10
+ }
11
+ /** The photo. Shown once it has loaded. Give it an `alt` with the person's name. */
12
+ export declare const Image: import("react").ForwardRefExoticComponent<Omit<ImageProps, "ref"> & import("react").RefAttributes<HTMLImageElement>>;
13
+ export interface FallbackProps extends BaseAvatar.Fallback.Props {
14
+ }
15
+ /** Initials, shown while there is no photo or it fails to load. */
16
+ export declare const Fallback: import("react").ForwardRefExoticComponent<Omit<FallbackProps, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
@@ -0,0 +1,10 @@
1
+ import { useRender } from '@base-ui/react/use-render';
2
+ import type { IconElement, Tone } from '../../types.js';
3
+ export interface BadgeProps extends useRender.ComponentProps<'span'> {
4
+ /** A status tone, or `outline` for a quiet label such as visibility. */
5
+ tone?: Tone | 'outline';
6
+ /** A Lucide element before the text, drawn at 12px. */
7
+ icon?: IconElement;
8
+ }
9
+ /** A tag or status label: one or two words. */
10
+ export declare const Badge: import("react").ForwardRefExoticComponent<Omit<BadgeProps, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
@@ -0,0 +1,29 @@
1
+ import { Button as BaseButton } from '@base-ui/react/button';
2
+ import { type ReactNode } from 'react';
3
+ import type { IconElement, Size } from '../../types.js';
4
+ export type ButtonVariant = 'primary' | 'neutral' | 'ghost' | 'danger';
5
+ export interface ButtonProps extends BaseButton.Props {
6
+ /** `primary` for the one action a view exists for, `neutral` for the rest, `ghost` in toolbars, `danger` to confirm a destructive action. */
7
+ variant?: ButtonVariant;
8
+ size?: Size;
9
+ /** A Lucide element, before the label. With no children the button is square and needs `aria-label`. */
10
+ icon?: IconElement;
11
+ /** Keeps the width, shows a Spinner and ignores presses. */
12
+ loading?: boolean;
13
+ /** The accessible name while loading, such as "Saving". */
14
+ loadingLabel?: string;
15
+ children?: ReactNode;
16
+ }
17
+ export interface ButtonClassesOptions {
18
+ variant?: ButtonVariant;
19
+ size?: Size;
20
+ /** A square button with only an icon. */
21
+ iconOnly?: boolean;
22
+ }
23
+ /**
24
+ * The classes that make an element look like a Button. Use them on a link
25
+ * that should look like an action: `<a className={buttonClasses({ variant: 'primary' })} href="/start">`.
26
+ */
27
+ export declare function buttonClasses({ variant, size, iconOnly }?: ButtonClassesOptions): string;
28
+ /** Starts an action. A raised key that sinks while pressed. */
29
+ export declare const Button: import("react").ForwardRefExoticComponent<Omit<ButtonProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
@@ -0,0 +1,11 @@
1
+ import { Checkbox as BaseCheckbox } from '@base-ui/react/checkbox';
2
+ import type { Size } from '../../types.js';
3
+ export interface CheckboxProps extends BaseCheckbox.Root.Props {
4
+ /** Box: 16, 18 or 20px. */
5
+ size?: Size;
6
+ }
7
+ /**
8
+ * Includes or excludes one item, saved with a form. Name it with a
9
+ * `Field.Label` around it, or `aria-label`.
10
+ */
11
+ export declare const Checkbox: import("react").ForwardRefExoticComponent<Omit<CheckboxProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
@@ -0,0 +1,15 @@
1
+ import { Collapsible as BaseCollapsible } from '@base-ui/react/collapsible';
2
+ import type { Size } from '../../types.js';
3
+ export interface RootProps extends BaseCollapsible.Root.Props {
4
+ size?: Size;
5
+ }
6
+ /** Hides content behind one trigger until people ask for it. Holds a Trigger and a Panel. */
7
+ export declare const Root: import("react").ForwardRefExoticComponent<Omit<RootProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
8
+ export interface TriggerProps extends BaseCollapsible.Trigger.Props {
9
+ }
10
+ /** A ghost key with a chevron at the end that turns while the panel is open. */
11
+ export declare const Trigger: import("react").ForwardRefExoticComponent<Omit<TriggerProps, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
12
+ export interface PanelProps extends BaseCollapsible.Panel.Props {
13
+ }
14
+ /** The hidden content. It fades and rises in; its height does not animate. */
15
+ export declare const Panel: import("react").ForwardRefExoticComponent<Omit<PanelProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,66 @@
1
+ import { Combobox as BaseCombobox } from '@base-ui/react/combobox';
2
+ import { type CSSProperties, type ReactNode } from 'react';
3
+ import type { IconElement, Size } from '../../types.js';
4
+ /** Renders the items of one group from grouped `items`, inside a Group. Base UI's part, unstyled. */
5
+ export declare const Collection: typeof BaseCombobox.Collection;
6
+ /** Base UI's matcher for `filter`, with locale-aware `contains`, `startsWith` and `endsWith`. */
7
+ export declare const useFilter: typeof BaseCombobox.useFilter;
8
+ export type RootProps<Value, Multiple extends boolean | undefined = false, Item = Value> = BaseCombobox.Root.Props<Value, Multiple, Item> & {
9
+ size?: Size;
10
+ };
11
+ /**
12
+ * Groups the input and the list, and holds the value. Pass `items` so the
13
+ * list filters as people type and `Empty` knows when nothing matches.
14
+ */
15
+ export declare function Root<Value, Multiple extends boolean | undefined = false, Item = Value>({ size, ...props }: RootProps<Value, Multiple, Item>): import("react/jsx-runtime").JSX.Element;
16
+ export interface InputProps extends Omit<BaseCombobox.Input.Props, 'size' | 'className' | 'style'> {
17
+ /** A Lucide element at the start. Default a search icon; `null` drops it. */
18
+ icon?: IconElement | null;
19
+ /** The accessible name of the chevron that opens the list. Default "Show options". */
20
+ triggerLabel?: string;
21
+ /** Classes for the visible box around the input. */
22
+ className?: string;
23
+ /** Styles for the visible box around the input. */
24
+ style?: CSSProperties;
25
+ }
26
+ /**
27
+ * The text box people type in: an Input with a search icon and a chevron that
28
+ * opens the list. The ref and every other prop go to the `<input>`;
29
+ * `className` and `style` go to the box around it.
30
+ */
31
+ export declare const Input: import("react").ForwardRefExoticComponent<Omit<InputProps, "ref"> & import("react").RefAttributes<HTMLInputElement>>;
32
+ type PositionerProps = Pick<BaseCombobox.Positioner.Props, 'side' | 'align' | 'sideOffset' | 'alignOffset' | 'collisionPadding' | 'collisionAvoidance' | 'collisionBoundary' | 'sticky' | 'anchor' | 'positionMethod' | 'disableAnchorTracking'>;
33
+ export interface PopupProps extends BaseCombobox.Popup.Props, PositionerProps {
34
+ /** Where the list is portaled to. Default `document.body`. */
35
+ container?: BaseCombobox.Portal.Props['container'];
36
+ }
37
+ /** The floating panel under the input. Holds `Empty` and `List`. */
38
+ export declare const Popup: import("react").ForwardRefExoticComponent<Omit<PopupProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
39
+ export interface ListProps extends BaseCombobox.List.Props {
40
+ }
41
+ /** The items. Pass a function child to render each of the root's filtered `items`. */
42
+ export declare const List: import("react").ForwardRefExoticComponent<Omit<ListProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
43
+ export interface ItemProps extends BaseCombobox.Item.Props {
44
+ /** A Lucide element before the label. */
45
+ icon?: IconElement;
46
+ children?: ReactNode;
47
+ }
48
+ /** One option, with a check at the end when chosen. */
49
+ export declare const Item: import("react").ForwardRefExoticComponent<Omit<ItemProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
50
+ export interface EmptyProps extends BaseCombobox.Empty.Props {
51
+ }
52
+ /** What shows when nothing matches, such as "No tags found". Always mounted, so screen readers hear it. */
53
+ export declare const Empty: import("react").ForwardRefExoticComponent<Omit<EmptyProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
54
+ export interface GroupProps extends BaseCombobox.Group.Props {
55
+ }
56
+ /** A labeled set of items. With grouped `items`, render its items with `Collection`. */
57
+ export declare const Group: import("react").ForwardRefExoticComponent<Omit<GroupProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
58
+ export interface GroupLabelProps extends BaseCombobox.GroupLabel.Props {
59
+ }
60
+ /** The name of a Group. */
61
+ export declare const GroupLabel: import("react").ForwardRefExoticComponent<Omit<GroupLabelProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
62
+ export interface SeparatorProps extends BaseCombobox.Separator.Props {
63
+ }
64
+ /** A line between groups of items. */
65
+ export declare const Separator: import("react").ForwardRefExoticComponent<Omit<SeparatorProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
66
+ export {};
@@ -0,0 +1,19 @@
1
+ import type { Dialog as BaseDialog } from '@base-ui/react/dialog';
2
+ import type { ForwardRefExoticComponent, RefAttributes } from 'react';
3
+ import { type PopupProps as SharedPopupProps } from './parts.js';
4
+ export type { CloseProps, DescriptionProps, FooterProps, RootProps, TitleProps, TriggerProps } from './parts.js';
5
+ export type PopupProps = SharedPopupProps;
6
+ /** Groups a trigger and a confirmation. Closes only through its buttons. */
7
+ export declare const Root: <Payload>(props: BaseDialog.Root.Props<Payload>) => React.JSX.Element;
8
+ /** Opens the confirmation. Usually `render={<Button />}`. */
9
+ export declare const Trigger: ForwardRefExoticComponent<Omit<import("./parts.js").TriggerProps, "ref"> & RefAttributes<HTMLButtonElement>>;
10
+ /** The panel over a dimmed backdrop, without an X. A sheet from the bottom below `breakpoint-sm`. */
11
+ export declare const Popup: ForwardRefExoticComponent<PopupProps & RefAttributes<HTMLDivElement>>;
12
+ /** The question, an `<h2>`: "Delete this note?". */
13
+ export declare const Title: ForwardRefExoticComponent<Omit<import("./parts.js").TitleProps, "ref"> & RefAttributes<HTMLHeadingElement>>;
14
+ /** What will happen, a `<p>` under the title. */
15
+ export declare const Description: ForwardRefExoticComponent<Omit<import("./parts.js").DescriptionProps, "ref"> & RefAttributes<HTMLParagraphElement>>;
16
+ /** Closes the confirmation: the Cancel button. */
17
+ export declare const Close: ForwardRefExoticComponent<Omit<import("./parts.js").CloseProps, "ref"> & RefAttributes<HTMLButtonElement>>;
18
+ /** Right-aligns Cancel and the action. Stacks them full width in a sheet. */
19
+ export declare const Footer: ForwardRefExoticComponent<import("./parts.js").FooterProps & RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,22 @@
1
+ import { Dialog as BaseDialog } from '@base-ui/react/dialog';
2
+ import type { ForwardRefExoticComponent, RefAttributes } from 'react';
3
+ import { type PopupProps as SharedPopupProps } from './parts.js';
4
+ export type { CloseProps, DescriptionProps, FooterProps, RootProps, TitleProps, TriggerProps } from './parts.js';
5
+ export interface PopupProps extends SharedPopupProps {
6
+ /** The accessible name of the X button at the top right. Default "Close". */
7
+ closeLabel?: string;
8
+ }
9
+ /** Groups a trigger and its dialog. Controlled with `open` and `onOpenChange`. */
10
+ export declare const Root: <Payload>(props: BaseDialog.Root.Props<Payload>) => React.JSX.Element;
11
+ /** Opens the dialog. Usually `render={<Button />}`. */
12
+ export declare const Trigger: ForwardRefExoticComponent<Omit<import("./parts.js").TriggerProps, "ref"> & RefAttributes<HTMLButtonElement>>;
13
+ /** The panel over a dimmed backdrop, with an X at the top right. A sheet from the bottom below `breakpoint-sm`. */
14
+ export declare const Popup: ForwardRefExoticComponent<PopupProps & RefAttributes<HTMLDivElement>>;
15
+ /** The dialog's heading, an `<h2>`: a question or a task. */
16
+ export declare const Title: ForwardRefExoticComponent<Omit<import("./parts.js").TitleProps, "ref"> & RefAttributes<HTMLHeadingElement>>;
17
+ /** What will happen, a `<p>` under the title. */
18
+ export declare const Description: ForwardRefExoticComponent<Omit<import("./parts.js").DescriptionProps, "ref"> & RefAttributes<HTMLParagraphElement>>;
19
+ /** Closes the dialog. Usually `render={<Button variant="ghost" />}` for Cancel. */
20
+ export declare const Close: ForwardRefExoticComponent<Omit<import("./parts.js").CloseProps, "ref"> & RefAttributes<HTMLButtonElement>>;
21
+ /** Right-aligns the buttons at the end of the dialog: Cancel, then the action. Stacks them full width in a sheet. */
22
+ export declare const Footer: ForwardRefExoticComponent<import("./parts.js").FooterProps & RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,34 @@
1
+ import { Dialog as BaseDialog } from '@base-ui/react/dialog';
2
+ import { type HTMLAttributes } from 'react';
3
+ export type RootProps = BaseDialog.Root.Props;
4
+ export interface TriggerProps extends BaseDialog.Trigger.Props {
5
+ }
6
+ export interface PopupProps extends BaseDialog.Popup.Props {
7
+ /** Where the dialog is portaled to. Default `document.body`. */
8
+ container?: BaseDialog.Portal.Props['container'];
9
+ /** Below `breakpoint-sm` the dialog becomes a sheet from the bottom. `false` keeps it centered. Default true. */
10
+ sheet?: boolean;
11
+ }
12
+ export interface TitleProps extends BaseDialog.Title.Props {
13
+ }
14
+ export interface DescriptionProps extends BaseDialog.Description.Props {
15
+ }
16
+ export interface CloseProps extends BaseDialog.Close.Props {
17
+ }
18
+ export interface FooterProps extends HTMLAttributes<HTMLDivElement> {
19
+ }
20
+ /**
21
+ * Builds the styled parts on Base UI's Dialog or AlertDialog, which share
22
+ * their anatomy. `closeButton` adds the X at the top right of the popup.
23
+ */
24
+ export declare function createDialogParts(Base: typeof BaseDialog, name: 'dialog' | 'alert-dialog', closeButton: boolean): {
25
+ Root: <Payload>(props: BaseDialog.Root.Props<Payload>) => React.JSX.Element;
26
+ Trigger: import("react").ForwardRefExoticComponent<Omit<TriggerProps, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
27
+ Popup: import("react").ForwardRefExoticComponent<Omit<PopupProps & {
28
+ closeLabel?: string;
29
+ }, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
30
+ Title: import("react").ForwardRefExoticComponent<Omit<TitleProps, "ref"> & import("react").RefAttributes<HTMLHeadingElement>>;
31
+ Description: import("react").ForwardRefExoticComponent<Omit<DescriptionProps, "ref"> & import("react").RefAttributes<HTMLParagraphElement>>;
32
+ Close: import("react").ForwardRefExoticComponent<Omit<CloseProps, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
33
+ Footer: import("react").ForwardRefExoticComponent<FooterProps & import("react").RefAttributes<HTMLDivElement>>;
34
+ };
@@ -0,0 +1,11 @@
1
+ import { Fieldset as BaseFieldset } from '@base-ui/react/fieldset';
2
+ import type { Size } from '../../types.js';
3
+ export interface RootProps extends BaseFieldset.Root.Props {
4
+ size?: Size;
5
+ }
6
+ /** A group of checkboxes, radios or switches with one legend. */
7
+ export declare const Root: import("react").ForwardRefExoticComponent<Omit<RootProps, "ref"> & import("react").RefAttributes<HTMLFieldSetElement>>;
8
+ export interface LegendProps extends BaseFieldset.Legend.Props {
9
+ }
10
+ /** The group's name. */
11
+ export declare const Legend: import("react").ForwardRefExoticComponent<Omit<LegendProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,24 @@
1
+ import { Field as BaseField } from '@base-ui/react/field';
2
+ import type { Size } from '../../types.js';
3
+ export interface RootProps extends BaseField.Root.Props {
4
+ /** The size of the control inside, passed on to it. */
5
+ size?: Size;
6
+ }
7
+ /** One control with its label, description and error, wired for screen readers. */
8
+ export declare const Root: import("react").ForwardRefExoticComponent<Omit<RootProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
9
+ export interface LabelProps extends BaseField.Label.Props {
10
+ }
11
+ /** The label above a text control, or beside a Checkbox, Switch or Radio placed inside it. */
12
+ export declare const Label: import("react").ForwardRefExoticComponent<Omit<LabelProps, "ref"> & import("react").RefAttributes<HTMLLabelElement>>;
13
+ export interface ItemProps extends BaseField.Item.Props {
14
+ }
15
+ /** One option of a checkbox or radio group inside a Field: holds a Field.Label around the control. */
16
+ export declare const Item: import("react").ForwardRefExoticComponent<Omit<ItemProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
17
+ export interface DescriptionProps extends BaseField.Description.Props {
18
+ }
19
+ /** One line of help under the control. Hidden while the field shows an error. */
20
+ export declare const Description: import("react").ForwardRefExoticComponent<Omit<DescriptionProps, "ref"> & import("react").RefAttributes<HTMLParagraphElement>>;
21
+ export interface ErrorProps extends BaseField.Error.Props {
22
+ }
23
+ /** What is wrong and how to fix it, after a CircleAlert icon. Shown when the field is invalid. */
24
+ export declare const Error: import("react").ForwardRefExoticComponent<Omit<ErrorProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,19 @@
1
+ import { Input as BaseInput } from '@base-ui/react/input';
2
+ import { type CSSProperties, type ReactNode } from 'react';
3
+ import type { Size } from '../../types.js';
4
+ export interface InputProps extends Omit<BaseInput.Props, 'size' | 'prefix' | 'className' | 'style'> {
5
+ size?: Size;
6
+ /** Says what the field is: a search or link icon. */
7
+ prefix?: ReactNode;
8
+ /** One action on the value (copy, clear), or a unit. */
9
+ suffix?: ReactNode;
10
+ /** Classes for the visible box around the input. */
11
+ className?: string;
12
+ /** Styles for the visible box around the input. */
13
+ style?: CSSProperties;
14
+ }
15
+ /**
16
+ * One line of text: flat `surface` with an `edge`. The ref and every other
17
+ * prop go to the `<input>`; `className` and `style` go to the box around it.
18
+ */
19
+ export declare const Input: import("react").ForwardRefExoticComponent<Omit<InputProps, "ref"> & import("react").RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,5 @@
1
+ import { useRender } from '@base-ui/react/use-render';
2
+ export interface KbdProps extends useRender.ComponentProps<'kbd'> {
3
+ }
4
+ /** One keyboard key, such as "⌘", "Enter" or "/", as a tiny raised key. */
5
+ export declare const Kbd: import("react").ForwardRefExoticComponent<Omit<KbdProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
@@ -0,0 +1,11 @@
1
+ import { useRender } from '@base-ui/react/use-render';
2
+ export interface LinkProps extends useRender.ComponentProps<'a'> {
3
+ /** For navigation that shouldn't draw the eye: ink-muted, ink on hover. */
4
+ muted?: boolean;
5
+ /** Opens in a new tab and shows an arrow. */
6
+ external?: boolean;
7
+ /** `always` inside running text, so the link isn't told apart by color alone. Default `hover`. */
8
+ underline?: 'hover' | 'always';
9
+ }
10
+ /** Goes somewhere. Accent text that underlines on hover and focus. */
11
+ export declare const Link: import("react").ForwardRefExoticComponent<Omit<LinkProps, "ref"> & import("react").RefAttributes<HTMLAnchorElement>>;
@@ -0,0 +1,67 @@
1
+ import { Menu as BaseMenu } from '@base-ui/react/menu';
2
+ import { type ReactNode } from 'react';
3
+ import type { IconElement, Size } from '../../types.js';
4
+ export interface RootProps extends BaseMenu.Root.Props {
5
+ /** Row height of every item: 24, 32 or 40px. */
6
+ size?: Size;
7
+ }
8
+ /** Groups a trigger and its menu. */
9
+ export declare function Root({ size, ...props }: RootProps): import("react/jsx-runtime").JSX.Element;
10
+ export interface TriggerProps extends BaseMenu.Trigger.Props {
11
+ }
12
+ /** Opens the menu. Usually `render={<Button variant="ghost" icon={<Ellipsis />} aria-label="More actions" />}`. */
13
+ export declare const Trigger: import("react").ForwardRefExoticComponent<Omit<TriggerProps, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
14
+ type PositionerProps = Pick<BaseMenu.Positioner.Props, 'side' | 'align' | 'sideOffset' | 'alignOffset' | 'collisionPadding' | 'collisionAvoidance' | 'collisionBoundary' | 'sticky' | 'anchor' | 'positionMethod' | 'disableAnchorTracking'>;
15
+ export interface PopupProps extends BaseMenu.Popup.Props, PositionerProps {
16
+ /** Where the menu is portaled to. Default `document.body`. */
17
+ container?: BaseMenu.Portal.Props['container'];
18
+ }
19
+ /** The list of items. Also the popup of a submenu, inside `SubmenuRoot`. */
20
+ export declare const Popup: import("react").ForwardRefExoticComponent<Omit<PopupProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
21
+ interface RowProps {
22
+ /** A Lucide element before the label. */
23
+ icon?: IconElement;
24
+ /** A keyboard shortcut at the end of the row, such as "⌘ D". */
25
+ shortcut?: ReactNode;
26
+ children?: ReactNode;
27
+ }
28
+ export interface ItemProps extends BaseMenu.Item.Props, RowProps {
29
+ /** A destructive action: red text. Put it last, after a Separator. */
30
+ danger?: boolean;
31
+ }
32
+ /** One action. */
33
+ export declare const Item: import("react").ForwardRefExoticComponent<Omit<ItemProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
34
+ export interface CheckboxItemProps extends BaseMenu.CheckboxItem.Props, RowProps {
35
+ }
36
+ /** An option that turns on or off, with a check at the end. Stays open on click. */
37
+ export declare const CheckboxItem: import("react").ForwardRefExoticComponent<Omit<CheckboxItemProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
38
+ export interface RadioGroupProps extends BaseMenu.RadioGroup.Props {
39
+ }
40
+ /** Groups RadioItems: exactly one is chosen. */
41
+ export declare const RadioGroup: import("react").ForwardRefExoticComponent<Omit<RadioGroupProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
42
+ export interface RadioItemProps extends BaseMenu.RadioItem.Props, RowProps {
43
+ }
44
+ /** One choice in a RadioGroup, with a check at the end when chosen. Stays open on click. */
45
+ export declare const RadioItem: import("react").ForwardRefExoticComponent<Omit<RadioItemProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
46
+ export interface GroupProps extends BaseMenu.Group.Props {
47
+ }
48
+ /** A labeled set of items. */
49
+ export declare const Group: import("react").ForwardRefExoticComponent<Omit<GroupProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
50
+ export interface GroupLabelProps extends BaseMenu.GroupLabel.Props {
51
+ }
52
+ /** The name of a Group or RadioGroup. */
53
+ export declare const GroupLabel: import("react").ForwardRefExoticComponent<Omit<GroupLabelProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
54
+ export interface SeparatorProps extends BaseMenu.Separator.Props {
55
+ }
56
+ /** A line between groups of items. */
57
+ export declare const Separator: import("react").ForwardRefExoticComponent<Omit<SeparatorProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
58
+ export type SubmenuRootProps = BaseMenu.SubmenuRoot.Props;
59
+ /** Holds a SubmenuTrigger and its own Popup. */
60
+ export declare const SubmenuRoot: typeof BaseMenu.SubmenuRoot;
61
+ export interface SubmenuTriggerProps extends BaseMenu.SubmenuTrigger.Props {
62
+ icon?: IconElement;
63
+ children?: ReactNode;
64
+ }
65
+ /** The row that opens a submenu, with a chevron at the end. */
66
+ export declare const SubmenuTrigger: import("react").ForwardRefExoticComponent<Omit<SubmenuTriggerProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
67
+ export {};
@@ -0,0 +1,28 @@
1
+ import { Popover as BasePopover } from '@base-ui/react/popover';
2
+ export type RootProps = BasePopover.Root.Props;
3
+ /** Groups a trigger and its popover. */
4
+ export declare const Root: typeof BasePopover.Root;
5
+ export interface TriggerProps extends BasePopover.Trigger.Props {
6
+ }
7
+ /** Opens the popover. Usually `render={<Button />}`. */
8
+ export declare const Trigger: import("react").ForwardRefExoticComponent<Omit<TriggerProps, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
9
+ type PositionerProps = Pick<BasePopover.Positioner.Props, 'side' | 'align' | 'sideOffset' | 'alignOffset' | 'collisionPadding' | 'collisionAvoidance' | 'collisionBoundary' | 'sticky' | 'anchor' | 'positionMethod' | 'disableAnchorTracking'>;
10
+ export interface PopupProps extends BasePopover.Popup.Props, PositionerProps {
11
+ /** Where the popover is portaled to. Default `document.body`. */
12
+ container?: BasePopover.Portal.Props['container'];
13
+ }
14
+ /** The panel: a surface with `shadow-pop`, `popover-width` wide. */
15
+ export declare const Popup: import("react").ForwardRefExoticComponent<Omit<PopupProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
16
+ export interface TitleProps extends BasePopover.Title.Props {
17
+ }
18
+ /** The popover's heading, an `<h2>`. Names the popup for screen readers. */
19
+ export declare const Title: import("react").ForwardRefExoticComponent<Omit<TitleProps, "ref"> & import("react").RefAttributes<HTMLHeadingElement>>;
20
+ export interface DescriptionProps extends BasePopover.Description.Props {
21
+ }
22
+ /** One line under the title, a `<p>`. */
23
+ export declare const Description: import("react").ForwardRefExoticComponent<Omit<DescriptionProps, "ref"> & import("react").RefAttributes<HTMLParagraphElement>>;
24
+ export interface CloseProps extends BasePopover.Close.Props {
25
+ }
26
+ /** Closes the popover. Usually `render={<Button />}`. */
27
+ export declare const Close: import("react").ForwardRefExoticComponent<Omit<CloseProps, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
28
+ export {};
@@ -0,0 +1,11 @@
1
+ import { type ComponentPropsWithoutRef } from 'react';
2
+ export interface ProseProps extends ComponentPropsWithoutRef<'div'> {
3
+ /** `md` is 15px on a 24px line for reading; `sm` is 14px on 22px, for dense lists. */
4
+ size?: 'sm' | 'md';
5
+ }
6
+ /**
7
+ * Styles rendered Markdown inside it: headings, paragraphs, lists, task lists,
8
+ * code, quotes, tables, images and links. Put the rendered HTML in it as
9
+ * children. Without React, use the `mu-prose` class.
10
+ */
11
+ export declare const Prose: import("react").ForwardRefExoticComponent<ProseProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,15 @@
1
+ import { Radio as BaseRadio } from '@base-ui/react/radio';
2
+ import { RadioGroup as BaseRadioGroup } from '@base-ui/react/radio-group';
3
+ import type { Size } from '../../types.js';
4
+ export interface RadioGroupProps extends BaseRadioGroup.Props {
5
+ size?: Size;
6
+ /** How the radios are laid out. Default `vertical`. */
7
+ orientation?: 'vertical' | 'horizontal';
8
+ }
9
+ /** Exactly one option from a short list that is always visible. Holds Radio items, each inside a Field.Label. */
10
+ export declare const RadioGroup: import("react").ForwardRefExoticComponent<Omit<RadioGroupProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
11
+ export interface RadioProps extends BaseRadio.Root.Props {
12
+ size?: Size;
13
+ }
14
+ /** One option: a round well that becomes a flat primary circle with a dot. */
15
+ export declare const Radio: import("react").ForwardRefExoticComponent<Omit<RadioProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
@@ -0,0 +1,46 @@
1
+ import { Select as BaseSelect } from '@base-ui/react/select';
2
+ import { type ReactNode } from 'react';
3
+ import type { IconElement, Size } from '../../types.js';
4
+ export type RootProps<Value, Multiple extends boolean | undefined = false> = BaseSelect.Root.Props<Value, Multiple> & {
5
+ size?: Size;
6
+ };
7
+ /** Groups the trigger and the list, and holds the value. Pass `items` so `Value` shows labels, not raw values. */
8
+ export declare function Root<Value, Multiple extends boolean | undefined = false>({ size, ...props }: RootProps<Value, Multiple>): import("react/jsx-runtime").JSX.Element;
9
+ export interface TriggerProps extends BaseSelect.Trigger.Props {
10
+ }
11
+ /** A neutral key that shows the value, with a chevron at the end. Holds `Value`. */
12
+ export declare const Trigger: import("react").ForwardRefExoticComponent<Omit<TriggerProps, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
13
+ export interface ValueProps extends BaseSelect.Value.Props {
14
+ }
15
+ /** The chosen item's label, or `placeholder` in `ink-muted`. */
16
+ export declare const Value: import("react").ForwardRefExoticComponent<Omit<ValueProps, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
17
+ type PositionerProps = Pick<BaseSelect.Positioner.Props, 'side' | 'align' | 'sideOffset' | 'alignOffset' | 'collisionPadding' | 'collisionAvoidance' | 'collisionBoundary' | 'sticky' | 'anchor' | 'positionMethod' | 'disableAnchorTracking' | 'alignItemWithTrigger'>;
18
+ export interface PopupProps extends BaseSelect.Popup.Props, PositionerProps {
19
+ /** Where the list is portaled to. Default `document.body`. */
20
+ container?: BaseSelect.Portal.Props['container'];
21
+ }
22
+ /**
23
+ * The list of items. By default it opens over the trigger with the chosen
24
+ * item on top of the value; `alignItemWithTrigger={false}` opens it below.
25
+ */
26
+ export declare const Popup: import("react").ForwardRefExoticComponent<Omit<PopupProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
27
+ export interface ItemProps extends BaseSelect.Item.Props {
28
+ /** A Lucide element before the label. */
29
+ icon?: IconElement;
30
+ children?: ReactNode;
31
+ }
32
+ /** One option, with a check at the end when chosen. */
33
+ export declare const Item: import("react").ForwardRefExoticComponent<Omit<ItemProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
34
+ export interface GroupProps extends BaseSelect.Group.Props {
35
+ }
36
+ /** A labeled set of items. */
37
+ export declare const Group: import("react").ForwardRefExoticComponent<Omit<GroupProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
38
+ export interface GroupLabelProps extends BaseSelect.GroupLabel.Props {
39
+ }
40
+ /** The name of a Group. */
41
+ export declare const GroupLabel: import("react").ForwardRefExoticComponent<Omit<GroupLabelProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
42
+ export interface SeparatorProps extends BaseSelect.Separator.Props {
43
+ }
44
+ /** A line between groups of items. */
45
+ export declare const Separator: import("react").ForwardRefExoticComponent<Omit<SeparatorProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
46
+ export {};
@@ -0,0 +1,5 @@
1
+ import { Separator as BaseSeparator } from '@base-ui/react/separator';
2
+ export interface SeparatorProps extends BaseSeparator.Props {
3
+ }
4
+ /** A 1px line between groups of content. */
5
+ export declare const Separator: import("react").ForwardRefExoticComponent<Omit<SeparatorProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;