@studiolxd/brand 49.28.0 → 50.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/LICENSE +61 -0
  2. package/README.md +26 -4
  3. package/dist/_shared/assign-ref.js +6 -0
  4. package/dist/_shared/calendargrid.js +57 -57
  5. package/dist/_shared/datepicker.js +67 -65
  6. package/dist/_shared/default-render-link.js +7 -0
  7. package/dist/_shared/dialogsurface.js +1 -1
  8. package/dist/_shared/dropdownitems.js +14 -20
  9. package/dist/_shared/imagecropdialog.js +38 -441
  10. package/dist/_shared/overflow-focusable.js +15 -0
  11. package/dist/_shared/side-offset.js +13 -0
  12. package/dist/_shared/tokens.js +31 -129
  13. package/dist/_shared/useasyncoptions.js +30 -0
  14. package/dist/_types/atoms/Accordion/Accordion.d.ts +7 -1
  15. package/dist/_types/atoms/AsyncMultiSelect/AsyncMultiSelect.d.ts +8 -4
  16. package/dist/_types/atoms/AsyncSelect/AsyncSelect.d.ts +8 -4
  17. package/dist/_types/atoms/Autocomplete/Autocomplete.d.ts +10 -6
  18. package/dist/_types/atoms/CloseButton/CloseButton.d.ts +13 -3
  19. package/dist/_types/atoms/Fieldset/Fieldset.d.ts +1 -1
  20. package/dist/_types/atoms/InputPhone/InputPhone.d.ts +2 -0
  21. package/dist/_types/atoms/MultiSelect/MultiSelect.d.ts +11 -10
  22. package/dist/_types/atoms/Select/Select.d.ts +6 -0
  23. package/dist/_types/atoms/Skeleton/Skeleton.d.ts +1 -1
  24. package/dist/_types/atoms/Spinner/Spinner.d.ts +3 -1
  25. package/dist/_types/atoms/TypingIndicator/TypingIndicator.d.ts +3 -1
  26. package/dist/_types/atoms/_shared/useAsyncOptions.d.ts +36 -0
  27. package/dist/_types/constants/assign-ref.d.ts +12 -0
  28. package/dist/_types/constants/default-render-link.d.ts +13 -0
  29. package/dist/_types/constants/overflow-focusable.d.ts +15 -0
  30. package/dist/_types/constants/side-offset.d.ts +18 -0
  31. package/dist/_types/email/EmailLayout.d.ts +38 -21
  32. package/dist/_types/messages/BrandMessages.d.ts +8 -2
  33. package/dist/_types/messages/index.d.ts +1 -1
  34. package/dist/_types/molecules/AppLauncher/AppLauncher.d.ts +9 -3
  35. package/dist/_types/molecules/Calendar/Calendar.d.ts +10 -1
  36. package/dist/_types/molecules/CalendarPlanner/CalendarPlanner.d.ts +43 -13
  37. package/dist/_types/molecules/CalendarRoster/CalendarRoster.d.ts +10 -2
  38. package/dist/_types/molecules/ContextMenu/ContextMenu.d.ts +8 -1
  39. package/dist/_types/molecules/DatePicker/DatePicker.d.ts +6 -0
  40. package/dist/_types/molecules/DateTimeField/DateTimeField.d.ts +2 -0
  41. package/dist/_types/molecules/DocsSearch/DocsSearch.d.ts +2 -2
  42. package/dist/_types/molecules/FloatingToolbar/FloatingToolbar.d.ts +83 -0
  43. package/dist/_types/molecules/FormField/FormField.d.ts +5 -6
  44. package/dist/_types/molecules/LanguageSwitcher/LanguageSwitcher.d.ts +7 -3
  45. package/dist/_types/molecules/LoadingRegion/LoadingRegion.d.ts +12 -4
  46. package/dist/_types/molecules/Modal/Modal.d.ts +10 -4
  47. package/dist/_types/molecules/OrgSwitcher/OrgSwitcher.d.ts +7 -1
  48. package/dist/_types/molecules/PasswordField/PasswordField.d.ts +9 -2
  49. package/dist/_types/molecules/PrevNextNav/PrevNextNav.d.ts +3 -1
  50. package/dist/_types/molecules/RecurrenceField/RecurrenceField.d.ts +6 -1
  51. package/dist/_types/molecules/SidebarNav/SidebarNav.d.ts +18 -2
  52. package/dist/_types/molecules/SiteNav/SiteNav.d.ts +4 -1
  53. package/dist/_types/molecules/StatTile/StatTile.d.ts +15 -1
  54. package/dist/_types/molecules/Table/Table.d.ts +1 -1
  55. package/dist/_types/molecules/ThemeSwitcher/ThemeSwitcher.d.ts +38 -3
  56. package/dist/_types/molecules/Toast/Toaster.d.ts +8 -0
  57. package/dist/_types/molecules/UserMenu/UserMenu.d.ts +7 -1
  58. package/dist/_types/molecules/_shared/calendarGrid.d.ts +15 -2
  59. package/dist/_types/molecules/_shared/dialogSurface.d.ts +6 -1
  60. package/dist/_types/molecules/_shared/dropdownItems.d.ts +0 -2
  61. package/dist/_types/sections/AppHeader/AppHeader.d.ts +3 -1
  62. package/dist/_types/sections/AppShell/AppShell.d.ts +6 -1
  63. package/dist/_types/sections/LegalFooter/LegalFooter.d.ts +7 -1
  64. package/dist/_types/sections/Sidebar/Sidebar.d.ts +3 -1
  65. package/dist/_types/sections/SiteFooter/SiteFooter.d.ts +6 -2
  66. package/dist/_types/sections/SiteHeader/SiteHeader.d.ts +2 -2
  67. package/dist/_types/templates/ConnectorAuth/ConnectorAuthShell.d.ts +5 -2
  68. package/dist/_types/templates/ConnectorAuth/ConnectorConsentPage.d.ts +1 -1
  69. package/dist/_types/templates/ConnectorAuth/ConnectorExternalSignInPage.d.ts +1 -1
  70. package/dist/_types/templates/ConnectorAuth/ConnectorRejectionPage.d.ts +1 -1
  71. package/dist/_types/templates/ConnectorAuth/ConnectorSignInPage.d.ts +1 -1
  72. package/dist/_types/templates/ErrorPage/ErrorPage.d.ts +7 -1
  73. package/dist/_types/templates/NotFoundPage/NotFoundPage.d.ts +7 -1
  74. package/dist/_types/templates/PublicPageShell/PublicPageShell.d.ts +6 -0
  75. package/dist/accordion.css +1 -1
  76. package/dist/accordion.js +6 -5
  77. package/dist/alert.css +1 -1
  78. package/dist/app-header.js +16 -21
  79. package/dist/app-launcher.css +1 -1
  80. package/dist/app-launcher.js +29 -21
  81. package/dist/app-shell.js +43 -43
  82. package/dist/async-multi-select.css +1 -1
  83. package/dist/async-multi-select.js +104 -173
  84. package/dist/async-select.css +1 -1
  85. package/dist/async-select.js +81 -137
  86. package/dist/autocomplete.css +1 -1
  87. package/dist/autocomplete.js +76 -115
  88. package/dist/brand.css +77 -987
  89. package/dist/breadcrumb.js +11 -16
  90. package/dist/button.css +1 -1
  91. package/dist/calendar-planner.css +1 -1
  92. package/dist/calendar-planner.js +100 -95
  93. package/dist/calendar-roster.css +1 -1
  94. package/dist/calendar-roster.js +69 -61
  95. package/dist/calendar.css +1 -1
  96. package/dist/calendar.js +86 -85
  97. package/dist/card.css +1 -1
  98. package/dist/card.js +42 -41
  99. package/dist/chart.css +1 -1
  100. package/dist/chat-shell.js +48 -47
  101. package/dist/checkbox.css +1 -1
  102. package/dist/close-button.js +14 -12
  103. package/dist/command-palette.css +1 -1
  104. package/dist/connector-consent-page.js +19 -18
  105. package/dist/connector-external-sign-in-page.js +6 -5
  106. package/dist/connector-rejection-page.js +5 -4
  107. package/dist/connector-sign-in-page.js +10 -9
  108. package/dist/consent.css +1 -1
  109. package/dist/context-menu.js +3 -2
  110. package/dist/conversation-list.css +1 -1
  111. package/dist/conversation-thread.css +1 -1
  112. package/dist/conversation-thread.js +1 -0
  113. package/dist/data-table.js +74 -1625
  114. package/dist/date-time-field.js +7 -6
  115. package/dist/docs-search.js +36 -38
  116. package/dist/email.js +10 -7
  117. package/dist/error-page.js +2 -2
  118. package/dist/fieldset.css +1 -1
  119. package/dist/figure.js +1 -0
  120. package/dist/file-upload.css +1 -1
  121. package/dist/file-upload.js +48 -50
  122. package/dist/floating-toolbar.css +1 -0
  123. package/dist/floating-toolbar.js +64 -0
  124. package/dist/form-field.js +55 -53
  125. package/dist/imagecropdialog.css +1 -1
  126. package/dist/input-phone.css +1 -1
  127. package/dist/input-phone.js +30 -31
  128. package/dist/input.css +1 -1
  129. package/dist/label.css +1 -1
  130. package/dist/language-switcher.js +37 -44
  131. package/dist/legal-footer.js +12 -17
  132. package/dist/loading-region.css +1 -1
  133. package/dist/loading-region.js +8 -8
  134. package/dist/menu.css +1 -1
  135. package/dist/menu.js +4 -3
  136. package/dist/message-bubble.css +1 -1
  137. package/dist/message-composer.css +1 -1
  138. package/dist/modal.css +1 -1
  139. package/dist/modal.js +9 -9
  140. package/dist/multi-select.css +1 -1
  141. package/dist/multi-select.js +104 -172
  142. package/dist/not-found-page.js +8 -5
  143. package/dist/notification-list.js +16 -21
  144. package/dist/notification-panel.js +34 -46
  145. package/dist/number-badge.css +1 -1
  146. package/dist/number-input.css +1 -1
  147. package/dist/org-switcher.css +1 -1
  148. package/dist/org-switcher.js +13 -11
  149. package/dist/password-field.js +40 -39
  150. package/dist/popover.css +1 -1
  151. package/dist/popover.js +9 -15
  152. package/dist/prev-next-nav.js +8 -7
  153. package/dist/public-page-shell.js +7 -6
  154. package/dist/radio.css +1 -1
  155. package/dist/recurrence-field.css +1 -1
  156. package/dist/recurrence-field.js +38 -37
  157. package/dist/select.css +1 -1
  158. package/dist/select.js +3 -2
  159. package/dist/sheet.css +1 -1
  160. package/dist/sidebar-nav.css +1 -1
  161. package/dist/sidebar-nav.js +75 -70
  162. package/dist/sidebar.css +1 -1
  163. package/dist/sidebar.js +46 -42
  164. package/dist/site-footer.js +28 -28
  165. package/dist/site-header.js +39 -44
  166. package/dist/site-nav.js +10 -19
  167. package/dist/site-search.js +34 -36
  168. package/dist/site-shell.js +17 -16
  169. package/dist/skeleton.js +8 -6
  170. package/dist/sortable.js +20 -19
  171. package/dist/spinner.js +11 -7
  172. package/dist/stat-tile.js +24 -26
  173. package/dist/switcher.css +1 -1
  174. package/dist/table.css +1 -1
  175. package/dist/table.js +57 -45
  176. package/dist/textarea.css +1 -1
  177. package/dist/theme-switcher.js +57 -56
  178. package/dist/toaster.css +1 -1
  179. package/dist/toggle.css +1 -1
  180. package/dist/tokens.css +75 -986
  181. package/dist/tooltip.css +1 -1
  182. package/dist/tooltip.js +20 -27
  183. package/dist/typing-indicator.css +1 -1
  184. package/dist/typing-indicator.js +4 -4
  185. package/dist/user-menu.css +1 -1
  186. package/dist/user-menu.js +38 -45
  187. package/dist/visuallyhidden.css +1 -1
  188. package/package.json +26 -14
  189. package/src/tokens/components/async-multi-select.css +4 -0
  190. package/src/tokens/components/async-select.css +3 -0
  191. package/src/tokens/components/autocomplete.css +1 -0
  192. package/src/tokens/components/breadcrumb.css +0 -2
  193. package/src/tokens/components/button.css +0 -23
  194. package/src/tokens/components/control.css +0 -4
  195. package/src/tokens/components/file-upload.css +0 -4
  196. package/src/tokens/components/radio.css +2 -0
  197. package/src/tokens/components/site-header.css +0 -1
  198. package/src/tokens/index.css +5 -7
  199. package/src/tokens/molecules/async-multi-select-field.css +0 -6
  200. package/src/tokens/molecules/async-select-field.css +0 -6
  201. package/src/tokens/molecules/autocomplete-field.css +0 -5
  202. package/src/tokens/molecules/avatar-upload.css +0 -6
  203. package/src/tokens/molecules/calendar-roster.css +5 -0
  204. package/src/tokens/molecules/chart.css +0 -3
  205. package/src/tokens/molecules/checkbox-field.css +0 -6
  206. package/src/tokens/molecules/consent.css +1 -0
  207. package/src/tokens/molecules/conversation-thread.css +10 -0
  208. package/src/tokens/molecules/date-picker-field.css +0 -6
  209. package/src/tokens/molecules/date-time-field.css +0 -6
  210. package/src/tokens/molecules/dropdown-field.css +0 -6
  211. package/src/tokens/molecules/file-upload-field.css +0 -6
  212. package/src/tokens/molecules/floating-toolbar.css +18 -0
  213. package/src/tokens/molecules/floating-toolbar.ts +4 -0
  214. package/src/tokens/molecules/input-field.css +0 -1
  215. package/src/tokens/molecules/input-phone-field.css +0 -6
  216. package/src/tokens/molecules/modal.css +1 -0
  217. package/src/tokens/molecules/multi-select-field.css +0 -6
  218. package/src/tokens/molecules/number-input-field.css +0 -6
  219. package/src/tokens/molecules/otp-field.css +0 -6
  220. package/src/tokens/molecules/radio-field.css +0 -6
  221. package/src/tokens/molecules/recurrence-field.css +1 -0
  222. package/src/tokens/molecules/select-field.css +0 -6
  223. package/src/tokens/molecules/sidebar-nav.css +0 -6
  224. package/src/tokens/molecules/site-search.css +0 -2
  225. package/src/tokens/molecules/switcher-field.css +0 -1
  226. package/src/tokens/molecules/table.css +1 -0
  227. package/src/tokens/molecules/textarea-field.css +0 -6
  228. package/src/tokens/molecules/time-field.css +0 -6
  229. package/src/tokens/scss/_index.legacy.scss +1 -0
  230. package/src/tokens/scss/_index.scss +1 -0
  231. package/src/tokens/scss/components/_async-multi-select.scss +4 -0
  232. package/src/tokens/scss/components/_async-select.scss +3 -0
  233. package/src/tokens/scss/components/_autocomplete.scss +1 -0
  234. package/src/tokens/scss/components/_breadcrumb.scss +0 -2
  235. package/src/tokens/scss/components/_button.scss +0 -23
  236. package/src/tokens/scss/components/_control.scss +0 -4
  237. package/src/tokens/scss/components/_file-upload.scss +0 -4
  238. package/src/tokens/scss/components/_site-header.scss +0 -1
  239. package/src/tokens/scss/molecules/_async-multi-select-field.scss +0 -5
  240. package/src/tokens/scss/molecules/_async-select-field.scss +0 -5
  241. package/src/tokens/scss/molecules/_autocomplete-field.scss +0 -5
  242. package/src/tokens/scss/molecules/_avatar-upload.scss +0 -5
  243. package/src/tokens/scss/molecules/_calendar-roster.scss +4 -0
  244. package/src/tokens/scss/molecules/_chart.scss +0 -2
  245. package/src/tokens/scss/molecules/_checkbox-field.scss +0 -5
  246. package/src/tokens/scss/molecules/_consent.scss +1 -0
  247. package/src/tokens/scss/molecules/_conversation-thread.scss +3 -0
  248. package/src/tokens/scss/molecules/_date-picker-field.scss +0 -5
  249. package/src/tokens/scss/molecules/_date-time-field.scss +0 -5
  250. package/src/tokens/scss/molecules/_dropdown-field.scss +0 -5
  251. package/src/tokens/scss/molecules/_file-upload-field.scss +0 -5
  252. package/src/tokens/scss/molecules/_floating-toolbar.scss +15 -0
  253. package/src/tokens/scss/molecules/_input-field.scss +0 -1
  254. package/src/tokens/scss/molecules/_input-phone-field.scss +0 -5
  255. package/src/tokens/scss/molecules/_modal.scss +1 -0
  256. package/src/tokens/scss/molecules/_multi-select-field.scss +0 -5
  257. package/src/tokens/scss/molecules/_number-input-field.scss +0 -5
  258. package/src/tokens/scss/molecules/_otp-field.scss +0 -5
  259. package/src/tokens/scss/molecules/_radio-field.scss +0 -5
  260. package/src/tokens/scss/molecules/_recurrence-field.scss +1 -0
  261. package/src/tokens/scss/molecules/_select-field.scss +0 -5
  262. package/src/tokens/scss/molecules/_sidebar-nav.scss +0 -4
  263. package/src/tokens/scss/molecules/_site-search.scss +0 -2
  264. package/src/tokens/scss/molecules/_switcher-field.scss +0 -1
  265. package/src/tokens/scss/molecules/_table.scss +1 -0
  266. package/src/tokens/scss/molecules/_textarea-field.scss +0 -5
  267. package/src/tokens/scss/molecules/_time-field.scss +0 -5
  268. package/src/tokens/surface-dark-derived.css +2 -1
  269. package/src/tokens/surface-invert.css +15 -21
  270. package/src/tokens/surface-public.css +0 -19
  271. package/src/tokens/tokens.json +31 -129
  272. package/CHANGELOG.md +0 -8154
  273. package/dist/_types/data/home.d.ts +0 -83
  274. package/dist/_types/pages/Auth/AuthPage.d.ts +0 -24
  275. package/dist/_types/pages/Onboarding/OnboardingPage.d.ts +0 -37
  276. package/dist/_types/pages/Status/StatusPage.d.ts +0 -37
  277. package/dist/_types/pages/Status/_datos.d.ts +0 -47
  278. package/src/tokens/surface-light.css +0 -782
  279. package/src/tokens/utils.test.ts +0 -86
package/dist/tooltip.css CHANGED
@@ -1 +1 @@
1
- .tooltip{box-sizing:border-box;max-width:var(--tooltip-max-width);padding-block:var(--tooltip-padding-block);padding-inline:var(--tooltip-padding-inline);border-radius:var(--tooltip-border-radius);background-color:var(--tooltip-bg);color:var(--tooltip-color);font-family:var(--tooltip-font-family);font-size:var(--tooltip-font-size);line-height:var(--tooltip-line-height);transform-origin:var(--transform-origin);animation-duration:var(--tooltip-transition-duration);animation-timing-function:var(--tooltip-transition-easing)}.tooltip[data-open]{animation-name:tooltip-in}.tooltip[data-closed]{animation-name:tooltip-out}.tooltip__arrow{fill:var(--tooltip-bg);line-height:0}.tooltip__arrow[data-side=top]{top:100%}.tooltip__arrow[data-side=bottom]{bottom:100%;rotate:180deg}.tooltip__arrow[data-side=left]{left:100%;translate:-25%;rotate:-90deg}.tooltip__arrow[data-side=right]{right:100%;translate:25%;rotate:90deg}@keyframes tooltip-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes tooltip-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}.tooltip__positioner{z-index:var(--tooltip-z-index)}.tooltip__trigger{display:inline-flex}.tooltip__trigger:focus-visible{outline:var(--border-width-focus) solid currentColor;outline-offset:var(--spacing-1)}.tooltip__trigger>:disabled,.tooltip__trigger>[aria-disabled=true]{pointer-events:none}
1
+ .tooltip{box-sizing:border-box;max-inline-size:var(--tooltip-max-width);padding-block:var(--tooltip-padding-block);padding-inline:var(--tooltip-padding-inline);border-radius:var(--tooltip-border-radius);background-color:var(--tooltip-bg);color:var(--tooltip-color);font-family:var(--tooltip-font-family);font-size:var(--tooltip-font-size);line-height:var(--tooltip-line-height);transform-origin:var(--transform-origin);animation-duration:var(--tooltip-transition-duration);animation-timing-function:var(--tooltip-transition-easing)}.tooltip[data-open]{animation-name:tooltip-in}.tooltip[data-closed]{animation-name:tooltip-out}.tooltip__arrow{fill:var(--tooltip-bg);line-height:0}.tooltip__arrow[data-side=top]{inset-block-start:100%}.tooltip__arrow[data-side=bottom]{inset-block-end:100%;rotate:180deg}.tooltip__arrow[data-side=left]{left:100%;translate:-25%;rotate:-90deg}.tooltip__arrow[data-side=right]{right:100%;translate:25%;rotate:90deg}@keyframes tooltip-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes tooltip-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}.tooltip__positioner{z-index:var(--tooltip-z-index)}.tooltip__trigger{display:inline-flex}.tooltip__trigger:focus-visible{outline:var(--border-width-focus) solid currentColor;outline-offset:var(--spacing-1)}.tooltip__trigger>:disabled,.tooltip__trigger>[aria-disabled=true]{pointer-events:none}
package/dist/tooltip.js CHANGED
@@ -1,62 +1,55 @@
1
1
  'use client';
2
2
  import './tooltip.css';
3
3
  import { n as e } from "./_shared/portal-container.js";
4
- import { forwardRef as t, useId as n, useState as r } from "react";
5
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
6
- import { Tooltip as o } from "@base-ui/react/tooltip";
4
+ import { t } from "./_shared/side-offset.js";
5
+ import { forwardRef as n, useId as r, useState as i } from "react";
6
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
7
+ import { Tooltip as s } from "@base-ui/react/tooltip";
7
8
  //#region src/stories/atoms/Tooltip/Tooltip.tsx
8
- function s({ children: e, delayDuration: t = 0, skipDelayDuration: n }) {
9
- return /* @__PURE__ */ i(o.Provider, {
9
+ function c({ children: e, delayDuration: t = 0, skipDelayDuration: n }) {
10
+ return /* @__PURE__ */ a(s.Provider, {
10
11
  delay: t,
11
12
  ...n === void 0 ? {} : { timeout: n },
12
13
  children: e
13
14
  });
14
15
  }
15
- function c(e, t) {
16
- let n = parseFloat(e);
17
- return Number.isNaN(n) ? 0 : e.endsWith("rem") ? n * parseFloat(getComputedStyle(document.documentElement).fontSize) : e.endsWith("em") ? n * parseFloat(getComputedStyle(t).fontSize) : n;
18
- }
19
- function l() {
20
- let e = document.documentElement;
21
- return c(getComputedStyle(e).getPropertyValue("--tooltip-offset").trim(), e);
22
- }
23
- var u = t(function({ label: t, children: s, side: c = "top", align: u = "center", sideOffset: d, open: f, defaultOpen: p, onOpenChange: m, delayDuration: h, describe: g = !0, disabledTrigger: _ = !1, container: v, className: y, ...b }, x) {
24
- let S = e(v), C = n(), [w, T] = r(p ?? !1), E = f ?? w;
25
- return /* @__PURE__ */ a(o.Root, {
16
+ var l = t("--tooltip-offset"), u = n(function({ label: t, children: n, side: c = "top", align: u = "center", sideOffset: d, open: f, defaultOpen: p, onOpenChange: m, delayDuration: h, describe: g = !0, disabledTrigger: _ = !1, container: v, className: y, ...b }, x) {
17
+ let S = e(v), C = r(), [w, T] = i(p ?? !1), E = f ?? w;
18
+ return /* @__PURE__ */ o(s.Root, {
26
19
  open: f,
27
20
  defaultOpen: p,
28
21
  onOpenChange: (e) => {
29
22
  f === void 0 && T(e), m?.(e);
30
23
  },
31
- children: [/* @__PURE__ */ i(o.Trigger, {
24
+ children: [/* @__PURE__ */ a(s.Trigger, {
32
25
  ref: x,
33
- render: _ ? /* @__PURE__ */ i("span", {
26
+ render: _ ? /* @__PURE__ */ a("span", {
34
27
  className: "tooltip__trigger",
35
28
  tabIndex: 0,
36
- children: s
37
- }) : s,
29
+ children: n
30
+ }) : n,
38
31
  "aria-describedby": E && g ? C : void 0,
39
32
  ...h === void 0 ? {} : { delay: h },
40
33
  ...b
41
- }), /* @__PURE__ */ i(o.Portal, {
34
+ }), /* @__PURE__ */ a(s.Portal, {
42
35
  container: S,
43
- children: /* @__PURE__ */ i(o.Positioner, {
36
+ children: /* @__PURE__ */ a(s.Positioner, {
44
37
  className: "tooltip__positioner",
45
38
  side: c,
46
39
  align: u,
47
40
  sideOffset: d ?? l,
48
- children: /* @__PURE__ */ a(o.Popup, {
41
+ children: /* @__PURE__ */ o(s.Popup, {
49
42
  id: C,
50
43
  role: "tooltip",
51
44
  className: ["tooltip", y].filter(Boolean).join(" "),
52
- children: [t, /* @__PURE__ */ i(o.Arrow, {
45
+ children: [t, /* @__PURE__ */ a(s.Arrow, {
53
46
  className: "tooltip__arrow",
54
- children: /* @__PURE__ */ i("svg", {
47
+ children: /* @__PURE__ */ a("svg", {
55
48
  width: "10",
56
49
  height: "5",
57
50
  viewBox: "0 0 30 10",
58
51
  preserveAspectRatio: "none",
59
- children: /* @__PURE__ */ i("polygon", { points: "0,0 30,0 15,10" })
52
+ children: /* @__PURE__ */ a("polygon", { points: "0,0 30,0 15,10" })
60
53
  })
61
54
  })]
62
55
  })
@@ -65,4 +58,4 @@ var u = t(function({ label: t, children: s, side: c = "top", align: u = "center"
65
58
  });
66
59
  });
67
60
  //#endregion
68
- export { u as Tooltip, s as TooltipProvider };
61
+ export { u as Tooltip, c as TooltipProvider };
@@ -1 +1 @@
1
- .typing-indicator{align-items:center;gap:var(--typing-indicator-dot-gap);display:inline-flex}.typing-indicator__dot{width:var(--typing-indicator-dot-size);height:var(--typing-indicator-dot-size);background-color:var(--typing-indicator-dot-color);opacity:var(--typing-indicator-dot-opacity-inactive);animation:typing-bounce var(--typing-indicator-animation-duration) var(--typing-indicator-animation-easing) infinite;display:block}.typing-indicator__dot:nth-child(2){animation-delay:calc(var(--typing-indicator-animation-duration) / 5)}.typing-indicator__dot:nth-child(3){animation-delay:calc(var(--typing-indicator-animation-duration) / 5 * 2)}@media (prefers-reduced-motion:reduce){.typing-indicator__dot{opacity:var(--typing-indicator-dot-opacity-inactive);animation:none}.typing-indicator__dot:nth-child(2),.typing-indicator__dot:nth-child(3){animation-delay:0s}}@keyframes typing-bounce{0%,60%,to{opacity:var(--typing-indicator-dot-opacity-inactive);transform:translateY(0)}30%{opacity:var(--typing-indicator-dot-opacity-active);transform:translateY(calc(-1 * var(--typing-indicator-dot-rise)))}}
1
+ .typing-indicator{align-items:center;gap:var(--typing-indicator-dot-gap);display:inline-flex}.typing-indicator__dot{inline-size:var(--typing-indicator-dot-size);block-size:var(--typing-indicator-dot-size);background-color:var(--typing-indicator-dot-color);opacity:var(--typing-indicator-dot-opacity-inactive);animation:typing-bounce var(--typing-indicator-animation-duration) var(--typing-indicator-animation-easing) infinite;display:block}.typing-indicator__dot:nth-child(2){animation-delay:calc(var(--typing-indicator-animation-duration) / 5)}.typing-indicator__dot:nth-child(3){animation-delay:calc(var(--typing-indicator-animation-duration) / 5 * 2)}@media (prefers-reduced-motion:reduce){.typing-indicator__dot{opacity:var(--typing-indicator-dot-opacity-inactive);animation:none}.typing-indicator__dot:nth-child(2),.typing-indicator__dot:nth-child(3){animation-delay:0s}}@keyframes typing-bounce{0%,60%,to{opacity:var(--typing-indicator-dot-opacity-inactive);transform:translateY(0)}30%{opacity:var(--typing-indicator-dot-opacity-active);transform:translateY(calc(-1 * var(--typing-indicator-dot-rise)))}}
@@ -4,10 +4,10 @@ import { n as e } from "./_shared/brandmessagescontext.js";
4
4
  import { VisuallyHidden as t } from "./visually-hidden.js";
5
5
  import { jsx as n, jsxs as r } from "react/jsx-runtime";
6
6
  //#region src/stories/atoms/TypingIndicator/TypingIndicator.tsx
7
- function i({ name: i, label: a }) {
8
- let o = e("typingIndicator");
7
+ function i({ name: i, label: a, className: o }) {
8
+ let s = e("typingIndicator");
9
9
  return /* @__PURE__ */ r("span", {
10
- className: "typing-indicator",
10
+ className: ["typing-indicator", o].filter(Boolean).join(" "),
11
11
  role: "status",
12
12
  children: [
13
13
  /* @__PURE__ */ n("span", {
@@ -22,7 +22,7 @@ function i({ name: i, label: a }) {
22
22
  className: "typing-indicator__dot",
23
23
  "aria-hidden": "true"
24
24
  }),
25
- /* @__PURE__ */ n(t, { children: a ?? o("typing")(i) })
25
+ /* @__PURE__ */ n(t, { children: a ?? s("typing")(i) })
26
26
  ]
27
27
  });
28
28
  }
@@ -1 +1 @@
1
- .user-menu__trigger{all:unset;box-sizing:border-box;align-items:center;gap:var(--user-menu-trigger-gap);width:100%;padding-block:var(--user-menu-trigger-padding-block);padding-inline:var(--user-menu-trigger-padding-inline);border-radius:var(--user-menu-trigger-border-radius);cursor:pointer;display:flex}.user-menu__trigger.user-menu__trigger--compact{width:auto;padding-inline:var(--user-menu-trigger-compact-padding-inline)}.user-menu__trigger:focus-visible{outline:var(--user-menu-focus-ring-width) solid var(--user-menu-focus-ring-color);outline-offset:var(--user-menu-focus-ring-offset)}.user-menu__avatar-wrap{flex-shrink:0;position:relative}.user-menu__notification-badge{position:absolute;inset-block-start:calc(-1 * var(--user-menu-badge-offset));inset-inline-end:calc(-1 * var(--user-menu-badge-offset))}.user-menu__name{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:var(--user-menu-name-font-size);font-weight:var(--user-menu-name-font-weight);color:var(--user-menu-name-color);flex:1;overflow:hidden}.user-menu__chevron{transition:transform var(--user-menu-transition-duration) var(--user-menu-transition-easing);flex-shrink:0;transform:rotate(90deg)}.user-menu__trigger[data-popup-open] .user-menu__chevron{transform:rotate(-90deg)}@keyframes user-menu-open{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes user-menu-close{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}.user-menu__content{box-sizing:border-box;background-color:var(--user-menu-content-bg);border-width:var(--user-menu-content-border-width);border-style:solid;border-color:var(--user-menu-content-border-color);border-radius:var(--user-menu-content-border-radius);box-shadow:var(--user-menu-content-shadow);padding-block:var(--user-menu-content-padding-block);padding-inline:var(--user-menu-content-padding-inline);min-width:var(--user-menu-content-min-width);transform-origin:var(--transform-origin);max-height:var(--user-menu-content-max-height,var(--available-height));overscroll-behavior:contain;outline:none;overflow-y:auto}.user-menu__content[data-open]{animation:user-menu-open var(--user-menu-transition-duration) var(--user-menu-transition-easing)}.user-menu__content[data-closed]{animation:user-menu-close var(--user-menu-transition-duration) var(--user-menu-transition-easing)}.user-menu__header{align-items:center;gap:var(--user-menu-trigger-gap);padding-block:var(--user-menu-header-padding-block);padding-inline:var(--user-menu-header-padding-inline);display:flex}.user-menu__header-text{gap:var(--user-menu-header-gap);flex-direction:column;min-width:0;display:flex}.user-menu__header-name{font-size:var(--user-menu-header-name-font-size);font-weight:var(--user-menu-header-name-font-weight);color:var(--user-menu-header-name-color);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.user-menu__header-email{font-size:var(--user-menu-header-email-font-size);color:var(--user-menu-header-email-color);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.user-menu__item{align-items:center;gap:var(--user-menu-item-icon-gap);padding-block:var(--user-menu-item-padding-block);padding-inline:var(--user-menu-item-padding-inline);border-radius:var(--user-menu-item-border-radius);font-family:var(--user-menu-item-font-family);font-size:var(--user-menu-item-font-size);font-weight:var(--user-menu-item-font-weight);color:var(--user-menu-item-color);cursor:pointer;box-shadow:none;transition:background-color var(--user-menu-transition-duration) var(--user-menu-transition-easing), color var(--user-menu-transition-duration) var(--user-menu-transition-easing);outline:none;text-decoration:none;display:flex}.user-menu__item[data-highlighted]{background-color:var(--user-menu-item-highlighted-bg);color:var(--user-menu-item-highlighted-color)}.user-menu__item[data-disabled]{opacity:var(--user-menu-disabled-opacity);cursor:not-allowed;pointer-events:none}.user-menu__item.user-menu__item--destructive{color:var(--user-menu-item-destructive-color)}.user-menu__item.user-menu__item--destructive[data-highlighted]{background-color:var(--user-menu-item-destructive-highlighted-bg);color:var(--user-menu-item-destructive-highlighted-color)}.user-menu__separator{height:var(--user-menu-separator-height);background-color:var(--user-menu-separator-color);margin-block:var(--user-menu-separator-margin-block);border:none}.user-menu__positioner{z-index:var(--user-menu-content-z-index)}.user-menu__item-icon{flex-shrink:0}.user-menu__item-text{flex-direction:column;flex:1;min-width:0;display:flex}.user-menu__item-label,.user-menu__item-description{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.user-menu__item-description{font-size:var(--user-menu-header-email-font-size);color:var(--user-menu-header-email-color)}.user-menu__item[data-highlighted] .user-menu__item-description,.user-menu__item.user-menu__item--destructive .user-menu__item-description{color:inherit}
1
+ .user-menu__trigger{all:unset;box-sizing:border-box;align-items:center;gap:var(--user-menu-trigger-gap);inline-size:100%;padding-block:var(--user-menu-trigger-padding-block);padding-inline:var(--user-menu-trigger-padding-inline);border-radius:var(--user-menu-trigger-border-radius);cursor:pointer;display:flex}.user-menu__trigger.user-menu__trigger--compact{inline-size:auto;padding-inline:var(--user-menu-trigger-compact-padding-inline)}.user-menu__trigger:focus-visible{outline:var(--user-menu-focus-ring-width) solid var(--user-menu-focus-ring-color);outline-offset:var(--user-menu-focus-ring-offset)}.user-menu__avatar-wrap{flex-shrink:0;position:relative}.user-menu__notification-badge{position:absolute;inset-block-start:calc(-1 * var(--user-menu-badge-offset));inset-inline-end:calc(-1 * var(--user-menu-badge-offset))}.user-menu__name{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;font-size:var(--user-menu-name-font-size);font-weight:var(--user-menu-name-font-weight);color:var(--user-menu-name-color);flex:1;overflow:hidden}.user-menu__chevron{transition:transform var(--user-menu-transition-duration) var(--user-menu-transition-easing);flex-shrink:0;transform:rotate(90deg)}.user-menu__trigger[data-popup-open] .user-menu__chevron{transform:rotate(-90deg)}@keyframes user-menu-open{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes user-menu-close{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}.user-menu__content{box-sizing:border-box;background-color:var(--user-menu-content-bg);border-width:var(--user-menu-content-border-width);border-style:solid;border-color:var(--user-menu-content-border-color);border-radius:var(--user-menu-content-border-radius);box-shadow:var(--user-menu-content-shadow);padding-block:var(--user-menu-content-padding-block);padding-inline:var(--user-menu-content-padding-inline);min-inline-size:var(--user-menu-content-min-width);transform-origin:var(--transform-origin);max-block-size:var(--user-menu-content-max-height,var(--available-height));overscroll-behavior:contain;outline:none;overflow-y:auto}.user-menu__content[data-open]{animation:user-menu-open var(--user-menu-transition-duration) var(--user-menu-transition-easing)}.user-menu__content[data-closed]{animation:user-menu-close var(--user-menu-transition-duration) var(--user-menu-transition-easing)}.user-menu__header{align-items:center;gap:var(--user-menu-trigger-gap);padding-block:var(--user-menu-header-padding-block);padding-inline:var(--user-menu-header-padding-inline);display:flex}.user-menu__header-text{gap:var(--user-menu-header-gap);flex-direction:column;min-inline-size:0;display:flex}.user-menu__header-name{font-size:var(--user-menu-header-name-font-size);font-weight:var(--user-menu-header-name-font-weight);color:var(--user-menu-header-name-color);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.user-menu__header-email{font-size:var(--user-menu-header-email-font-size);color:var(--user-menu-header-email-color);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.user-menu__item{align-items:center;gap:var(--user-menu-item-icon-gap);padding-block:var(--user-menu-item-padding-block);padding-inline:var(--user-menu-item-padding-inline);border-radius:var(--user-menu-item-border-radius);font-family:var(--user-menu-item-font-family);font-size:var(--user-menu-item-font-size);font-weight:var(--user-menu-item-font-weight);color:var(--user-menu-item-color);cursor:pointer;box-shadow:none;transition:background-color var(--user-menu-transition-duration) var(--user-menu-transition-easing), color var(--user-menu-transition-duration) var(--user-menu-transition-easing);outline:none;text-decoration:none;display:flex}.user-menu__item[data-highlighted]{background-color:var(--user-menu-item-highlighted-bg);color:var(--user-menu-item-highlighted-color)}.user-menu__item[data-disabled]{opacity:var(--user-menu-disabled-opacity);cursor:not-allowed;pointer-events:none}.user-menu__item.user-menu__item--destructive{color:var(--user-menu-item-destructive-color)}.user-menu__item.user-menu__item--destructive[data-highlighted]{background-color:var(--user-menu-item-destructive-highlighted-bg);color:var(--user-menu-item-destructive-highlighted-color)}.user-menu__separator{block-size:var(--user-menu-separator-height);background-color:var(--user-menu-separator-color);margin-block:var(--user-menu-separator-margin-block);border:none}.user-menu__positioner{z-index:var(--user-menu-content-z-index)}.user-menu__item-icon{flex-shrink:0}.user-menu__item-text{flex-direction:column;flex:1;min-inline-size:0;display:flex}.user-menu__item-label,.user-menu__item-description{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.user-menu__item-description{font-size:var(--user-menu-header-email-font-size);color:var(--user-menu-header-email-color)}.user-menu__item[data-highlighted] .user-menu__item-description,.user-menu__item.user-menu__item--destructive .user-menu__item-description{color:inherit}
package/dist/user-menu.js CHANGED
@@ -4,88 +4,81 @@ import { n as e } from "./_shared/brandmessagescontext.js";
4
4
  import { Icon as t } from "./icon.js";
5
5
  import { n } from "./_shared/portal-container.js";
6
6
  import { Avatar as r } from "./avatar.js";
7
- import { NumberBadge as i } from "./number-badge.js";
8
- import { n as a } from "./_shared/dropdownitems.js";
9
- import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
10
- import { Menu as l } from "@base-ui/react/menu";
7
+ import { t as i } from "./_shared/side-offset.js";
8
+ import { NumberBadge as a } from "./number-badge.js";
9
+ import { t as o } from "./_shared/default-render-link.js";
10
+ import { t as s } from "./_shared/dropdownitems.js";
11
+ import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
12
+ import { Menu as d } from "@base-ui/react/menu";
11
13
  //#region src/stories/molecules/UserMenu/UserMenu.tsx
12
- function u(e) {
13
- let t = parseFloat(e);
14
- return Number.isNaN(t) ? 0 : e.endsWith("rem") ? t * parseFloat(getComputedStyle(document.documentElement).fontSize) : t;
15
- }
16
- function d() {
17
- let e = document.documentElement;
18
- return u(getComputedStyle(e).getPropertyValue("--user-menu-offset").trim());
19
- }
20
- function f({ children: e, ...t }) {
21
- return /* @__PURE__ */ s("a", {
22
- ...t,
23
- children: e
24
- });
25
- }
14
+ var f = i("--user-menu-offset");
26
15
  function p(e) {
27
16
  return ["user-menu__item", e ? "user-menu__item--destructive" : ""].filter(Boolean).join(" ");
28
17
  }
29
- function m({ name: u, email: m, avatarUrl: h, notificationCount: g, items: _ = [], label: v, compact: y = !1, renderLink: b = f, onOpenChange: x, defaultOpen: S }) {
30
- let C = e("userMenu"), w = n(void 0);
31
- return /* @__PURE__ */ c(l.Root, {
18
+ function m({ name: i, email: m, avatarUrl: h, notificationCount: g, items: _ = [], label: v, compact: y = !1, renderLink: b = o, onOpenChange: x, defaultOpen: S, className: C }) {
19
+ let w = e("userMenu"), T = n(void 0);
20
+ return /* @__PURE__ */ u(d.Root, {
32
21
  onOpenChange: (e) => x?.(e),
33
22
  defaultOpen: S,
34
- children: [/* @__PURE__ */ c(l.Trigger, {
35
- className: ["user-menu__trigger", y ? "user-menu__trigger--compact" : ""].filter(Boolean).join(" "),
36
- "aria-label": v ?? C("trigger")(u),
23
+ children: [/* @__PURE__ */ u(d.Trigger, {
24
+ className: [
25
+ "user-menu__trigger",
26
+ y ? "user-menu__trigger--compact" : "",
27
+ C
28
+ ].filter(Boolean).join(" "),
29
+ "aria-label": v ?? w("trigger")(i),
37
30
  children: [
38
- /* @__PURE__ */ c("span", {
31
+ /* @__PURE__ */ u("span", {
39
32
  className: "user-menu__avatar-wrap",
40
- children: [/* @__PURE__ */ s(r, {
33
+ children: [/* @__PURE__ */ l(r, {
41
34
  src: h,
42
- name: u,
35
+ name: i,
43
36
  alt: "",
44
37
  size: "sm"
45
- }), !!g && g > 0 && /* @__PURE__ */ s(i, {
38
+ }), !!g && g > 0 && /* @__PURE__ */ l(a, {
46
39
  count: g,
47
40
  variant: "danger",
48
- "aria-label": C("unread")(g),
41
+ "aria-label": w("unread")(g),
49
42
  className: "user-menu__notification-badge"
50
43
  })]
51
44
  }),
52
- !y && /* @__PURE__ */ s("span", {
45
+ !y && /* @__PURE__ */ l("span", {
53
46
  className: "user-menu__name",
54
- children: u
47
+ children: i
55
48
  }),
56
- /* @__PURE__ */ s(t, {
49
+ /* @__PURE__ */ l(t, {
57
50
  name: "chevron",
58
51
  size: "sm",
59
52
  className: "user-menu__chevron"
60
53
  })
61
54
  ]
62
- }), /* @__PURE__ */ s(l.Portal, {
63
- container: w,
64
- children: /* @__PURE__ */ s(l.Positioner, {
55
+ }), /* @__PURE__ */ l(d.Portal, {
56
+ container: T,
57
+ children: /* @__PURE__ */ l(d.Positioner, {
65
58
  className: "user-menu__positioner",
66
- sideOffset: d,
59
+ sideOffset: f,
67
60
  align: "start",
68
- children: /* @__PURE__ */ c(l.Popup, {
61
+ children: /* @__PURE__ */ u(d.Popup, {
69
62
  className: "user-menu__content",
70
- children: [/* @__PURE__ */ c("div", {
63
+ children: [/* @__PURE__ */ u("div", {
71
64
  className: "user-menu__header",
72
- children: [/* @__PURE__ */ s(r, {
65
+ children: [/* @__PURE__ */ l(r, {
73
66
  src: h,
74
- name: u,
67
+ name: i,
75
68
  alt: "",
76
69
  size: "md",
77
70
  className: "user-menu__header-avatar"
78
- }), /* @__PURE__ */ c("div", {
71
+ }), /* @__PURE__ */ u("div", {
79
72
  className: "user-menu__header-text",
80
- children: [/* @__PURE__ */ s("span", {
73
+ children: [/* @__PURE__ */ l("span", {
81
74
  className: "user-menu__header-name",
82
- children: u
83
- }), /* @__PURE__ */ s("span", {
75
+ children: i
76
+ }), /* @__PURE__ */ l("span", {
84
77
  className: "user-menu__header-email",
85
78
  children: m
86
79
  })]
87
80
  })]
88
- }), _.length > 0 && /* @__PURE__ */ c(o, { children: [/* @__PURE__ */ s(l.Separator, { className: "user-menu__separator" }), a({
81
+ }), _.length > 0 && /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ l(d.Separator, { className: "user-menu__separator" }), s({
89
82
  items: _,
90
83
  itemClass: p,
91
84
  separatorClass: "user-menu__separator",
@@ -1 +1 @@
1
- .visually-hidden{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}
1
+ .visually-hidden{clip-path:inset(50%);white-space:nowrap;border-width:0;block-size:1px;inline-size:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}
package/package.json CHANGED
@@ -1,12 +1,16 @@
1
1
  {
2
2
  "name": "@studiolxd/brand",
3
- "version": "49.28.0",
3
+ "version": "50.0.0",
4
4
  "description": "El sistema de diseño de Studio LXD: componentes React, tokens y documentación de la suite SLXD.",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/studiolxd/brand.git"
8
8
  },
9
9
  "homepage": "https://github.com/studiolxd/brand#readme",
10
+ "license": "MIT",
11
+ "engines": {
12
+ "node": ">=20"
13
+ },
10
14
  "type": "module",
11
15
  "exports": {
12
16
  "./accordion": {
@@ -207,6 +211,11 @@
207
211
  "import": "./dist/copy-button.js",
208
212
  "default": "./dist/copy-button.js"
209
213
  },
214
+ "./floating-toolbar": {
215
+ "types": "./dist/_types/molecules/FloatingToolbar/FloatingToolbar.d.ts",
216
+ "import": "./dist/floating-toolbar.js",
217
+ "default": "./dist/floating-toolbar.js"
218
+ },
210
219
  "./recovery-codes": {
211
220
  "types": "./dist/_types/molecules/RecoveryCodes/RecoveryCodes.d.ts",
212
221
  "import": "./dist/recovery-codes.js",
@@ -950,21 +959,18 @@
950
959
  "files": [
951
960
  "dist",
952
961
  "src/tokens",
953
- "CHANGELOG.md"
962
+ "!src/tokens/**/*.test.ts"
954
963
  ],
955
964
  "publishConfig": {
956
965
  "access": "public"
957
966
  },
958
967
  "scripts": {
959
- "dev": "vite",
960
- "build": "tsc -b && vite build",
961
968
  "build:lib": "rm -rf dist && vite build --config vite.lib.config.ts && tsc -b --force tsconfig.lib.json && node scripts/post-build.mjs",
962
- "build:css": "postcss src/index.css --use postcss-import -o dist/brand.css",
963
- "build:tokens-css": "postcss src/tokens/index.css --use postcss-import -o dist/tokens.css",
969
+ "build:css": "postcss src/index.css --use postcss-import --no-map -o dist/brand.css",
970
+ "build:tokens-css": "postcss src/tokens/index.css --use postcss-import --no-map -o dist/tokens.css",
964
971
  "build:fonts-css": "node scripts/build-fonts-css.mjs",
965
972
  "build:icons": "node scripts/build-icons.mjs",
966
973
  "lint": "eslint .",
967
- "preview": "vite preview",
968
974
  "build:tokens": "node sd.config.mjs",
969
975
  "build:email-assets": "node scripts/build-email-assets.mjs",
970
976
  "build:native-fonts": "python3 scripts/build-native-fonts.py",
@@ -981,22 +987,28 @@
981
987
  },
982
988
  "dependencies": {
983
989
  "@base-ui/react": "^1.7.0",
984
- "@tanstack/react-table": "^8.21.3",
985
- "react-image-crop": "^11.1.2",
986
990
  "react-phone-number-input": "^3.4.16"
987
991
  },
988
992
  "peerDependencies": {
989
- "react": ">=18",
990
- "react-dom": ">=18",
993
+ "@tanstack/react-table": "^8.21.3",
994
+ "react": ">=19",
995
+ "react-dom": ">=19",
991
996
  "react-email": ">=6",
992
- "react-hook-form": ">=7"
997
+ "react-hook-form": ">=7",
998
+ "react-image-crop": "^11.1.2"
993
999
  },
994
1000
  "peerDependenciesMeta": {
1001
+ "@tanstack/react-table": {
1002
+ "optional": true
1003
+ },
995
1004
  "react-email": {
996
1005
  "optional": true
997
1006
  },
998
1007
  "react-hook-form": {
999
1008
  "optional": true
1009
+ },
1010
+ "react-image-crop": {
1011
+ "optional": true
1000
1012
  }
1001
1013
  },
1002
1014
  "devDependencies": {
@@ -1007,6 +1019,7 @@
1007
1019
  "@storybook/addon-mcp": "^10.6.0",
1008
1020
  "@storybook/addon-vitest": "^10.6.0",
1009
1021
  "@storybook/react-vite": "^10.6.0",
1022
+ "@tanstack/react-table": "^8.21.3",
1010
1023
  "@testing-library/jest-dom": "^7.0.1",
1011
1024
  "@testing-library/react": "^16.3.2",
1012
1025
  "@testing-library/user-event": "^14.6.5",
@@ -1033,7 +1046,7 @@
1033
1046
  "react-dom": "^19.2.4",
1034
1047
  "react-email": "^6.9.3",
1035
1048
  "react-hook-form": "^7.85.0",
1036
- "react-phone-number-input": "^3.4.16",
1049
+ "react-image-crop": "^11.1.2",
1037
1050
  "remark-gfm": "^4.0.1",
1038
1051
  "sharp": "^0.35.4",
1039
1052
  "storybook": "^10.6.0",
@@ -1042,7 +1055,6 @@
1042
1055
  "typescript": "~5.9.3",
1043
1056
  "typescript-eslint": "^8.57.0",
1044
1057
  "vite": "^8.0.1",
1045
- "vite-plugin-dts": "^4.5.4",
1046
1058
  "vitest": "^4.1.2"
1047
1059
  },
1048
1060
  "sideEffects": [
@@ -3,7 +3,11 @@
3
3
  */
4
4
 
5
5
  :root {
6
+ --async-multi-select-input-min-inline-size: 4rem; /** Ancho mínimo del texto de búsqueda junto a las píldoras: lo justo para escribir sin que salte de línea a cada letra */
6
7
  --async-multi-select-disabled-cursor: var(--input-disabled-cursor); /** Cursor cuando está deshabilitado: el de los campos */
8
+ --async-multi-select-disabled-opacity: var(--async-select-disabled-opacity); /** Opacidad del control deshabilitado: la del buscador de selección única */
9
+ --async-multi-select-pill-remove-opacity: var(--opacity-muted); /** Opacidad del aspa de la píldora en reposo: presente pero en segundo plano */
10
+ --async-multi-select-pill-remove-hover-opacity: var(--opacity-full); /** Opacidad del aspa de la píldora bajo el puntero */
7
11
  --async-multi-select-content-max-height: var(--multi-select-content-max-height); /** Hereda de `multi-select.content-max-height`: el buscador múltiple tiene la misma cara que el control síncrono */
8
12
  --async-multi-select-border-style: var(--multi-select-border-style); /** Hereda de `multi-select.border-style`: el buscador múltiple tiene la misma cara que el control síncrono */
9
13
  --async-multi-select-content-gap: var(--multi-select-content-gap); /** Hereda de `multi-select.content-gap`: el buscador múltiple tiene la misma cara que el control síncrono */
@@ -3,8 +3,11 @@
3
3
  */
4
4
 
5
5
  :root {
6
+ --async-select-disabled-opacity: 0.5; /** Opacidad del control deshabilitado. 0.5 no está en la escala `opacity` (la más cercana, `opacity.disabled`, es 0.4): se conserva el valor de siempre */
6
7
  --async-select-border-style: var(--select-border-style); /** Hereda de `select.border-style`: el buscador tiene la misma cara que el control síncrono */
7
8
  --async-select-disabled-cursor: var(--input-disabled-cursor); /** Cursor cuando está deshabilitado: el de los campos */
9
+ --async-select-clear-opacity: var(--opacity-muted); /** Opacidad del botón de limpiar en reposo: presente pero en segundo plano */
10
+ --async-select-clear-hover-opacity: var(--opacity-full); /** Opacidad del botón de limpiar bajo el puntero */
8
11
  --async-select-content-max-height: var(--select-content-max-height); /** Hereda de `select.content-max-height`: el buscador tiene la misma cara que el control síncrono */
9
12
  --async-select-bg: var(--select-bg); /** Hereda de `select.bg`: el buscador tiene la misma cara que el control síncrono */
10
13
  --async-select-content-bg: var(--select-content-bg); /** Hereda de `select.content-bg`: el buscador tiene la misma cara que el control síncrono */
@@ -3,6 +3,7 @@
3
3
  */
4
4
 
5
5
  :root {
6
+ --autocomplete-disabled-opacity: var(--async-select-disabled-opacity); /** Hereda de `async-select.disabled-opacity`: el autocompletado tiene la misma cara que el buscador y el Select */
6
7
  --autocomplete-border-style: var(--async-select-border-style); /** Hereda de `async-select.border-style`: el autocompletado tiene la misma cara que el buscador y el Select */
7
8
  --autocomplete-disabled-cursor: var(--async-select-disabled-cursor); /** Hereda de `async-select.disabled-cursor`: el autocompletado tiene la misma cara que el buscador y el Select */
8
9
  --autocomplete-content-max-height: var(--async-select-content-max-height); /** Hereda de `async-select.content-max-height`: el autocompletado tiene la misma cara que el buscador y el Select */
@@ -4,8 +4,6 @@
4
4
 
5
5
  :root {
6
6
  --breadcrumb-padding-inline: 0; /** Sin padding lateral */
7
- --breadcrumb-link-text-decoration: none; /** OBSOLETO — no viste nada. El subrayado de las migas es la línea del sistema, la misma de cualquier enlace, y no `text-decoration`. Se conserva en `none` para no romper a quien lo tenga referenciado; a retirar en el próximo major */
8
- --breadcrumb-link-text-decoration-hover: none; /** OBSOLETO — no viste nada. Valía `underline` y era la vía por la que el subrayado de `text-decoration` seguía entrando en el DS. A retirar en el próximo major */
9
7
  --breadcrumb-font-family: var(--font-family-sans); /** Font family */
10
8
  --breadcrumb-line-height: var(--line-height-none); /** Single-line */
11
9
  --breadcrumb-gap: var(--spacing-2); /** Gap entre items y separadores */
@@ -4,7 +4,6 @@
4
4
 
5
5
  :root {
6
6
  --button-border-style: solid; /** Border style */
7
- --button-border-color: rgba(0, 0, 0, 0); /** Default border color — overridden by variants */
8
7
  --button-justify-content: center; /** Justify content */
9
8
  --button-cursor: pointer; /** Cursor */
10
9
  --button-white-space: nowrap; /** White space */
@@ -50,14 +49,6 @@
50
49
  --button-primary-disabled-cursor: var(--button-disabled-cursor); /** Cursor when disabled */
51
50
  --button-primary-disabled-color: var(--color-white); /** Text color when disabled — white on grey background */
52
51
  --button-primary-focus-ring-style: var(--button-focus-ring-style); /** Focus ring border style */
53
- --button-destructive-border-style: var(--button-border-style); /** Border style */
54
- --button-destructive-justify-content: var(--button-justify-content); /** Justify content */
55
- --button-destructive-cursor: var(--button-cursor); /** Cursor */
56
- --button-destructive-white-space: var(--button-white-space); /** White space */
57
- --button-destructive-text-decoration: var(--button-text-decoration); /** Text decoration */
58
- --button-destructive-disabled-cursor: var(--button-disabled-cursor); /** Cursor when disabled */
59
- --button-destructive-focus-ring-style: var(--button-focus-ring-style); /** Focus ring border style */
60
- --button-destructive-bg: var(--color-white); /** Background */
61
52
  --button-outline-border-style: var(--button-border-style); /** Border style */
62
53
  --button-outline-justify-content: var(--button-justify-content); /** Justify content */
63
54
  --button-outline-cursor: var(--button-cursor); /** Cursor */
@@ -83,7 +74,6 @@
83
74
  --button-border-radius: var(--border-radius-default); /** Rectangular: el radio del sistema (0), como los campos */
84
75
  --button-border-width: var(--border-width-default); /** Border width */
85
76
  --button-font-weight: var(--font-weight-default); /** Font weight */
86
- --button-disabled-bg: var(--color-disabled-bg-on-light); /** Background when disabled — only form button changes bg */
87
77
  --button-disabled-color: var(--color-disabled-text-on-light); /** Text color when disabled — light surface */
88
78
  --button-disabled-border: var(--color-disabled-text-on-light); /** Border color when disabled — light surface, matches text for contrast */
89
79
  --button-focus-ring-width: var(--border-width-focus); /** Focus ring width */
@@ -104,13 +94,6 @@
104
94
  --button-primary-active-bg: var(--color-accent-2); /** Active background */
105
95
  --button-primary-active-color: var(--color-primary); /** Active text color */
106
96
  --button-primary-active-border: var(--color-accent-2); /** Active border color */
107
- --button-destructive-font-family: var(--button-font-family); /** Font family */
108
- --button-destructive-font-size: var(--button-font-size); /** Font size */
109
- --button-destructive-line-height: var(--button-line-height); /** Line height */
110
- --button-destructive-transition-duration: var(--button-transition-duration); /** Transition duration */
111
- --button-destructive-transition-easing: var(--button-transition-easing); /** Transition easing */
112
- --button-destructive-padding-inline: var(--button-padding-inline); /** Inline (horizontal) padding */
113
- --button-destructive-focus-ring-offset: var(--button-focus-ring-offset); /** Focus ring offset */
114
97
  --button-destructive-focus-ring-color: var(--color-destructive-text-on-light); /** Focus ring color */
115
98
  --button-destructive-color: var(--color-destructive-text-on-light); /** Text color */
116
99
  --button-destructive-border: var(--color-destructive-text-on-light); /** Border color */
@@ -163,12 +146,6 @@
163
146
  --button-primary-disabled-bg: var(--button-disabled-border); /** Background when disabled — filled with the disabled border color */
164
147
  --button-primary-disabled-border: var(--button-disabled-border); /** Border color when disabled */
165
148
  --button-primary-focus-ring-width: var(--button-focus-ring-width); /** Focus ring width */
166
- --button-destructive-border-radius: var(--button-border-radius); /** Border radius */
167
- --button-destructive-border-width: var(--button-border-width); /** Border width */
168
- --button-destructive-font-weight: var(--button-font-weight); /** Font weight */
169
- --button-destructive-disabled-color: var(--button-disabled-color); /** Text color when disabled */
170
- --button-destructive-disabled-border: var(--button-disabled-border); /** Border color when disabled */
171
- --button-destructive-focus-ring-width: var(--button-focus-ring-width); /** Focus ring width */
172
149
  --button-outline-border-radius: var(--button-border-radius); /** Border radius */
173
150
  --button-outline-border-width: var(--button-border-width); /** Border width */
174
151
  --button-outline-font-weight: var(--button-font-weight); /** Font weight */
@@ -4,14 +4,10 @@
4
4
 
5
5
  :root {
6
6
  --control-border-style: solid; /** Estilo del borde */
7
- --control-cursor: text; /** Cursor por defecto */
8
- --control-disabled-cursor: not-allowed; /** Cursor cuando está deshabilitado */
9
7
  --control-height: var(--size-component-md); /** Altura del control de una línea: la talla md del sistema. Es la talla de PARTIDA, y la superficie pública la apunta a `lg-height` */
10
8
  --control-font-family: var(--font-family-sans); /** Familia tipográfica */
11
9
  --control-font-size: var(--font-size-2); /** Tamaño de fuente */
12
10
  --control-line-height: var(--line-height-none); /** Interlineado */
13
- --control-transition-duration: var(--motion-duration-fast); /** Duración de la transición */
14
- --control-transition-easing: var(--motion-easing-default); /** Curva de animación */
15
11
  --control-padding-inline: var(--spacing-4); /** Padding inline — compartido por controles y elementos de formulario */
16
12
  --control-padding-block: var(--spacing-4); /** Padding block — solo para lo multilínea (Textarea) y para el aire de las filas de formulario. Los controles de una línea fijan su altura a la talla (`height`) con padding vertical 0 */
17
13
  --control-lg-height: var(--size-component-lg); /** Altura del control en talla lg: la talla lg del sistema. Es lo que la superficie pública pone como talla de partida (`.site-shell`) */
@@ -3,9 +3,6 @@
3
3
  */
4
4
 
5
5
  :root {
6
- --file-upload-border-style: dashed; /** Estilo de borde del dropzone */
7
- --file-upload-drag-border-style: solid; /** Estilo de borde en drag activo */
8
- --file-upload-error-border-style: solid; /** Estilo de borde en error */
9
6
  --file-upload-disabled-opacity: 0.5; /** Opacidad cuando está deshabilitado */
10
7
  --file-upload-padding-inline: var(--spacing-5); /** Padding horizontal del dropzone */
11
8
  --file-upload-gap: var(--spacing-1); /** Espacio entre elementos dentro del dropzone */
@@ -40,7 +37,6 @@
40
37
  --file-upload-border-dash-gap: var(--spacing-2); /** Hueco entre trazos del borde discontinuo (antes 10px, fuera de la escala) */
41
38
  --file-upload-border-color: var(--color-primary); /** Borde del dropzone por defecto */
42
39
  --file-upload-border-width: var(--border-width-default); /** Grosor del borde */
43
- --file-upload-border-radius: var(--border-radius-default); /** Radio de esquinas del dropzone */
44
40
  --file-upload-bg: var(--color-surface-secondary-on-light); /** Fondo del dropzone */
45
41
  --file-upload-text-color: var(--color-text-on-light); /** Color del texto principal */
46
42
  --file-upload-subtext-color: var(--color-text-muted-on-light); /** Color del texto secundario y restricciones */
@@ -36,4 +36,6 @@ html.dark {
36
36
  --radio-border-color: var(--color-text-on-dark); /** Borde de la marca — surface-dark: la tinta de la superficie */
37
37
  --radio-dot-color: var(--color-text-on-dark); /** Punto de la marca — surface-dark */
38
38
  --radio-focus-ring-color: var(--color-text-on-dark); /** Anillo de foco — surface-dark */
39
+ --radio-disabled-border-color: var(--color-text-muted-on-dark); /** Borde deshabilitado — surface-dark (mismo par que checkbox) */
40
+ --radio-disabled-dot-color: var(--color-text-muted-on-dark); /** Punto deshabilitado y seleccionado — surface-dark (mismo par que checkbox) */
39
41
  }
@@ -17,7 +17,6 @@
17
17
  --site-header-z-index: var(--app-header-z-index); /** Capa z — sobre el contenido, bajo los paneles flotantes */
18
18
  --site-header-panel-bg: var(--color-background-light); /** Fondo del panel de navegación */
19
19
  --site-header-panel-padding-block: var(--section-padding-block-xl); /** Aire superior del panel, entre la barra y el índice */
20
- --site-header-settings-margin-block-start: var(--site-header-panel-gap); /** Aire mínimo entre el índice y los ajustes del sitio (idioma, tema), que van pegados al borde inferior del panel: el ritmo del panel. Se mantiene por compatibilidad; quien quiera cambiarlo toca `panel-gap` */
21
20
  --site-header-content-height: var(--logo-height-xxl); /** Lo más alto que lleva la barra: el logotipo a talla xxl (85px) */
22
21
  --site-header-height-narrow: calc(var(--site-header-content-height-narrow) + 2 * var(--app-header-padding-block)); /** Alto de la barra en teléfono (56px, la misma que la barra de aplicación) */
23
22
  --site-header-height-compact: calc(var(--site-header-content-height-compact) + 2 * var(--app-header-padding-block)); /** Alto de la barra en móvil (64px) */
@@ -169,6 +169,7 @@
169
169
  @import "./molecules/org-chart.css";
170
170
  @import "./molecules/site-search.css";
171
171
  @import "./molecules/copy-button.css";
172
+ @import "./molecules/floating-toolbar.css";
172
173
  @import "./molecules/confirm-dialog.css";
173
174
  @import "./molecules/avatar-upload.css";
174
175
  @import "./molecules/recovery-codes.css";
@@ -180,15 +181,12 @@
180
181
  @import "./surface-dark-derived.css";
181
182
 
182
183
  /* Superficie invertida dentro de una oscura: devuelve a claro los tokens que el
183
- modo oscuro voltea. Va después del bloque de arriba, aunque gane por
184
- especificidad, para que se lea en el orden en que actúa. */
184
+ modo oscuro voltea. En el mismo bloque va la superficie siempre clara
185
+ (`.surface-light`, el interior del amarillo del aviso), que necesita los
186
+ mismos tokens con los mismos valores. Va después del bloque de arriba, aunque
187
+ gane por especificidad, para que se lea en el orden en que actúa. */
185
188
  @import "./surface-invert.css";
186
189
 
187
- /* Superficie siempre clara: el contrapunto de `.surface-dark`, para el interior
188
- de un relleno claro universal (el amarillo del aviso). Solo actúa dentro de
189
- una superficie oscura, que es donde hay algo que devolver a claro. */
190
- @import "./surface-light.css";
191
-
192
190
  /* Remapeo de la superficie pública (`.site-shell`) — va al final: los tokens
193
191
  que redefine tienen la misma especificidad que los `:root` de arriba. */
194
192
  @import "./surface-public.css";
@@ -4,13 +4,8 @@
4
4
 
5
5
  :root {
6
6
  --async-multi-select-field-gap: var(--spacing-2); /** Espacio entre label, control, helper y error */
7
- --async-multi-select-field-error-font-family: var(--form-error-font-family); /** Font family del mensaje de error */
8
- --async-multi-select-field-error-line-height: var(--form-error-line-height); /** Line height del mensaje de error */
9
7
  --async-multi-select-field-helper-font-family: var(--form-helper-font-family); /** Font family del texto de ayuda */
10
8
  --async-multi-select-field-helper-line-height: var(--form-helper-line-height); /** Line height del texto de ayuda */
11
- --async-multi-select-field-error-font-size: var(--form-error-font-size); /** Font size del mensaje de error */
12
- --async-multi-select-field-error-font-weight: var(--form-error-font-weight); /** Font weight del mensaje de error */
13
- --async-multi-select-field-error-color: var(--form-error-color); /** Color del mensaje de error */
14
9
  --async-multi-select-field-helper-font-size: var(--form-helper-font-size); /** Font size del texto de ayuda */
15
10
  --async-multi-select-field-helper-font-weight: var(--form-helper-font-weight); /** Font weight del texto de ayuda */
16
11
  --async-multi-select-field-helper-color: var(--form-helper-color); /** Color del texto de ayuda */
@@ -20,6 +15,5 @@
20
15
  .surface-invert,
21
16
  [data-theme="dark"],
22
17
  html.dark {
23
- --async-multi-select-field-error-color: var(--color-error-text-on-dark); /** Color del mensaje de error — surface-dark */
24
18
  --async-multi-select-field-helper-color: var(--color-text-on-dark); /** Color del texto de ayuda — surface-dark */
25
19
  }