@lucasbernardosn/react-ui 0.3.0 → 0.4.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 (111) hide show
  1. package/README.md +2 -1
  2. package/dist/components/disclosure/collapsible/collapsible-panel-variants.d.ts +1 -1
  3. package/dist/components/disclosure/tabs/tabs-indicator-variants.d.ts +1 -1
  4. package/dist/components/disclosure/tabs/tabs-list-variants.d.ts +1 -1
  5. package/dist/components/disclosure/tabs/tabs-tab-variants.d.ts +1 -1
  6. package/dist/components/display/avatar/avatar-root-variants.d.ts +1 -1
  7. package/dist/components/display/badge/badge-variants.d.ts +4 -1
  8. package/dist/components/display/badge/badge-variants.js +5 -0
  9. package/dist/components/display/badge/badge-variants.js.map +1 -1
  10. package/dist/components/display/badge/badge.d.ts +10 -1
  11. package/dist/components/display/badge/badge.js +40 -2
  12. package/dist/components/display/badge/badge.js.map +1 -1
  13. package/dist/components/display/card/card-body.js +1 -0
  14. package/dist/components/display/card/card-body.js.map +1 -1
  15. package/dist/components/display/data-list/data-list-item-label-variants.d.ts +7 -0
  16. package/dist/components/display/data-list/data-list-item-label-variants.js +27 -0
  17. package/dist/components/display/data-list/data-list-item-label-variants.js.map +1 -0
  18. package/dist/components/display/data-list/data-list-item-label.d.ts +2 -1
  19. package/dist/components/display/data-list/data-list-item-label.js +9 -2
  20. package/dist/components/display/data-list/data-list-item-label.js.map +1 -1
  21. package/dist/components/display/data-list/data-list-item-value-variants.d.ts +1 -1
  22. package/dist/components/display/data-list/data-list-item-value-variants.js +9 -5
  23. package/dist/components/display/data-list/data-list-item-value-variants.js.map +1 -1
  24. package/dist/components/display/data-list/data-list-item-value.d.ts +2 -1
  25. package/dist/components/display/data-list/data-list-item-value.js +4 -3
  26. package/dist/components/display/data-list/data-list-item-value.js.map +1 -1
  27. package/dist/components/display/data-list/data-list-item-variants.d.ts +2 -6
  28. package/dist/components/display/data-list/data-list-item-variants.js +24 -26
  29. package/dist/components/display/data-list/data-list-item-variants.js.map +1 -1
  30. package/dist/components/display/data-list/data-list-item.d.ts +2 -1
  31. package/dist/components/display/data-list/data-list-item.js +7 -3
  32. package/dist/components/display/data-list/data-list-item.js.map +1 -1
  33. package/dist/components/display/data-list/data-list-root-variants.d.ts +1 -2
  34. package/dist/components/display/data-list/data-list-root-variants.js +7 -24
  35. package/dist/components/display/data-list/data-list-root-variants.js.map +1 -1
  36. package/dist/components/display/data-list/data-list-root.d.ts +3 -2
  37. package/dist/components/display/data-list/data-list-root.js +8 -3
  38. package/dist/components/display/data-list/data-list-root.js.map +1 -1
  39. package/dist/components/display/data-list/use-data-list-context.d.ts +18 -7
  40. package/dist/components/display/data-list/use-data-list-context.js +3 -2
  41. package/dist/components/display/data-list/use-data-list-context.js.map +1 -1
  42. package/dist/components/display/tag/tag-root-variants.d.ts +1 -2
  43. package/dist/components/display/tag/tag-root-variants.js +0 -1
  44. package/dist/components/display/tag/tag-root-variants.js.map +1 -1
  45. package/dist/components/feedback/alert/alert-indicator.d.ts +2 -2
  46. package/dist/components/feedback/alert/alert-indicator.js +2 -2
  47. package/dist/components/feedback/alert/alert-indicator.js.map +1 -1
  48. package/dist/components/layout/center-absolute/center-absolute-variants.d.ts +1 -1
  49. package/dist/components/layout/scroll-area/scroll-area-root.d.ts +16 -3
  50. package/dist/components/layout/scroll-area/scroll-area-root.js +6 -3
  51. package/dist/components/layout/scroll-area/scroll-area-root.js.map +1 -1
  52. package/dist/components/layout/scroll-area/scroll-area-scrollbar.d.ts +3 -0
  53. package/dist/components/layout/scroll-area/scroll-area-scrollbar.js +9 -2
  54. package/dist/components/layout/scroll-area/scroll-area-scrollbar.js.map +1 -1
  55. package/dist/components/layout/scroll-area/scroll-area-thumb.d.ts +5 -1
  56. package/dist/components/layout/scroll-area/scroll-area-thumb.js +15 -5
  57. package/dist/components/layout/scroll-area/scroll-area-thumb.js.map +1 -1
  58. package/dist/components/layout/scroll-area/scroll-area-viewport-variants.d.ts +1 -1
  59. package/dist/components/overlays/alert-dialog/alert-dialog-body.d.ts +5 -2
  60. package/dist/components/overlays/alert-dialog/alert-dialog-body.js +8 -3
  61. package/dist/components/overlays/alert-dialog/alert-dialog-body.js.map +1 -1
  62. package/dist/components/overlays/alert-dialog/alert-dialog-footer.d.ts +6 -3
  63. package/dist/components/overlays/alert-dialog/alert-dialog-footer.js +9 -5
  64. package/dist/components/overlays/alert-dialog/alert-dialog-footer.js.map +1 -1
  65. package/dist/components/overlays/alert-dialog/alert-dialog-header.d.ts +9 -2
  66. package/dist/components/overlays/alert-dialog/alert-dialog-header.js +19 -5
  67. package/dist/components/overlays/alert-dialog/alert-dialog-header.js.map +1 -1
  68. package/dist/components/overlays/alert-dialog/alert-dialog-imperative.d.ts +87 -28
  69. package/dist/components/overlays/alert-dialog/alert-dialog-imperative.js +120 -55
  70. package/dist/components/overlays/alert-dialog/alert-dialog-imperative.js.map +1 -1
  71. package/dist/components/overlays/alert-dialog/alert-dialog-indicator-variants.d.ts +24 -0
  72. package/dist/components/overlays/alert-dialog/alert-dialog-indicator-variants.js +31 -0
  73. package/dist/components/overlays/alert-dialog/alert-dialog-indicator-variants.js.map +1 -0
  74. package/dist/components/overlays/alert-dialog/alert-dialog-indicator.d.ts +25 -0
  75. package/dist/components/overlays/alert-dialog/alert-dialog-indicator.js +51 -0
  76. package/dist/components/overlays/alert-dialog/alert-dialog-indicator.js.map +1 -0
  77. package/dist/components/overlays/alert-dialog/alert-dialog-outlet.d.ts +4 -0
  78. package/dist/components/overlays/alert-dialog/alert-dialog-outlet.js +13 -2
  79. package/dist/components/overlays/alert-dialog/alert-dialog-outlet.js.map +1 -1
  80. package/dist/components/overlays/alert-dialog/alert-dialog-popup-variants.d.ts +4 -2
  81. package/dist/components/overlays/alert-dialog/alert-dialog-popup-variants.js +7 -6
  82. package/dist/components/overlays/alert-dialog/alert-dialog-popup-variants.js.map +1 -1
  83. package/dist/components/overlays/alert-dialog/alert-dialog-popup.d.ts +2 -1
  84. package/dist/components/overlays/alert-dialog/alert-dialog-popup.js +2 -1
  85. package/dist/components/overlays/alert-dialog/alert-dialog-popup.js.map +1 -1
  86. package/dist/components/overlays/alert-dialog/alert-dialog-store.d.ts +20 -4
  87. package/dist/components/overlays/alert-dialog/alert-dialog-store.js +48 -5
  88. package/dist/components/overlays/alert-dialog/alert-dialog-store.js.map +1 -1
  89. package/dist/components/overlays/alert-dialog/alert-dialog-title.d.ts +3 -2
  90. package/dist/components/overlays/alert-dialog/alert-dialog-title.js +4 -3
  91. package/dist/components/overlays/alert-dialog/alert-dialog-title.js.map +1 -1
  92. package/dist/components/overlays/alert-dialog/index.parts.d.ts +4 -3
  93. package/dist/components/overlays/alert-dialog/index.parts.js +3 -1
  94. package/dist/components/overlays/alert-dialog/index.parts.js.map +1 -1
  95. package/dist/components/overlays/dialog/dialog-body.js +1 -0
  96. package/dist/components/overlays/dialog/dialog-body.js.map +1 -1
  97. package/dist/components/overlays/dialog/dialog-popup-variants.d.ts +1 -1
  98. package/dist/components/overlays/dialog/dialog-popup-variants.js +2 -3
  99. package/dist/components/overlays/dialog/dialog-popup-variants.js.map +1 -1
  100. package/dist/components/overlays/drawer/drawer-body.js +1 -0
  101. package/dist/components/overlays/drawer/drawer-body.js.map +1 -1
  102. package/dist/components/typography/link/index.d.ts +3 -0
  103. package/dist/components/typography/link/index.js +2 -0
  104. package/dist/components/typography/link/link-variants.d.ts +33 -0
  105. package/dist/components/typography/link/link-variants.js +91 -0
  106. package/dist/components/typography/link/link-variants.js.map +1 -0
  107. package/dist/components/typography/link/link.d.ts +50 -0
  108. package/dist/components/typography/link/link.js +74 -0
  109. package/dist/components/typography/link/link.js.map +1 -0
  110. package/dist/components/typography/mark/mark-variants.d.ts +1 -1
  111. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog-popup-variants.js","names":[],"sources":["../../../../src/components/overlays/alert-dialog/alert-dialog-popup-variants.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport { alertDialogDefaultVariants } from './use-alert-dialog-context';\n\n/**\n * Cópia de `dialogPopupVariants`, sem diferenças (tabela no README de `overlays`): superfície,\n * largura pelo `size`, respiro e tipografia fixos e aninhamento estão explicados lá.\n */\nexport const alertDialogPopupVariants = cva(\n [\n '[--alert-dialog-padding:--spacing(4)]',\n\n 'relative',\n\n 'flex',\n 'flex-col',\n\n 'w-full',\n 'max-h-full',\n\n 'rounded-md',\n 'corner-squircle',\n 'outline-1',\n 'outline-gray-6',\n\n 'bg-gray-1',\n 'dark:bg-gray-1',\n\n 'shadow-lg',\n 'shadow-black/12',\n 'dark:shadow-none',\n\n // O popup vai para o `body` pelo portal: sem cor própria, o texto herdaria a do navegador.\n 'text-sm',\n 'text-gray-12',\n\n 'not-motion-reduced:transition-[translate,opacity,scale]',\n 'not-motion-reduced:ease-enter',\n 'not-motion-reduced:duration-150',\n\n 'not-motion-reduced:data-starting-style:scale-95',\n 'not-motion-reduced:data-ending-style:scale-95',\n 'not-motion-reduced:data-ending-style:ease-exit',\n 'not-motion-reduced:data-ending-style:duration-100',\n 'data-starting-style:opacity-0',\n 'data-ending-style:opacity-0',\n\n 'not-motion-reduced:data-nested-dialog-open:scale-[calc(1-0.05*var(--nested-dialogs))]',\n 'not-motion-reduced:data-nested-dialog-open:-translate-y-[calc(var(--nested-dialogs)*(--spacing(6)))]',\n\n \"after:content-['']\",\n 'after:absolute',\n 'after:inset-0',\n 'after:rounded-[inherit]',\n 'after:bg-black/20',\n 'after:opacity-0',\n 'after:pointer-events-none',\n 'not-motion-reduced:after:transition-opacity',\n 'not-motion-reduced:after:duration-150',\n 'data-nested-dialog-open:after:opacity-100',\n ],\n {\n variants: {\n size: {\n xs: ['max-w-xs'],\n sm: ['max-w-sm'],\n md: ['max-w-md'],\n lg: ['max-w-lg'],\n xl: ['max-w-xl'],\n '2xl': ['max-w-2xl'],\n '3xl': ['max-w-3xl'],\n '4xl': ['max-w-4xl'],\n '5xl': ['max-w-5xl'],\n '6xl': ['max-w-6xl'],\n '7xl': ['max-w-7xl'],\n full: ['max-w-none', 'h-full'],\n },\n },\n defaultVariants: {\n size: alertDialogDefaultVariants.size,\n },\n },\n);\n"],"mappings":";;;;;;;AAOA,MAAa,2BAA2B,IACtC;CACE;CAEA;CAEA;CACA;CAEA;CACA;CAEA;CACA;CACA;CACA;CAEA;CACA;CAEA;CACA;CACA;CAGA;CACA;CAEA;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GACA;CACE,UAAU,EACR,MAAM;EACJ,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,MAAM,CAAC,cAAc,QAAQ;CAC/B,EACF;CACA,iBAAiB,EACf,MAAM,2BAA2B,KACnC;AACF,CACF"}
1
+ {"version":3,"file":"alert-dialog-popup-variants.js","names":[],"sources":["../../../../src/components/overlays/alert-dialog/alert-dialog-popup-variants.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport { alertDialogDefaultVariants } from './use-alert-dialog-context';\n\n/**\n * Cópia de `dialogPopupVariants` (tabela no README de `overlays`): superfície, largura pelo `size`,\n * respiro e tipografia fixos e aninhamento estão explicados lá. As diferenças: o respiro é de 24px\n * e a sombra é `shadow-xl`. O AlertDialog segue o modelo de superfície da pendência \"Superfícies\"\n * do ROADMAP, ainda não aplicado ao Dialog.\n */\nexport const alertDialogPopupVariants = cva(\n [\n '[--alert-dialog-padding:--spacing(6)]',\n\n 'relative',\n\n 'flex',\n 'flex-col',\n\n 'w-full',\n 'max-h-full',\n\n 'rounded-lg',\n 'outline-1',\n 'outline-gray-6',\n\n 'bg-gray-1',\n 'dark:bg-gray-1',\n\n 'shadow-xl',\n 'shadow-black/12',\n 'dark:shadow-none',\n\n // O popup vai para o `body` pelo portal: sem cor própria, o texto herdaria a do navegador.\n 'text-sm',\n 'text-gray-12',\n\n 'not-motion-reduced:transition-[translate,opacity,scale]',\n 'not-motion-reduced:ease-enter',\n 'not-motion-reduced:duration-150',\n\n 'not-motion-reduced:data-starting-style:scale-95',\n 'not-motion-reduced:data-ending-style:scale-95',\n 'not-motion-reduced:data-ending-style:ease-exit',\n 'not-motion-reduced:data-ending-style:duration-100',\n 'data-starting-style:opacity-0',\n 'data-ending-style:opacity-0',\n\n 'not-motion-reduced:data-nested-dialog-open:scale-[calc(1-0.05*var(--nested-dialogs))]',\n 'not-motion-reduced:data-nested-dialog-open:-translate-y-[calc(var(--nested-dialogs)*(--spacing(6)))]',\n\n \"after:content-['']\",\n 'after:absolute',\n 'after:inset-0',\n 'after:rounded-[inherit]',\n 'after:bg-black/20',\n 'after:opacity-0',\n 'after:pointer-events-none',\n 'not-motion-reduced:after:transition-opacity',\n 'not-motion-reduced:after:duration-150',\n 'data-nested-dialog-open:after:opacity-100',\n ],\n {\n variants: {\n size: {\n xs: ['max-w-xs'],\n sm: ['max-w-sm'],\n md: ['max-w-md'],\n lg: ['max-w-lg'],\n xl: ['max-w-xl'],\n '2xl': ['max-w-2xl'],\n '3xl': ['max-w-3xl'],\n '4xl': ['max-w-4xl'],\n '5xl': ['max-w-5xl'],\n '6xl': ['max-w-6xl'],\n '7xl': ['max-w-7xl'],\n full: ['max-w-none', 'h-full'],\n },\n },\n defaultVariants: {\n size: alertDialogDefaultVariants.size,\n },\n },\n);\n"],"mappings":";;;;;;;;;AASA,MAAa,2BAA2B,IACtC;CACE;CAEA;CAEA;CACA;CAEA;CACA;CAEA;CACA;CACA;CAEA;CACA;CAEA;CACA;CACA;CAGA;CACA;CAEA;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GACA;CACE,UAAU,EACR,MAAM;EACJ,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,MAAM,CAAC,cAAc,QAAQ;CAC/B,EACF;CACA,iBAAiB,EACf,MAAM,2BAA2B,KACnC;AACF,CACF"}
@@ -7,7 +7,8 @@ export type AlertDialogPopupState = AlertDialog.Popup.State;
7
7
  *
8
8
  * Ao abrir, o foco vai para o primeiro elemento focável: com só os botões no `Footer`, o primeiro
9
9
  * deles. Ponha a ação que não destrói ("Cancelar") antes da destrutiva, para um `Enter` dado sem
10
- * ler não confirmar.
10
+ * ler não confirmar. Com algo focável antes dos botões (um `Collapsible` no `Header`), passe um ref
11
+ * do botão em `initialFocus` para o foco abrir nele.
11
12
  */
12
13
  export declare const AlertDialogPopup: {
13
14
  (props: AlertDialogPopupProps): import("react").JSX.Element;
@@ -9,7 +9,8 @@ import { AlertDialog } from "@base-ui/react/alert-dialog";
9
9
  *
10
10
  * Ao abrir, o foco vai para o primeiro elemento focável: com só os botões no `Footer`, o primeiro
11
11
  * deles. Ponha a ação que não destrói ("Cancelar") antes da destrutiva, para um `Enter` dado sem
12
- * ler não confirmar.
12
+ * ler não confirmar. Com algo focável antes dos botões (um `Collapsible` no `Header`), passe um ref
13
+ * do botão em `initialFocus` para o foco abrir nele.
13
14
  */
14
15
  const AlertDialogPopup = (props) => {
15
16
  const { className, ...rest } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog-popup.js","names":["BaseAlertDialog"],"sources":["../../../../src/components/overlays/alert-dialog/alert-dialog-popup.tsx"],"sourcesContent":["import { AlertDialog as BaseAlertDialog } from '@base-ui/react/alert-dialog';\nimport { mergeStateClassNames } from '#utils';\nimport { alertDialogPopupVariants } from './alert-dialog-popup-variants';\nimport { useAlertDialogContext } from './use-alert-dialog-context';\n\nexport type AlertDialogPopupProps = BaseAlertDialog.Popup.Props;\n\nexport type AlertDialogPopupState = BaseAlertDialog.Popup.State;\n\n/**\n * Caixa do alert dialog, com `role=\"alertdialog\"`, na largura do `size` do `AlertDialog.Root`.\n *\n * Ao abrir, o foco vai para o primeiro elemento focável: com só os botões no `Footer`, o primeiro\n * deles. Ponha a ação que não destrói (\"Cancelar\") antes da destrutiva, para um `Enter` dado sem\n * ler não confirmar.\n */\nexport const AlertDialogPopup = (props: AlertDialogPopupProps) => {\n const { className, ...rest } = props;\n\n const { size } = useAlertDialogContext();\n\n return (\n <BaseAlertDialog.Popup\n data-component=\"AlertDialog.Popup\"\n className={mergeStateClassNames(\n alertDialogPopupVariants({ size }),\n className,\n )}\n {...rest}\n />\n );\n};\n\nAlertDialogPopup.displayName = 'AlertDialog.Popup';\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAa,oBAAoB,UAAiC;CAChE,MAAM,EAAE,WAAW,GAAG,SAAS;CAE/B,MAAM,EAAE,SAAS,sBAAsB;CAEvC,OACE,oBAACA,YAAgB,OAAjB;EACE,kBAAe;EACf,WAAW,qBACT,yBAAyB,EAAE,KAAK,CAAC,GACjC,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,iBAAiB,cAAc"}
1
+ {"version":3,"file":"alert-dialog-popup.js","names":["BaseAlertDialog"],"sources":["../../../../src/components/overlays/alert-dialog/alert-dialog-popup.tsx"],"sourcesContent":["import { AlertDialog as BaseAlertDialog } from '@base-ui/react/alert-dialog';\nimport { mergeStateClassNames } from '#utils';\nimport { alertDialogPopupVariants } from './alert-dialog-popup-variants';\nimport { useAlertDialogContext } from './use-alert-dialog-context';\n\nexport type AlertDialogPopupProps = BaseAlertDialog.Popup.Props;\n\nexport type AlertDialogPopupState = BaseAlertDialog.Popup.State;\n\n/**\n * Caixa do alert dialog, com `role=\"alertdialog\"`, na largura do `size` do `AlertDialog.Root`.\n *\n * Ao abrir, o foco vai para o primeiro elemento focável: com só os botões no `Footer`, o primeiro\n * deles. Ponha a ação que não destrói (\"Cancelar\") antes da destrutiva, para um `Enter` dado sem\n * ler não confirmar. Com algo focável antes dos botões (um `Collapsible` no `Header`), passe um ref\n * do botão em `initialFocus` para o foco abrir nele.\n */\nexport const AlertDialogPopup = (props: AlertDialogPopupProps) => {\n const { className, ...rest } = props;\n\n const { size } = useAlertDialogContext();\n\n return (\n <BaseAlertDialog.Popup\n data-component=\"AlertDialog.Popup\"\n className={mergeStateClassNames(\n alertDialogPopupVariants({ size }),\n className,\n )}\n {...rest}\n />\n );\n};\n\nAlertDialogPopup.displayName = 'AlertDialog.Popup';\n"],"mappings":";;;;;;;;;;;;;;AAiBA,MAAa,oBAAoB,UAAiC;CAChE,MAAM,EAAE,WAAW,GAAG,SAAS;CAE/B,MAAM,EAAE,SAAS,sBAAsB;CAEvC,OACE,oBAACA,YAAgB,OAAjB;EACE,kBAAe;EACf,WAAW,qBACT,yBAAyB,EAAE,KAAK,CAAC,GACjC,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,iBAAiB,cAAc"}
@@ -1,18 +1,34 @@
1
1
  import React from "react";
2
2
  //#region src/components/overlays/alert-dialog/alert-dialog-store.d.ts
3
+ /**
4
+ * Em que ponto da vida está um alerta: `open` (na tela, inclusive durante o `onConfirm`),
5
+ * `closing` (a transição de saída roda) e `exited` (saiu da tela, mas a entrada fica por ter
6
+ * alertas aninhados).
7
+ */
8
+ type AlertDialogEntryStatus = 'open' | 'closing' | 'exited';
3
9
  /** Um alerta aberto por `AlertDialog.alert` ou `AlertDialog.confirm`, à espera do `Outlet`. */
4
- type AlertDialogEntry = {
10
+ export type AlertDialogEntry = {
5
11
  readonly id: number;
6
- /** O alerta pronto, com as opções e a resolução da promise presas no elemento. */
7
- readonly element: React.ReactNode;
12
+ /** O `id` do alerta em que este está aninhado, ou `null` se está na raiz. Fixo desde a abertura. */
13
+ readonly parentId: number | null;
14
+ readonly status: AlertDialogEntryStatus;
15
+ /**
16
+ * Monta o alerta com os aninhados dentro dele (`nested`) e diz se o pai ainda está aberto
17
+ * (`isParentOpen`, sempre `true` na raiz). As opções e a resolução da promise ficam presas na
18
+ * função, e o store não precisa conhecer o tipo delas.
19
+ */
20
+ readonly render: (nested: React.ReactNode, isParentOpen: boolean) => React.ReactNode;
8
21
  /** Resolve a promise como dispensada. Não faz nada se ela já resolveu. */
9
22
  readonly dismiss: () => void;
10
23
  };
24
+ /** O que `open` informa ao store; o `parentId` e o `status` são decididos por ele. */
25
+ type AlertDialogEntryInput = Pick<AlertDialogEntry, 'id' | 'render' | 'dismiss'>;
11
26
  export declare const alertDialogStore: {
12
27
  subscribe: (listener: () => void) => () => void;
13
28
  getSnapshot: () => readonly AlertDialogEntry[];
14
29
  createId: () => number;
15
- add: (entry: AlertDialogEntry) => void;
30
+ add: (input: AlertDialogEntryInput) => void;
31
+ markClosing: (id: number) => void;
16
32
  remove: (id: number) => void;
17
33
  registerOutlet: () => () => void;
18
34
  };
@@ -1,7 +1,18 @@
1
1
  //#region src/components/overlays/alert-dialog/alert-dialog-store.ts
2
2
  /**
3
- * Os alertas abertos, renderizados pelo `AlertDialog.Outlet`. Cada entrada guarda o elemento já
4
- * montado: o tipo das opções e da resposta fica no elemento, e o store não precisa conhecê-lo.
3
+ * Os alertas abertos, renderizados pelo `AlertDialog.Outlet`. O store é dono do aninhamento.
4
+ *
5
+ * O Base UI só escreve o efeito de pilha (`data-nested-dialog-open`, `--nested-dialogs`) num
6
+ * dialog cujo `Root` está abaixo do `Root` de outro na árvore do React. Por isso cada entrada fixa
7
+ * o `parentId` ao abrir: o último alerta ainda `open`, ou `null` se não houver. O pai não muda
8
+ * depois, porque mudar de lugar na árvore remontaria o alerta (perde o estado e reanima a
9
+ * entrada). Um alerta aberto com o de trás já `closing` vai para a raiz, e não fica preso a um
10
+ * pai que está saindo.
11
+ *
12
+ * O pai pode sair antes do filho (um `alert` aberto dentro do `onConfirm`, antes de ele
13
+ * resolver). A entrada dele passa a `exited` e fica como lugar do filho na árvore, sem nada
14
+ * visível, até o último filho sair; aí é removida, em cascata pelos ancestrais na mesma situação.
15
+ *
5
16
  * Cada mudança troca o array, para o `useSyncExternalStore` renderizar de novo.
6
17
  */
7
18
  const createAlertDialogStore = () => {
@@ -23,7 +34,13 @@ const createAlertDialogStore = () => {
23
34
  nextId += 1;
24
35
  return nextId;
25
36
  };
26
- const add = (entry) => {
37
+ const add = (input) => {
38
+ const parent = entries.findLast((candidate) => candidate.status === "open");
39
+ const entry = {
40
+ ...input,
41
+ parentId: parent?.id ?? null,
42
+ status: "open"
43
+ };
27
44
  entries = [...entries, entry];
28
45
  emit();
29
46
  /**
@@ -32,11 +49,36 @@ const createAlertDialogStore = () => {
32
49
  * em produção também: ele só aparece com o app montado errado.
33
50
  */
34
51
  queueMicrotask(() => {
35
- if (outletCount === 0 && entries.includes(entry)) console.error("AlertDialog: um alerta foi aberto sem nenhum <AlertDialog.Outlet /> montado, e ele não vai aparecer. Monte um <AlertDialog.Outlet /> perto da raiz do app.");
52
+ if (outletCount === 0 && entries.some((candidate) => candidate.id === entry.id)) console.error("AlertDialog: um alerta foi aberto sem nenhum <AlertDialog.Outlet /> montado, e ele não vai aparecer. Monte um <AlertDialog.Outlet /> perto da raiz do app.");
36
53
  });
37
54
  };
55
+ /** Marca que o alerta começou a fechar: ele deixa de ser candidato a pai de um alerta novo. */
56
+ const markClosing = (id) => {
57
+ if (entries.find((candidate) => candidate.id === id)?.status !== "open") return;
58
+ entries = entries.map((candidate) => candidate.id === id ? {
59
+ ...candidate,
60
+ status: "closing"
61
+ } : candidate);
62
+ emit();
63
+ };
64
+ /**
65
+ * Chamado quando o alerta terminou de sair. Se ainda tem alertas aninhados, a entrada fica como
66
+ * `exited`; se não, é removida junto com os ancestrais `exited` que ficaram sem filhos.
67
+ */
38
68
  const remove = (id) => {
39
- entries = entries.filter((entry) => entry.id !== id);
69
+ if (!entries.some((entry) => entry.id === id)) return;
70
+ let remaining = entries.map((entry) => entry.id === id ? {
71
+ ...entry,
72
+ status: "exited"
73
+ } : entry);
74
+ let hasPrunable = true;
75
+ while (hasPrunable) {
76
+ const parentIds = new Set(remaining.map((entry) => entry.parentId));
77
+ const pruned = remaining.filter((entry) => entry.status !== "exited" || parentIds.has(entry.id));
78
+ hasPrunable = pruned.length !== remaining.length;
79
+ remaining = pruned;
80
+ }
81
+ entries = remaining;
40
82
  emit();
41
83
  };
42
84
  /**
@@ -64,6 +106,7 @@ const createAlertDialogStore = () => {
64
106
  getSnapshot,
65
107
  createId,
66
108
  add,
109
+ markClosing,
67
110
  remove,
68
111
  registerOutlet
69
112
  };
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog-store.js","names":[],"sources":["../../../../src/components/overlays/alert-dialog/alert-dialog-store.ts"],"sourcesContent":["import type React from 'react';\n\n/** Um alerta aberto por `AlertDialog.alert` ou `AlertDialog.confirm`, à espera do `Outlet`. */\ntype AlertDialogEntry = {\n readonly id: number;\n /** O alerta pronto, com as opções e a resolução da promise presas no elemento. */\n readonly element: React.ReactNode;\n /** Resolve a promise como dispensada. Não faz nada se ela já resolveu. */\n readonly dismiss: () => void;\n};\n\n/**\n * Os alertas abertos, renderizados pelo `AlertDialog.Outlet`. Cada entrada guarda o elemento já\n * montado: o tipo das opções e da resposta fica no elemento, e o store não precisa conhecê-lo.\n * Cada mudança troca o array, para o `useSyncExternalStore` renderizar de novo.\n */\nconst createAlertDialogStore = () => {\n let entries: readonly AlertDialogEntry[] = [];\n let outletCount = 0;\n let nextId = 0;\n\n const listeners = new Set<() => void>();\n\n const emit = () => {\n for (const listener of listeners) {\n listener();\n }\n };\n\n const subscribe = (listener: () => void) => {\n listeners.add(listener);\n\n return () => {\n listeners.delete(listener);\n };\n };\n\n const getSnapshot = () => entries;\n\n const createId = () => {\n nextId += 1;\n\n return nextId;\n };\n\n const add = (entry: AlertDialogEntry) => {\n entries = [...entries, entry];\n emit();\n\n /**\n * Abrir um alerta e montar o `Outlet` podem cair no mesmo commit, e o `Outlet` só se registra\n * no efeito. Conferir depois de um microtask evita avisar num app montado certo. O aviso vale\n * em produção também: ele só aparece com o app montado errado.\n */\n queueMicrotask(() => {\n if (outletCount === 0 && entries.includes(entry)) {\n console.error(\n 'AlertDialog: um alerta foi aberto sem nenhum <AlertDialog.Outlet /> montado, e ele não ' +\n 'vai aparecer. Monte um <AlertDialog.Outlet /> perto da raiz do app.',\n );\n }\n });\n };\n\n const remove = (id: number) => {\n entries = entries.filter((entry) => entry.id !== id);\n emit();\n };\n\n /**\n * Registra um `Outlet` montado e devolve o cleanup. Quando o último sai, os alertas pendentes\n * resolvem como dispensados: sem isso, a promise de quem abriu nunca resolveria. A conferência\n * espera um microtask porque o StrictMode desmonta e remonta o efeito no mesmo commit, e\n * dispensar na hora fecharia todo alerta assim que abrisse.\n */\n const registerOutlet = () => {\n outletCount += 1;\n\n if (outletCount > 1) {\n console.error(\n 'AlertDialog: mais de um <AlertDialog.Outlet /> está montado, e cada alerta vai aparecer ' +\n 'em todos. Monte um só, perto da raiz do app.',\n );\n }\n\n return () => {\n outletCount -= 1;\n\n queueMicrotask(() => {\n if (outletCount > 0 || entries.length === 0) {\n return;\n }\n\n const dismissed = entries;\n\n entries = [];\n emit();\n\n for (const entry of dismissed) {\n entry.dismiss();\n }\n });\n };\n };\n\n return { subscribe, getSnapshot, createId, add, remove, registerOutlet };\n};\n\nexport const alertDialogStore = createAlertDialogStore();\n"],"mappings":";;;;;;AAgBA,MAAM,+BAA+B;CACnC,IAAI,UAAuC,CAAC;CAC5C,IAAI,cAAc;CAClB,IAAI,SAAS;CAEb,MAAM,4BAAY,IAAI,IAAgB;CAEtC,MAAM,aAAa;EACjB,KAAK,MAAM,YAAY,WACrB,SAAS;CAEb;CAEA,MAAM,aAAa,aAAyB;EAC1C,UAAU,IAAI,QAAQ;EAEtB,aAAa;GACX,UAAU,OAAO,QAAQ;EAC3B;CACF;CAEA,MAAM,oBAAoB;CAE1B,MAAM,iBAAiB;EACrB,UAAU;EAEV,OAAO;CACT;CAEA,MAAM,OAAO,UAA4B;EACvC,UAAU,CAAC,GAAG,SAAS,KAAK;EAC5B,KAAK;;;;;;EAOL,qBAAqB;GACnB,IAAI,gBAAgB,KAAK,QAAQ,SAAS,KAAK,GAC7C,QAAQ,MACN,4JAEF;EAEJ,CAAC;CACH;CAEA,MAAM,UAAU,OAAe;EAC7B,UAAU,QAAQ,QAAQ,UAAU,MAAM,OAAO,EAAE;EACnD,KAAK;CACP;;;;;;;CAQA,MAAM,uBAAuB;EAC3B,eAAe;EAEf,IAAI,cAAc,GAChB,QAAQ,MACN,sIAEF;EAGF,aAAa;GACX,eAAe;GAEf,qBAAqB;IACnB,IAAI,cAAc,KAAK,QAAQ,WAAW,GACxC;IAGF,MAAM,YAAY;IAElB,UAAU,CAAC;IACX,KAAK;IAEL,KAAK,MAAM,SAAS,WAClB,MAAM,QAAQ;GAElB,CAAC;EACH;CACF;CAEA,OAAO;EAAE;EAAW;EAAa;EAAU;EAAK;EAAQ;CAAe;AACzE;AAEA,MAAa,mBAAmB,uBAAuB"}
1
+ {"version":3,"file":"alert-dialog-store.js","names":[],"sources":["../../../../src/components/overlays/alert-dialog/alert-dialog-store.ts"],"sourcesContent":["import type React from 'react';\n\n/**\n * Em que ponto da vida está um alerta: `open` (na tela, inclusive durante o `onConfirm`),\n * `closing` (a transição de saída roda) e `exited` (saiu da tela, mas a entrada fica por ter\n * alertas aninhados).\n */\ntype AlertDialogEntryStatus = 'open' | 'closing' | 'exited';\n\n/** Um alerta aberto por `AlertDialog.alert` ou `AlertDialog.confirm`, à espera do `Outlet`. */\nexport type AlertDialogEntry = {\n readonly id: number;\n /** O `id` do alerta em que este está aninhado, ou `null` se está na raiz. Fixo desde a abertura. */\n readonly parentId: number | null;\n readonly status: AlertDialogEntryStatus;\n /**\n * Monta o alerta com os aninhados dentro dele (`nested`) e diz se o pai ainda está aberto\n * (`isParentOpen`, sempre `true` na raiz). As opções e a resolução da promise ficam presas na\n * função, e o store não precisa conhecer o tipo delas.\n */\n readonly render: (\n nested: React.ReactNode,\n isParentOpen: boolean,\n ) => React.ReactNode;\n /** Resolve a promise como dispensada. Não faz nada se ela já resolveu. */\n readonly dismiss: () => void;\n};\n\n/** O que `open` informa ao store; o `parentId` e o `status` são decididos por ele. */\ntype AlertDialogEntryInput = Pick<\n AlertDialogEntry,\n 'id' | 'render' | 'dismiss'\n>;\n\n/**\n * Os alertas abertos, renderizados pelo `AlertDialog.Outlet`. O store é dono do aninhamento.\n *\n * O Base UI só escreve o efeito de pilha (`data-nested-dialog-open`, `--nested-dialogs`) num\n * dialog cujo `Root` está abaixo do `Root` de outro na árvore do React. Por isso cada entrada fixa\n * o `parentId` ao abrir: o último alerta ainda `open`, ou `null` se não houver. O pai não muda\n * depois, porque mudar de lugar na árvore remontaria o alerta (perde o estado e reanima a\n * entrada). Um alerta aberto com o de trás já `closing` vai para a raiz, e não fica preso a um\n * pai que está saindo.\n *\n * O pai pode sair antes do filho (um `alert` aberto dentro do `onConfirm`, antes de ele\n * resolver). A entrada dele passa a `exited` e fica como lugar do filho na árvore, sem nada\n * visível, até o último filho sair; aí é removida, em cascata pelos ancestrais na mesma situação.\n *\n * Cada mudança troca o array, para o `useSyncExternalStore` renderizar de novo.\n */\nconst createAlertDialogStore = () => {\n let entries: readonly AlertDialogEntry[] = [];\n let outletCount = 0;\n let nextId = 0;\n\n const listeners = new Set<() => void>();\n\n const emit = () => {\n for (const listener of listeners) {\n listener();\n }\n };\n\n const subscribe = (listener: () => void) => {\n listeners.add(listener);\n\n return () => {\n listeners.delete(listener);\n };\n };\n\n const getSnapshot = () => entries;\n\n const createId = () => {\n nextId += 1;\n\n return nextId;\n };\n\n const add = (input: AlertDialogEntryInput) => {\n const parent = entries.findLast((candidate) => candidate.status === 'open');\n\n const entry: AlertDialogEntry = {\n ...input,\n parentId: parent?.id ?? null,\n status: 'open',\n };\n\n entries = [...entries, entry];\n emit();\n\n /**\n * Abrir um alerta e montar o `Outlet` podem cair no mesmo commit, e o `Outlet` só se registra\n * no efeito. Conferir depois de um microtask evita avisar num app montado certo. O aviso vale\n * em produção também: ele só aparece com o app montado errado.\n */\n queueMicrotask(() => {\n if (\n outletCount === 0 &&\n entries.some((candidate) => candidate.id === entry.id)\n ) {\n console.error(\n 'AlertDialog: um alerta foi aberto sem nenhum <AlertDialog.Outlet /> montado, e ele não ' +\n 'vai aparecer. Monte um <AlertDialog.Outlet /> perto da raiz do app.',\n );\n }\n });\n };\n\n /** Marca que o alerta começou a fechar: ele deixa de ser candidato a pai de um alerta novo. */\n const markClosing = (id: number) => {\n const entry = entries.find((candidate) => candidate.id === id);\n\n if (entry?.status !== 'open') {\n return;\n }\n\n entries = entries.map(\n (candidate): AlertDialogEntry =>\n candidate.id === id ? { ...candidate, status: 'closing' } : candidate,\n );\n emit();\n };\n\n /**\n * Chamado quando o alerta terminou de sair. Se ainda tem alertas aninhados, a entrada fica como\n * `exited`; se não, é removida junto com os ancestrais `exited` que ficaram sem filhos.\n */\n const remove = (id: number) => {\n if (!entries.some((entry) => entry.id === id)) {\n return;\n }\n\n let remaining = entries.map(\n (entry): AlertDialogEntry =>\n entry.id === id ? { ...entry, status: 'exited' } : entry,\n );\n\n let hasPrunable = true;\n\n while (hasPrunable) {\n const parentIds = new Set(remaining.map((entry) => entry.parentId));\n\n const pruned = remaining.filter(\n (entry) => entry.status !== 'exited' || parentIds.has(entry.id),\n );\n\n hasPrunable = pruned.length !== remaining.length;\n remaining = pruned;\n }\n\n entries = remaining;\n emit();\n };\n\n /**\n * Registra um `Outlet` montado e devolve o cleanup. Quando o último sai, os alertas pendentes\n * resolvem como dispensados: sem isso, a promise de quem abriu nunca resolveria. A conferência\n * espera um microtask porque o StrictMode desmonta e remonta o efeito no mesmo commit, e\n * dispensar na hora fecharia todo alerta assim que abrisse.\n */\n const registerOutlet = () => {\n outletCount += 1;\n\n if (outletCount > 1) {\n console.error(\n 'AlertDialog: mais de um <AlertDialog.Outlet /> está montado, e cada alerta vai aparecer ' +\n 'em todos. Monte um só, perto da raiz do app.',\n );\n }\n\n return () => {\n outletCount -= 1;\n\n queueMicrotask(() => {\n if (outletCount > 0 || entries.length === 0) {\n return;\n }\n\n const dismissed = entries;\n\n entries = [];\n emit();\n\n for (const entry of dismissed) {\n entry.dismiss();\n }\n });\n };\n };\n\n return {\n subscribe,\n getSnapshot,\n createId,\n add,\n markClosing,\n remove,\n registerOutlet,\n };\n};\n\nexport const alertDialogStore = createAlertDialogStore();\n"],"mappings":";;;;;;;;;;;;;;;;;AAkDA,MAAM,+BAA+B;CACnC,IAAI,UAAuC,CAAC;CAC5C,IAAI,cAAc;CAClB,IAAI,SAAS;CAEb,MAAM,4BAAY,IAAI,IAAgB;CAEtC,MAAM,aAAa;EACjB,KAAK,MAAM,YAAY,WACrB,SAAS;CAEb;CAEA,MAAM,aAAa,aAAyB;EAC1C,UAAU,IAAI,QAAQ;EAEtB,aAAa;GACX,UAAU,OAAO,QAAQ;EAC3B;CACF;CAEA,MAAM,oBAAoB;CAE1B,MAAM,iBAAiB;EACrB,UAAU;EAEV,OAAO;CACT;CAEA,MAAM,OAAO,UAAiC;EAC5C,MAAM,SAAS,QAAQ,UAAU,cAAc,UAAU,WAAW,MAAM;EAE1E,MAAM,QAA0B;GAC9B,GAAG;GACH,UAAU,QAAQ,MAAM;GACxB,QAAQ;EACV;EAEA,UAAU,CAAC,GAAG,SAAS,KAAK;EAC5B,KAAK;;;;;;EAOL,qBAAqB;GACnB,IACE,gBAAgB,KAChB,QAAQ,MAAM,cAAc,UAAU,OAAO,MAAM,EAAE,GAErD,QAAQ,MACN,4JAEF;EAEJ,CAAC;CACH;;CAGA,MAAM,eAAe,OAAe;EAGlC,IAFc,QAAQ,MAAM,cAAc,UAAU,OAAO,EAEnD,CAAC,EAAE,WAAW,QACpB;EAGF,UAAU,QAAQ,KACf,cACC,UAAU,OAAO,KAAK;GAAE,GAAG;GAAW,QAAQ;EAAU,IAAI,SAChE;EACA,KAAK;CACP;;;;;CAMA,MAAM,UAAU,OAAe;EAC7B,IAAI,CAAC,QAAQ,MAAM,UAAU,MAAM,OAAO,EAAE,GAC1C;EAGF,IAAI,YAAY,QAAQ,KACrB,UACC,MAAM,OAAO,KAAK;GAAE,GAAG;GAAO,QAAQ;EAAS,IAAI,KACvD;EAEA,IAAI,cAAc;EAElB,OAAO,aAAa;GAClB,MAAM,YAAY,IAAI,IAAI,UAAU,KAAK,UAAU,MAAM,QAAQ,CAAC;GAElE,MAAM,SAAS,UAAU,QACtB,UAAU,MAAM,WAAW,YAAY,UAAU,IAAI,MAAM,EAAE,CAChE;GAEA,cAAc,OAAO,WAAW,UAAU;GAC1C,YAAY;EACd;EAEA,UAAU;EACV,KAAK;CACP;;;;;;;CAQA,MAAM,uBAAuB;EAC3B,eAAe;EAEf,IAAI,cAAc,GAChB,QAAQ,MACN,sIAEF;EAGF,aAAa;GACX,eAAe;GAEf,qBAAqB;IACnB,IAAI,cAAc,KAAK,QAAQ,WAAW,GACxC;IAGF,MAAM,YAAY;IAElB,UAAU,CAAC;IACX,KAAK;IAEL,KAAK,MAAM,SAAS,WAClB,MAAM,QAAQ;GAElB,CAAC;EACH;CACF;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AAEA,MAAa,mBAAmB,uBAAuB"}
@@ -6,8 +6,9 @@ export type AlertDialogTitleState = AlertDialog.Title.State;
6
6
  * Título do alert dialog, um `h2` ligado ao popup por `aria-labelledby`. Diga a pergunta ou a
7
7
  * consequência ("Excluir o pedido 4821?"), não só a ação.
8
8
  *
9
- * Cópia de `DialogTitle`, sem diferenças (tabela no README de `overlays`); o mecanismo está
10
- * explicado lá.
9
+ * Cópia de `DialogTitle` (tabela no README de `overlays`; o mecanismo está explicado lá), com
10
+ * `font-semibold` no lugar de `font-medium`. Segue o modelo de superfície da pendência
11
+ * "Superfícies" do ROADMAP, ainda não aplicado ao Dialog.
11
12
  */
12
13
  export declare const AlertDialogTitle: {
13
14
  (props: AlertDialogTitleProps): import("react").JSX.Element;
@@ -6,8 +6,9 @@ import { AlertDialog } from "@base-ui/react/alert-dialog";
6
6
  * Título do alert dialog, um `h2` ligado ao popup por `aria-labelledby`. Diga a pergunta ou a
7
7
  * consequência ("Excluir o pedido 4821?"), não só a ação.
8
8
  *
9
- * Cópia de `DialogTitle`, sem diferenças (tabela no README de `overlays`); o mecanismo está
10
- * explicado lá.
9
+ * Cópia de `DialogTitle` (tabela no README de `overlays`; o mecanismo está explicado lá), com
10
+ * `font-semibold` no lugar de `font-medium`. Segue o modelo de superfície da pendência
11
+ * "Superfícies" do ROADMAP, ainda não aplicado ao Dialog.
11
12
  */
12
13
  const AlertDialogTitle = (props) => {
13
14
  const { className, ...rest } = props;
@@ -16,7 +17,7 @@ const AlertDialogTitle = (props) => {
16
17
  className: mergeStateClassNames([
17
18
  "text-base",
18
19
  "leading-6",
19
- "font-medium",
20
+ "font-semibold",
20
21
  "text-gray-12",
21
22
  "text-balance"
22
23
  ], className),
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog-title.js","names":["BaseAlertDialog"],"sources":["../../../../src/components/overlays/alert-dialog/alert-dialog-title.tsx"],"sourcesContent":["import { AlertDialog as BaseAlertDialog } from '@base-ui/react/alert-dialog';\nimport { mergeStateClassNames } from '#utils';\n\nexport type AlertDialogTitleProps = BaseAlertDialog.Title.Props;\n\nexport type AlertDialogTitleState = BaseAlertDialog.Title.State;\n\n/**\n * Título do alert dialog, um `h2` ligado ao popup por `aria-labelledby`. Diga a pergunta ou a\n * consequência (\"Excluir o pedido 4821?\"), não só a ação.\n *\n * Cópia de `DialogTitle`, sem diferenças (tabela no README de `overlays`); o mecanismo está\n * explicado lá.\n */\nexport const AlertDialogTitle = (props: AlertDialogTitleProps) => {\n const { className, ...rest } = props;\n\n return (\n <BaseAlertDialog.Title\n data-component=\"AlertDialog.Title\"\n className={mergeStateClassNames(\n [\n 'text-base',\n 'leading-6',\n 'font-medium',\n 'text-gray-12',\n 'text-balance',\n ],\n className,\n )}\n {...rest}\n />\n );\n};\n\nAlertDialogTitle.displayName = 'AlertDialog.Title';\n"],"mappings":";;;;;;;;;;;AAcA,MAAa,oBAAoB,UAAiC;CAChE,MAAM,EAAE,WAAW,GAAG,SAAS;CAE/B,OACE,oBAACA,YAAgB,OAAjB;EACE,kBAAe;EACf,WAAW,qBACT;GACE;GACA;GACA;GACA;GACA;EACF,GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,iBAAiB,cAAc"}
1
+ {"version":3,"file":"alert-dialog-title.js","names":["BaseAlertDialog"],"sources":["../../../../src/components/overlays/alert-dialog/alert-dialog-title.tsx"],"sourcesContent":["import { AlertDialog as BaseAlertDialog } from '@base-ui/react/alert-dialog';\nimport { mergeStateClassNames } from '#utils';\n\nexport type AlertDialogTitleProps = BaseAlertDialog.Title.Props;\n\nexport type AlertDialogTitleState = BaseAlertDialog.Title.State;\n\n/**\n * Título do alert dialog, um `h2` ligado ao popup por `aria-labelledby`. Diga a pergunta ou a\n * consequência (\"Excluir o pedido 4821?\"), não só a ação.\n *\n * Cópia de `DialogTitle` (tabela no README de `overlays`; o mecanismo está explicado lá), com\n * `font-semibold` no lugar de `font-medium`. Segue o modelo de superfície da pendência\n * \"Superfícies\" do ROADMAP, ainda não aplicado ao Dialog.\n */\nexport const AlertDialogTitle = (props: AlertDialogTitleProps) => {\n const { className, ...rest } = props;\n\n return (\n <BaseAlertDialog.Title\n data-component=\"AlertDialog.Title\"\n className={mergeStateClassNames(\n [\n 'text-base',\n 'leading-6',\n 'font-semibold',\n 'text-gray-12',\n 'text-balance',\n ],\n className,\n )}\n {...rest}\n />\n );\n};\n\nAlertDialogTitle.displayName = 'AlertDialog.Title';\n"],"mappings":";;;;;;;;;;;;AAeA,MAAa,oBAAoB,UAAiC;CAChE,MAAM,EAAE,WAAW,GAAG,SAAS;CAE/B,OACE,oBAACA,YAAgB,OAAjB;EACE,kBAAe;EACf,WAAW,qBACT;GACE;GACA;GACA;GACA;GACA;EACF,GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,iBAAiB,cAAc"}
@@ -5,7 +5,8 @@ import { AlertDialogDescription, AlertDialogDescriptionProps, AlertDialogDescrip
5
5
  import { AlertDialogFooter, AlertDialogFooterProps } from "./alert-dialog-footer.js";
6
6
  import { AlertDialogHeader, AlertDialogHeaderProps } from "./alert-dialog-header.js";
7
7
  import { AlertDialogVariants } from "./use-alert-dialog-context.js";
8
- import { AlertDialogAlertOptions, AlertDialogButtonOptions, AlertDialogConfirmOptions, alertDialogAlert, alertDialogConfirm } from "./alert-dialog-imperative.js";
8
+ import { AlertDialogAlertOptions, AlertDialogConfirmOptions, alertDialogAlert, alertDialogConfirm } from "./alert-dialog-imperative.js";
9
+ import { AlertDialogIndicator, AlertDialogIndicatorProps } from "./alert-dialog-indicator.js";
9
10
  import { AlertDialogOutlet } from "./alert-dialog-outlet.js";
10
11
  import { AlertDialogPopup, AlertDialogPopupProps, AlertDialogPopupState } from "./alert-dialog-popup.js";
11
12
  import { AlertDialogPortal, AlertDialogPortalProps, AlertDialogPortalState } from "./alert-dialog-portal.js";
@@ -15,8 +16,8 @@ import { AlertDialogTrigger, AlertDialogTriggerProps, AlertDialogTriggerState }
15
16
  import { AlertDialogViewport, AlertDialogViewportProps, AlertDialogViewportState } from "./alert-dialog-viewport.js";
16
17
  import { AlertDialogHandle, createAlertDialogHandle } from "./create-handle.js";
17
18
  declare namespace index_parts_d_exports {
18
- export { AlertDialogAlertOptions as AlertOptions, AlertDialogBackdrop as Backdrop, AlertDialogBackdropProps as BackdropProps, AlertDialogBackdropState as BackdropState, AlertDialogBody as Body, AlertDialogBodyProps as BodyProps, AlertDialogButtonOptions as ButtonOptions, AlertDialogClose as Close, AlertDialogCloseProps as CloseProps, AlertDialogCloseState as CloseState, AlertDialogConfirmOptions as ConfirmOptions, AlertDialogDescription as Description, AlertDialogDescriptionProps as DescriptionProps, AlertDialogDescriptionState as DescriptionState, AlertDialogFooter as Footer, AlertDialogFooterProps as FooterProps, AlertDialogHandle as Handle, AlertDialogHeader as Header, AlertDialogHeaderProps as HeaderProps, AlertDialogOutlet as Outlet, AlertDialogPopup as Popup, AlertDialogPopupProps as PopupProps, AlertDialogPopupState as PopupState, AlertDialogPortal as Portal, AlertDialogPortalProps as PortalProps, AlertDialogPortalState as PortalState, AlertDialogRoot as Root, AlertDialogRootActions as RootActions, AlertDialogRootChangeEventDetails as RootChangeEventDetails, AlertDialogRootChangeEventReason as RootChangeEventReason, AlertDialogRootProps as RootProps, AlertDialogRootState as RootState, AlertDialogTitle as Title, AlertDialogTitleProps as TitleProps, AlertDialogTitleState as TitleState, AlertDialogTrigger as Trigger, AlertDialogTriggerProps as TriggerProps, AlertDialogTriggerState as TriggerState, AlertDialogVariants as Variants, AlertDialogViewport as Viewport, AlertDialogViewportProps as ViewportProps, AlertDialogViewportState as ViewportState, alertDialogAlert as alert, alertDialogConfirm as confirm, createAlertDialogHandle as createHandle };
19
+ export { AlertDialogAlertOptions as AlertOptions, AlertDialogBackdrop as Backdrop, AlertDialogBackdropProps as BackdropProps, AlertDialogBackdropState as BackdropState, AlertDialogBody as Body, AlertDialogBodyProps as BodyProps, AlertDialogClose as Close, AlertDialogCloseProps as CloseProps, AlertDialogCloseState as CloseState, AlertDialogConfirmOptions as ConfirmOptions, AlertDialogDescription as Description, AlertDialogDescriptionProps as DescriptionProps, AlertDialogDescriptionState as DescriptionState, AlertDialogFooter as Footer, AlertDialogFooterProps as FooterProps, AlertDialogHandle as Handle, AlertDialogHeader as Header, AlertDialogHeaderProps as HeaderProps, AlertDialogIndicator as Indicator, AlertDialogIndicatorProps as IndicatorProps, AlertDialogOutlet as Outlet, AlertDialogPopup as Popup, AlertDialogPopupProps as PopupProps, AlertDialogPopupState as PopupState, AlertDialogPortal as Portal, AlertDialogPortalProps as PortalProps, AlertDialogPortalState as PortalState, AlertDialogRoot as Root, AlertDialogRootActions as RootActions, AlertDialogRootChangeEventDetails as RootChangeEventDetails, AlertDialogRootChangeEventReason as RootChangeEventReason, AlertDialogRootProps as RootProps, AlertDialogRootState as RootState, AlertDialogTitle as Title, AlertDialogTitleProps as TitleProps, AlertDialogTitleState as TitleState, AlertDialogTrigger as Trigger, AlertDialogTriggerProps as TriggerProps, AlertDialogTriggerState as TriggerState, AlertDialogVariants as Variants, AlertDialogViewport as Viewport, AlertDialogViewportProps as ViewportProps, AlertDialogViewportState as ViewportState, alertDialogAlert as alert, alertDialogConfirm as confirm, createAlertDialogHandle as createHandle };
19
20
  }
20
21
  //#endregion
21
- export { type AlertDialogAlertOptions as AlertOptions, AlertDialogBackdrop as Backdrop, type AlertDialogBackdropProps as BackdropProps, type AlertDialogBackdropState as BackdropState, AlertDialogBody as Body, type AlertDialogBodyProps as BodyProps, type AlertDialogButtonOptions as ButtonOptions, AlertDialogClose as Close, type AlertDialogCloseProps as CloseProps, type AlertDialogCloseState as CloseState, type AlertDialogConfirmOptions as ConfirmOptions, AlertDialogDescription as Description, type AlertDialogDescriptionProps as DescriptionProps, type AlertDialogDescriptionState as DescriptionState, AlertDialogFooter as Footer, type AlertDialogFooterProps as FooterProps, type AlertDialogHandle as Handle, AlertDialogHeader as Header, type AlertDialogHeaderProps as HeaderProps, AlertDialogOutlet as Outlet, AlertDialogPopup as Popup, type AlertDialogPopupProps as PopupProps, type AlertDialogPopupState as PopupState, AlertDialogPortal as Portal, type AlertDialogPortalProps as PortalProps, type AlertDialogPortalState as PortalState, AlertDialogRoot as Root, type AlertDialogRootActions as RootActions, type AlertDialogRootChangeEventDetails as RootChangeEventDetails, type AlertDialogRootChangeEventReason as RootChangeEventReason, type AlertDialogRootProps as RootProps, type AlertDialogRootState as RootState, AlertDialogTitle as Title, type AlertDialogTitleProps as TitleProps, type AlertDialogTitleState as TitleState, AlertDialogTrigger as Trigger, type AlertDialogTriggerProps as TriggerProps, type AlertDialogTriggerState as TriggerState, type AlertDialogVariants as Variants, AlertDialogViewport as Viewport, type AlertDialogViewportProps as ViewportProps, type AlertDialogViewportState as ViewportState, alertDialogAlert as alert, alertDialogConfirm as confirm, createAlertDialogHandle as createHandle, index_parts_d_exports };
22
+ export { type AlertDialogAlertOptions as AlertOptions, AlertDialogBackdrop as Backdrop, type AlertDialogBackdropProps as BackdropProps, type AlertDialogBackdropState as BackdropState, AlertDialogBody as Body, type AlertDialogBodyProps as BodyProps, AlertDialogClose as Close, type AlertDialogCloseProps as CloseProps, type AlertDialogCloseState as CloseState, type AlertDialogConfirmOptions as ConfirmOptions, AlertDialogDescription as Description, type AlertDialogDescriptionProps as DescriptionProps, type AlertDialogDescriptionState as DescriptionState, AlertDialogFooter as Footer, type AlertDialogFooterProps as FooterProps, type AlertDialogHandle as Handle, AlertDialogHeader as Header, type AlertDialogHeaderProps as HeaderProps, AlertDialogIndicator as Indicator, type AlertDialogIndicatorProps as IndicatorProps, AlertDialogOutlet as Outlet, AlertDialogPopup as Popup, type AlertDialogPopupProps as PopupProps, type AlertDialogPopupState as PopupState, AlertDialogPortal as Portal, type AlertDialogPortalProps as PortalProps, type AlertDialogPortalState as PortalState, AlertDialogRoot as Root, type AlertDialogRootActions as RootActions, type AlertDialogRootChangeEventDetails as RootChangeEventDetails, type AlertDialogRootChangeEventReason as RootChangeEventReason, type AlertDialogRootProps as RootProps, type AlertDialogRootState as RootState, AlertDialogTitle as Title, type AlertDialogTitleProps as TitleProps, type AlertDialogTitleState as TitleState, AlertDialogTrigger as Trigger, type AlertDialogTriggerProps as TriggerProps, type AlertDialogTriggerState as TriggerState, type AlertDialogVariants as Variants, AlertDialogViewport as Viewport, type AlertDialogViewportProps as ViewportProps, type AlertDialogViewportState as ViewportState, alertDialogAlert as alert, alertDialogConfirm as confirm, createAlertDialogHandle as createHandle, index_parts_d_exports };
22
23
  //# sourceMappingURL=index.parts.d.ts.map
@@ -5,6 +5,7 @@ import { AlertDialogClose } from "./alert-dialog-close.js";
5
5
  import { AlertDialogDescription } from "./alert-dialog-description.js";
6
6
  import { AlertDialogFooter } from "./alert-dialog-footer.js";
7
7
  import { AlertDialogHeader } from "./alert-dialog-header.js";
8
+ import { AlertDialogIndicator } from "./alert-dialog-indicator.js";
8
9
  import { AlertDialogPopup } from "./alert-dialog-popup.js";
9
10
  import { AlertDialogPortal } from "./alert-dialog-portal.js";
10
11
  import { AlertDialogRoot } from "./alert-dialog-root.js";
@@ -22,6 +23,7 @@ var index_parts_exports = /* @__PURE__ */ __exportAll({
22
23
  Description: () => AlertDialogDescription,
23
24
  Footer: () => AlertDialogFooter,
24
25
  Header: () => AlertDialogHeader,
26
+ Indicator: () => AlertDialogIndicator,
25
27
  Outlet: () => AlertDialogOutlet,
26
28
  Popup: () => AlertDialogPopup,
27
29
  Portal: () => AlertDialogPortal,
@@ -34,6 +36,6 @@ var index_parts_exports = /* @__PURE__ */ __exportAll({
34
36
  createHandle: () => createAlertDialogHandle
35
37
  });
36
38
  //#endregion
37
- export { AlertDialogBackdrop as Backdrop, AlertDialogBody as Body, AlertDialogClose as Close, AlertDialogDescription as Description, AlertDialogFooter as Footer, AlertDialogHeader as Header, AlertDialogOutlet as Outlet, AlertDialogPopup as Popup, AlertDialogPortal as Portal, AlertDialogRoot as Root, AlertDialogTitle as Title, AlertDialogTrigger as Trigger, AlertDialogViewport as Viewport, alertDialogAlert as alert, alertDialogConfirm as confirm, createAlertDialogHandle as createHandle, index_parts_exports };
39
+ export { AlertDialogBackdrop as Backdrop, AlertDialogBody as Body, AlertDialogClose as Close, AlertDialogDescription as Description, AlertDialogFooter as Footer, AlertDialogHeader as Header, AlertDialogIndicator as Indicator, AlertDialogOutlet as Outlet, AlertDialogPopup as Popup, AlertDialogPortal as Portal, AlertDialogRoot as Root, AlertDialogTitle as Title, AlertDialogTrigger as Trigger, AlertDialogViewport as Viewport, alertDialogAlert as alert, alertDialogConfirm as confirm, createAlertDialogHandle as createHandle, index_parts_exports };
38
40
 
39
41
  //# sourceMappingURL=index.parts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.parts.js","names":[],"sources":["../../../../src/components/overlays/alert-dialog/index.parts.ts"],"sourcesContent":["export { AlertDialogBackdrop as Backdrop } from './alert-dialog-backdrop';\nexport { AlertDialogBody as Body } from './alert-dialog-body';\nexport { AlertDialogClose as Close } from './alert-dialog-close';\nexport { AlertDialogDescription as Description } from './alert-dialog-description';\nexport { AlertDialogFooter as Footer } from './alert-dialog-footer';\nexport { AlertDialogHeader as Header } from './alert-dialog-header';\nexport {\n alertDialogAlert as alert,\n alertDialogConfirm as confirm,\n} from './alert-dialog-imperative';\nexport { AlertDialogOutlet as Outlet } from './alert-dialog-outlet';\nexport { AlertDialogPopup as Popup } from './alert-dialog-popup';\nexport { AlertDialogPortal as Portal } from './alert-dialog-portal';\nexport { AlertDialogRoot as Root } from './alert-dialog-root';\nexport { AlertDialogTitle as Title } from './alert-dialog-title';\nexport { AlertDialogTrigger as Trigger } from './alert-dialog-trigger';\nexport { AlertDialogViewport as Viewport } from './alert-dialog-viewport';\nexport { createAlertDialogHandle as createHandle } from './create-handle';\n\n/* types */\n\nexport type {\n AlertDialogBackdropProps as BackdropProps,\n AlertDialogBackdropState as BackdropState,\n} from './alert-dialog-backdrop';\nexport type { AlertDialogBodyProps as BodyProps } from './alert-dialog-body';\nexport type {\n AlertDialogCloseProps as CloseProps,\n AlertDialogCloseState as CloseState,\n} from './alert-dialog-close';\nexport type {\n AlertDialogDescriptionProps as DescriptionProps,\n AlertDialogDescriptionState as DescriptionState,\n} from './alert-dialog-description';\nexport type { AlertDialogFooterProps as FooterProps } from './alert-dialog-footer';\nexport type { AlertDialogHeaderProps as HeaderProps } from './alert-dialog-header';\nexport type {\n AlertDialogAlertOptions as AlertOptions,\n AlertDialogButtonOptions as ButtonOptions,\n AlertDialogConfirmOptions as ConfirmOptions,\n} from './alert-dialog-imperative';\nexport type {\n AlertDialogPopupProps as PopupProps,\n AlertDialogPopupState as PopupState,\n} from './alert-dialog-popup';\nexport type {\n AlertDialogPortalProps as PortalProps,\n AlertDialogPortalState as PortalState,\n} from './alert-dialog-portal';\nexport type {\n AlertDialogRootActions as RootActions,\n AlertDialogRootChangeEventDetails as RootChangeEventDetails,\n AlertDialogRootChangeEventReason as RootChangeEventReason,\n AlertDialogRootProps as RootProps,\n AlertDialogRootState as RootState,\n} from './alert-dialog-root';\nexport type {\n AlertDialogTitleProps as TitleProps,\n AlertDialogTitleState as TitleState,\n} from './alert-dialog-title';\nexport type {\n AlertDialogTriggerProps as TriggerProps,\n AlertDialogTriggerState as TriggerState,\n} from './alert-dialog-trigger';\nexport type {\n AlertDialogViewportProps as ViewportProps,\n AlertDialogViewportState as ViewportState,\n} from './alert-dialog-viewport';\nexport type { AlertDialogHandle as Handle } from './create-handle';\nexport type { AlertDialogVariants as Variants } from './use-alert-dialog-context';\n"],"mappings":""}
1
+ {"version":3,"file":"index.parts.js","names":[],"sources":["../../../../src/components/overlays/alert-dialog/index.parts.ts"],"sourcesContent":["export { AlertDialogBackdrop as Backdrop } from './alert-dialog-backdrop';\nexport { AlertDialogBody as Body } from './alert-dialog-body';\nexport { AlertDialogClose as Close } from './alert-dialog-close';\nexport { AlertDialogDescription as Description } from './alert-dialog-description';\nexport { AlertDialogFooter as Footer } from './alert-dialog-footer';\nexport { AlertDialogHeader as Header } from './alert-dialog-header';\nexport {\n alertDialogAlert as alert,\n alertDialogConfirm as confirm,\n} from './alert-dialog-imperative';\nexport { AlertDialogIndicator as Indicator } from './alert-dialog-indicator';\nexport { AlertDialogOutlet as Outlet } from './alert-dialog-outlet';\nexport { AlertDialogPopup as Popup } from './alert-dialog-popup';\nexport { AlertDialogPortal as Portal } from './alert-dialog-portal';\nexport { AlertDialogRoot as Root } from './alert-dialog-root';\nexport { AlertDialogTitle as Title } from './alert-dialog-title';\nexport { AlertDialogTrigger as Trigger } from './alert-dialog-trigger';\nexport { AlertDialogViewport as Viewport } from './alert-dialog-viewport';\nexport { createAlertDialogHandle as createHandle } from './create-handle';\n\n/* types */\n\nexport type {\n AlertDialogBackdropProps as BackdropProps,\n AlertDialogBackdropState as BackdropState,\n} from './alert-dialog-backdrop';\nexport type { AlertDialogBodyProps as BodyProps } from './alert-dialog-body';\nexport type {\n AlertDialogCloseProps as CloseProps,\n AlertDialogCloseState as CloseState,\n} from './alert-dialog-close';\nexport type {\n AlertDialogDescriptionProps as DescriptionProps,\n AlertDialogDescriptionState as DescriptionState,\n} from './alert-dialog-description';\nexport type { AlertDialogFooterProps as FooterProps } from './alert-dialog-footer';\nexport type { AlertDialogHeaderProps as HeaderProps } from './alert-dialog-header';\nexport type {\n AlertDialogAlertOptions as AlertOptions,\n AlertDialogConfirmOptions as ConfirmOptions,\n} from './alert-dialog-imperative';\nexport type { AlertDialogIndicatorProps as IndicatorProps } from './alert-dialog-indicator';\nexport type {\n AlertDialogPopupProps as PopupProps,\n AlertDialogPopupState as PopupState,\n} from './alert-dialog-popup';\nexport type {\n AlertDialogPortalProps as PortalProps,\n AlertDialogPortalState as PortalState,\n} from './alert-dialog-portal';\nexport type {\n AlertDialogRootActions as RootActions,\n AlertDialogRootChangeEventDetails as RootChangeEventDetails,\n AlertDialogRootChangeEventReason as RootChangeEventReason,\n AlertDialogRootProps as RootProps,\n AlertDialogRootState as RootState,\n} from './alert-dialog-root';\nexport type {\n AlertDialogTitleProps as TitleProps,\n AlertDialogTitleState as TitleState,\n} from './alert-dialog-title';\nexport type {\n AlertDialogTriggerProps as TriggerProps,\n AlertDialogTriggerState as TriggerState,\n} from './alert-dialog-trigger';\nexport type {\n AlertDialogViewportProps as ViewportProps,\n AlertDialogViewportState as ViewportState,\n} from './alert-dialog-viewport';\nexport type { AlertDialogHandle as Handle } from './create-handle';\nexport type { AlertDialogVariants as Variants } from './use-alert-dialog-context';\n"],"mappings":""}
@@ -26,6 +26,7 @@ const DialogBody = (props) => {
26
26
  "flex",
27
27
  "flex-1",
28
28
  "flex-col",
29
+ "gap-4",
29
30
  "min-h-0",
30
31
  "overflow-y-auto",
31
32
  "px-(--dialog-padding)",
@@ -1 +1 @@
1
- {"version":3,"file":"dialog-body.js","names":[],"sources":["../../../../src/components/overlays/dialog/dialog-body.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { mergeTwClassNames } from '#utils';\n\nexport type DialogBodyProps = useRender.ComponentProps<'div'>;\n\n/**\n * Conteúdo principal do dialog. Quando o popup chega à altura do `Dialog.Viewport`, só o `Body`\n * rola, e `Header` e `Footer` continuam visíveis.\n *\n * O padding de uma área que rola rola junto com o conteúdo. Por isso o `Body` tem só 8px em cima\n * e embaixo, e o resto do espaço entre as partes fica no `Header` (8px embaixo) e no `Footer`\n * (8px em cima), que não rolam: parado, o espaço é de 16px; rolando, o conteúdo some 8px antes\n * do título e dos botões. Sem `Header` antes ou sem `Footer` depois, o `Body` fecha o respiro do\n * dialog daquele lado.\n *\n * Cópia de `CardBody` (tabela no README de `display`). As diferenças: lê `--dialog-padding`, rola\n * por dentro (`min-h-0`, `overflow-y-auto`) e divide o espaço vertical com `Header` e `Footer`.\n *\n * Origem do `AlertDialog.Body` e do `Drawer.Body`, que copiam estas classes\n * (tabela no README de `overlays`, com as diferenças). Uma mudança aqui vale para as cópias na\n * mesma rodada.\n */\nexport const DialogBody = (props: DialogBodyProps) => {\n const { render, className, ...rest } = props;\n\n const baseProps = {\n 'data-component': 'Dialog.Body',\n className: mergeTwClassNames(\n [\n 'flex',\n 'flex-1',\n 'flex-col',\n // Sem o `min-h-0`, o item flex não encolhe abaixo do conteúdo, e o popup vaza da tela.\n 'min-h-0',\n 'overflow-y-auto',\n\n 'px-(--dialog-padding)',\n 'py-2',\n 'first:pt-(--dialog-padding)',\n // Por irmão, e não por `last:`, porque um `Close` pode vir depois.\n \"[&:not(:has(~[data-component='Dialog.Footer']))]:pb-(--dialog-padding)\",\n ],\n className,\n ),\n };\n\n return useRender({\n render,\n defaultTagName: 'div',\n props: mergeProps(baseProps, rest),\n });\n};\n\nDialogBody.displayName = 'Dialog.Body';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAsBA,MAAa,cAAc,UAA2B;CACpD,MAAM,EAAE,QAAQ,WAAW,GAAG,SAAS;CAEvC,MAAM,YAAY;EAChB,kBAAkB;EAClB,WAAW,kBACT;GACE;GACA;GACA;GAEA;GACA;GAEA;GACA;GACA;GAEA;EACF,GACA,SACF;CACF;CAEA,OAAO,UAAU;EACf;EACA,gBAAgB;EAChB,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;AACH;AAEA,WAAW,cAAc"}
1
+ {"version":3,"file":"dialog-body.js","names":[],"sources":["../../../../src/components/overlays/dialog/dialog-body.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { mergeTwClassNames } from '#utils';\n\nexport type DialogBodyProps = useRender.ComponentProps<'div'>;\n\n/**\n * Conteúdo principal do dialog. Quando o popup chega à altura do `Dialog.Viewport`, só o `Body`\n * rola, e `Header` e `Footer` continuam visíveis.\n *\n * O padding de uma área que rola rola junto com o conteúdo. Por isso o `Body` tem só 8px em cima\n * e embaixo, e o resto do espaço entre as partes fica no `Header` (8px embaixo) e no `Footer`\n * (8px em cima), que não rolam: parado, o espaço é de 16px; rolando, o conteúdo some 8px antes\n * do título e dos botões. Sem `Header` antes ou sem `Footer` depois, o `Body` fecha o respiro do\n * dialog daquele lado.\n *\n * Cópia de `CardBody` (tabela no README de `display`). As diferenças: lê `--dialog-padding`, rola\n * por dentro (`min-h-0`, `overflow-y-auto`) e divide o espaço vertical com `Header` e `Footer`.\n *\n * Origem do `AlertDialog.Body` e do `Drawer.Body`, que copiam estas classes\n * (tabela no README de `overlays`, com as diferenças). Uma mudança aqui vale para as cópias na\n * mesma rodada.\n */\nexport const DialogBody = (props: DialogBodyProps) => {\n const { render, className, ...rest } = props;\n\n const baseProps = {\n 'data-component': 'Dialog.Body',\n className: mergeTwClassNames(\n [\n 'flex',\n 'flex-1',\n 'flex-col',\n 'gap-4',\n // Sem o `min-h-0`, o item flex não encolhe abaixo do conteúdo, e o popup vaza da tela.\n 'min-h-0',\n 'overflow-y-auto',\n\n 'px-(--dialog-padding)',\n 'py-2',\n 'first:pt-(--dialog-padding)',\n // Por irmão, e não por `last:`, porque um `Close` pode vir depois.\n \"[&:not(:has(~[data-component='Dialog.Footer']))]:pb-(--dialog-padding)\",\n ],\n className,\n ),\n };\n\n return useRender({\n render,\n defaultTagName: 'div',\n props: mergeProps(baseProps, rest),\n });\n};\n\nDialogBody.displayName = 'Dialog.Body';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAsBA,MAAa,cAAc,UAA2B;CACpD,MAAM,EAAE,QAAQ,WAAW,GAAG,SAAS;CAEvC,MAAM,YAAY;EAChB,kBAAkB;EAClB,WAAW,kBACT;GACE;GACA;GACA;GACA;GAEA;GACA;GAEA;GACA;GACA;GAEA;EACF,GACA,SACF;CACF;CAEA,OAAO,UAAU;EACf;EACA,gBAAgB;EAChB,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;AACH;AAEA,WAAW,cAAc"}
@@ -4,7 +4,7 @@
4
4
  * cor do texto e animação estão explicados (tabela no README de `overlays`). As diferenças:
5
5
  * - sem positioner: o `Dialog.Viewport` centraliza o popup, que cresce a partir do centro;
6
6
  * - largura pelo `size` e altura até a do viewport, com o `Body` rolando;
7
- * - `rounded-md` e `shadow-lg`;
7
+ * - `rounded-lg`, sem `corner-squircle`, e `shadow-lg`;
8
8
  * - o aninhamento, abaixo.
9
9
  *
10
10
  * O respiro de `Header`, `Body` e `Footer` fica em `--dialog-padding`, fixo em 16px, como o
@@ -6,7 +6,7 @@ import { cva } from "class-variance-authority";
6
6
  * cor do texto e animação estão explicados (tabela no README de `overlays`). As diferenças:
7
7
  * - sem positioner: o `Dialog.Viewport` centraliza o popup, que cresce a partir do centro;
8
8
  * - largura pelo `size` e altura até a do viewport, com o `Body` rolando;
9
- * - `rounded-md` e `shadow-lg`;
9
+ * - `rounded-lg`, sem `corner-squircle`, e `shadow-lg`;
10
10
  * - o aninhamento, abaixo.
11
11
  *
12
12
  * O respiro de `Header`, `Body` e `Footer` fica em `--dialog-padding`, fixo em 16px, como o
@@ -29,8 +29,7 @@ const dialogPopupVariants = cva([
29
29
  "flex-col",
30
30
  "w-full",
31
31
  "max-h-full",
32
- "rounded-md",
33
- "corner-squircle",
32
+ "rounded-lg",
34
33
  "outline-1",
35
34
  "outline-gray-6",
36
35
  "bg-white",
@@ -1 +1 @@
1
- {"version":3,"file":"dialog-popup-variants.js","names":[],"sources":["../../../../src/components/overlays/dialog/dialog-popup-variants.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport { dialogDefaultVariants } from './use-dialog-context';\n\n/**\n * Cópia de `popoverPopupVariants`, a origem da superfície dos popups, onde fundo, contorno, sombra,\n * cor do texto e animação estão explicados (tabela no README de `overlays`). As diferenças:\n * - sem positioner: o `Dialog.Viewport` centraliza o popup, que cresce a partir do centro;\n * - largura pelo `size` e altura até a do viewport, com o `Body` rolando;\n * - `rounded-md` e `shadow-lg`;\n * - o aninhamento, abaixo.\n *\n * O respiro de `Header`, `Body` e `Footer` fica em `--dialog-padding`, fixo em 16px, como o\n * título e a descrição: o `size` do Dialog é a largura, e um Dialog largo não ganha título maior.\n *\n * Com outro Dialog aberto sobre ele, o Base UI marca o popup com `data-nested-dialog-open` e\n * escreve em `--nested-dialogs` quantos estão abertos à frente. O popup de trás encolhe, sobe 24px\n * por nível e escurece (pelo `::after`), porque o Dialog aninhado não renderiza backdrop: cada\n * nível aparece como uma faixa acima do da frente. Um Dialog da frente mais alto que o de trás o\n * cobre por inteiro, porque os dois ficam centralizados.\n *\n * Origem do `AlertDialog.Popup` e do `Drawer.Popup`, que copiam estas classes\n * (tabela no README de `overlays`, com as diferenças). Uma mudança aqui vale para as cópias na\n * mesma rodada.\n */\nexport const dialogPopupVariants = cva(\n [\n '[--dialog-padding:--spacing(4)]',\n\n 'relative',\n\n 'flex',\n 'flex-col',\n\n 'w-full',\n 'max-h-full',\n\n 'rounded-md',\n 'corner-squircle',\n 'outline-1',\n 'outline-gray-6',\n\n 'bg-white',\n 'dark:bg-gray-2',\n\n 'shadow-lg',\n 'shadow-black/12',\n 'dark:shadow-none',\n\n // O popup vai para o `body` pelo portal: sem cor própria, o texto herdaria a do navegador.\n 'text-sm',\n 'text-gray-12',\n\n 'not-motion-reduced:transition-[translate,opacity,scale]',\n 'not-motion-reduced:ease-enter',\n 'not-motion-reduced:duration-150',\n\n 'not-motion-reduced:data-starting-style:scale-95',\n 'not-motion-reduced:data-ending-style:scale-95',\n 'not-motion-reduced:data-ending-style:ease-exit',\n 'not-motion-reduced:data-ending-style:duration-100',\n 'data-starting-style:opacity-0',\n 'data-ending-style:opacity-0',\n\n 'not-motion-reduced:data-nested-dialog-open:scale-[calc(1-0.05*var(--nested-dialogs))]',\n 'not-motion-reduced:data-nested-dialog-open:-translate-y-[calc(var(--nested-dialogs)*(--spacing(6)))]',\n\n \"after:content-['']\",\n 'after:absolute',\n 'after:inset-0',\n 'after:rounded-[inherit]',\n 'after:bg-black/20',\n 'after:opacity-0',\n 'after:pointer-events-none',\n 'not-motion-reduced:after:transition-opacity',\n 'not-motion-reduced:after:duration-150',\n 'data-nested-dialog-open:after:opacity-100',\n ],\n {\n variants: {\n size: {\n xs: ['max-w-xs'],\n sm: ['max-w-sm'],\n md: ['max-w-md'],\n lg: ['max-w-lg'],\n xl: ['max-w-xl'],\n '2xl': ['max-w-2xl'],\n '3xl': ['max-w-3xl'],\n '4xl': ['max-w-4xl'],\n '5xl': ['max-w-5xl'],\n '6xl': ['max-w-6xl'],\n '7xl': ['max-w-7xl'],\n full: ['max-w-none', 'h-full'],\n },\n },\n defaultVariants: {\n size: dialogDefaultVariants.size,\n },\n },\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAa,sBAAsB,IACjC;CACE;CAEA;CAEA;CACA;CAEA;CACA;CAEA;CACA;CACA;CACA;CAEA;CACA;CAEA;CACA;CACA;CAGA;CACA;CAEA;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GACA;CACE,UAAU,EACR,MAAM;EACJ,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,MAAM,CAAC,cAAc,QAAQ;CAC/B,EACF;CACA,iBAAiB,EACf,MAAM,sBAAsB,KAC9B;AACF,CACF"}
1
+ {"version":3,"file":"dialog-popup-variants.js","names":[],"sources":["../../../../src/components/overlays/dialog/dialog-popup-variants.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport { dialogDefaultVariants } from './use-dialog-context';\n\n/**\n * Cópia de `popoverPopupVariants`, a origem da superfície dos popups, onde fundo, contorno, sombra,\n * cor do texto e animação estão explicados (tabela no README de `overlays`). As diferenças:\n * - sem positioner: o `Dialog.Viewport` centraliza o popup, que cresce a partir do centro;\n * - largura pelo `size` e altura até a do viewport, com o `Body` rolando;\n * - `rounded-lg`, sem `corner-squircle`, e `shadow-lg`;\n * - o aninhamento, abaixo.\n *\n * O respiro de `Header`, `Body` e `Footer` fica em `--dialog-padding`, fixo em 16px, como o\n * título e a descrição: o `size` do Dialog é a largura, e um Dialog largo não ganha título maior.\n *\n * Com outro Dialog aberto sobre ele, o Base UI marca o popup com `data-nested-dialog-open` e\n * escreve em `--nested-dialogs` quantos estão abertos à frente. O popup de trás encolhe, sobe 24px\n * por nível e escurece (pelo `::after`), porque o Dialog aninhado não renderiza backdrop: cada\n * nível aparece como uma faixa acima do da frente. Um Dialog da frente mais alto que o de trás o\n * cobre por inteiro, porque os dois ficam centralizados.\n *\n * Origem do `AlertDialog.Popup` e do `Drawer.Popup`, que copiam estas classes\n * (tabela no README de `overlays`, com as diferenças). Uma mudança aqui vale para as cópias na\n * mesma rodada.\n */\nexport const dialogPopupVariants = cva(\n [\n '[--dialog-padding:--spacing(4)]',\n\n 'relative',\n\n 'flex',\n 'flex-col',\n\n 'w-full',\n 'max-h-full',\n\n 'rounded-lg',\n 'outline-1',\n 'outline-gray-6',\n\n 'bg-white',\n 'dark:bg-gray-2',\n\n 'shadow-lg',\n 'shadow-black/12',\n 'dark:shadow-none',\n\n // O popup vai para o `body` pelo portal: sem cor própria, o texto herdaria a do navegador.\n 'text-sm',\n 'text-gray-12',\n\n 'not-motion-reduced:transition-[translate,opacity,scale]',\n 'not-motion-reduced:ease-enter',\n 'not-motion-reduced:duration-150',\n\n 'not-motion-reduced:data-starting-style:scale-95',\n 'not-motion-reduced:data-ending-style:scale-95',\n 'not-motion-reduced:data-ending-style:ease-exit',\n 'not-motion-reduced:data-ending-style:duration-100',\n 'data-starting-style:opacity-0',\n 'data-ending-style:opacity-0',\n\n 'not-motion-reduced:data-nested-dialog-open:scale-[calc(1-0.05*var(--nested-dialogs))]',\n 'not-motion-reduced:data-nested-dialog-open:-translate-y-[calc(var(--nested-dialogs)*(--spacing(6)))]',\n\n \"after:content-['']\",\n 'after:absolute',\n 'after:inset-0',\n 'after:rounded-[inherit]',\n 'after:bg-black/20',\n 'after:opacity-0',\n 'after:pointer-events-none',\n 'not-motion-reduced:after:transition-opacity',\n 'not-motion-reduced:after:duration-150',\n 'data-nested-dialog-open:after:opacity-100',\n ],\n {\n variants: {\n size: {\n xs: ['max-w-xs'],\n sm: ['max-w-sm'],\n md: ['max-w-md'],\n lg: ['max-w-lg'],\n xl: ['max-w-xl'],\n '2xl': ['max-w-2xl'],\n '3xl': ['max-w-3xl'],\n '4xl': ['max-w-4xl'],\n '5xl': ['max-w-5xl'],\n '6xl': ['max-w-6xl'],\n '7xl': ['max-w-7xl'],\n full: ['max-w-none', 'h-full'],\n },\n },\n defaultVariants: {\n size: dialogDefaultVariants.size,\n },\n },\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAa,sBAAsB,IACjC;CACE;CAEA;CAEA;CACA;CAEA;CACA;CAEA;CACA;CACA;CAEA;CACA;CAEA;CACA;CACA;CAGA;CACA;CAEA;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GACA;CACE,UAAU,EACR,MAAM;EACJ,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,IAAI,CAAC,UAAU;EACf,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,OAAO,CAAC,WAAW;EACnB,MAAM,CAAC,cAAc,QAAQ;CAC/B,EACF;CACA,iBAAiB,EACf,MAAM,sBAAsB,KAC9B;AACF,CACF"}
@@ -19,6 +19,7 @@ const DrawerBody = (props) => {
19
19
  "flex",
20
20
  "flex-1",
21
21
  "flex-col",
22
+ "gap-4",
22
23
  "min-h-0",
23
24
  "overflow-y-auto",
24
25
  "overscroll-contain",
@@ -1 +1 @@
1
- {"version":3,"file":"drawer-body.js","names":["BaseDrawer"],"sources":["../../../../src/components/overlays/drawer/drawer-body.tsx"],"sourcesContent":["import { Drawer as BaseDrawer } from '@base-ui/react/drawer';\nimport { mergeStateClassNames } from '#utils';\n\nexport type DrawerBodyProps = BaseDrawer.Content.Props;\n\nexport type DrawerBodyState = BaseDrawer.Content.State;\n\n/**\n * Conteúdo principal do drawer, sobre o `Drawer.Content` do Base UI: com o mouse, o texto dele se\n * seleciona sem disparar o arrasto. Ocupa o espaço que sobra e rola por dentro; `Header` e `Footer`\n * continuam visíveis.\n *\n * Cópia de `DialogBody` (tabela no README de `overlays`), onde a divisão do espaço vertical está\n * explicada. As diferenças: é o `Drawer.Content`, o respiro vem de `--drawer-padding`, e a rolagem\n * não passa para a página no fim da lista (`overscroll-contain`).\n */\nexport const DrawerBody = (props: DrawerBodyProps) => {\n const { className, ...rest } = props;\n\n return (\n <BaseDrawer.Content\n data-component=\"Drawer.Body\"\n className={mergeStateClassNames(\n [\n 'flex',\n 'flex-1',\n 'flex-col',\n // Sem o `min-h-0`, o item flex não encolhe abaixo do conteúdo, e o popup vaza da tela.\n 'min-h-0',\n 'overflow-y-auto',\n 'overscroll-contain',\n\n 'px-(--drawer-padding)',\n 'py-2',\n 'first:pt-(--drawer-padding)',\n // Por irmão, e não por `last:`, porque um `Close` pode vir depois.\n \"[&:not(:has(~[data-component='Drawer.Footer']))]:pb-(--drawer-padding)\",\n ],\n className,\n )}\n {...rest}\n />\n );\n};\n\nDrawerBody.displayName = 'Drawer.Body';\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAa,cAAc,UAA2B;CACpD,MAAM,EAAE,WAAW,GAAG,SAAS;CAE/B,OACE,oBAACA,OAAW,SAAZ;EACE,kBAAe;EACf,WAAW,qBACT;GACE;GACA;GACA;GAEA;GACA;GACA;GAEA;GACA;GACA;GAEA;EACF,GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,WAAW,cAAc"}
1
+ {"version":3,"file":"drawer-body.js","names":["BaseDrawer"],"sources":["../../../../src/components/overlays/drawer/drawer-body.tsx"],"sourcesContent":["import { Drawer as BaseDrawer } from '@base-ui/react/drawer';\nimport { mergeStateClassNames } from '#utils';\n\nexport type DrawerBodyProps = BaseDrawer.Content.Props;\n\nexport type DrawerBodyState = BaseDrawer.Content.State;\n\n/**\n * Conteúdo principal do drawer, sobre o `Drawer.Content` do Base UI: com o mouse, o texto dele se\n * seleciona sem disparar o arrasto. Ocupa o espaço que sobra e rola por dentro; `Header` e `Footer`\n * continuam visíveis.\n *\n * Cópia de `DialogBody` (tabela no README de `overlays`), onde a divisão do espaço vertical está\n * explicada. As diferenças: é o `Drawer.Content`, o respiro vem de `--drawer-padding`, e a rolagem\n * não passa para a página no fim da lista (`overscroll-contain`).\n */\nexport const DrawerBody = (props: DrawerBodyProps) => {\n const { className, ...rest } = props;\n\n return (\n <BaseDrawer.Content\n data-component=\"Drawer.Body\"\n className={mergeStateClassNames(\n [\n 'flex',\n 'flex-1',\n 'flex-col',\n 'gap-4',\n // Sem o `min-h-0`, o item flex não encolhe abaixo do conteúdo, e o popup vaza da tela.\n 'min-h-0',\n 'overflow-y-auto',\n 'overscroll-contain',\n\n 'px-(--drawer-padding)',\n 'py-2',\n 'first:pt-(--drawer-padding)',\n // Por irmão, e não por `last:`, porque um `Close` pode vir depois.\n \"[&:not(:has(~[data-component='Drawer.Footer']))]:pb-(--drawer-padding)\",\n ],\n className,\n )}\n {...rest}\n />\n );\n};\n\nDrawerBody.displayName = 'Drawer.Body';\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAa,cAAc,UAA2B;CACpD,MAAM,EAAE,WAAW,GAAG,SAAS;CAE/B,OACE,oBAACA,OAAW,SAAZ;EACE,kBAAe;EACf,WAAW,qBACT;GACE;GACA;GACA;GACA;GAEA;GACA;GACA;GAEA;GACA;GACA;GAEA;EACF,GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,WAAW,cAAc"}
@@ -0,0 +1,3 @@
1
+ import { LinkVariants } from "./link-variants.js";
2
+ import { Link, LinkProps } from "./link.js";
3
+ export { Link, type LinkProps, type LinkVariants };
@@ -0,0 +1,2 @@
1
+ import { Link } from "./link.js";
2
+ export { Link };
@@ -0,0 +1,33 @@
1
+ import { ColorSchemeSemantic } from "../../../types/color-scheme.js";
2
+ //#region src/components/typography/link/link-variants.d.ts
3
+ export type LinkVariants = {
4
+ /**
5
+ * Cor do texto e do sublinhado.
6
+ *
7
+ * @default 'brand'
8
+ */
9
+ colorScheme?: ColorSchemeSemantic;
10
+ /**
11
+ * Sublinhado: `underline` sempre sublinhado, o caso do texto corrido, em que o link não depende só
12
+ * da cor; `plain` sublinha só no hover, para listas e tabelas em que o contexto já mostra que é
13
+ * link.
14
+ *
15
+ * @default 'underline'
16
+ */
17
+ variant?: 'underline' | 'plain';
18
+ };
19
+ export declare const linkDefaultVariants: Required<LinkVariants>;
20
+ /**
21
+ * O `colorScheme` só declara `--link-fg` (passo 11), `--link-fg-hover` (passo 12) e
22
+ * `--link-decoration` (alpha 7), e as classes base as consomem. Assim uma cor nova é um bloco de
23
+ * variáveis, e a `variant` só decide se o sublinhado aparece sempre ou no hover.
24
+ *
25
+ * Desabilitado (`disabled` ou `aria-disabled="true"`), o link vai para o gray e perde a mudança de
26
+ * hover.
27
+ */
28
+ export declare const linkVariants: (props?: ({
29
+ colorScheme?: "gray" | "brand" | "red" | "green" | "blue" | "amber" | null | undefined;
30
+ variant?: "plain" | "underline" | null | undefined;
31
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
32
+ //#endregion
33
+ //# sourceMappingURL=link-variants.d.ts.map
@@ -0,0 +1,91 @@
1
+ import { cva } from "class-variance-authority";
2
+ //#region src/components/typography/link/link-variants.ts
3
+ const linkDefaultVariants = {
4
+ colorScheme: "brand",
5
+ variant: "underline"
6
+ };
7
+ /**
8
+ * O `colorScheme` só declara `--link-fg` (passo 11), `--link-fg-hover` (passo 12) e
9
+ * `--link-decoration` (alpha 7), e as classes base as consomem. Assim uma cor nova é um bloco de
10
+ * variáveis, e a `variant` só decide se o sublinhado aparece sempre ou no hover.
11
+ *
12
+ * Desabilitado (`disabled` ou `aria-disabled="true"`), o link vai para o gray e perde a mudança de
13
+ * hover.
14
+ */
15
+ const linkVariants = cva([
16
+ "text-(--link-fg)",
17
+ "underline-offset-2",
18
+ "decoration-(--link-decoration)",
19
+ "hover:text-(--link-fg-hover)",
20
+ "hover:decoration-(--link-fg-hover)",
21
+ "focus-ring-outside",
22
+ "rounded-xs",
23
+ "cursor-pointer",
24
+ "text-start",
25
+ "not-motion-reduced:transition-colors",
26
+ "not-motion-reduced:ease-out",
27
+ "disabled:cursor-not-allowed",
28
+ "disabled:text-gray-11",
29
+ "disabled:hover:text-gray-11",
30
+ "aria-disabled:cursor-not-allowed",
31
+ "aria-disabled:text-gray-11",
32
+ "aria-disabled:hover:text-gray-11"
33
+ ], {
34
+ variants: {
35
+ colorScheme: {
36
+ gray: [
37
+ "[--link-fg:var(--color-gray-11)]",
38
+ "[--link-fg-hover:var(--color-gray-12)]",
39
+ "[--link-decoration:var(--color-gray-alpha-7)]"
40
+ ],
41
+ brand: [
42
+ "[--link-fg:var(--color-brand-11)]",
43
+ "[--link-fg-hover:var(--color-brand-12)]",
44
+ "[--link-decoration:var(--color-brand-alpha-7)]"
45
+ ],
46
+ red: [
47
+ "[--link-fg:var(--color-red-11)]",
48
+ "[--link-fg-hover:var(--color-red-12)]",
49
+ "[--link-decoration:var(--color-red-alpha-7)]"
50
+ ],
51
+ green: [
52
+ "[--link-fg:var(--color-green-11)]",
53
+ "[--link-fg-hover:var(--color-green-12)]",
54
+ "[--link-decoration:var(--color-green-alpha-7)]"
55
+ ],
56
+ amber: [
57
+ "[--link-fg:var(--color-amber-11)]",
58
+ "[--link-fg-hover:var(--color-amber-12)]",
59
+ "[--link-decoration:var(--color-amber-alpha-7)]"
60
+ ],
61
+ blue: [
62
+ "[--link-fg:var(--color-blue-11)]",
63
+ "[--link-fg-hover:var(--color-blue-12)]",
64
+ "[--link-decoration:var(--color-blue-alpha-7)]"
65
+ ]
66
+ },
67
+ variant: {
68
+ underline: [
69
+ "underline",
70
+ "disabled:decoration-gray-alpha-7",
71
+ "disabled:hover:decoration-gray-alpha-7",
72
+ "aria-disabled:decoration-gray-alpha-7",
73
+ "aria-disabled:hover:decoration-gray-alpha-7"
74
+ ],
75
+ plain: [
76
+ "no-underline",
77
+ "hover:underline",
78
+ "disabled:hover:no-underline",
79
+ "aria-disabled:hover:no-underline"
80
+ ]
81
+ }
82
+ },
83
+ defaultVariants: {
84
+ colorScheme: linkDefaultVariants.colorScheme,
85
+ variant: linkDefaultVariants.variant
86
+ }
87
+ });
88
+ //#endregion
89
+ export { linkDefaultVariants, linkVariants };
90
+
91
+ //# sourceMappingURL=link-variants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-variants.js","names":[],"sources":["../../../../src/components/typography/link/link-variants.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { ColorSchemeSemantic } from '#types';\n\nexport type LinkVariants = {\n /**\n * Cor do texto e do sublinhado.\n *\n * @default 'brand'\n */\n colorScheme?: ColorSchemeSemantic;\n /**\n * Sublinhado: `underline` sempre sublinhado, o caso do texto corrido, em que o link não depende só\n * da cor; `plain` sublinha só no hover, para listas e tabelas em que o contexto já mostra que é\n * link.\n *\n * @default 'underline'\n */\n variant?: 'underline' | 'plain';\n};\n\nexport const linkDefaultVariants: Required<LinkVariants> = {\n colorScheme: 'brand',\n variant: 'underline',\n};\n\n/**\n * O `colorScheme` só declara `--link-fg` (passo 11), `--link-fg-hover` (passo 12) e\n * `--link-decoration` (alpha 7), e as classes base as consomem. Assim uma cor nova é um bloco de\n * variáveis, e a `variant` só decide se o sublinhado aparece sempre ou no hover.\n *\n * Desabilitado (`disabled` ou `aria-disabled=\"true\"`), o link vai para o gray e perde a mudança de\n * hover.\n */\nexport const linkVariants = cva(\n [\n 'text-(--link-fg)',\n 'underline-offset-2',\n 'decoration-(--link-decoration)',\n\n 'hover:text-(--link-fg-hover)',\n 'hover:decoration-(--link-fg-hover)',\n\n 'focus-ring-outside',\n 'rounded-xs',\n\n // Como `<button>`, o link precisa do cursor e do alinhamento à esquerda; no `<a>` não muda nada.\n 'cursor-pointer',\n 'text-start',\n\n // Troca de cor, não movimento: usa o `ease-out` do Tailwind e não um token `ease-*` do tema.\n 'not-motion-reduced:transition-colors',\n 'not-motion-reduced:ease-out',\n\n 'disabled:cursor-not-allowed',\n 'disabled:text-gray-11',\n 'disabled:hover:text-gray-11',\n 'aria-disabled:cursor-not-allowed',\n 'aria-disabled:text-gray-11',\n 'aria-disabled:hover:text-gray-11',\n ],\n {\n variants: {\n colorScheme: {\n gray: [\n '[--link-fg:var(--color-gray-11)]',\n '[--link-fg-hover:var(--color-gray-12)]',\n '[--link-decoration:var(--color-gray-alpha-7)]',\n ],\n brand: [\n '[--link-fg:var(--color-brand-11)]',\n '[--link-fg-hover:var(--color-brand-12)]',\n '[--link-decoration:var(--color-brand-alpha-7)]',\n ],\n red: [\n '[--link-fg:var(--color-red-11)]',\n '[--link-fg-hover:var(--color-red-12)]',\n '[--link-decoration:var(--color-red-alpha-7)]',\n ],\n green: [\n '[--link-fg:var(--color-green-11)]',\n '[--link-fg-hover:var(--color-green-12)]',\n '[--link-decoration:var(--color-green-alpha-7)]',\n ],\n amber: [\n '[--link-fg:var(--color-amber-11)]',\n '[--link-fg-hover:var(--color-amber-12)]',\n '[--link-decoration:var(--color-amber-alpha-7)]',\n ],\n blue: [\n '[--link-fg:var(--color-blue-11)]',\n '[--link-fg-hover:var(--color-blue-12)]',\n '[--link-decoration:var(--color-blue-alpha-7)]',\n ],\n },\n variant: {\n underline: [\n 'underline',\n\n 'disabled:decoration-gray-alpha-7',\n 'disabled:hover:decoration-gray-alpha-7',\n 'aria-disabled:decoration-gray-alpha-7',\n 'aria-disabled:hover:decoration-gray-alpha-7',\n ],\n plain: [\n 'no-underline',\n 'hover:underline',\n\n 'disabled:hover:no-underline',\n 'aria-disabled:hover:no-underline',\n ],\n },\n },\n defaultVariants: {\n colorScheme: linkDefaultVariants.colorScheme,\n variant: linkDefaultVariants.variant,\n },\n },\n);\n"],"mappings":";;AAoBA,MAAa,sBAA8C;CACzD,aAAa;CACb,SAAS;AACX;;;;;;;;;AAUA,MAAa,eAAe,IAC1B;CACE;CACA;CACA;CAEA;CACA;CAEA;CACA;CAGA;CACA;CAGA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;AACF,GACA;CACE,UAAU;EACR,aAAa;GACX,MAAM;IACJ;IACA;IACA;GACF;GACA,OAAO;IACL;IACA;IACA;GACF;GACA,KAAK;IACH;IACA;IACA;GACF;GACA,OAAO;IACL;IACA;IACA;GACF;GACA,OAAO;IACL;IACA;IACA;GACF;GACA,MAAM;IACJ;IACA;IACA;GACF;EACF;EACA,SAAS;GACP,WAAW;IACT;IAEA;IACA;IACA;IACA;GACF;GACA,OAAO;IACL;IACA;IAEA;IACA;GACF;EACF;CACF;CACA,iBAAiB;EACf,aAAa,oBAAoB;EACjC,SAAS,oBAAoB;CAC/B;AACF,CACF"}