@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
@@ -22,7 +22,7 @@ export type ScrollAreaViewportVariants = {
22
22
  * já aparecer antes da primeira medição, quando ainda há conteúdo abaixo.
23
23
  */
24
24
  export declare const scrollAreaViewportVariants: (props?: ({
25
- fade?: "vertical" | "horizontal" | "both" | null | undefined;
25
+ fade?: "both" | "horizontal" | "vertical" | null | undefined;
26
26
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
27
27
  //#endregion
28
28
  //# sourceMappingURL=scroll-area-viewport-variants.d.ts.map
@@ -5,8 +5,11 @@ export type AlertDialogBodyProps = useRender.ComponentProps<'div'>;
5
5
  * Conteúdo extra do alert dialog, como a lista do que será apagado ou um campo de confirmação.
6
6
  * Opcional: o caso comum é só `Header` e `Footer`.
7
7
  *
8
- * Cópia de `DialogBody`, sem diferenças (tabela no README de `overlays`); o mecanismo está
9
- * explicado lá.
8
+ * Cópia de `DialogBody` (tabela no README de `overlays`; o mecanismo está explicado lá), com o
9
+ * espaço de cima por margem de 16px depois de outra parte, sem o `py-2`, e o recuo à esquerda
10
+ * (padding mais 32px, a partir de `sm`) quando o `AlertDialog.Header` anterior tem um
11
+ * `AlertDialog.Indicator`, para o conteúdo alinhar ao texto do header. Segue o modelo de superfície
12
+ * da pendência "Superfícies" do ROADMAP, ainda não aplicado ao Dialog.
10
13
  */
11
14
  export declare const AlertDialogBody: {
12
15
  (props: AlertDialogBodyProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
@@ -5,8 +5,11 @@ import { mergeProps, useRender } from "@base-ui/react";
5
5
  * Conteúdo extra do alert dialog, como a lista do que será apagado ou um campo de confirmação.
6
6
  * Opcional: o caso comum é só `Header` e `Footer`.
7
7
  *
8
- * Cópia de `DialogBody`, sem diferenças (tabela no README de `overlays`); o mecanismo está
9
- * explicado lá.
8
+ * Cópia de `DialogBody` (tabela no README de `overlays`; o mecanismo está explicado lá), com o
9
+ * espaço de cima por margem de 16px depois de outra parte, sem o `py-2`, e o recuo à esquerda
10
+ * (padding mais 32px, a partir de `sm`) quando o `AlertDialog.Header` anterior tem um
11
+ * `AlertDialog.Indicator`, para o conteúdo alinhar ao texto do header. Segue o modelo de superfície
12
+ * da pendência "Superfícies" do ROADMAP, ainda não aplicado ao Dialog.
10
13
  */
11
14
  const AlertDialogBody = (props) => {
12
15
  const { render, className, ...rest } = props;
@@ -16,11 +19,13 @@ const AlertDialogBody = (props) => {
16
19
  "flex",
17
20
  "flex-1",
18
21
  "flex-col",
22
+ "gap-4",
19
23
  "min-h-0",
20
24
  "overflow-y-auto",
21
25
  "px-(--alert-dialog-padding)",
22
- "py-2",
23
26
  "first:pt-(--alert-dialog-padding)",
27
+ "not-first:mt-4",
28
+ "sm:[[data-component='AlertDialog.Header']:has(>[data-component='AlertDialog.Indicator'])~&]:pl-[calc(var(--alert-dialog-padding)+--spacing(8))]",
24
29
  "[&:not(:has(~[data-component='AlertDialog.Footer']))]:pb-(--alert-dialog-padding)"
25
30
  ], className)
26
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog-body.js","names":[],"sources":["../../../../src/components/overlays/alert-dialog/alert-dialog-body.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { mergeTwClassNames } from '#utils';\n\nexport type AlertDialogBodyProps = useRender.ComponentProps<'div'>;\n\n/**\n * Conteúdo extra do alert dialog, como a lista do que será apagado ou um campo de confirmação.\n * Opcional: o caso comum é só `Header` e `Footer`.\n *\n * Cópia de `DialogBody`, sem diferenças (tabela no README de `overlays`); o mecanismo está\n * explicado lá.\n */\nexport const AlertDialogBody = (props: AlertDialogBodyProps) => {\n const { render, className, ...rest } = props;\n\n const baseProps = {\n 'data-component': 'AlertDialog.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-(--alert-dialog-padding)',\n 'py-2',\n 'first:pt-(--alert-dialog-padding)',\n // Por irmão, e não por `last:`, porque um `Close` pode vir depois.\n \"[&:not(:has(~[data-component='AlertDialog.Footer']))]:pb-(--alert-dialog-padding)\",\n ],\n className,\n ),\n };\n\n return useRender({\n render,\n defaultTagName: 'div',\n props: mergeProps(baseProps, rest),\n });\n};\n\nAlertDialogBody.displayName = 'AlertDialog.Body';\n"],"mappings":";;;;;;;;;;AAYA,MAAa,mBAAmB,UAAgC;CAC9D,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,gBAAgB,cAAc"}
1
+ {"version":3,"file":"alert-dialog-body.js","names":[],"sources":["../../../../src/components/overlays/alert-dialog/alert-dialog-body.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { mergeTwClassNames } from '#utils';\n\nexport type AlertDialogBodyProps = useRender.ComponentProps<'div'>;\n\n/**\n * Conteúdo extra do alert dialog, como a lista do que será apagado ou um campo de confirmação.\n * Opcional: o caso comum é só `Header` e `Footer`.\n *\n * Cópia de `DialogBody` (tabela no README de `overlays`; o mecanismo está explicado lá), com o\n * espaço de cima por margem de 16px depois de outra parte, sem o `py-2`, e o recuo à esquerda\n * (padding mais 32px, a partir de `sm`) quando o `AlertDialog.Header` anterior tem um\n * `AlertDialog.Indicator`, para o conteúdo alinhar ao texto do header. Segue o modelo de superfície\n * da pendência \"Superfícies\" do ROADMAP, ainda não aplicado ao Dialog.\n */\nexport const AlertDialogBody = (props: AlertDialogBodyProps) => {\n const { render, className, ...rest } = props;\n\n const baseProps = {\n 'data-component': 'AlertDialog.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-(--alert-dialog-padding)',\n 'first:pt-(--alert-dialog-padding)',\n // Depois de outra parte, o espaço de 16px é margem, e não padding: fica fora da área que\n // rola. Com padding, o conteúdo rolado seria cortado rente à descrição do header, e com a\n // margem ele some 16px abaixo dela.\n 'not-first:mt-4',\n // Com um indicador no header anterior (ícone de 20px mais gap de 12px), recua o conteúdo\n // para o alinhar ao texto do header. No celular o header é centralizado, sem recuo.\n \"sm:[[data-component='AlertDialog.Header']:has(>[data-component='AlertDialog.Indicator'])~&]:pl-[calc(var(--alert-dialog-padding)+--spacing(8))]\",\n // Por irmão, e não por `last:`, porque um `Close` pode vir depois.\n \"[&:not(:has(~[data-component='AlertDialog.Footer']))]:pb-(--alert-dialog-padding)\",\n ],\n className,\n ),\n };\n\n return useRender({\n render,\n defaultTagName: 'div',\n props: mergeProps(baseProps, rest),\n });\n};\n\nAlertDialogBody.displayName = 'AlertDialog.Body';\n"],"mappings":";;;;;;;;;;;;;AAeA,MAAa,mBAAmB,UAAgC;CAC9D,MAAM,EAAE,QAAQ,WAAW,GAAG,SAAS;CAEvC,MAAM,YAAY;EAChB,kBAAkB;EAClB,WAAW,kBACT;GACE;GACA;GACA;GACA;GAEA;GACA;GAEA;GACA;GAIA;GAGA;GAEA;EACF,GACA,SACF;CACF;CAEA,OAAO,UAAU;EACf;EACA,gBAAgB;EAChB,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;AACH;AAEA,gBAAgB,cAAc"}
@@ -2,10 +2,13 @@ import { useRender } from "@base-ui/react";
2
2
  //#region src/components/overlays/alert-dialog/alert-dialog-footer.d.ts
3
3
  export type AlertDialogFooterProps = useRender.ComponentProps<'div'>;
4
4
  /**
5
- * Linha de ações na base do alert dialog, alinhadas à direita.
5
+ * Linha de ações na base do alert dialog, alinhadas à direita. Em tela pequena, empilha as ações
6
+ * na largura toda, com a última em cima: a ordem do DOM e do foco não muda (cancelar antes da
7
+ * ação).
6
8
  *
7
- * Cópia de `DialogFooter`, sem diferenças (tabela no README de `overlays`); o mecanismo está
8
- * explicado lá.
9
+ * Cópia de `DialogFooter` (tabela no README de `overlays`; o mecanismo está explicado lá), com a
10
+ * pilha do celular e sempre 24px antes das ações (sem o `pt-2`). Segue o modelo de superfície
11
+ * da pendência "Superfícies" do ROADMAP, ainda não aplicado ao Dialog.
9
12
  */
10
13
  export declare const AlertDialogFooter: {
11
14
  (props: AlertDialogFooterProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
@@ -2,10 +2,13 @@ import { mergeTwClassNames } from "../../../utils/merge-class-names.js";
2
2
  import { mergeProps, useRender } from "@base-ui/react";
3
3
  //#region src/components/overlays/alert-dialog/alert-dialog-footer.tsx
4
4
  /**
5
- * Linha de ações na base do alert dialog, alinhadas à direita.
5
+ * Linha de ações na base do alert dialog, alinhadas à direita. Em tela pequena, empilha as ações
6
+ * na largura toda, com a última em cima: a ordem do DOM e do foco não muda (cancelar antes da
7
+ * ação).
6
8
  *
7
- * Cópia de `DialogFooter`, sem diferenças (tabela no README de `overlays`); o mecanismo está
8
- * explicado lá.
9
+ * Cópia de `DialogFooter` (tabela no README de `overlays`; o mecanismo está explicado lá), com a
10
+ * pilha do celular e sempre 24px antes das ações (sem o `pt-2`). Segue o modelo de superfície
11
+ * da pendência "Superfícies" do ROADMAP, ainda não aplicado ao Dialog.
9
12
  */
10
13
  const AlertDialogFooter = (props) => {
11
14
  const { render, className, ...rest } = props;
@@ -17,9 +20,10 @@ const AlertDialogFooter = (props) => {
17
20
  "justify-end",
18
21
  "gap-2",
19
22
  "px-(--alert-dialog-padding)",
20
- "pt-2",
23
+ "pt-(--alert-dialog-padding)",
21
24
  "pb-(--alert-dialog-padding)",
22
- "first:pt-(--alert-dialog-padding)"
25
+ "max-sm:flex-col-reverse",
26
+ "max-sm:*:w-full"
23
27
  ], className)
24
28
  };
25
29
  return useRender({
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog-footer.js","names":[],"sources":["../../../../src/components/overlays/alert-dialog/alert-dialog-footer.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { mergeTwClassNames } from '#utils';\n\nexport type AlertDialogFooterProps = useRender.ComponentProps<'div'>;\n\n/**\n * Linha de ações na base do alert dialog, alinhadas à direita.\n *\n * Cópia de `DialogFooter`, sem diferenças (tabela no README de `overlays`); o mecanismo está\n * explicado lá.\n */\nexport const AlertDialogFooter = (props: AlertDialogFooterProps) => {\n const { render, className, ...rest } = props;\n\n const baseProps = {\n 'data-component': 'AlertDialog.Footer',\n className: mergeTwClassNames(\n [\n 'flex',\n 'items-center',\n 'justify-end',\n 'gap-2',\n\n 'px-(--alert-dialog-padding)',\n 'pt-2',\n 'pb-(--alert-dialog-padding)',\n // Abrindo o dialog, fecha o respiro de cima.\n 'first:pt-(--alert-dialog-padding)',\n ],\n className,\n ),\n };\n\n return useRender({\n render,\n defaultTagName: 'div',\n props: mergeProps(baseProps, rest),\n });\n};\n\nAlertDialogFooter.displayName = 'AlertDialog.Footer';\n"],"mappings":";;;;;;;;;AAWA,MAAa,qBAAqB,UAAkC;CAClE,MAAM,EAAE,QAAQ,WAAW,GAAG,SAAS;CAEvC,MAAM,YAAY;EAChB,kBAAkB;EAClB,WAAW,kBACT;GACE;GACA;GACA;GACA;GAEA;GACA;GACA;GAEA;EACF,GACA,SACF;CACF;CAEA,OAAO,UAAU;EACf;EACA,gBAAgB;EAChB,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;AACH;AAEA,kBAAkB,cAAc"}
1
+ {"version":3,"file":"alert-dialog-footer.js","names":[],"sources":["../../../../src/components/overlays/alert-dialog/alert-dialog-footer.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { mergeTwClassNames } from '#utils';\n\nexport type AlertDialogFooterProps = useRender.ComponentProps<'div'>;\n\n/**\n * Linha de ações na base do alert dialog, alinhadas à direita. Em tela pequena, empilha as ações\n * na largura toda, com a última em cima: a ordem do DOM e do foco não muda (cancelar antes da\n * ação).\n *\n * Cópia de `DialogFooter` (tabela no README de `overlays`; o mecanismo está explicado lá), com a\n * pilha do celular e sempre 24px antes das ações (sem o `pt-2`). Segue o modelo de superfície\n * da pendência \"Superfícies\" do ROADMAP, ainda não aplicado ao Dialog.\n */\nexport const AlertDialogFooter = (props: AlertDialogFooterProps) => {\n const { render, className, ...rest } = props;\n\n const baseProps = {\n 'data-component': 'AlertDialog.Footer',\n className: mergeTwClassNames(\n [\n 'flex',\n 'items-center',\n 'justify-end',\n 'gap-2',\n\n 'px-(--alert-dialog-padding)',\n 'pt-(--alert-dialog-padding)',\n 'pb-(--alert-dialog-padding)',\n\n 'max-sm:flex-col-reverse',\n 'max-sm:*:w-full',\n ],\n className,\n ),\n };\n\n return useRender({\n render,\n defaultTagName: 'div',\n props: mergeProps(baseProps, rest),\n });\n};\n\nAlertDialogFooter.displayName = 'AlertDialog.Footer';\n"],"mappings":";;;;;;;;;;;;AAcA,MAAa,qBAAqB,UAAkC;CAClE,MAAM,EAAE,QAAQ,WAAW,GAAG,SAAS;CAEvC,MAAM,YAAY;EAChB,kBAAkB;EAClB,WAAW,kBACT;GACE;GACA;GACA;GACA;GAEA;GACA;GACA;GAEA;GACA;EACF,GACA,SACF;CACF;CAEA,OAAO,UAAU;EACf;EACA,gBAAgB;EAChB,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;AACH;AAEA,kBAAkB,cAAc"}
@@ -4,8 +4,15 @@ export type AlertDialogHeaderProps = useRender.ComponentProps<'div'>;
4
4
  /**
5
5
  * Topo do alert dialog, onde ficam título e descrição.
6
6
  *
7
- * Cópia de `DialogHeader`, sem diferenças (tabela no README de `overlays`); o mecanismo está
8
- * explicado lá.
7
+ * Com um `AlertDialog.Indicator` como filho, vira um grid de duas colunas: o indicador à esquerda,
8
+ * alinhado à primeira linha do título, e os demais filhos (título, descrição, o que vier) na
9
+ * coluna da direita, alinhados entre si. Em tela pequena o grid se desfaz: o indicador fica acima
10
+ * do texto e tudo é centralizado.
11
+ *
12
+ * Cópia de `DialogHeader` (tabela no README de `overlays`; o mecanismo está explicado lá), com o
13
+ * grid do indicador, o texto centralizado no celular, 4px entre título e descrição e sem o `pb-2`:
14
+ * o espaço antes da parte seguinte é o padding dela. Segue o modelo de superfície da pendência
15
+ * "Superfícies" do ROADMAP, ainda não aplicado ao Dialog.
9
16
  */
10
17
  export declare const AlertDialogHeader: {
11
18
  (props: AlertDialogHeaderProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
@@ -4,8 +4,15 @@ import { mergeProps, useRender } from "@base-ui/react";
4
4
  /**
5
5
  * Topo do alert dialog, onde ficam título e descrição.
6
6
  *
7
- * Cópia de `DialogHeader`, sem diferenças (tabela no README de `overlays`); o mecanismo está
8
- * explicado lá.
7
+ * Com um `AlertDialog.Indicator` como filho, vira um grid de duas colunas: o indicador à esquerda,
8
+ * alinhado à primeira linha do título, e os demais filhos (título, descrição, o que vier) na
9
+ * coluna da direita, alinhados entre si. Em tela pequena o grid se desfaz: o indicador fica acima
10
+ * do texto e tudo é centralizado.
11
+ *
12
+ * Cópia de `DialogHeader` (tabela no README de `overlays`; o mecanismo está explicado lá), com o
13
+ * grid do indicador, o texto centralizado no celular, 4px entre título e descrição e sem o `pb-2`:
14
+ * o espaço antes da parte seguinte é o padding dela. Segue o modelo de superfície da pendência
15
+ * "Superfícies" do ROADMAP, ainda não aplicado ao Dialog.
9
16
  */
10
17
  const AlertDialogHeader = (props) => {
11
18
  const { render, className, ...rest } = props;
@@ -14,11 +21,18 @@ const AlertDialogHeader = (props) => {
14
21
  className: mergeTwClassNames([
15
22
  "flex",
16
23
  "flex-col",
17
- "gap-0.5",
24
+ "gap-1",
18
25
  "px-(--alert-dialog-padding)",
19
26
  "pt-(--alert-dialog-padding)",
20
- "pb-2",
21
- "[&:not(:has(~[data-component='AlertDialog.Body'],~[data-component='AlertDialog.Footer']))]:pb-(--alert-dialog-padding)"
27
+ "[&:not(:has(~[data-component='AlertDialog.Body'],~[data-component='AlertDialog.Footer']))]:pb-(--alert-dialog-padding)",
28
+ "max-sm:text-center",
29
+ "max-sm:[&>[data-component='AlertDialog.Indicator']]:mb-2",
30
+ "sm:has-[>[data-component='AlertDialog.Indicator']]:grid",
31
+ "sm:has-[>[data-component='AlertDialog.Indicator']]:grid-cols-[auto_1fr]",
32
+ "sm:has-[>[data-component='AlertDialog.Indicator']]:gap-x-3",
33
+ "sm:has-[>[data-component='AlertDialog.Indicator']]:[&>:not([data-component='AlertDialog.Indicator'])]:col-start-2",
34
+ "sm:has-[>[data-component='AlertDialog.Indicator']]:[&>[data-component='AlertDialog.Indicator']]:col-start-1",
35
+ "sm:has-[>[data-component='AlertDialog.Indicator']]:[&>[data-component='AlertDialog.Indicator']]:row-start-1"
22
36
  ], className)
23
37
  };
24
38
  return useRender({
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog-header.js","names":[],"sources":["../../../../src/components/overlays/alert-dialog/alert-dialog-header.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { mergeTwClassNames } from '#utils';\n\nexport type AlertDialogHeaderProps = useRender.ComponentProps<'div'>;\n\n/**\n * Topo do alert dialog, onde ficam título e descrição.\n *\n * Cópia de `DialogHeader`, sem diferenças (tabela no README de `overlays`); o mecanismo está\n * explicado lá.\n */\nexport const AlertDialogHeader = (props: AlertDialogHeaderProps) => {\n const { render, className, ...rest } = props;\n\n const baseProps = {\n 'data-component': 'AlertDialog.Header',\n className: mergeTwClassNames(\n [\n 'flex',\n 'flex-col',\n 'gap-0.5',\n\n 'px-(--alert-dialog-padding)',\n 'pt-(--alert-dialog-padding)',\n 'pb-2',\n // Sem `Body` nem `Footer` depois, fecha o respiro do dialog embaixo. Por irmão, e não por\n // `last:`, porque um `Close` pode vir depois.\n \"[&:not(:has(~[data-component='AlertDialog.Body'],~[data-component='AlertDialog.Footer']))]:pb-(--alert-dialog-padding)\",\n ],\n className,\n ),\n };\n\n return useRender({\n render,\n defaultTagName: 'div',\n props: mergeProps(baseProps, rest),\n });\n};\n\nAlertDialogHeader.displayName = 'AlertDialog.Header';\n"],"mappings":";;;;;;;;;AAWA,MAAa,qBAAqB,UAAkC;CAClE,MAAM,EAAE,QAAQ,WAAW,GAAG,SAAS;CAEvC,MAAM,YAAY;EAChB,kBAAkB;EAClB,WAAW,kBACT;GACE;GACA;GACA;GAEA;GACA;GACA;GAGA;EACF,GACA,SACF;CACF;CAEA,OAAO,UAAU;EACf;EACA,gBAAgB;EAChB,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;AACH;AAEA,kBAAkB,cAAc"}
1
+ {"version":3,"file":"alert-dialog-header.js","names":[],"sources":["../../../../src/components/overlays/alert-dialog/alert-dialog-header.tsx"],"sourcesContent":["import { mergeProps, useRender } from '@base-ui/react';\nimport { mergeTwClassNames } from '#utils';\n\nexport type AlertDialogHeaderProps = useRender.ComponentProps<'div'>;\n\n/**\n * Topo do alert dialog, onde ficam título e descrição.\n *\n * Com um `AlertDialog.Indicator` como filho, vira um grid de duas colunas: o indicador à esquerda,\n * alinhado à primeira linha do título, e os demais filhos (título, descrição, o que vier) na\n * coluna da direita, alinhados entre si. Em tela pequena o grid se desfaz: o indicador fica acima\n * do texto e tudo é centralizado.\n *\n * Cópia de `DialogHeader` (tabela no README de `overlays`; o mecanismo está explicado lá), com o\n * grid do indicador, o texto centralizado no celular, 4px entre título e descrição e sem o `pb-2`:\n * o espaço antes da parte seguinte é o padding dela. Segue o modelo de superfície da pendência\n * \"Superfícies\" do ROADMAP, ainda não aplicado ao Dialog.\n */\nexport const AlertDialogHeader = (props: AlertDialogHeaderProps) => {\n const { render, className, ...rest } = props;\n\n const baseProps = {\n 'data-component': 'AlertDialog.Header',\n className: mergeTwClassNames(\n [\n 'flex',\n 'flex-col',\n 'gap-1',\n\n 'px-(--alert-dialog-padding)',\n 'pt-(--alert-dialog-padding)',\n // Sem `Body` nem `Footer` depois, fecha o respiro do dialog embaixo. Por irmão, e não por\n // `last:`, porque um `Close` pode vir depois.\n \"[&:not(:has(~[data-component='AlertDialog.Body'],~[data-component='AlertDialog.Footer']))]:pb-(--alert-dialog-padding)\",\n\n 'max-sm:text-center',\n // Em coluna, o `gap` de 4px colaria o indicador no título; com o `mb-2`, ficam 12px.\n \"max-sm:[&>[data-component='AlertDialog.Indicator']]:mb-2\",\n // O grid vale a partir de `sm`; abaixo, o header segue em coluna, com o indicador acima do\n // texto. O indicador fixa a coluna e a linha 1 para valer qualquer que seja a ordem dos\n // filhos, e todo o resto vai para a coluna 2, alinhado entre si.\n \"sm:has-[>[data-component='AlertDialog.Indicator']]:grid\",\n \"sm:has-[>[data-component='AlertDialog.Indicator']]:grid-cols-[auto_1fr]\",\n \"sm:has-[>[data-component='AlertDialog.Indicator']]:gap-x-3\",\n \"sm:has-[>[data-component='AlertDialog.Indicator']]:[&>:not([data-component='AlertDialog.Indicator'])]:col-start-2\",\n \"sm:has-[>[data-component='AlertDialog.Indicator']]:[&>[data-component='AlertDialog.Indicator']]:col-start-1\",\n \"sm:has-[>[data-component='AlertDialog.Indicator']]:[&>[data-component='AlertDialog.Indicator']]:row-start-1\",\n ],\n className,\n ),\n };\n\n return useRender({\n render,\n defaultTagName: 'div',\n props: mergeProps(baseProps, rest),\n });\n};\n\nAlertDialogHeader.displayName = 'AlertDialog.Header';\n"],"mappings":";;;;;;;;;;;;;;;;AAkBA,MAAa,qBAAqB,UAAkC;CAClE,MAAM,EAAE,QAAQ,WAAW,GAAG,SAAS;CAEvC,MAAM,YAAY;EAChB,kBAAkB;EAClB,WAAW,kBACT;GACE;GACA;GACA;GAEA;GACA;GAGA;GAEA;GAEA;GAIA;GACA;GACA;GACA;GACA;GACA;EACF,GACA,SACF;CACF;CAEA,OAAO,UAAU;EACf;EACA,gBAAgB;EAChB,OAAO,WAAW,WAAW,IAAI;CACnC,CAAC;AACH;AAEA,kBAAkB,cAAc"}
@@ -1,64 +1,117 @@
1
- import { ButtonProps } from "../../buttons/button/button.js";
2
- import "../../buttons/button/index.js";
1
+ import { AlertVariants } from "../../feedback/alert/use-alert-context.js";
2
+ import { index_parts_d_exports } from "../../feedback/alert/index.parts.js";
3
+ import "../../feedback/alert/index.js";
3
4
  import { AlertDialogVariants } from "./use-alert-dialog-context.js";
4
5
  import React from "react";
5
6
  //#region src/components/overlays/alert-dialog/alert-dialog-imperative.d.ts
6
- /**
7
- * Rótulo e visual de um botão do alerta, no vocabulário do `Button`. Clique, `loading` e
8
- * `disabled` ficam com o alerta.
9
- */
10
- export type AlertDialogButtonOptions = Pick<ButtonProps, 'children' | 'colorScheme' | 'variant'>;
11
7
  export type AlertDialogAlertOptions = {
12
- /** Título do alerta. */
8
+ /**
9
+ * O que aconteceu, no vocabulário do `Alert`: decide a cor e o ícone padrão do indicador, e só
10
+ * eles.
11
+ *
12
+ * @default 'info'
13
+ */
14
+ status?: NonNullable<AlertVariants['status']>;
15
+ /** Diz o que aconteceu ("Não foi possível emitir a nota"). */
13
16
  title: React.ReactNode;
14
17
  /**
15
- * Texto de apoio. Só para exibição: renderiza no `AlertDialog.Outlet`, sem o contexto de quem
16
- * abriu, e não muda depois de aberto.
18
+ * O motivo ou o que fazer em seguida. Só para exibição: renderiza no `AlertDialog.Outlet`, sem
19
+ * o contexto de quem abriu, e não muda depois de aberto.
17
20
  */
18
21
  description?: React.ReactNode;
22
+ /**
23
+ * Informação técnica (código de erro, resposta do servidor), num bloco "Detalhes técnicos"
24
+ * recolhido abaixo da descrição.
25
+ */
26
+ details?: React.ReactNode;
27
+ /**
28
+ * Troca só o desenho do indicador; a cor continua a do `status`. Um ícone próprio entra pelo
29
+ * `Icon` da lib, para ter o mesmo traço (`<Icon render={<TruckIcon />} />`).
30
+ */
31
+ icon?: React.ReactNode;
32
+ /**
33
+ * Rótulo do botão que fecha o alerta.
34
+ *
35
+ * @default 'OK'
36
+ */
37
+ okLabel?: React.ReactNode;
19
38
  /**
20
39
  * Largura do popup, repassada ao `AlertDialog.Root`.
21
40
  *
22
41
  * @default 'md'
23
42
  */
24
43
  size?: AlertDialogVariants['size'];
44
+ };
45
+ export type AlertDialogConfirmOptions = {
46
+ /** A pergunta ("Excluir a nota 4821?"). */
47
+ title: React.ReactNode;
25
48
  /**
26
- * Botão que fecha o alerta: no `alert`, o único; no `confirm`, o de confirmar.
49
+ * A consequência da ação ("A exclusão não pode ser desfeita."). Quase sempre deve estar
50
+ * presente: sem ela, o título é a única informação para decidir. Só para exibição: renderiza no
51
+ * `AlertDialog.Outlet`, sem o contexto de quem abriu, e não muda depois de aberto.
52
+ */
53
+ description?: React.ReactNode;
54
+ /**
55
+ * Ação que destrói ou não se desfaz. O botão de confirmar fica vermelho (`red`, e não `brand`) e
56
+ * o foco abre no "Cancelar", para um `Enter` dado sem ler não confirmar.
27
57
  *
28
- * @default { children: 'OK' } no `alert`, { children: 'Confirmar' } no `confirm`
58
+ * @default false
29
59
  */
30
- confirmButton?: AlertDialogButtonOptions;
31
- };
32
- export type AlertDialogConfirmOptions = AlertDialogAlertOptions & {
60
+ destructive?: boolean;
33
61
  /**
34
- * Botão de cancelar, antes do de confirmar: é o que recebe o foco ao abrir.
62
+ * Rótulo do botão de confirmar: o verbo da ação ("Excluir", "Cancelar a nota"), não
63
+ * "Confirmar" nem "Sim". Sem destrutiva, o foco abre nele.
64
+ */
65
+ confirmLabel: React.ReactNode;
66
+ /**
67
+ * Rótulo do botão de cancelar, antes do de confirmar.
35
68
  *
36
- * @default { children: 'Cancelar', variant: 'outline' }
69
+ * @default 'Cancelar'
37
70
  */
38
- cancelButton?: AlertDialogButtonOptions;
71
+ cancelLabel?: React.ReactNode;
39
72
  /**
40
73
  * Ação executada ao confirmar. Enquanto ela roda, o botão de confirmar fica em `loading` e o
41
74
  * alerta não fecha (nem pelo `Esc`, nem pelo cancelar). No sucesso, fecha e resolve `true`. Se
42
- * ela lançar, o alerta continua aberto com o erro (o `message`, quando é um `Error`), para tentar
43
- * de novo ou cancelar. Sem ela, o alerta só pergunta.
75
+ * ela lançar, o alerta continua aberto, com os botões de volta ao normal e sem mensagem, para
76
+ * tentar de novo ou cancelar. Sem ela, o alerta só pergunta.
44
77
  */
45
78
  onConfirm?: () => unknown;
79
+ /**
80
+ * Chamada com o que o `onConfirm` lançou, com o alerta ainda aberto. A lib não mostra o erro:
81
+ * mostrá-lo é com quem chama, por um handler global (o `onError` de um cliente de queries) ou por
82
+ * esta opção. Um `try/catch` dentro do `onConfirm` que não relança faz o alerta fechar como
83
+ * sucesso. Sem `onError` e sem handler global, a falha não aparece para o usuário.
84
+ */
85
+ onError?: (error: unknown) => void;
86
+ /**
87
+ * Largura do popup, repassada ao `AlertDialog.Root`.
88
+ *
89
+ * @default 'md'
90
+ */
91
+ size?: AlertDialogVariants['size'];
46
92
  };
47
93
  /**
48
- * Abre um alerta com um botão só e resolve quando ele fecha, por esse botão ou pelo `Esc`. Pode
49
- * ser chamado de qualquer lugar, inclusive de fora do React, mas só aparece com um
50
- * `AlertDialog.Outlet` montado.
94
+ * Abre um alerta informativo, com um indicador do `status` e um botão só, e resolve quando ele
95
+ * fecha, por esse botão ou pelo `Esc`. O foco abre no botão, para o `Enter` fechar mesmo com os
96
+ * "Detalhes técnicos" antes dele. Pode ser chamado de qualquer lugar, inclusive de fora do React,
97
+ * mas só aparece com um `AlertDialog.Outlet` montado.
51
98
  *
52
99
  * @example
53
100
  * ```ts
54
- * await AlertDialog.alert({ title: 'Sessão expirada', description: 'Entre de novo para continuar.' });
101
+ * await AlertDialog.alert({
102
+ * status: 'error',
103
+ * title: 'Não foi possível emitir a nota',
104
+ * description: 'A SEFAZ está fora do ar. Tente de novo em alguns minutos.',
105
+ * details: 'Rejeição 108: serviço paralisado momentaneamente.',
106
+ * });
55
107
  * ```
56
108
  */
57
109
  export declare const alertDialogAlert: (options: AlertDialogAlertOptions) => Promise<void>;
58
110
  /**
59
- * Abre um alerta de confirmação e resolve `true` se o usuário confirmar, `false` se cancelar ou
60
- * fechar pelo `Esc`. Com `onConfirm`, executa a ação antes de fechar. Pode ser chamado de qualquer
61
- * lugar, inclusive de fora do React, mas só aparece com um `AlertDialog.Outlet` montado.
111
+ * Abre um alerta de confirmação, sem ícone, e resolve `true` se o usuário confirmar, `false` se
112
+ * cancelar ou fechar pelo `Esc`. Com `onConfirm`, executa a ação antes de fechar. O foco abre na
113
+ * ação; com `destructive`, abre no "Cancelar". Pode ser chamado de qualquer lugar, inclusive de
114
+ * fora do React, mas só aparece com um `AlertDialog.Outlet` montado.
62
115
  *
63
116
  * Para um campo, uma escolha ou um terceiro botão, que não cabem na resposta `boolean`, monte o
64
117
  * AlertDialog com as partes e abra pelo `AlertDialog.createHandle`.
@@ -68,8 +121,14 @@ export declare const alertDialogAlert: (options: AlertDialogAlertOptions) => Pro
68
121
  * const confirmed = await AlertDialog.confirm({
69
122
  * title: 'Excluir a nota 4821?',
70
123
  * description: 'A exclusão não pode ser desfeita.',
71
- * confirmButton: { children: 'Excluir', colorScheme: 'red' },
124
+ * confirmLabel: 'Excluir',
125
+ * destructive: true,
72
126
  * onConfirm: () => deleteInvoice(4821),
127
+ * onError: () =>
128
+ * AlertDialog.alert({
129
+ * status: 'error',
130
+ * title: 'Não foi possível excluir a nota',
131
+ * }),
73
132
  * });
74
133
  * ```
75
134
  */