@allxsmith/bestax-bulma 5.67.8 → 5.67.10

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 (69) hide show
  1. package/README.md +3 -3
  2. package/dist/bestax.css +1 -1
  3. package/dist/bestax.css.map +1 -1
  4. package/dist/esm/components/ContextMenu.js +2 -2
  5. package/dist/esm/components/ContextMenu.js.map +1 -1
  6. package/dist/esm/components/DataTable.js +2 -1
  7. package/dist/esm/components/DataTable.js.map +1 -1
  8. package/dist/esm/components/HoverCard.js.map +1 -1
  9. package/dist/esm/components/Panel.js.map +1 -1
  10. package/dist/esm/components/Popover.js.map +1 -1
  11. package/dist/esm/components/Sidebar.js.map +1 -1
  12. package/dist/esm/form/ColorInputBase.js.map +1 -1
  13. package/dist/esm/form/Combobox.js.map +1 -1
  14. package/dist/esm/form/DateInputBase.js.map +1 -1
  15. package/dist/esm/form/DateRangeInputBase.js.map +1 -1
  16. package/dist/esm/form/DateTimeInputBase.js.map +1 -1
  17. package/dist/esm/form/TimeInputBase.js.map +1 -1
  18. package/dist/esm/form/TreeSelect.js.map +1 -1
  19. package/dist/esm/helpers/Config.js.map +1 -1
  20. package/dist/esm/helpers/portal.js +8 -3
  21. package/dist/esm/helpers/portal.js.map +1 -1
  22. package/dist/esm/layout/AppFrame.js +9 -3
  23. package/dist/esm/layout/AppFrame.js.map +1 -1
  24. package/dist/extras.css +1 -1
  25. package/dist/extras.css.map +1 -1
  26. package/dist/index.cjs +19 -8
  27. package/dist/index.cjs.map +1 -1
  28. package/dist/types/components/DataTable.d.ts +2 -1
  29. package/dist/types/components/HoverCard.d.ts +11 -11
  30. package/dist/types/components/Panel.d.ts +6 -1
  31. package/dist/types/components/Popover.d.ts +6 -6
  32. package/dist/types/components/Sidebar.d.ts +10 -1
  33. package/dist/types/form/ColorInputBase.d.ts +2 -2
  34. package/dist/types/form/Combobox.d.ts +6 -6
  35. package/dist/types/form/DateInputBase.d.ts +2 -2
  36. package/dist/types/form/DateRangeInputBase.d.ts +2 -2
  37. package/dist/types/form/DateTimeInputBase.d.ts +2 -2
  38. package/dist/types/form/TimeInputBase.d.ts +2 -2
  39. package/dist/types/form/TreeSelect.d.ts +1 -1
  40. package/dist/types/helpers/Config.d.ts +9 -5
  41. package/dist/types/helpers/portal.d.ts +7 -3
  42. package/dist/types/layout/AppFrame.d.ts +5 -1
  43. package/dist/types-cjs/components/DataTable.d.ts +2 -1
  44. package/dist/types-cjs/components/HoverCard.d.ts +11 -11
  45. package/dist/types-cjs/components/Panel.d.ts +6 -1
  46. package/dist/types-cjs/components/Popover.d.ts +6 -6
  47. package/dist/types-cjs/components/Sidebar.d.ts +10 -1
  48. package/dist/types-cjs/form/ColorInputBase.d.ts +2 -2
  49. package/dist/types-cjs/form/Combobox.d.ts +6 -6
  50. package/dist/types-cjs/form/DateInputBase.d.ts +2 -2
  51. package/dist/types-cjs/form/DateRangeInputBase.d.ts +2 -2
  52. package/dist/types-cjs/form/DateTimeInputBase.d.ts +2 -2
  53. package/dist/types-cjs/form/TimeInputBase.d.ts +2 -2
  54. package/dist/types-cjs/form/TreeSelect.d.ts +1 -1
  55. package/dist/types-cjs/helpers/Config.d.ts +9 -5
  56. package/dist/types-cjs/helpers/portal.d.ts +7 -3
  57. package/dist/types-cjs/layout/AppFrame.d.ts +5 -1
  58. package/dist/versions/bestax-no-dark-mode.css +1 -1
  59. package/dist/versions/bestax-no-dark-mode.css.map +1 -1
  60. package/dist/versions/bestax-no-helpers-prefixed.css +1 -1
  61. package/dist/versions/bestax-no-helpers-prefixed.css.map +1 -1
  62. package/dist/versions/bestax-no-helpers.css +1 -1
  63. package/dist/versions/bestax-no-helpers.css.map +1 -1
  64. package/dist/versions/bestax-prefixed.css +1 -1
  65. package/dist/versions/bestax-prefixed.css.map +1 -1
  66. package/package.json +2 -2
  67. package/src/scss/components/_datatable.scss +14 -2
  68. package/src/scss/components/_index.scss +1 -0
  69. package/src/scss/components/_panel.scss +31 -0
@@ -61,7 +61,8 @@ export interface DataTableProps<TRow> extends DataTableStateOptions<TRow>, Omit<
61
61
  /**
62
62
  * Shows a page of skeleton rows under the header in place of the rows,
63
63
  * and marks the table busy. For data on its way, as from a server with
64
- * `manual`.
64
+ * `manual`. A skeleton row is as tall as a row of one line of text, so rows
65
+ * of text replace it without the table changing height.
65
66
  */
66
67
  loading?: boolean;
67
68
  /**
@@ -85,17 +85,17 @@ export interface HoverCardProps extends Omit<React.HTMLAttributes<HTMLSpanElemen
85
85
  position?: HoverCardPosition;
86
86
  /**
87
87
  * Render the card through `Portal`, into the `portalContainer` a
88
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog`
89
- * it's in, else `document.body`, fixed to the viewport, so an ancestor's
90
- * `overflow`, `transform` or stacking context can't clip it. A trigger in
91
- * running text needs it too, since the card's block content can't sit
92
- * inside a `<p>`. The card then shows from the commit after hydration,
93
- * never in server markup, and it sits in the Tab order where its container
94
- * is. At the end of `<body>` or of a dialog, Tab reaches it only after the
95
- * rest of the page or the dialog, and focus leaving the trigger on the way
96
- * closes it, so keyboard users can open it, read it and close it with
97
- * Escape, and whatever it links to has to be reachable from the page as
98
- * well. Theming variables set on an ancestor of the trigger reach it only
88
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
89
+ * such as a `Modal`, else `document.body`, fixed to the viewport, so an
90
+ * ancestor's `overflow`, `transform` or stacking context can't clip it. A
91
+ * trigger in running text needs it too, since the card's block content
92
+ * can't sit inside a `<p>`. The card then shows from the commit after
93
+ * hydration, never in server markup, and it sits in the Tab order where its
94
+ * container is. At the end of `<body>` or of an overlay, Tab reaches it
95
+ * only after the rest of the page or the overlay, and focus leaving the
96
+ * trigger on the way closes it, so keyboard users can open it, read it and
97
+ * close it with Escape, and whatever it links to has to be reachable from
98
+ * the page as well. Theming variables set on an ancestor of the trigger reach it only
99
99
  * when its container is inside that ancestor.
100
100
  * @defaultValue false
101
101
  */
@@ -14,7 +14,12 @@ export interface PanelProps extends React.HTMLAttributes<HTMLElement>, Omit<Bulm
14
14
  * `aria-labelledby` pointing at the `id` of its `Panel.Heading`.
15
15
  */
16
16
  as?: 'nav' | 'article' | 'section' | 'aside' | 'div';
17
- /** Bulma color modifier for the panel. */
17
+ /**
18
+ * Bulma color modifier for the panel. With none, the heading takes the
19
+ * text color, with its title in the page background's color so it reads on
20
+ * both schemes. On the dark scheme that title color comes from bestax's
21
+ * stylesheets: Bulma's CSS alone writes it white on light gray there.
22
+ */
18
23
  color?: 'primary' | 'link' | 'info' | 'success' | 'warning' | 'danger' | 'black' | 'dark' | 'light' | 'white';
19
24
  /** Additional CSS classes. */
20
25
  className?: string;
@@ -58,12 +58,12 @@ export interface PopoverProps extends Omit<React.HTMLAttributes<HTMLDivElement>,
58
58
  position?: PopoverPosition;
59
59
  /**
60
60
  * Render the panel through `Portal`, into the `portalContainer` a
61
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog`
62
- * it's in, else `document.body`, fixed to the viewport, so an ancestor's
63
- * `overflow`, `transform` or stacking context can't clip it. The panel
64
- * then shows from the commit after hydration, never in server markup.
65
- * Theming variables set on an ancestor of the trigger reach it only when
66
- * its container is inside that ancestor.
61
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
62
+ * such as a `Modal`, else `document.body`, fixed to the viewport, so an
63
+ * ancestor's `overflow`, `transform` or stacking context can't clip it.
64
+ * The panel then shows from the commit after hydration, never in server
65
+ * markup. Theming variables set on an ancestor of the trigger reach it
66
+ * only when its container is inside that ancestor.
67
67
  * @defaultValue false
68
68
  */
69
69
  appendToBody?: boolean;
@@ -58,7 +58,16 @@ export interface SidebarProps extends Omit<React.HTMLAttributes<HTMLElement>, 'c
58
58
  escapeClose?: boolean;
59
59
  /** Allow closing the sidebar. Default: true. */
60
60
  canCancel?: boolean;
61
- /** Content to display in the sidebar. */
61
+ /**
62
+ * Content to display in the sidebar. A popup in it that portals, such as a
63
+ * Popover's or a date picker's panel with `appendToBody`, goes to the end
64
+ * of the page and renders under an open sidebar. To show it above, wrap
65
+ * the popup in a `ConfigProvider` whose `portalContainer` is an element of
66
+ * your own outside the sidebar that stacks above it, such as one with
67
+ * `position: relative` and a higher `z-index`. With an overlay, the
68
+ * sidebar's `aria-modal` still hides the popup there from screen readers
69
+ * that honor it.
70
+ */
62
71
  children?: React.ReactNode;
63
72
  /**
64
73
  * Renders inline instead of using a portal. Without it, the sidebar renders
@@ -76,8 +76,8 @@ export interface ColorInputBaseProps extends Omit<React.InputHTMLAttributes<HTML
76
76
  position?: PickerPosition;
77
77
  /**
78
78
  * Renders the panel through a portal, into the `portalContainer` a
79
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog` it's
80
- * in, else `document.body`.
79
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
80
+ * such as a `Modal`, else `document.body`.
81
81
  */
82
82
  appendToBody?: boolean;
83
83
  /** Bulma color modifier for the field. */
@@ -97,12 +97,12 @@ interface ComboboxBaseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, '
97
97
  position?: PopoverPosition;
98
98
  /**
99
99
  * Renders the menu through `Portal`, into the `portalContainer` a
100
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog`
101
- * it's in, else `document.body`, fixed to the viewport at the field, so a
102
- * container that clips its overflow can't cut it off. It then shows from
103
- * the commit after hydration, never in server markup. Theming variables set
104
- * on an ancestor reach it only when the portal's container is inside that
105
- * ancestor, as with Popover.
100
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
101
+ * such as a `Modal`, else `document.body`, fixed to the viewport at the
102
+ * field, so a container that clips its overflow can't cut it off. It then
103
+ * shows from the commit after hydration, never in server markup. Theming
104
+ * variables set on an ancestor reach it only when the portal's container
105
+ * is inside that ancestor, as with Popover.
106
106
  * @defaultValue false
107
107
  */
108
108
  appendToBody?: boolean;
@@ -135,8 +135,8 @@ export interface DateInputBaseProps extends Omit<React.InputHTMLAttributes<HTMLI
135
135
  position?: PickerPosition;
136
136
  /**
137
137
  * Render the popover through a portal, into the `portalContainer` a
138
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog` it's
139
- * in, else `document.body`.
138
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
139
+ * such as a `Modal`, else `document.body`.
140
140
  */
141
141
  appendToBody?: boolean;
142
142
  /**
@@ -120,8 +120,8 @@ export interface DateRangeInputBaseProps extends Omit<React.HTMLAttributes<HTMLD
120
120
  position?: PickerPosition;
121
121
  /**
122
122
  * Render the popover through a portal, into the `portalContainer` a
123
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog` it's
124
- * in, else `document.body`.
123
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
124
+ * such as a `Modal`, else `document.body`.
125
125
  */
126
126
  appendToBody?: boolean;
127
127
  /**
@@ -111,8 +111,8 @@ export interface DateTimeInputBaseProps extends Omit<React.InputHTMLAttributes<H
111
111
  position?: PickerPosition;
112
112
  /**
113
113
  * Render the popover through a portal, into the `portalContainer` a
114
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog` it's
115
- * in, else `document.body`.
114
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
115
+ * such as a `Modal`, else `document.body`.
116
116
  */
117
117
  appendToBody?: boolean;
118
118
  /**
@@ -86,8 +86,8 @@ export interface TimeInputBaseProps extends Omit<React.InputHTMLAttributes<HTMLI
86
86
  position?: PickerPosition;
87
87
  /**
88
88
  * Render the popover through a portal, into the `portalContainer` a
89
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog` it's
90
- * in, else `document.body`. On a narrow screen
89
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
90
+ * such as a `Modal`, else `document.body`. On a narrow screen
91
91
  * an in-place popover spans the bottom of the viewport, while a portaled
92
92
  * one stays on its `position` corner.
93
93
  */
@@ -164,7 +164,7 @@ interface TreeSelectBaseProps extends Omit<React.HTMLAttributes<HTMLDivElement>,
164
164
  * @defaultValue 'bottom-left'
165
165
  */
166
166
  position?: PickerPosition;
167
- /** Renders the panel through a portal, into a `ConfigProvider`'s `portalContainer`, else the `Modal`, `Dialog` or `Command.Dialog` it's in, else `document.body`. */
167
+ /** Renders the panel through a portal, into a `ConfigProvider`'s `portalContainer`, else the overlay it's in that takes its popups, such as a `Modal`, else `document.body`. */
168
168
  appendToBody?: boolean;
169
169
  /** The visible and accessible strings, in your app's language. */
170
170
  labels?: TreeSelectLabels;
@@ -36,11 +36,15 @@ export interface ConfigProviderProps {
36
36
  * set to `true`, or a `Toast`. An element, or a `document.querySelector`
37
37
  * selector. Unset, or a selector that matches nothing, that content goes to
38
38
  * `document.body`, except a popup, such as Popover's panel or a picker's,
39
- * opened inside a `Modal`, `Dialog` or `Command.Dialog`: that goes into the
40
- * dialog, where screen readers that honor its `aria-modal` reach it. Set,
41
- * it takes those popups too. A target a component is given, such as a
42
- * `Toast`'s `container`, still wins, and nothing portals that would
43
- * otherwise render in place.
39
+ * opened inside an overlay that takes its popups. A `Modal`, a `Dialog`
40
+ * and a `Command.Dialog` do, so screen readers that honor their
41
+ * `aria-modal` reach the popup, and so does AppFrame's nav while it's a
42
+ * drawer, so the popup shows above it. A `Sidebar` doesn't, so Popover's
43
+ * or a picker's panel opened in an open one renders under it. Set, it
44
+ * takes those popups too, which is how one in a `Sidebar` shows above it:
45
+ * point it at an element of your own outside the sidebar that stacks above
46
+ * it. A target a component is given, such as a `Toast`'s `container`,
47
+ * still wins, and nothing portals that would otherwise render in place.
44
48
  *
45
49
  * The overlays and panels this moves are `position: fixed`, so pick an
46
50
  * element with no ancestor that has a `transform`, `filter`,
@@ -35,15 +35,19 @@ export declare function usePortalContainer(): (container?: string | HTMLElement)
35
35
  * the popups inside it portal, unless a `ConfigProvider` sets a
36
36
  * `portalContainer`. Modal, Dialog and Command.Dialog wrap their content in
37
37
  * it, each with the element that carries their `aria-modal`, since a screen
38
- * reader that honors it hides everything outside that element. The nearest
39
- * one wins, so a Dialog's own box wins over the Modal it renders.
38
+ * reader that honors it hides everything outside that element. AppFrame's
39
+ * nav does too while it's a drawer, which draws over the page, so its popups
40
+ * show above it. The nearest one wins, so a Dialog's own box wins over the
41
+ * Modal it renders. An `undefined` node leaves the scope around it in place,
42
+ * for a part that only takes its popups some of the time, so its content
43
+ * keeps one tree either way.
40
44
  *
41
45
  * @function PortalScope
42
46
  * @param props - `node`, the element popups portal into, and `children`.
43
47
  * @returns The children, inside the scope.
44
48
  */
45
49
  export declare function PortalScope({ node, children, }: {
46
- node: HTMLElement | null;
50
+ node: HTMLElement | null | undefined;
47
51
  children?: React.ReactNode;
48
52
  }): React.JSX.Element;
49
53
  /**
@@ -118,7 +118,11 @@ export interface AppFrameNavProps extends Omit<React.HTMLAttributes<HTMLElement>
118
118
  * Usually a `Menu`. A nav taller than the window scrolls on its own. With
119
119
  * `overlay`, the rest of the frame is inert while the drawer is open, so an
120
120
  * overlay opened from the drawer, such as a `Modal`, goes inside the nav or
121
- * renders outside the frame (Modal's `portal`).
121
+ * renders outside the frame (Modal's `portal`). While the nav is a drawer,
122
+ * a popup opened in it, such as a Popover's `appendToBody` panel, portals
123
+ * into the nav, so it shows above the drawer, unless a `ConfigProvider`
124
+ * sets a `portalContainer`. In the column it portals to the end of the
125
+ * page, as it does anywhere else.
122
126
  */
123
127
  children?: React.ReactNode;
124
128
  /**
@@ -61,7 +61,8 @@ export interface DataTableProps<TRow> extends DataTableStateOptions<TRow>, Omit<
61
61
  /**
62
62
  * Shows a page of skeleton rows under the header in place of the rows,
63
63
  * and marks the table busy. For data on its way, as from a server with
64
- * `manual`.
64
+ * `manual`. A skeleton row is as tall as a row of one line of text, so rows
65
+ * of text replace it without the table changing height.
65
66
  */
66
67
  loading?: boolean;
67
68
  /**
@@ -85,17 +85,17 @@ export interface HoverCardProps extends Omit<React.HTMLAttributes<HTMLSpanElemen
85
85
  position?: HoverCardPosition;
86
86
  /**
87
87
  * Render the card through `Portal`, into the `portalContainer` a
88
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog`
89
- * it's in, else `document.body`, fixed to the viewport, so an ancestor's
90
- * `overflow`, `transform` or stacking context can't clip it. A trigger in
91
- * running text needs it too, since the card's block content can't sit
92
- * inside a `<p>`. The card then shows from the commit after hydration,
93
- * never in server markup, and it sits in the Tab order where its container
94
- * is. At the end of `<body>` or of a dialog, Tab reaches it only after the
95
- * rest of the page or the dialog, and focus leaving the trigger on the way
96
- * closes it, so keyboard users can open it, read it and close it with
97
- * Escape, and whatever it links to has to be reachable from the page as
98
- * well. Theming variables set on an ancestor of the trigger reach it only
88
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
89
+ * such as a `Modal`, else `document.body`, fixed to the viewport, so an
90
+ * ancestor's `overflow`, `transform` or stacking context can't clip it. A
91
+ * trigger in running text needs it too, since the card's block content
92
+ * can't sit inside a `<p>`. The card then shows from the commit after
93
+ * hydration, never in server markup, and it sits in the Tab order where its
94
+ * container is. At the end of `<body>` or of an overlay, Tab reaches it
95
+ * only after the rest of the page or the overlay, and focus leaving the
96
+ * trigger on the way closes it, so keyboard users can open it, read it and
97
+ * close it with Escape, and whatever it links to has to be reachable from
98
+ * the page as well. Theming variables set on an ancestor of the trigger reach it only
99
99
  * when its container is inside that ancestor.
100
100
  * @defaultValue false
101
101
  */
@@ -14,7 +14,12 @@ export interface PanelProps extends React.HTMLAttributes<HTMLElement>, Omit<Bulm
14
14
  * `aria-labelledby` pointing at the `id` of its `Panel.Heading`.
15
15
  */
16
16
  as?: 'nav' | 'article' | 'section' | 'aside' | 'div';
17
- /** Bulma color modifier for the panel. */
17
+ /**
18
+ * Bulma color modifier for the panel. With none, the heading takes the
19
+ * text color, with its title in the page background's color so it reads on
20
+ * both schemes. On the dark scheme that title color comes from bestax's
21
+ * stylesheets: Bulma's CSS alone writes it white on light gray there.
22
+ */
18
23
  color?: 'primary' | 'link' | 'info' | 'success' | 'warning' | 'danger' | 'black' | 'dark' | 'light' | 'white';
19
24
  /** Additional CSS classes. */
20
25
  className?: string;
@@ -58,12 +58,12 @@ export interface PopoverProps extends Omit<React.HTMLAttributes<HTMLDivElement>,
58
58
  position?: PopoverPosition;
59
59
  /**
60
60
  * Render the panel through `Portal`, into the `portalContainer` a
61
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog`
62
- * it's in, else `document.body`, fixed to the viewport, so an ancestor's
63
- * `overflow`, `transform` or stacking context can't clip it. The panel
64
- * then shows from the commit after hydration, never in server markup.
65
- * Theming variables set on an ancestor of the trigger reach it only when
66
- * its container is inside that ancestor.
61
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
62
+ * such as a `Modal`, else `document.body`, fixed to the viewport, so an
63
+ * ancestor's `overflow`, `transform` or stacking context can't clip it.
64
+ * The panel then shows from the commit after hydration, never in server
65
+ * markup. Theming variables set on an ancestor of the trigger reach it
66
+ * only when its container is inside that ancestor.
67
67
  * @defaultValue false
68
68
  */
69
69
  appendToBody?: boolean;
@@ -58,7 +58,16 @@ export interface SidebarProps extends Omit<React.HTMLAttributes<HTMLElement>, 'c
58
58
  escapeClose?: boolean;
59
59
  /** Allow closing the sidebar. Default: true. */
60
60
  canCancel?: boolean;
61
- /** Content to display in the sidebar. */
61
+ /**
62
+ * Content to display in the sidebar. A popup in it that portals, such as a
63
+ * Popover's or a date picker's panel with `appendToBody`, goes to the end
64
+ * of the page and renders under an open sidebar. To show it above, wrap
65
+ * the popup in a `ConfigProvider` whose `portalContainer` is an element of
66
+ * your own outside the sidebar that stacks above it, such as one with
67
+ * `position: relative` and a higher `z-index`. With an overlay, the
68
+ * sidebar's `aria-modal` still hides the popup there from screen readers
69
+ * that honor it.
70
+ */
62
71
  children?: React.ReactNode;
63
72
  /**
64
73
  * Renders inline instead of using a portal. Without it, the sidebar renders
@@ -76,8 +76,8 @@ export interface ColorInputBaseProps extends Omit<React.InputHTMLAttributes<HTML
76
76
  position?: PickerPosition;
77
77
  /**
78
78
  * Renders the panel through a portal, into the `portalContainer` a
79
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog` it's
80
- * in, else `document.body`.
79
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
80
+ * such as a `Modal`, else `document.body`.
81
81
  */
82
82
  appendToBody?: boolean;
83
83
  /** Bulma color modifier for the field. */
@@ -97,12 +97,12 @@ interface ComboboxBaseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, '
97
97
  position?: PopoverPosition;
98
98
  /**
99
99
  * Renders the menu through `Portal`, into the `portalContainer` a
100
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog`
101
- * it's in, else `document.body`, fixed to the viewport at the field, so a
102
- * container that clips its overflow can't cut it off. It then shows from
103
- * the commit after hydration, never in server markup. Theming variables set
104
- * on an ancestor reach it only when the portal's container is inside that
105
- * ancestor, as with Popover.
100
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
101
+ * such as a `Modal`, else `document.body`, fixed to the viewport at the
102
+ * field, so a container that clips its overflow can't cut it off. It then
103
+ * shows from the commit after hydration, never in server markup. Theming
104
+ * variables set on an ancestor reach it only when the portal's container
105
+ * is inside that ancestor, as with Popover.
106
106
  * @defaultValue false
107
107
  */
108
108
  appendToBody?: boolean;
@@ -135,8 +135,8 @@ export interface DateInputBaseProps extends Omit<React.InputHTMLAttributes<HTMLI
135
135
  position?: PickerPosition;
136
136
  /**
137
137
  * Render the popover through a portal, into the `portalContainer` a
138
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog` it's
139
- * in, else `document.body`.
138
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
139
+ * such as a `Modal`, else `document.body`.
140
140
  */
141
141
  appendToBody?: boolean;
142
142
  /**
@@ -120,8 +120,8 @@ export interface DateRangeInputBaseProps extends Omit<React.HTMLAttributes<HTMLD
120
120
  position?: PickerPosition;
121
121
  /**
122
122
  * Render the popover through a portal, into the `portalContainer` a
123
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog` it's
124
- * in, else `document.body`.
123
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
124
+ * such as a `Modal`, else `document.body`.
125
125
  */
126
126
  appendToBody?: boolean;
127
127
  /**
@@ -111,8 +111,8 @@ export interface DateTimeInputBaseProps extends Omit<React.InputHTMLAttributes<H
111
111
  position?: PickerPosition;
112
112
  /**
113
113
  * Render the popover through a portal, into the `portalContainer` a
114
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog` it's
115
- * in, else `document.body`.
114
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
115
+ * such as a `Modal`, else `document.body`.
116
116
  */
117
117
  appendToBody?: boolean;
118
118
  /**
@@ -86,8 +86,8 @@ export interface TimeInputBaseProps extends Omit<React.InputHTMLAttributes<HTMLI
86
86
  position?: PickerPosition;
87
87
  /**
88
88
  * Render the popover through a portal, into the `portalContainer` a
89
- * `ConfigProvider` sets, else the `Modal`, `Dialog` or `Command.Dialog` it's
90
- * in, else `document.body`. On a narrow screen
89
+ * `ConfigProvider` sets, else the overlay it's in that takes its popups,
90
+ * such as a `Modal`, else `document.body`. On a narrow screen
91
91
  * an in-place popover spans the bottom of the viewport, while a portaled
92
92
  * one stays on its `position` corner.
93
93
  */
@@ -164,7 +164,7 @@ interface TreeSelectBaseProps extends Omit<React.HTMLAttributes<HTMLDivElement>,
164
164
  * @defaultValue 'bottom-left'
165
165
  */
166
166
  position?: PickerPosition;
167
- /** Renders the panel through a portal, into a `ConfigProvider`'s `portalContainer`, else the `Modal`, `Dialog` or `Command.Dialog` it's in, else `document.body`. */
167
+ /** Renders the panel through a portal, into a `ConfigProvider`'s `portalContainer`, else the overlay it's in that takes its popups, such as a `Modal`, else `document.body`. */
168
168
  appendToBody?: boolean;
169
169
  /** The visible and accessible strings, in your app's language. */
170
170
  labels?: TreeSelectLabels;
@@ -36,11 +36,15 @@ export interface ConfigProviderProps {
36
36
  * set to `true`, or a `Toast`. An element, or a `document.querySelector`
37
37
  * selector. Unset, or a selector that matches nothing, that content goes to
38
38
  * `document.body`, except a popup, such as Popover's panel or a picker's,
39
- * opened inside a `Modal`, `Dialog` or `Command.Dialog`: that goes into the
40
- * dialog, where screen readers that honor its `aria-modal` reach it. Set,
41
- * it takes those popups too. A target a component is given, such as a
42
- * `Toast`'s `container`, still wins, and nothing portals that would
43
- * otherwise render in place.
39
+ * opened inside an overlay that takes its popups. A `Modal`, a `Dialog`
40
+ * and a `Command.Dialog` do, so screen readers that honor their
41
+ * `aria-modal` reach the popup, and so does AppFrame's nav while it's a
42
+ * drawer, so the popup shows above it. A `Sidebar` doesn't, so Popover's
43
+ * or a picker's panel opened in an open one renders under it. Set, it
44
+ * takes those popups too, which is how one in a `Sidebar` shows above it:
45
+ * point it at an element of your own outside the sidebar that stacks above
46
+ * it. A target a component is given, such as a `Toast`'s `container`,
47
+ * still wins, and nothing portals that would otherwise render in place.
44
48
  *
45
49
  * The overlays and panels this moves are `position: fixed`, so pick an
46
50
  * element with no ancestor that has a `transform`, `filter`,
@@ -35,15 +35,19 @@ export declare function usePortalContainer(): (container?: string | HTMLElement)
35
35
  * the popups inside it portal, unless a `ConfigProvider` sets a
36
36
  * `portalContainer`. Modal, Dialog and Command.Dialog wrap their content in
37
37
  * it, each with the element that carries their `aria-modal`, since a screen
38
- * reader that honors it hides everything outside that element. The nearest
39
- * one wins, so a Dialog's own box wins over the Modal it renders.
38
+ * reader that honors it hides everything outside that element. AppFrame's
39
+ * nav does too while it's a drawer, which draws over the page, so its popups
40
+ * show above it. The nearest one wins, so a Dialog's own box wins over the
41
+ * Modal it renders. An `undefined` node leaves the scope around it in place,
42
+ * for a part that only takes its popups some of the time, so its content
43
+ * keeps one tree either way.
40
44
  *
41
45
  * @function PortalScope
42
46
  * @param props - `node`, the element popups portal into, and `children`.
43
47
  * @returns The children, inside the scope.
44
48
  */
45
49
  export declare function PortalScope({ node, children, }: {
46
- node: HTMLElement | null;
50
+ node: HTMLElement | null | undefined;
47
51
  children?: React.ReactNode;
48
52
  }): React.JSX.Element;
49
53
  /**
@@ -118,7 +118,11 @@ export interface AppFrameNavProps extends Omit<React.HTMLAttributes<HTMLElement>
118
118
  * Usually a `Menu`. A nav taller than the window scrolls on its own. With
119
119
  * `overlay`, the rest of the frame is inert while the drawer is open, so an
120
120
  * overlay opened from the drawer, such as a `Modal`, goes inside the nav or
121
- * renders outside the frame (Modal's `portal`).
121
+ * renders outside the frame (Modal's `portal`). While the nav is a drawer,
122
+ * a popup opened in it, such as a Popover's `appendToBody` panel, portals
123
+ * into the nav, so it shows above the drawer, unless a `ConfigProvider`
124
+ * sets a `portalContainer`. In the column it portals to the end of the
125
+ * page, as it does anywhere else.
122
126
  */
123
127
  children?: React.ReactNode;
124
128
  /**