@panneau/ui 5.0.0-alpha.1 → 5.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +263 -6
- package/bin/check-theme.js +5 -0
- package/dist/alert/Alert.css +28 -42
- package/dist/alert/Alert.d.ts +18 -4
- package/dist/alert/Alert.d.ts.map +1 -1
- package/dist/alert/Alert.js +4 -3
- package/dist/alert/Alert.js.map +1 -1
- package/dist/alert/Alert.module.js +14 -16
- package/dist/alert/Alert.module.js.map +1 -1
- package/dist/alert/tokens.d.ts +3 -0
- package/dist/alert/tokens.d.ts.map +1 -0
- package/dist/alert/tokens.js +21 -0
- package/dist/alert/tokens.js.map +1 -0
- package/dist/badge/Badge.css +24 -36
- package/dist/badge/Badge.d.ts +18 -3
- package/dist/badge/Badge.d.ts.map +1 -1
- package/dist/badge/Badge.js +3 -2
- package/dist/badge/Badge.js.map +1 -1
- package/dist/badge/Badge.module.js +9 -13
- package/dist/badge/Badge.module.js.map +1 -1
- package/dist/badge/tokens.d.ts +3 -0
- package/dist/badge/tokens.d.ts.map +1 -0
- package/dist/badge/tokens.js +23 -0
- package/dist/badge/tokens.js.map +1 -0
- package/dist/button/Button.css +58 -42
- package/dist/button/Button.d.ts +30 -3
- package/dist/button/Button.d.ts.map +1 -1
- package/dist/button/Button.js +27 -2
- package/dist/button/Button.js.map +1 -1
- package/dist/button/Button.module.js +14 -14
- package/dist/button/Button.module.js.map +1 -1
- package/dist/button/tokens.d.ts +3 -0
- package/dist/button/tokens.d.ts.map +1 -0
- package/dist/button/tokens.js +25 -0
- package/dist/button/tokens.js.map +1 -0
- package/dist/card/Card.css +27 -20
- package/dist/card/Card.js +1 -1
- package/dist/card/Card.js.map +1 -1
- package/dist/card/Card.module.js +5 -5
- package/dist/card/Card.module.js.map +1 -1
- package/dist/card/tokens.d.ts +3 -0
- package/dist/card/tokens.d.ts.map +1 -0
- package/dist/card/tokens.js +31 -0
- package/dist/card/tokens.js.map +1 -0
- package/dist/checkbox/Checkbox.css +22 -21
- package/dist/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/checkbox/Checkbox.js +1 -0
- package/dist/checkbox/Checkbox.js.map +1 -1
- package/dist/checkbox/Checkbox.module.js +4 -4
- package/dist/checkbox/Checkbox.module.js.map +1 -1
- package/dist/checkbox/ChoiceChrome.d.ts +3 -1
- package/dist/checkbox/ChoiceChrome.d.ts.map +1 -1
- package/dist/checkbox/ChoiceChrome.js +2 -2
- package/dist/checkbox/ChoiceChrome.js.map +1 -1
- package/dist/checkbox/tokens.d.ts +3 -0
- package/dist/checkbox/tokens.d.ts.map +1 -0
- package/dist/checkbox/tokens.js +21 -0
- package/dist/checkbox/tokens.js.map +1 -0
- package/dist/combo-box/ComboBox.css +4 -4
- package/dist/combo-box/ComboBox.js +1 -1
- package/dist/combo-box/ComboBox.js.map +1 -1
- package/dist/combo-box/ComboBox.module.js +3 -3
- package/dist/container/Container.css +32 -0
- package/dist/container/Container.d.ts +15 -0
- package/dist/container/Container.d.ts.map +1 -0
- package/dist/container/Container.js +18 -0
- package/dist/container/Container.js.map +1 -0
- package/dist/container/Container.module.js +20 -0
- package/dist/container/Container.module.js.map +1 -0
- package/dist/container/tokens.d.ts +3 -0
- package/dist/container/tokens.d.ts.map +1 -0
- package/dist/container/tokens.js +19 -0
- package/dist/container/tokens.js.map +1 -0
- package/dist/date-picker/DatePicker.css +30 -30
- package/dist/date-picker/DatePicker.js +1 -1
- package/dist/date-picker/DatePicker.js.map +1 -1
- package/dist/date-picker/DatePicker.module.js +11 -11
- package/dist/date-picker/DatePicker.module.js.map +1 -1
- package/dist/date-picker/calendarTokens.d.ts +3 -0
- package/dist/date-picker/calendarTokens.d.ts.map +1 -0
- package/dist/date-picker/calendarTokens.js +17 -0
- package/dist/date-picker/calendarTokens.js.map +1 -0
- package/dist/dialog/Dialog.css +40 -36
- package/dist/dialog/Dialog.js +1 -1
- package/dist/dialog/Dialog.js.map +1 -1
- package/dist/dialog/Dialog.module.js +11 -11
- package/dist/dialog/Dialog.module.js.map +1 -1
- package/dist/dialog/tokens.d.ts +3 -0
- package/dist/dialog/tokens.d.ts.map +1 -0
- package/dist/dialog/tokens.js +29 -0
- package/dist/dialog/tokens.js.map +1 -0
- package/dist/disclosure/Disclosure.css +12 -12
- package/dist/disclosure/Disclosure.d.ts.map +1 -1
- package/dist/disclosure/Disclosure.js +1 -1
- package/dist/disclosure/Disclosure.js.map +1 -1
- package/dist/disclosure/Disclosure.module.js +7 -7
- package/dist/disclosure/Disclosure.module.js.map +1 -1
- package/dist/disclosure/tokens.d.ts +3 -0
- package/dist/disclosure/tokens.d.ts.map +1 -0
- package/dist/disclosure/tokens.js +15 -0
- package/dist/disclosure/tokens.js.map +1 -0
- package/dist/divider/Divider.css +17 -0
- package/dist/divider/Divider.d.ts +8 -0
- package/dist/divider/Divider.d.ts.map +1 -0
- package/dist/divider/Divider.js +21 -0
- package/dist/divider/Divider.js.map +1 -0
- package/dist/divider/Divider.module.js +12 -0
- package/dist/divider/Divider.module.js.map +1 -0
- package/dist/divider/tokens.d.ts +3 -0
- package/dist/divider/tokens.d.ts.map +1 -0
- package/dist/divider/tokens.js +13 -0
- package/dist/divider/tokens.js.map +1 -0
- package/dist/field/Field.css +40 -37
- package/dist/field/Field.module.js +11 -11
- package/dist/field/Field.module.js.map +1 -1
- package/dist/field/Fieldset.js +1 -1
- package/dist/field/Fieldset.js.map +1 -1
- package/dist/field/inputTokens.d.ts +3 -0
- package/dist/field/inputTokens.d.ts.map +1 -0
- package/dist/field/inputTokens.js +21 -0
- package/dist/field/inputTokens.js.map +1 -0
- package/dist/field/tokens.d.ts +3 -0
- package/dist/field/tokens.d.ts.map +1 -0
- package/dist/field/tokens.js +15 -0
- package/dist/field/tokens.js.map +1 -0
- package/dist/grid/Grid.css +174 -0
- package/dist/grid/Grid.d.ts +28 -0
- package/dist/grid/Grid.d.ts.map +1 -0
- package/dist/grid/Grid.js +31 -0
- package/dist/grid/Grid.js.map +1 -0
- package/dist/grid/Grid.module.js +12 -0
- package/dist/grid/Grid.module.js.map +1 -0
- package/dist/grid/GridItem.css +59 -0
- package/dist/grid/GridItem.module.js +7 -0
- package/dist/grid/GridItem.module.js.map +1 -0
- package/dist/grid/tokens.d.ts +3 -0
- package/dist/grid/tokens.d.ts.map +1 -0
- package/dist/grid/tokens.js +10 -0
- package/dist/grid/tokens.js.map +1 -0
- package/dist/heading/Heading.css +52 -0
- package/dist/heading/Heading.d.ts +17 -0
- package/dist/heading/Heading.d.ts.map +1 -0
- package/dist/heading/Heading.js +17 -0
- package/dist/heading/Heading.js.map +1 -0
- package/dist/heading/Heading.module.js +16 -0
- package/dist/heading/Heading.module.js.map +1 -0
- package/dist/heading/tokens.d.ts +6 -0
- package/dist/heading/tokens.d.ts.map +1 -0
- package/dist/heading/tokens.js +66 -0
- package/dist/heading/tokens.js.map +1 -0
- package/dist/icon/Icon.css +1 -1
- package/dist/icon/Icon.js +1 -1
- package/dist/icon/Icon.js.map +1 -1
- package/dist/icon/Icon.module.js +1 -1
- package/dist/icon-button/IconButton.css +2 -2
- package/dist/icon-button/IconButton.d.ts +1 -1
- package/dist/icon-button/IconButton.d.ts.map +1 -1
- package/dist/icon-button/IconButton.js +3 -3
- package/dist/icon-button/IconButton.js.map +1 -1
- package/dist/icon-button/IconButton.module.js +2 -2
- package/dist/index.d.ts +25 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -2
- package/dist/inline/Inline.css +142 -0
- package/dist/inline/Inline.d.ts +17 -0
- package/dist/inline/Inline.d.ts.map +1 -0
- package/dist/inline/Inline.js +21 -0
- package/dist/inline/Inline.js.map +1 -0
- package/dist/inline/Inline.module.js +12 -0
- package/dist/inline/Inline.module.js.map +1 -0
- package/dist/inline/tokens.d.ts +3 -0
- package/dist/inline/tokens.d.ts.map +1 -0
- package/dist/inline/tokens.js +10 -0
- package/dist/inline/tokens.js.map +1 -0
- package/dist/layout/responsive.d.ts +38 -0
- package/dist/layout/responsive.d.ts.map +1 -0
- package/dist/layout/responsive.js +49 -0
- package/dist/layout/responsive.js.map +1 -0
- package/dist/menu/Menu.js +2 -2
- package/dist/menu/Menu.js.map +1 -1
- package/dist/number-input/NumberInput.css +12 -12
- package/dist/number-input/NumberInput.js +1 -1
- package/dist/number-input/NumberInput.js.map +1 -1
- package/dist/number-input/NumberInput.module.js +4 -4
- package/dist/number-input/NumberInput.module.js.map +1 -1
- package/dist/number-input/tokens.d.ts +3 -0
- package/dist/number-input/tokens.d.ts.map +1 -0
- package/dist/number-input/tokens.js +10 -0
- package/dist/number-input/tokens.js.map +1 -0
- package/dist/popover/Popover.css +13 -12
- package/dist/popover/Popover.js +2 -2
- package/dist/popover/Popover.js.map +1 -1
- package/dist/popover/Popover.module.js +3 -3
- package/dist/popover/Popover.module.js.map +1 -1
- package/dist/popover/tokens.d.ts +3 -0
- package/dist/popover/tokens.d.ts.map +1 -0
- package/dist/popover/tokens.js +19 -0
- package/dist/popover/tokens.js.map +1 -0
- package/dist/prose/Prose.css +141 -0
- package/dist/prose/Prose.d.ts +11 -0
- package/dist/prose/Prose.d.ts.map +1 -0
- package/dist/prose/Prose.js +18 -0
- package/dist/prose/Prose.js.map +1 -0
- package/dist/prose/Prose.module.js +8 -0
- package/dist/prose/Prose.module.js.map +1 -0
- package/dist/prose/tokens.d.ts +3 -0
- package/dist/prose/tokens.d.ts.map +1 -0
- package/dist/prose/tokens.js +33 -0
- package/dist/prose/tokens.js.map +1 -0
- package/dist/radio-group/RadioGroup.css +21 -20
- package/dist/radio-group/RadioGroup.d.ts.map +1 -1
- package/dist/radio-group/RadioGroup.js +2 -2
- package/dist/radio-group/RadioGroup.js.map +1 -1
- package/dist/radio-group/RadioGroup.module.js +6 -6
- package/dist/radio-group/RadioGroup.module.js.map +1 -1
- package/dist/radio-group/tokens.d.ts +3 -0
- package/dist/radio-group/tokens.d.ts.map +1 -0
- package/dist/radio-group/tokens.js +19 -0
- package/dist/radio-group/tokens.js.map +1 -0
- package/dist/root/PanneauRoot.css +243 -20
- package/dist/root/PanneauRoot.d.ts +28 -4
- package/dist/root/PanneauRoot.d.ts.map +1 -1
- package/dist/root/PanneauRoot.js +104 -21
- package/dist/root/PanneauRoot.js.map +1 -1
- package/dist/root/PanneauRoot.module.js +11 -3
- package/dist/root/PanneauRoot.module.js.map +1 -1
- package/dist/root/ThemeScope.d.ts +24 -0
- package/dist/root/ThemeScope.d.ts.map +1 -0
- package/dist/root/ThemeScope.js +49 -0
- package/dist/root/ThemeScope.js.map +1 -0
- package/dist/select/ListBox.css +23 -22
- package/dist/select/ListBox.module.js +12 -12
- package/dist/select/ListBox.module.js.map +1 -1
- package/dist/select/Select.js +1 -1
- package/dist/select/Select.js.map +1 -1
- package/dist/select/listBoxTokens.d.ts +3 -0
- package/dist/select/listBoxTokens.d.ts.map +1 -0
- package/dist/select/listBoxTokens.js +19 -0
- package/dist/select/listBoxTokens.js.map +1 -0
- package/dist/spinner/Spinner.css +8 -8
- package/dist/spinner/Spinner.js +1 -1
- package/dist/spinner/Spinner.js.map +1 -1
- package/dist/spinner/Spinner.module.js +5 -5
- package/dist/spinner/Spinner.module.js.map +1 -1
- package/dist/spinner/tokens.d.ts +3 -0
- package/dist/spinner/tokens.d.ts.map +1 -0
- package/dist/spinner/tokens.js +10 -0
- package/dist/spinner/tokens.js.map +1 -0
- package/dist/stack/Stack.css +135 -0
- package/dist/stack/Stack.d.ts +15 -0
- package/dist/stack/Stack.d.ts.map +1 -0
- package/dist/stack/Stack.js +21 -0
- package/dist/stack/Stack.js.map +1 -0
- package/dist/stack/Stack.module.js +8 -0
- package/dist/stack/Stack.module.js.map +1 -0
- package/dist/stack/tokens.d.ts +3 -0
- package/dist/stack/tokens.d.ts.map +1 -0
- package/dist/stack/tokens.js +10 -0
- package/dist/stack/tokens.js.map +1 -0
- package/dist/switch/Switch.css +34 -25
- package/dist/switch/Switch.d.ts.map +1 -1
- package/dist/switch/Switch.js +1 -0
- package/dist/switch/Switch.js.map +1 -1
- package/dist/switch/Switch.module.js +4 -4
- package/dist/switch/Switch.module.js.map +1 -1
- package/dist/switch/tokens.d.ts +3 -0
- package/dist/switch/tokens.d.ts.map +1 -0
- package/dist/switch/tokens.js +25 -0
- package/dist/switch/tokens.js.map +1 -0
- package/dist/tabs/Tabs.css +24 -23
- package/dist/tabs/Tabs.js +4 -4
- package/dist/tabs/Tabs.js.map +1 -1
- package/dist/tabs/Tabs.module.js +4 -4
- package/dist/tabs/Tabs.module.js.map +1 -1
- package/dist/tabs/tokens.d.ts +3 -0
- package/dist/tabs/tokens.d.ts.map +1 -0
- package/dist/tabs/tokens.js +25 -0
- package/dist/tabs/tokens.js.map +1 -0
- package/dist/text/Text.css +74 -0
- package/dist/text/Text.d.ts +27 -0
- package/dist/text/Text.d.ts.map +1 -0
- package/dist/text/Text.js +16 -0
- package/dist/text/Text.js.map +1 -0
- package/dist/text/Text.module.js +30 -0
- package/dist/text/Text.module.js.map +1 -0
- package/dist/text/tokens.d.ts +3 -0
- package/dist/text/tokens.d.ts.map +1 -0
- package/dist/text/tokens.js +10 -0
- package/dist/text/tokens.js.map +1 -0
- package/dist/text-area/TextArea.css +1 -1
- package/dist/text-area/TextArea.js +1 -1
- package/dist/text-area/TextArea.js.map +1 -1
- package/dist/text-area/TextArea.module.js +1 -1
- package/dist/text-input/TextInput.js +1 -1
- package/dist/text-input/TextInput.js.map +1 -1
- package/dist/theme/Tone.css +70 -0
- package/dist/theme/Tone.module.js +20 -0
- package/dist/theme/Tone.module.js.map +1 -0
- package/dist/theme/bootstrap.d.ts +10 -0
- package/dist/theme/bootstrap.d.ts.map +1 -1
- package/dist/theme/bootstrap.js +48 -5
- package/dist/theme/bootstrap.js.map +1 -1
- package/dist/theme/chartColors.d.ts +23 -0
- package/dist/theme/chartColors.d.ts.map +1 -0
- package/dist/theme/chartColors.js +27 -0
- package/dist/theme/chartColors.js.map +1 -0
- package/dist/theme/checkTheme.d.ts +39 -0
- package/dist/theme/checkTheme.d.ts.map +1 -0
- package/dist/theme/checkTheme.js +132 -0
- package/dist/theme/checkTheme.js.map +1 -0
- package/dist/theme/cli.d.ts +14 -0
- package/dist/theme/cli.d.ts.map +1 -0
- package/dist/theme/cli.js +61 -0
- package/dist/theme/cli.js.map +1 -0
- package/dist/theme/color.d.ts +30 -0
- package/dist/theme/color.d.ts.map +1 -0
- package/dist/theme/color.js +94 -0
- package/dist/theme/color.js.map +1 -0
- package/dist/theme/colorVision.d.ts +23 -0
- package/dist/theme/colorVision.d.ts.map +1 -0
- package/dist/theme/colorVision.js +140 -0
- package/dist/theme/colorVision.js.map +1 -0
- package/dist/theme/componentTokens.d.ts +24 -0
- package/dist/theme/componentTokens.d.ts.map +1 -0
- package/dist/theme/componentTokens.js +20 -0
- package/dist/theme/componentTokens.js.map +1 -0
- package/dist/theme/components.d.ts +38 -0
- package/dist/theme/components.d.ts.map +1 -0
- package/dist/theme/components.js +65 -0
- package/dist/theme/components.js.map +1 -0
- package/dist/theme/defineTheme.d.ts +85 -0
- package/dist/theme/defineTheme.d.ts.map +1 -0
- package/dist/theme/defineTheme.js +130 -0
- package/dist/theme/defineTheme.js.map +1 -0
- package/dist/theme/fonts.d.ts +32 -0
- package/dist/theme/fonts.d.ts.map +1 -0
- package/dist/theme/fonts.js +36 -0
- package/dist/theme/fonts.js.map +1 -0
- package/dist/theme/index.d.ts +13 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +10 -0
- package/dist/theme/semanticTokens.d.ts +9 -0
- package/dist/theme/semanticTokens.d.ts.map +1 -0
- package/dist/theme/semanticTokens.js +110 -0
- package/dist/theme/semanticTokens.js.map +1 -0
- package/dist/theme/theme.d.ts +61 -7
- package/dist/theme/theme.d.ts.map +1 -1
- package/dist/theme/theme.js +100 -10
- package/dist/theme/theme.js.map +1 -1
- package/dist/theme/toneClass.d.ts +8 -0
- package/dist/theme/toneClass.d.ts.map +1 -0
- package/dist/theme/toneClass.js +15 -0
- package/dist/theme/toneClass.js.map +1 -0
- package/dist/theme/tones.d.ts +89 -0
- package/dist/theme/tones.d.ts.map +1 -0
- package/dist/theme/tones.js +127 -0
- package/dist/theme/tones.js.map +1 -0
- package/dist/time-input/TimeInput.js +1 -1
- package/dist/time-input/TimeInput.js.map +1 -1
- package/dist/toast/Toast.css +22 -44
- package/dist/toast/Toast.d.ts +5 -3
- package/dist/toast/Toast.d.ts.map +1 -1
- package/dist/toast/Toast.js +4 -3
- package/dist/toast/Toast.js.map +1 -1
- package/dist/toast/Toast.module.js +10 -16
- package/dist/toast/Toast.module.js.map +1 -1
- package/dist/toast/tokens.d.ts +3 -0
- package/dist/toast/tokens.d.ts.map +1 -0
- package/dist/toast/tokens.js +21 -0
- package/dist/toast/tokens.js.map +1 -0
- package/dist/tooltip/Tooltip.css +12 -11
- package/dist/tooltip/Tooltip.js +1 -1
- package/dist/tooltip/Tooltip.js.map +1 -1
- package/dist/tooltip/Tooltip.module.js +2 -2
- package/dist/tooltip/Tooltip.module.js.map +1 -1
- package/dist/tooltip/tokens.d.ts +3 -0
- package/dist/tooltip/tokens.d.ts.map +1 -0
- package/dist/tooltip/tokens.js +21 -0
- package/dist/tooltip/tokens.js.map +1 -0
- package/dist/utils/cx.d.ts +1 -1
- package/dist/utils/cx.d.ts.map +1 -1
- package/dist/utils/cx.js +2 -2
- package/dist/utils/cx.js.map +1 -1
- package/package.json +15 -3
package/dist/root/PanneauRoot.js
CHANGED
|
@@ -1,20 +1,100 @@
|
|
|
1
1
|
import { cx } from "../utils/cx.js";
|
|
2
|
+
import { getFontFaceCss, getFontStylesheets } from "../theme/fonts.js";
|
|
2
3
|
import { getThemeCss, hashString } from "../theme/theme.js";
|
|
3
4
|
import { ToastProvider } from "../toast/Toast.js";
|
|
4
5
|
import PanneauRoot_module_default from "./PanneauRoot.module.js";
|
|
5
6
|
import { I18nProvider } from "react-aria-components";
|
|
6
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
7
8
|
import { getPanneauMessages } from "@panneau/intl";
|
|
8
9
|
import { createContext, use, useState } from "react";
|
|
9
10
|
import { IntlContext, IntlProvider } from "react-intl";
|
|
11
|
+
import { c } from "react/compiler-runtime";
|
|
10
12
|
//#region src/root/PanneauRoot.tsx
|
|
11
13
|
/** `undefined` outside of a root, `null` while the root's container isn't mounted yet. */
|
|
12
14
|
var PortalContext = createContext(void 0);
|
|
15
|
+
/** The color scheme and density in effect, which a `ThemeScope` inherits when it doesn't set them. */
|
|
16
|
+
var ScopeContext = createContext({
|
|
17
|
+
colorScheme: "light",
|
|
18
|
+
density: "auto"
|
|
19
|
+
});
|
|
20
|
+
/** Gives overlays a container: that of a root, or of a scope. */
|
|
21
|
+
var PortalProvider = PortalContext.Provider;
|
|
13
22
|
/**
|
|
14
|
-
* The
|
|
23
|
+
* The `<style>` and `<link>` elements of a theme: its CSS, scoped to `data-panneau-theme`, and its
|
|
24
|
+
* fonts. React hoists them to the head and adds each once, however many roots or scopes use it.
|
|
25
|
+
* Returns the scope of the theme too, for `data-panneau-theme`.
|
|
26
|
+
*/
|
|
27
|
+
function useThemeStyles(theme) {
|
|
28
|
+
const $ = c(13);
|
|
29
|
+
let t0;
|
|
30
|
+
let t1;
|
|
31
|
+
let t2;
|
|
32
|
+
if ($[0] !== theme) {
|
|
33
|
+
const css = theme !== null ? getThemeCss(theme, "§") : "";
|
|
34
|
+
const scope = css !== "" ? hashString(css) : void 0;
|
|
35
|
+
const fontCss = getFontFaceCss(theme?.fonts);
|
|
36
|
+
t2 = scope;
|
|
37
|
+
t0 = scope !== void 0 ? /* @__PURE__ */ jsx("style", {
|
|
38
|
+
href: `panneau-theme-${scope}`,
|
|
39
|
+
precedence: "panneau",
|
|
40
|
+
children: css.replaceAll("§", scope)
|
|
41
|
+
}) : null;
|
|
42
|
+
t1 = fontCss !== "" ? /* @__PURE__ */ jsx("style", {
|
|
43
|
+
href: `panneau-fonts-${hashString(fontCss)}`,
|
|
44
|
+
precedence: "panneau",
|
|
45
|
+
children: fontCss
|
|
46
|
+
}) : null;
|
|
47
|
+
$[0] = theme;
|
|
48
|
+
$[1] = t0;
|
|
49
|
+
$[2] = t1;
|
|
50
|
+
$[3] = t2;
|
|
51
|
+
} else {
|
|
52
|
+
t0 = $[1];
|
|
53
|
+
t1 = $[2];
|
|
54
|
+
t2 = $[3];
|
|
55
|
+
}
|
|
56
|
+
let t3;
|
|
57
|
+
if ($[4] !== theme?.fonts) {
|
|
58
|
+
t3 = getFontStylesheets(theme?.fonts).map(_temp);
|
|
59
|
+
$[4] = theme?.fonts;
|
|
60
|
+
$[5] = t3;
|
|
61
|
+
} else t3 = $[5];
|
|
62
|
+
let t4;
|
|
63
|
+
if ($[6] !== t0 || $[7] !== t1 || $[8] !== t3) {
|
|
64
|
+
t4 = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
65
|
+
t0,
|
|
66
|
+
t1,
|
|
67
|
+
t3
|
|
68
|
+
] });
|
|
69
|
+
$[6] = t0;
|
|
70
|
+
$[7] = t1;
|
|
71
|
+
$[8] = t3;
|
|
72
|
+
$[9] = t4;
|
|
73
|
+
} else t4 = $[9];
|
|
74
|
+
let t5;
|
|
75
|
+
if ($[10] !== t2 || $[11] !== t4) {
|
|
76
|
+
t5 = {
|
|
77
|
+
scope: t2,
|
|
78
|
+
styles: t4
|
|
79
|
+
};
|
|
80
|
+
$[10] = t2;
|
|
81
|
+
$[11] = t4;
|
|
82
|
+
$[12] = t5;
|
|
83
|
+
} else t5 = $[12];
|
|
84
|
+
return t5;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* The element overlays render into: the closest `PanneauRoot`'s or `ThemeScope`'s, or `undefined` for the body
|
|
15
88
|
* without a root. It is `null` during the first render of a root: overlays wait for it, since
|
|
16
89
|
* React Aria hides everything outside of a modal from assistive technologies when it opens.
|
|
17
90
|
*/
|
|
91
|
+
function _temp(href) {
|
|
92
|
+
return /* @__PURE__ */ jsx("link", {
|
|
93
|
+
rel: "stylesheet",
|
|
94
|
+
href,
|
|
95
|
+
precedence: "panneau"
|
|
96
|
+
}, href);
|
|
97
|
+
}
|
|
18
98
|
function usePortalContainer() {
|
|
19
99
|
return use(PortalContext);
|
|
20
100
|
}
|
|
@@ -40,31 +120,34 @@ function PanneauIntlProvider({ locale = "en", children }) {
|
|
|
40
120
|
* any token with its own class on the root. Without an `IntlProvider` above it, it provides one
|
|
41
121
|
* with Panneau's messages in its `locale`.
|
|
42
122
|
*/
|
|
43
|
-
function PanneauRoot({ theme = null, colorScheme = "light", locale, className, children, ...props }) {
|
|
123
|
+
function PanneauRoot({ theme = null, colorScheme = "light", density = "auto", locale, className, children, ...props }) {
|
|
44
124
|
const intl = use(IntlContext);
|
|
45
125
|
const [container, setContainer] = useState(null);
|
|
46
|
-
const
|
|
47
|
-
const scope = css !== "" ? hashString(css) : void 0;
|
|
126
|
+
const { scope, styles: themeStyles } = useThemeStyles(theme);
|
|
48
127
|
const root = /* @__PURE__ */ jsxs("div", {
|
|
49
128
|
...props,
|
|
50
|
-
className: cx(PanneauRoot_module_default.root, className),
|
|
129
|
+
className: cx("panneau-root", PanneauRoot_module_default.root, PanneauRoot_module_default.container, className),
|
|
51
130
|
"data-color-scheme": colorScheme,
|
|
131
|
+
"data-density": density,
|
|
52
132
|
"data-panneau-theme": scope,
|
|
53
|
-
children: [
|
|
54
|
-
href: `panneau-theme-${scope}`,
|
|
55
|
-
precedence: "panneau",
|
|
56
|
-
children: css.replaceAll("§", scope)
|
|
57
|
-
}) : null, /* @__PURE__ */ jsxs(I18nProvider, {
|
|
133
|
+
children: [themeStyles, /* @__PURE__ */ jsxs(I18nProvider, {
|
|
58
134
|
locale: locale ?? intl?.locale,
|
|
59
|
-
children: [/* @__PURE__ */ jsx(
|
|
60
|
-
value:
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
135
|
+
children: [/* @__PURE__ */ jsx(ScopeContext, {
|
|
136
|
+
value: {
|
|
137
|
+
colorScheme,
|
|
138
|
+
density
|
|
139
|
+
},
|
|
140
|
+
children: /* @__PURE__ */ jsx(PortalContext, {
|
|
141
|
+
value: container,
|
|
142
|
+
children: /* @__PURE__ */ jsx(ToastProvider, {
|
|
143
|
+
regionClassName: PanneauRoot_module_default.root,
|
|
144
|
+
regionProps: {
|
|
145
|
+
"data-color-scheme": colorScheme,
|
|
146
|
+
"data-density": density,
|
|
147
|
+
"data-panneau-theme": scope
|
|
148
|
+
},
|
|
149
|
+
children
|
|
150
|
+
})
|
|
68
151
|
})
|
|
69
152
|
}), /* @__PURE__ */ jsx("div", {
|
|
70
153
|
ref: setContainer,
|
|
@@ -79,6 +162,6 @@ function PanneauRoot({ theme = null, colorScheme = "light", locale, className, c
|
|
|
79
162
|
return root;
|
|
80
163
|
}
|
|
81
164
|
//#endregion
|
|
82
|
-
export { PanneauRoot, usePortalContainer };
|
|
165
|
+
export { PanneauRoot, PortalProvider, ScopeContext, usePortalContainer, useThemeStyles };
|
|
83
166
|
|
|
84
167
|
//# sourceMappingURL=PanneauRoot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanneauRoot.js","names":["styles"],"sources":["../../src/root/PanneauRoot.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode, createContext, use, useState } from 'react';\nimport { I18nProvider } from 'react-aria-components';\nimport { IntlContext, IntlProvider, type IntlShape } from 'react-intl';\n\nimport { getPanneauMessages } from '@panneau/intl';\n\nimport { type ColorScheme
|
|
1
|
+
{"version":3,"file":"PanneauRoot.js","names":["scope","fontCss","href","_c","_Fragment","styles"],"sources":["../../src/root/PanneauRoot.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode, createContext, use, useState } from 'react';\nimport { I18nProvider } from 'react-aria-components';\nimport { IntlContext, IntlProvider, type IntlShape } from 'react-intl';\n\nimport { getPanneauMessages } from '@panneau/intl';\n\nimport { getFontFaceCss, getFontStylesheets } from '../theme/fonts';\nimport {\n type ColorScheme,\n type Density,\n type Theme,\n getThemeCss,\n hashString,\n} from '../theme/theme';\nimport { ToastProvider } from '../toast/Toast';\nimport { cx } from '../utils/cx';\nimport styles from './PanneauRoot.module.css';\n\nexport interface PanneauRootProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Tokens, tones, variants and fonts that override the default theme: `bootstrapTheme`, or a\n * project's own (`defineTheme()`).\n */\n theme?: Theme | null;\n /** Defaults to `light`. `auto` follows the system setting. */\n colorScheme?: ColorScheme;\n /**\n * How much room controls and rows take: `compact`, `comfortable` or `touch`. Defaults to\n * `auto`: `touch` on touch screens, `comfortable` otherwise.\n */\n density?: Density;\n /**\n * Locale of dates and numbers in React Aria components. Defaults to the react-intl locale, or\n * to the browser's without an `IntlProvider`.\n *\n * Without an `IntlProvider` above it, the root provides one, with the messages of every Panneau\n * package in this locale (English without a locale, or for a locale Panneau doesn't translate).\n * An app with its own `IntlProvider` adds them with `withPanneauMessages()` from\n * `@panneau/intl`.\n */\n locale?: string;\n children?: ReactNode;\n}\n\n/** `undefined` outside of a root, `null` while the root's container isn't mounted yet. */\nconst PortalContext = createContext<Element | null | undefined>(undefined);\n\n/** The color scheme and density in effect, which a `ThemeScope` inherits when it doesn't set them. */\nexport const ScopeContext = createContext<{ colorScheme: ColorScheme; density: Density }>({\n colorScheme: 'light',\n density: 'auto',\n});\n\n/** Gives overlays a container: that of a root, or of a scope. */\nexport const PortalProvider = PortalContext.Provider;\n\n/**\n * The `<style>` and `<link>` elements of a theme: its CSS, scoped to `data-panneau-theme`, and its\n * fonts. React hoists them to the head and adds each once, however many roots or scopes use it.\n * Returns the scope of the theme too, for `data-panneau-theme`.\n */\nexport function useThemeStyles(theme: Theme | null): { scope?: string; styles: ReactNode } {\n const css = theme !== null ? getThemeCss(theme, '§') : '';\n const scope = css !== '' ? hashString(css) : undefined;\n const fontCss = getFontFaceCss(theme?.fonts);\n return {\n scope,\n styles: (\n <>\n {scope !== undefined ? (\n <style href={`panneau-theme-${scope}`} precedence=\"panneau\">\n {css.replaceAll('§', scope)}\n </style>\n ) : null}\n {fontCss !== '' ? (\n <style href={`panneau-fonts-${hashString(fontCss)}`} precedence=\"panneau\">\n {fontCss}\n </style>\n ) : null}\n {getFontStylesheets(theme?.fonts).map((href) => (\n <link key={href} rel=\"stylesheet\" href={href} precedence=\"panneau\" />\n ))}\n </>\n ),\n };\n}\n\n/**\n * The element overlays render into: the closest `PanneauRoot`'s or `ThemeScope`'s, or `undefined` for the body\n * without a root. It is `null` during the first render of a root: overlays wait for it, since\n * React Aria hides everything outside of a modal from assistive technologies when it opens.\n */\nexport function usePortalContainer(): Element | null | undefined {\n return use(PortalContext);\n}\n\n/**\n * An `IntlProvider` with Panneau's messages in a locale, for a root without one above it. A locale\n * Panneau doesn't translate gets English, so that react-intl doesn't report every message as\n * missing.\n */\nfunction PanneauIntlProvider({\n locale = 'en',\n children,\n}: {\n locale?: string;\n children: ReactNode;\n}) {\n const messages = getPanneauMessages(locale);\n const translated = Object.keys(messages).length > 0;\n return (\n <IntlProvider\n locale={translated ? locale : 'en'}\n defaultLocale=\"en\"\n messages={translated ? messages : getPanneauMessages('en')}\n >\n {children}\n </IntlProvider>\n );\n}\n\n/**\n * The root of every Panneau interface. It scopes the base stylesheet and the design tokens to its\n * element (no global CSS), applies a theme and a color scheme, and hosts overlays and toasts so\n * that they get the tokens too. Panneau components must render inside one. A project can override\n * any token with its own class on the root. Without an `IntlProvider` above it, it provides one\n * with Panneau's messages in its `locale`.\n */\nexport function PanneauRoot({\n theme = null,\n colorScheme = 'light',\n density = 'auto',\n locale,\n className,\n children,\n ...props\n}: PanneauRootProps) {\n const intl = use(IntlContext) as IntlShape | null | undefined;\n const [container, setContainer] = useState<HTMLDivElement | null>(null);\n const { scope, styles: themeStyles } = useThemeStyles(theme);\n const root = (\n <div\n {...props}\n className={cx('panneau-root', styles.root, styles.container, className)}\n data-color-scheme={colorScheme}\n data-density={density}\n data-panneau-theme={scope}\n >\n {themeStyles}\n <I18nProvider locale={locale ?? intl?.locale}>\n <ScopeContext value={{ colorScheme, density }}>\n <PortalContext value={container}>\n <ToastProvider\n regionClassName={styles.root}\n regionProps={{\n 'data-color-scheme': colorScheme,\n 'data-density': density,\n 'data-panneau-theme': scope,\n }}\n >\n {children}\n </ToastProvider>\n </PortalContext>\n </ScopeContext>\n <div ref={setContainer} className={styles.portal} />\n </I18nProvider>\n </div>\n );\n if (intl === null || intl === undefined) {\n return <PanneauIntlProvider locale={locale}>{root}</PanneauIntlProvider>;\n }\n return root;\n}\n"],"mappings":";;;;;;;;;;;;;AA6CA,IAAM,gBAAgB,cAA0C,KAAA,CAAS;;AAGzE,IAAa,eAAe,cAA8D;CACtF,aAAa;CACb,SAAS;AACb,CAAC;;AAGD,IAAa,iBAAiB,cAAc;;;;;;AAO5C,SAAO,eAAA,OAAA;CAAA,MAAA,IAAAG,EAAA,EAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA;EACH,MAAA,MAAY,UAAU,OAAO,YAAY,OAAO,GAAQ,IAA5C;EACZ,MAAA,QAAc,QAAQ,KAAK,WAAW,GAAe,IAAvC,KAAA;EACd,MAAA,UAAgB,eAAe,OAAK,KAAO;EAEvCH,KAAA;EAGS,KAAA,UAAU,KAAA,IACP,oBAAA,SAAA;GAAa,MAAA,iBAAiB;GAAoB,YAAA;GAC7C,UAAA,IAAG,WAAY,KAAK,KAAK;EACtB,CAAA,IAHX;EAKA,KAAA,YAAY,KACT,oBAAA,SAAA;GAAa,MAAA,iBAAiB,WAAW,OAAO;GAAgB,YAAA;GAC3D,UAAA;EACG,CAAA,IAHX;EAIO,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA;EAAA,KAAA,EAAA;EAAA,KAAA,EAAA;EAAA,KAAA,EAAA;CAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,OAAA,OAAA;EACP,KAAA,mBAAmB,OAAK,KAAO,CAAC,CAAA,IAAK,KAErC;EAAC,EAAA,KAAA,OAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,OAAA,MAAA,EAAA,OAAA,MAAA,EAAA,OAAA,IAAA;EAbN,KAAA,qBAAAI,UAAA,EAAA,UAAA;GACK;GAKA;GAKA;EAEC,EAAA,CAAA;EACH,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;EAAA,EAAA,KAAA;CAAA,OAAA,KAAA,EAAA;CAAA,IAAA;CAAA,IAAA,EAAA,QAAA,MAAA,EAAA,QAAA,IAAA;EAjBJ,KAAA;GAAA,OACHJ;GAAK,QAED;EAgBR;EAAC,EAAA,MAAA;EAAA,EAAA,MAAA;EAAA,EAAA,MAAA;CAAA,OAAA,KAAA,EAAA;CAAA,OAnBM;AAmBN;;;;;;AAvBE,SAAA,MAAA,MAAA;CAAA,OAmBa,oBAAA,QAAA;EAAqB,KAAA;EAAmB;EAAiB,YAAA;CAAS,GAAvD,IAAuD;AAAG;AAYzF,SAAgB,qBAAiD;CAC7D,OAAO,IAAI,aAAa;AAC5B;;;;;;AAOA,SAAS,oBAAoB,EACzB,SAAS,MACT,YAID;CACC,MAAM,WAAW,mBAAmB,MAAM;CAC1C,MAAM,aAAa,OAAO,KAAK,QAAQ,CAAC,CAAC,SAAS;CAClD,OACI,oBAAC,cAAD;EACI,QAAQ,aAAa,SAAS;EAC9B,eAAc;EACd,UAAU,aAAa,WAAW,mBAAmB,IAAI;EAExD;CACS,CAAA;AAEtB;;;;;;;;AASA,SAAgB,YAAY,EACxB,QAAQ,MACR,cAAc,SACd,UAAU,QACV,QACA,WACA,UACA,GAAG,SACc;CACjB,MAAM,OAAO,IAAI,WAAW;CAC5B,MAAM,CAAC,WAAW,gBAAgB,SAAgC,IAAI;CACtE,MAAM,EAAE,OAAO,QAAQ,gBAAgB,eAAe,KAAK;CAC3D,MAAM,OACF,qBAAC,OAAD;EACI,GAAI;EACJ,WAAW,GAAG,gBAAgBK,2BAAO,MAAMA,2BAAO,WAAW,SAAS;EACtE,qBAAmB;EACnB,gBAAc;EACd,sBAAoB;EALxB,UAAA,CAOK,aACD,qBAAC,cAAD;GAAc,QAAQ,UAAU,MAAM;GAAtC,UAAA,CACI,oBAAC,cAAD;IAAc,OAAO;KAAE;KAAa;IAAQ;IACxC,UAAA,oBAAC,eAAD;KAAe,OAAO;KAClB,UAAA,oBAAC,eAAD;MACI,iBAAiBA,2BAAO;MACxB,aAAa;OACT,qBAAqB;OACrB,gBAAgB;OAChB,sBAAsB;MAC1B;MAEC;KACU,CAAA;IACJ,CAAA;GACL,CAAA,GACd,oBAAC,OAAD;IAAK,KAAK;IAAc,WAAWA,2BAAO;GAAO,CAAA,CACvC;EACb,CAAA,CAAA;;CAET,IAAI,SAAS,QAAQ,SAAS,KAAA,GAC1B,OAAO,oBAAC,qBAAD;EAA6B;EAAS,UAAA;CAA0B,CAAA;CAE3E,OAAO;AACX"}
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import "./PanneauRoot.css";
|
|
2
2
|
//#region src/root/PanneauRoot.module.css
|
|
3
|
-
var root = "panneau-root
|
|
4
|
-
var
|
|
3
|
+
var root = "panneau-root";
|
|
4
|
+
var scheme = "panneau-root-scheme";
|
|
5
|
+
var density = "panneau-root-density";
|
|
6
|
+
var container = "panneau-root-container";
|
|
7
|
+
var scope = "panneau-root-scope";
|
|
8
|
+
var portal = "panneau-root-portal";
|
|
5
9
|
var PanneauRoot_module_default = {
|
|
6
10
|
root,
|
|
11
|
+
scheme,
|
|
12
|
+
density,
|
|
13
|
+
container,
|
|
14
|
+
scope,
|
|
7
15
|
portal
|
|
8
16
|
};
|
|
9
17
|
//#endregion
|
|
10
|
-
export { PanneauRoot_module_default as default, portal, root };
|
|
18
|
+
export { container, PanneauRoot_module_default as default, density, portal, root, scheme, scope };
|
|
11
19
|
|
|
12
20
|
//# sourceMappingURL=PanneauRoot.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanneauRoot.module.js","names":[],"sources":["../../src/root/PanneauRoot.module.css"],"sourcesContent":["/*\n * Design tokens of the default theme, and the base stylesheet of Panneau. Everything is scoped to\n * the root element: nothing here applies outside of it (decision 0005).\n *\n * Defaults are wrapped in :where() so that they have no specificity: a theme, or a project's own\n * class on the root, overrides any token without fighting the cascade.\n */\n\n:where(.root) {\n /* Surfaces */\n --panneau-color-bg: #ffffff;\n --panneau-color-surface: #ffffff;\n --panneau-color-surface-sunken: #f4f4f5;\n --panneau-color-surface-raised: #ffffff;\n --panneau-color-hover: rgb(24 24 27 / 0.06);\n --panneau-color-pressed: rgb(24 24 27 / 0.1);\n --panneau-color-backdrop: rgb(9 9 11 / 0.45);\n\n /* Text */\n --panneau-color-text: #18181b;\n --panneau-color-text-muted: #52525b;\n --panneau-color-link: #1d4ed8;\n\n /* Borders: separators, and the outline of controls (3:1 against the surface) */\n --panneau-color-border: #e4e4e7;\n --panneau-color-border-control: #8b8b94;\n\n /* Accent: primary buttons, checked controls, selection */\n --panneau-color-accent: #18181b;\n --panneau-color-accent-hover: #3f3f46;\n --panneau-color-accent-text: #ffffff;\n --panneau-color-accent-subtle: #f4f4f5;\n --panneau-color-focus: #2563eb;\n\n /* Tones: text on surfaces, subtle backgrounds, borders */\n --panneau-color-danger: #b91c1c;\n --panneau-color-danger-subtle: #fef2f2;\n --panneau-color-danger-border: #fca5a5;\n --panneau-color-danger-solid: #b91c1c;\n --panneau-color-danger-solid-hover: #991b1b;\n --panneau-color-danger-solid-text: #ffffff;\n --panneau-color-success: #15803d;\n --panneau-color-success-subtle: #f0fdf4;\n --panneau-color-success-border: #86efac;\n --panneau-color-warning: #a16207;\n --panneau-color-warning-subtle: #fefce8;\n --panneau-color-warning-border: #fcd34d;\n --panneau-color-info: #1d4ed8;\n --panneau-color-info-subtle: #eff6ff;\n --panneau-color-info-border: #93c5fd;\n\n /* Typography */\n --panneau-font-family:\n system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n --panneau-font-family-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n --panneau-font-size-xs: 0.75rem;\n --panneau-font-size-sm: 0.8125rem;\n --panneau-font-size-md: 0.875rem;\n --panneau-font-size-lg: 1rem;\n --panneau-font-size-xl: 1.25rem;\n --panneau-font-size-control: 0.875rem;\n --panneau-line-height: 1.5;\n --panneau-line-height-tight: 1.25;\n --panneau-font-weight-normal: 400;\n --panneau-font-weight-medium: 500;\n --panneau-font-weight-bold: 600;\n\n /* Spacing, on a 4px scale */\n --panneau-space-1: 0.25rem;\n --panneau-space-2: 0.5rem;\n --panneau-space-3: 0.75rem;\n --panneau-space-4: 1rem;\n --panneau-space-5: 1.25rem;\n --panneau-space-6: 1.5rem;\n --panneau-space-8: 2rem;\n --panneau-space-10: 2.5rem;\n\n /* Shapes */\n --panneau-radius-sm: 0.25rem;\n --panneau-radius-md: 0.375rem;\n --panneau-radius-lg: 0.5rem;\n --panneau-radius-full: 9999px;\n --panneau-border-width: 1px;\n --panneau-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.06);\n --panneau-shadow-md: 0 1px 3px rgb(0 0 0 / 0.08), 0 4px 12px rgb(0 0 0 / 0.08);\n --panneau-shadow-lg: 0 4px 8px rgb(0 0 0 / 0.08), 0 16px 40px rgb(0 0 0 / 0.16);\n\n /* Controls */\n --panneau-control-height: 2.25rem;\n --panneau-control-height-sm: 1.875rem;\n --panneau-focus-width: 2px;\n\n /* Motion and layers */\n --panneau-duration: 150ms;\n --panneau-z-overlay: 1000;\n --panneau-z-toast: 1100;\n\n color-scheme: light;\n}\n\n:where(.root[data-color-scheme='dark']) {\n --panneau-color-bg: #09090b;\n --panneau-color-surface: #18181b;\n --panneau-color-surface-sunken: #111113;\n --panneau-color-surface-raised: #232326;\n --panneau-color-hover: rgb(255 255 255 / 0.07);\n --panneau-color-pressed: rgb(255 255 255 / 0.12);\n --panneau-color-backdrop: rgb(0 0 0 / 0.6);\n --panneau-color-text: #fafafa;\n --panneau-color-text-muted: #a1a1aa;\n --panneau-color-link: #93c5fd;\n --panneau-color-border: #2e2e33;\n --panneau-color-border-control: #71717a;\n --panneau-color-accent: #fafafa;\n --panneau-color-accent-hover: #d4d4d8;\n --panneau-color-accent-text: #18181b;\n --panneau-color-accent-subtle: #2e2e33;\n --panneau-color-focus: #60a5fa;\n --panneau-color-danger: #fca5a5;\n --panneau-color-danger-subtle: rgb(127 29 29 / 0.35);\n --panneau-color-danger-border: #b91c1c;\n --panneau-color-danger-solid: #dc2626;\n --panneau-color-danger-solid-hover: #b91c1c;\n --panneau-color-danger-solid-text: #ffffff;\n --panneau-color-success: #86efac;\n --panneau-color-success-subtle: rgb(20 83 45 / 0.35);\n --panneau-color-success-border: #15803d;\n --panneau-color-warning: #fcd34d;\n --panneau-color-warning-subtle: rgb(113 63 18 / 0.35);\n --panneau-color-warning-border: #a16207;\n --panneau-color-info: #93c5fd;\n --panneau-color-info-subtle: rgb(30 58 138 / 0.35);\n --panneau-color-info-border: #1d4ed8;\n --panneau-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.4);\n --panneau-shadow-md: 0 1px 3px rgb(0 0 0 / 0.4), 0 4px 12px rgb(0 0 0 / 0.4);\n --panneau-shadow-lg: 0 4px 8px rgb(0 0 0 / 0.4), 0 16px 40px rgb(0 0 0 / 0.5);\n\n color-scheme: dark;\n}\n\n@media (prefers-color-scheme: dark) {\n :where(.root[data-color-scheme='auto']) {\n --panneau-color-bg: #09090b;\n --panneau-color-surface: #18181b;\n --panneau-color-surface-sunken: #111113;\n --panneau-color-surface-raised: #232326;\n --panneau-color-hover: rgb(255 255 255 / 0.07);\n --panneau-color-pressed: rgb(255 255 255 / 0.12);\n --panneau-color-backdrop: rgb(0 0 0 / 0.6);\n --panneau-color-text: #fafafa;\n --panneau-color-text-muted: #a1a1aa;\n --panneau-color-link: #93c5fd;\n --panneau-color-border: #2e2e33;\n --panneau-color-border-control: #71717a;\n --panneau-color-accent: #fafafa;\n --panneau-color-accent-hover: #d4d4d8;\n --panneau-color-accent-text: #18181b;\n --panneau-color-accent-subtle: #2e2e33;\n --panneau-color-focus: #60a5fa;\n --panneau-color-danger: #fca5a5;\n --panneau-color-danger-subtle: rgb(127 29 29 / 0.35);\n --panneau-color-danger-border: #b91c1c;\n --panneau-color-danger-solid: #dc2626;\n --panneau-color-danger-solid-hover: #b91c1c;\n --panneau-color-danger-solid-text: #ffffff;\n --panneau-color-success: #86efac;\n --panneau-color-success-subtle: rgb(20 83 45 / 0.35);\n --panneau-color-success-border: #15803d;\n --panneau-color-warning: #fcd34d;\n --panneau-color-warning-subtle: rgb(113 63 18 / 0.35);\n --panneau-color-warning-border: #a16207;\n --panneau-color-info: #93c5fd;\n --panneau-color-info-subtle: rgb(30 58 138 / 0.35);\n --panneau-color-info-border: #1d4ed8;\n --panneau-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.4);\n --panneau-shadow-md: 0 1px 3px rgb(0 0 0 / 0.4), 0 4px 12px rgb(0 0 0 / 0.4);\n --panneau-shadow-lg: 0 4px 8px rgb(0 0 0 / 0.4), 0 16px 40px rgb(0 0 0 / 0.5);\n\n color-scheme: dark;\n }\n}\n\n/* Touch screens: larger targets, and 16px text in inputs so that iOS doesn't zoom on focus. */\n@media (pointer: coarse) {\n :where(.root) {\n --panneau-control-height: 2.75rem;\n --panneau-control-height-sm: 2.25rem;\n --panneau-font-size-control: 1rem;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :where(.root) {\n --panneau-duration: 0ms;\n }\n}\n\n/* Base stylesheet, scoped to the root, without specificity: components and projects override it. */\n\n.root {\n /* The class is mostly a hook for the rules below, which use :where(). */\n display: block;\n}\n\n:where(.root) {\n font-family: var(--panneau-font-family);\n font-size: var(--panneau-font-size-md);\n line-height: var(--panneau-line-height);\n color: var(--panneau-color-text);\n background-color: var(--panneau-color-bg);\n -webkit-font-smoothing: antialiased;\n -webkit-text-size-adjust: 100%;\n text-size-adjust: 100%;\n}\n\n:where(.root) :where(*, *::before, *::after) {\n box-sizing: border-box;\n}\n\n:where(.root) :where(h1, h2, h3, h4, h5, h6, p, ul, ol, dl, figure, fieldset, legend) {\n margin: 0;\n padding: 0;\n}\n\n:where(.root) :where(fieldset) {\n border: 0;\n min-width: 0;\n}\n\n:where(.root) :where(button, input, select, textarea) {\n font: inherit;\n color: inherit;\n}\n\n:where(.root) :where(a) {\n color: var(--panneau-color-link);\n}\n\n:where(.root) :where(img, svg, video) {\n max-width: 100%;\n}\n\n:where(.root) :where(:focus-visible) {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: 2px;\n}\n\n/* Overlays (dialogs, popovers, menus, tooltips) render here, so that they get the tokens. */\n.portal {\n display: contents;\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"PanneauRoot.module.js","names":[],"sources":["../../src/root/PanneauRoot.module.css"],"sourcesContent":["/*\n * Design tokens of the default theme, and the base stylesheet of Panneau. Everything is scoped to\n * the root element: nothing here applies outside of it (decision 0005).\n *\n * Defaults are wrapped in :where() so that they have no specificity: a theme, or a project's own\n * class on the root, overrides any token without fighting the cascade.\n */\n\n:where(.root) {\n /* Surfaces */\n --panneau-color-bg: #ffffff;\n --panneau-color-surface: #ffffff;\n --panneau-color-surface-sunken: #f4f4f5;\n --panneau-color-surface-raised: #ffffff;\n --panneau-color-hover: rgb(24 24 27 / 0.06);\n --panneau-color-pressed: rgb(24 24 27 / 0.1);\n --panneau-color-backdrop: rgb(9 9 11 / 0.45);\n\n /* Text */\n --panneau-color-text: #18181b;\n --panneau-color-text-muted: #52525b;\n --panneau-color-link: #1d4ed8;\n\n /* Borders: separators, and the outline of controls (3:1 against the surface) */\n --panneau-color-border: #e4e4e7;\n --panneau-color-border-control: #8b8b94;\n\n /* Accent: primary buttons, checked controls, selection */\n --panneau-color-accent: #18181b;\n --panneau-color-accent-hover: #3f3f46;\n --panneau-color-accent-text: #ffffff;\n --panneau-color-accent-subtle: #f4f4f5;\n --panneau-color-focus: #2563eb;\n\n /* Tones: text on surfaces, subtle backgrounds, borders */\n --panneau-color-danger: #b91c1c;\n --panneau-color-danger-subtle: #fef2f2;\n --panneau-color-danger-border: #fca5a5;\n --panneau-color-danger-solid: #b91c1c;\n --panneau-color-danger-solid-hover: #991b1b;\n --panneau-color-danger-solid-text: #ffffff;\n --panneau-color-success: #15803d;\n --panneau-color-success-subtle: #f0fdf4;\n --panneau-color-success-border: #86efac;\n --panneau-color-success-solid: #15803d;\n --panneau-color-success-solid-hover: #166534;\n --panneau-color-success-solid-text: #ffffff;\n --panneau-color-warning: #a16207;\n --panneau-color-warning-subtle: #fefce8;\n --panneau-color-warning-border: #fcd34d;\n --panneau-color-warning-solid: #a16207;\n --panneau-color-warning-solid-hover: #854d0e;\n --panneau-color-warning-solid-text: #ffffff;\n --panneau-color-info: #1d4ed8;\n --panneau-color-info-subtle: #eff6ff;\n --panneau-color-info-border: #93c5fd;\n --panneau-color-info-solid: #1d4ed8;\n --panneau-color-info-solid-hover: #1e40af;\n --panneau-color-info-solid-text: #ffffff;\n\n /*\n * Data visualization: 8 categorical colors in a fixed order, a sequential ramp from low to high,\n * and a diverging pair around a neutral midpoint. Each categorical color reaches 3:1 against\n * the surface, and stays distinct under the common color vision deficiencies (chartColors.test).\n */\n --panneau-chart-categorical-1: #1c6cbb;\n --panneau-chart-categorical-2: #c47713;\n --panneau-chart-categorical-3: #d12f74;\n --panneau-chart-categorical-4: #515922;\n --panneau-chart-categorical-5: #2b9c52;\n --panneau-chart-categorical-6: #a977b3;\n --panneau-chart-categorical-7: #8f2786;\n --panneau-chart-categorical-8: #9176e8;\n --panneau-chart-sequential-1: #dbe8f6;\n --panneau-chart-sequential-2: #a3c6e9;\n --panneau-chart-sequential-3: #5f9bd6;\n --panneau-chart-sequential-4: #2c6cb0;\n --panneau-chart-sequential-5: #1a4475;\n --panneau-chart-diverging-negative: #b4501a;\n --panneau-chart-diverging-neutral: #e4e4e7;\n --panneau-chart-diverging-positive: #1c6cbb;\n\n /* Typography: font roles. Headings and display text follow the body unless a theme sets them. */\n --panneau-font-family-body:\n system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n --panneau-font-family-heading: var(--panneau-font-family-body);\n --panneau-font-family-display: var(--panneau-font-family-heading);\n --panneau-font-family-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n /* Deprecated alias of the body family: set --panneau-font-family-body instead. */\n --panneau-font-family: var(--panneau-font-family-body);\n /* Numbers that line up: stats, dates, ids (font-variant-numeric). */\n --panneau-font-numeric: tabular-nums;\n --panneau-font-size-xs: 0.75rem;\n --panneau-font-size-sm: 0.8125rem;\n --panneau-font-size-md: 0.875rem;\n --panneau-font-size-lg: 1rem;\n --panneau-font-size-xl: 1.25rem;\n --panneau-font-size-control: 0.875rem;\n --panneau-line-height: 1.5;\n --panneau-line-height-tight: 1.25;\n --panneau-font-weight-normal: 400;\n --panneau-font-weight-medium: 500;\n --panneau-font-weight-bold: 600;\n\n /* Spacing, on a 4px scale */\n --panneau-space-1: 0.25rem;\n --panneau-space-2: 0.5rem;\n --panneau-space-3: 0.75rem;\n --panneau-space-4: 1rem;\n --panneau-space-5: 1.25rem;\n --panneau-space-6: 1.5rem;\n --panneau-space-8: 2rem;\n --panneau-space-10: 2.5rem;\n\n /* Shapes */\n --panneau-radius-sm: 0.25rem;\n --panneau-radius-md: 0.375rem;\n --panneau-radius-lg: 0.5rem;\n --panneau-radius-full: 9999px;\n --panneau-border-width: 1px;\n --panneau-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.06);\n --panneau-shadow-md: 0 1px 3px rgb(0 0 0 / 0.08), 0 4px 12px rgb(0 0 0 / 0.08);\n --panneau-shadow-lg: 0 4px 8px rgb(0 0 0 / 0.08), 0 16px 40px rgb(0 0 0 / 0.16);\n\n /* Controls and rows: the comfortable density. Other densities redefine these tokens. */\n --panneau-control-height: 2.25rem;\n --panneau-control-height-sm: 1.875rem;\n --panneau-control-padding-x: 0.75rem;\n --panneau-row-padding-y: 0.5rem;\n --panneau-focus-width: 2px;\n\n /* Motion and layers */\n --panneau-duration: 150ms;\n --panneau-z-overlay: 1000;\n --panneau-z-toast: 1100;\n\n color-scheme: light;\n}\n\n/*\n * A ThemeScope with its own color scheme (.scheme) takes the light colors back, since the root\n * around it may be dark. Scopes without one inherit the colors of their parent.\n */\n:where(.scheme[data-color-scheme='light'], .scheme[data-color-scheme='auto']) {\n --panneau-chart-categorical-1: #1c6cbb;\n --panneau-chart-categorical-2: #c47713;\n --panneau-chart-categorical-3: #d12f74;\n --panneau-chart-categorical-4: #515922;\n --panneau-chart-categorical-5: #2b9c52;\n --panneau-chart-categorical-6: #a977b3;\n --panneau-chart-categorical-7: #8f2786;\n --panneau-chart-categorical-8: #9176e8;\n --panneau-chart-sequential-1: #dbe8f6;\n --panneau-chart-sequential-2: #a3c6e9;\n --panneau-chart-sequential-3: #5f9bd6;\n --panneau-chart-sequential-4: #2c6cb0;\n --panneau-chart-sequential-5: #1a4475;\n --panneau-chart-diverging-negative: #b4501a;\n --panneau-chart-diverging-neutral: #e4e4e7;\n --panneau-chart-diverging-positive: #1c6cbb;\n --panneau-color-bg: #ffffff;\n --panneau-color-surface: #ffffff;\n --panneau-color-surface-sunken: #f4f4f5;\n --panneau-color-surface-raised: #ffffff;\n --panneau-color-hover: rgb(24 24 27 / 0.06);\n --panneau-color-pressed: rgb(24 24 27 / 0.1);\n --panneau-color-backdrop: rgb(9 9 11 / 0.45);\n --panneau-color-text: #18181b;\n --panneau-color-text-muted: #52525b;\n --panneau-color-link: #1d4ed8;\n --panneau-color-border: #e4e4e7;\n --panneau-color-border-control: #8b8b94;\n --panneau-color-accent: #18181b;\n --panneau-color-accent-hover: #3f3f46;\n --panneau-color-accent-text: #ffffff;\n --panneau-color-accent-subtle: #f4f4f5;\n --panneau-color-focus: #2563eb;\n --panneau-color-danger: #b91c1c;\n --panneau-color-danger-subtle: #fef2f2;\n --panneau-color-danger-border: #fca5a5;\n --panneau-color-danger-solid: #b91c1c;\n --panneau-color-danger-solid-hover: #991b1b;\n --panneau-color-danger-solid-text: #ffffff;\n --panneau-color-success: #15803d;\n --panneau-color-success-subtle: #f0fdf4;\n --panneau-color-success-border: #86efac;\n --panneau-color-warning: #a16207;\n --panneau-color-warning-subtle: #fefce8;\n --panneau-color-warning-border: #fcd34d;\n --panneau-color-info: #1d4ed8;\n --panneau-color-info-subtle: #eff6ff;\n --panneau-color-info-border: #93c5fd;\n --panneau-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.06);\n --panneau-shadow-md: 0 1px 3px rgb(0 0 0 / 0.08), 0 4px 12px rgb(0 0 0 / 0.08);\n --panneau-shadow-lg: 0 4px 8px rgb(0 0 0 / 0.08), 0 16px 40px rgb(0 0 0 / 0.16);\n\n color-scheme: light;\n}\n\n:where(.root[data-color-scheme='dark'], .scheme[data-color-scheme='dark']) {\n --panneau-chart-categorical-1: #61a9e3;\n --panneau-chart-categorical-2: #e5c040;\n --panneau-chart-categorical-3: #d9456a;\n --panneau-chart-categorical-4: #a1da9e;\n --panneau-chart-categorical-5: #bb6528;\n --panneau-chart-categorical-6: #a06a9b;\n --panneau-chart-categorical-7: #8c71e2;\n --panneau-chart-categorical-8: #56dfe1;\n --panneau-chart-sequential-1: #1d3550;\n --panneau-chart-sequential-2: #285684;\n --panneau-chart-sequential-3: #3d7fc2;\n --panneau-chart-sequential-4: #74abe0;\n --panneau-chart-sequential-5: #b8d6f2;\n --panneau-chart-diverging-negative: #f0884a;\n --panneau-chart-diverging-neutral: #3f3f46;\n --panneau-chart-diverging-positive: #61a9e3;\n --panneau-color-bg: #09090b;\n --panneau-color-surface: #18181b;\n --panneau-color-surface-sunken: #111113;\n --panneau-color-surface-raised: #232326;\n --panneau-color-hover: rgb(255 255 255 / 0.07);\n --panneau-color-pressed: rgb(255 255 255 / 0.12);\n --panneau-color-backdrop: rgb(0 0 0 / 0.6);\n --panneau-color-text: #fafafa;\n --panneau-color-text-muted: #a1a1aa;\n --panneau-color-link: #93c5fd;\n --panneau-color-border: #2e2e33;\n --panneau-color-border-control: #71717a;\n --panneau-color-accent: #fafafa;\n --panneau-color-accent-hover: #d4d4d8;\n --panneau-color-accent-text: #18181b;\n --panneau-color-accent-subtle: #2e2e33;\n --panneau-color-focus: #60a5fa;\n --panneau-color-danger: #fca5a5;\n --panneau-color-danger-subtle: rgb(127 29 29 / 0.35);\n --panneau-color-danger-border: #b91c1c;\n --panneau-color-danger-solid: #dc2626;\n --panneau-color-danger-solid-hover: #b91c1c;\n --panneau-color-danger-solid-text: #ffffff;\n --panneau-color-success: #86efac;\n --panneau-color-success-subtle: rgb(20 83 45 / 0.35);\n --panneau-color-success-border: #15803d;\n --panneau-color-warning: #fcd34d;\n --panneau-color-warning-subtle: rgb(113 63 18 / 0.35);\n --panneau-color-warning-border: #a16207;\n --panneau-color-info: #93c5fd;\n --panneau-color-info-subtle: rgb(30 58 138 / 0.35);\n --panneau-color-info-border: #1d4ed8;\n --panneau-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.4);\n --panneau-shadow-md: 0 1px 3px rgb(0 0 0 / 0.4), 0 4px 12px rgb(0 0 0 / 0.4);\n --panneau-shadow-lg: 0 4px 8px rgb(0 0 0 / 0.4), 0 16px 40px rgb(0 0 0 / 0.5);\n\n color-scheme: dark;\n}\n\n@media (prefers-color-scheme: dark) {\n :where(.root[data-color-scheme='auto'], .scheme[data-color-scheme='auto']) {\n --panneau-chart-categorical-1: #61a9e3;\n --panneau-chart-categorical-2: #e5c040;\n --panneau-chart-categorical-3: #d9456a;\n --panneau-chart-categorical-4: #a1da9e;\n --panneau-chart-categorical-5: #bb6528;\n --panneau-chart-categorical-6: #a06a9b;\n --panneau-chart-categorical-7: #8c71e2;\n --panneau-chart-categorical-8: #56dfe1;\n --panneau-chart-sequential-1: #1d3550;\n --panneau-chart-sequential-2: #285684;\n --panneau-chart-sequential-3: #3d7fc2;\n --panneau-chart-sequential-4: #74abe0;\n --panneau-chart-sequential-5: #b8d6f2;\n --panneau-chart-diverging-negative: #f0884a;\n --panneau-chart-diverging-neutral: #3f3f46;\n --panneau-chart-diverging-positive: #61a9e3;\n --panneau-color-bg: #09090b;\n --panneau-color-surface: #18181b;\n --panneau-color-surface-sunken: #111113;\n --panneau-color-surface-raised: #232326;\n --panneau-color-hover: rgb(255 255 255 / 0.07);\n --panneau-color-pressed: rgb(255 255 255 / 0.12);\n --panneau-color-backdrop: rgb(0 0 0 / 0.6);\n --panneau-color-text: #fafafa;\n --panneau-color-text-muted: #a1a1aa;\n --panneau-color-link: #93c5fd;\n --panneau-color-border: #2e2e33;\n --panneau-color-border-control: #71717a;\n --panneau-color-accent: #fafafa;\n --panneau-color-accent-hover: #d4d4d8;\n --panneau-color-accent-text: #18181b;\n --panneau-color-accent-subtle: #2e2e33;\n --panneau-color-focus: #60a5fa;\n --panneau-color-danger: #fca5a5;\n --panneau-color-danger-subtle: rgb(127 29 29 / 0.35);\n --panneau-color-danger-border: #b91c1c;\n --panneau-color-danger-solid: #dc2626;\n --panneau-color-danger-solid-hover: #b91c1c;\n --panneau-color-danger-solid-text: #ffffff;\n --panneau-color-success: #86efac;\n --panneau-color-success-subtle: rgb(20 83 45 / 0.35);\n --panneau-color-success-border: #15803d;\n --panneau-color-warning: #fcd34d;\n --panneau-color-warning-subtle: rgb(113 63 18 / 0.35);\n --panneau-color-warning-border: #a16207;\n --panneau-color-info: #93c5fd;\n --panneau-color-info-subtle: rgb(30 58 138 / 0.35);\n --panneau-color-info-border: #1d4ed8;\n --panneau-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.4);\n --panneau-shadow-md: 0 1px 3px rgb(0 0 0 / 0.4), 0 4px 12px rgb(0 0 0 / 0.4);\n --panneau-shadow-lg: 0 4px 8px rgb(0 0 0 / 0.4), 0 16px 40px rgb(0 0 0 / 0.5);\n\n color-scheme: dark;\n }\n}\n\n/*\n * Densities: compact, comfortable (the tokens above) and touch, with larger targets and 16px text in\n * inputs so that iOS doesn't zoom on focus. `auto`, the default, is touch on coarse pointers (touch\n * screens) and comfortable otherwise.\n */\n/* A ThemeScope with its own density (.density) takes the comfortable values back. */\n:where(.density[data-density='comfortable'], .density[data-density='auto']) {\n --panneau-control-height: 2.25rem;\n --panneau-control-height-sm: 1.875rem;\n --panneau-font-size-control: 0.875rem;\n --panneau-control-padding-x: 0.75rem;\n --panneau-row-padding-y: 0.5rem;\n}\n\n:where(.root[data-density='compact'], .density[data-density='compact']) {\n --panneau-control-height: 2rem;\n --panneau-control-height-sm: 1.625rem;\n --panneau-font-size-control: 0.8125rem;\n --panneau-control-padding-x: 0.5rem;\n --panneau-row-padding-y: 0.25rem;\n}\n\n:where(.root[data-density='touch'], .density[data-density='touch']) {\n --panneau-control-height: 2.75rem;\n --panneau-control-height-sm: 2.25rem;\n --panneau-font-size-control: 1rem;\n --panneau-control-padding-x: 0.75rem;\n --panneau-row-padding-y: 0.75rem;\n}\n\n@media (pointer: coarse) {\n :where(.root[data-density='auto'], .density[data-density='auto']) {\n --panneau-control-height: 2.75rem;\n --panneau-control-height-sm: 2.25rem;\n --panneau-font-size-control: 1rem;\n --panneau-control-padding-x: 0.75rem;\n --panneau-row-padding-y: 0.75rem;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :where(.root) {\n --panneau-duration: 0ms;\n }\n}\n\n/* Base stylesheet, scoped to the root, with less weight than any class: components and projects override it. */\n\n.root {\n /* The class is mostly a hook for the rules below, which use :where(). */\n display: block;\n}\n\n/*\n * The root is a size container, so that the responsive props of layout primitives follow its width\n * rather than the viewport's. Like any size container, its width can't come from its content: in a\n * flex row or a float, give it a width. Toast regions share the tokens of .root, not this.\n */\n.container {\n container: panneau-root / inline-size;\n}\n\n:where(.root) {\n font-family: var(--panneau-font-family);\n font-size: var(--panneau-font-size-md);\n line-height: var(--panneau-line-height);\n color: var(--panneau-color-text);\n background-color: var(--panneau-color-bg);\n -webkit-font-smoothing: antialiased;\n -webkit-text-size-adjust: 100%;\n text-size-adjust: 100%;\n}\n\n:where(.root) :where(*, *::before, *::after) {\n box-sizing: border-box;\n}\n\n/*\n * Element resets weigh two element selectors, (0,0,2), by repeating :is(): more than the global\n * element rules of a site, such as Bootstrap's Reboot (`h5 { margin-bottom: 0.5rem }` weighs\n * (0,0,1)), less than any class, so that components and projects still override them.\n */\n:where(.root)\n :is(\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n p,\n ul,\n ol,\n dl,\n dd,\n figure,\n blockquote,\n pre,\n hr,\n fieldset,\n legend\n ):is(h1, h2, h3, h4, h5, h6, p, ul, ol, dl, dd, figure, blockquote, pre, hr, fieldset, legend) {\n margin: 0;\n padding: 0;\n}\n\n/* Reboot floats legends and scales their text. */\n:where(.root) :is(legend):is(legend) {\n float: none;\n width: auto;\n font-size: inherit;\n line-height: inherit;\n}\n\n/* Reboot fades rules to 25% opacity. */\n:where(.root) :is(hr):is(hr) {\n opacity: 1;\n}\n\n:where(.root) :where(fieldset) {\n border: 0;\n min-width: 0;\n}\n\n:where(.root) :where(button, input, select, textarea) {\n font: inherit;\n color: inherit;\n}\n\n:where(.root) :is(a):is(a) {\n color: var(--panneau-color-link);\n}\n\n:where(.root) :where(img, svg, video) {\n max-width: 100%;\n}\n\n:where(.root) :where(:focus-visible) {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: 2px;\n}\n\n/*\n * A ThemeScope applies the text styles of its tokens again, since inherited values were computed\n * on the root. One with its own color scheme or theme paints its background too.\n */\n:where(.scope) {\n font-family: var(--panneau-font-family);\n font-size: var(--panneau-font-size-md);\n line-height: var(--panneau-line-height);\n color: var(--panneau-color-text);\n}\n\n:where(.scope.scheme, .scope[data-panneau-theme]) {\n background-color: var(--panneau-color-bg);\n}\n\n/* Overlays (dialogs, popovers, menus, tooltips) render here, so that they get the tokens. */\n.portal {\n display: contents;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
import type { ColorScheme, Density, Theme } from '../theme/theme';
|
|
3
|
+
export interface ThemeScopeProps extends HTMLAttributes<HTMLElement> {
|
|
4
|
+
/** Element to render. Defaults to `div`. */
|
|
5
|
+
as?: 'div' | 'section' | 'aside' | 'nav' | 'header' | 'footer' | 'main' | 'article';
|
|
6
|
+
/** A theme for the subtree, over the theme of the root. */
|
|
7
|
+
theme?: Theme | null;
|
|
8
|
+
/** A color scheme for the subtree. Inherited by default. */
|
|
9
|
+
colorScheme?: ColorScheme;
|
|
10
|
+
/** A density for the subtree. Inherited by default. */
|
|
11
|
+
density?: Density;
|
|
12
|
+
children?: ReactNode;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Applies a theme, a color scheme or a density to a subtree, like `data-bs-theme` on any element:
|
|
16
|
+
* a dark sidebar in a light app, a compact table, a preview in another brand's colors. Overlays
|
|
17
|
+
* opened inside it render in its own container, so that they keep its tokens. It must be inside a
|
|
18
|
+
* `PanneauRoot`.
|
|
19
|
+
*
|
|
20
|
+
* What it doesn't set comes from its parent: a scope with only a density keeps the colors of the
|
|
21
|
+
* theme around it.
|
|
22
|
+
*/
|
|
23
|
+
export declare function ThemeScope({ as: Element, theme, colorScheme, density, className, children, ...props }: ThemeScopeProps): import("react").JSX.Element;
|
|
24
|
+
//# sourceMappingURL=ThemeScope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeScope.d.ts","sourceRoot":"","sources":["../../src/root/ThemeScope.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAiB,MAAM,OAAO,CAAC;AAE3E,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAKlE,MAAM,WAAW,eAAgB,SAAQ,cAAc,CAAC,WAAW,CAAC;IAChE,4CAA4C;IAC5C,EAAE,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACpF,2DAA2D;IAC3D,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,EACvB,EAAE,EAAE,OAAe,EACnB,KAAY,EACZ,WAAW,EACX,OAAO,EACP,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACX,EAAE,eAAe,+BA+BjB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { cx } from "../utils/cx.js";
|
|
2
|
+
import PanneauRoot_module_default from "./PanneauRoot.module.js";
|
|
3
|
+
import { PortalProvider, ScopeContext, useThemeStyles } from "./PanneauRoot.js";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { use, useState } from "react";
|
|
6
|
+
//#region src/root/ThemeScope.tsx
|
|
7
|
+
/**
|
|
8
|
+
* Applies a theme, a color scheme or a density to a subtree, like `data-bs-theme` on any element:
|
|
9
|
+
* a dark sidebar in a light app, a compact table, a preview in another brand's colors. Overlays
|
|
10
|
+
* opened inside it render in its own container, so that they keep its tokens. It must be inside a
|
|
11
|
+
* `PanneauRoot`.
|
|
12
|
+
*
|
|
13
|
+
* What it doesn't set comes from its parent: a scope with only a density keeps the colors of the
|
|
14
|
+
* theme around it.
|
|
15
|
+
*/
|
|
16
|
+
function ThemeScope({ as: Element = "div", theme = null, colorScheme, density, className, children, ...props }) {
|
|
17
|
+
const parent = use(ScopeContext);
|
|
18
|
+
const [container, setContainer] = useState(null);
|
|
19
|
+
const { scope, styles: themeStyles } = useThemeStyles(theme);
|
|
20
|
+
const effective = {
|
|
21
|
+
colorScheme: colorScheme ?? parent.colorScheme,
|
|
22
|
+
density: density ?? parent.density
|
|
23
|
+
};
|
|
24
|
+
return /* @__PURE__ */ jsxs(Element, {
|
|
25
|
+
...props,
|
|
26
|
+
className: cx("panneau-theme-scope", PanneauRoot_module_default.scope, colorScheme !== void 0 && PanneauRoot_module_default.scheme, density !== void 0 && PanneauRoot_module_default.density, className),
|
|
27
|
+
"data-color-scheme": effective.colorScheme,
|
|
28
|
+
"data-density": effective.density,
|
|
29
|
+
"data-panneau-theme": scope,
|
|
30
|
+
children: [
|
|
31
|
+
themeStyles,
|
|
32
|
+
/* @__PURE__ */ jsx(ScopeContext, {
|
|
33
|
+
value: effective,
|
|
34
|
+
children: /* @__PURE__ */ jsx(PortalProvider, {
|
|
35
|
+
value: container,
|
|
36
|
+
children
|
|
37
|
+
})
|
|
38
|
+
}),
|
|
39
|
+
/* @__PURE__ */ jsx("div", {
|
|
40
|
+
ref: setContainer,
|
|
41
|
+
className: PanneauRoot_module_default.portal
|
|
42
|
+
})
|
|
43
|
+
]
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//#endregion
|
|
47
|
+
export { ThemeScope };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=ThemeScope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeScope.js","names":["styles"],"sources":["../../src/root/ThemeScope.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode, use, useState } from 'react';\n\nimport type { ColorScheme, Density, Theme } from '../theme/theme';\nimport { cx } from '../utils/cx';\nimport { PortalProvider, ScopeContext, useThemeStyles } from './PanneauRoot';\nimport styles from './PanneauRoot.module.css';\n\nexport interface ThemeScopeProps extends HTMLAttributes<HTMLElement> {\n /** Element to render. Defaults to `div`. */\n as?: 'div' | 'section' | 'aside' | 'nav' | 'header' | 'footer' | 'main' | 'article';\n /** A theme for the subtree, over the theme of the root. */\n theme?: Theme | null;\n /** A color scheme for the subtree. Inherited by default. */\n colorScheme?: ColorScheme;\n /** A density for the subtree. Inherited by default. */\n density?: Density;\n children?: ReactNode;\n}\n\n/**\n * Applies a theme, a color scheme or a density to a subtree, like `data-bs-theme` on any element:\n * a dark sidebar in a light app, a compact table, a preview in another brand's colors. Overlays\n * opened inside it render in its own container, so that they keep its tokens. It must be inside a\n * `PanneauRoot`.\n *\n * What it doesn't set comes from its parent: a scope with only a density keeps the colors of the\n * theme around it.\n */\nexport function ThemeScope({\n as: Element = 'div',\n theme = null,\n colorScheme,\n density,\n className,\n children,\n ...props\n}: ThemeScopeProps) {\n const parent = use(ScopeContext);\n const [container, setContainer] = useState<HTMLDivElement | null>(null);\n const { scope, styles: themeStyles } = useThemeStyles(theme);\n // The effective values are always written, so that the dark and density rules of a theme apply.\n // Only those set here take the default tokens back (`.scheme`, `.density`).\n const effective = {\n colorScheme: colorScheme ?? parent.colorScheme,\n density: density ?? parent.density,\n };\n return (\n <Element\n {...props}\n className={cx(\n 'panneau-theme-scope',\n styles.scope,\n colorScheme !== undefined && styles.scheme,\n density !== undefined && styles.density,\n className,\n )}\n data-color-scheme={effective.colorScheme}\n data-density={effective.density}\n data-panneau-theme={scope}\n >\n {themeStyles}\n <ScopeContext value={effective}>\n <PortalProvider value={container}>{children}</PortalProvider>\n </ScopeContext>\n <div ref={setContainer} className={styles.portal} />\n </Element>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AA4BA,SAAgB,WAAW,EACvB,IAAI,UAAU,OACd,QAAQ,MACR,aACA,SACA,WACA,UACA,GAAG,SACa;CAChB,MAAM,SAAS,IAAI,YAAY;CAC/B,MAAM,CAAC,WAAW,gBAAgB,SAAgC,IAAI;CACtE,MAAM,EAAE,OAAO,QAAQ,gBAAgB,eAAe,KAAK;CAG3D,MAAM,YAAY;EACd,aAAa,eAAe,OAAO;EACnC,SAAS,WAAW,OAAO;CAC/B;CACA,OACI,qBAAC,SAAD;EACI,GAAI;EACJ,WAAW,GACP,uBACAA,2BAAO,OACP,gBAAgB,KAAA,KAAaA,2BAAO,QACpC,YAAY,KAAA,KAAaA,2BAAO,SAChC,SACJ;EACA,qBAAmB,UAAU;EAC7B,gBAAc,UAAU;EACxB,sBAAoB;EAXxB,UAAA;GAaK;GACD,oBAAC,cAAD;IAAc,OAAO;IACjB,UAAA,oBAAC,gBAAD;KAAgB,OAAO;KAAY;IAAyB,CAAA;GAClD,CAAA;GACd,oBAAC,OAAD;IAAK,KAAK;IAAc,WAAWA,2BAAO;GAAO,CAAA;EAC5C;;AAEjB"}
|
package/dist/select/ListBox.css
CHANGED
|
@@ -1,93 +1,94 @@
|
|
|
1
1
|
/* Options of selects, combo boxes and menus. */
|
|
2
2
|
|
|
3
|
-
.panneau-
|
|
3
|
+
.panneau-list-box {
|
|
4
4
|
display: flex;
|
|
5
5
|
flex-direction: column;
|
|
6
6
|
max-height: inherit;
|
|
7
|
-
padding: var(--panneau-space-1);
|
|
7
|
+
padding: var(--panneau-list-box-padding, var(--panneau-space-1));
|
|
8
8
|
overflow: auto;
|
|
9
9
|
outline: none;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
.panneau-item
|
|
12
|
+
.panneau-list-box-item {
|
|
13
13
|
display: flex;
|
|
14
14
|
align-items: center;
|
|
15
15
|
gap: var(--panneau-space-2);
|
|
16
16
|
min-height: var(--panneau-control-height-sm);
|
|
17
|
-
padding: var(--panneau-
|
|
17
|
+
padding: var(--panneau-list-box-item-padding-y, calc(var(--panneau-row-padding-y) / 2))
|
|
18
|
+
var(--panneau-list-box-item-padding-x, var(--panneau-space-2));
|
|
18
19
|
font-size: var(--panneau-font-size-control);
|
|
19
20
|
line-height: var(--panneau-line-height-tight);
|
|
20
21
|
color: var(--panneau-color-text);
|
|
21
22
|
cursor: default;
|
|
22
|
-
border-radius: var(--panneau-radius-sm);
|
|
23
|
+
border-radius: var(--panneau-list-box-item-radius, var(--panneau-radius-sm));
|
|
23
24
|
outline: none;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
.panneau-item
|
|
27
|
-
.panneau-item
|
|
28
|
-
background-color: var(--panneau-color-hover);
|
|
27
|
+
.panneau-list-box-item[data-focused],
|
|
28
|
+
.panneau-list-box-item[data-hovered] {
|
|
29
|
+
background-color: var(--panneau-list-box-item-bg-hover, var(--panneau-color-hover));
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
.panneau-item
|
|
32
|
+
.panneau-list-box-item[data-focus-visible] {
|
|
32
33
|
outline: var(--panneau-focus-width) solid var(--panneau-color-focus);
|
|
33
34
|
outline-offset: -2px;
|
|
34
35
|
}
|
|
35
36
|
|
|
36
|
-
.panneau-item
|
|
37
|
+
.panneau-list-box-item[data-disabled] {
|
|
37
38
|
cursor: not-allowed;
|
|
38
39
|
opacity: 0.5;
|
|
39
40
|
}
|
|
40
41
|
|
|
41
|
-
.panneau-item
|
|
42
|
+
.panneau-list-box-item[data-danger] {
|
|
42
43
|
color: var(--panneau-color-danger);
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
.panneau-
|
|
46
|
+
.panneau-list-box-item-text {
|
|
46
47
|
display: flex;
|
|
47
48
|
flex: 1 1 auto;
|
|
48
49
|
flex-direction: column;
|
|
49
50
|
min-width: 0;
|
|
50
51
|
}
|
|
51
52
|
|
|
52
|
-
.panneau-
|
|
53
|
+
.panneau-list-box-item-label {
|
|
53
54
|
overflow-wrap: anywhere;
|
|
54
55
|
}
|
|
55
56
|
|
|
56
|
-
.panneau-
|
|
57
|
+
.panneau-list-box-item-description {
|
|
57
58
|
font-size: var(--panneau-font-size-sm);
|
|
58
59
|
color: var(--panneau-color-text-muted);
|
|
59
60
|
}
|
|
60
61
|
|
|
61
|
-
.panneau-check
|
|
62
|
+
.panneau-list-box-check {
|
|
62
63
|
flex: 0 0 auto;
|
|
63
64
|
width: 1rem;
|
|
64
65
|
color: var(--panneau-color-text);
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
.panneau-placeholder
|
|
68
|
+
.panneau-list-box-placeholder {
|
|
68
69
|
color: var(--panneau-color-text-muted);
|
|
69
70
|
}
|
|
70
71
|
|
|
71
|
-
.panneau-empty
|
|
72
|
+
.panneau-list-box-empty {
|
|
72
73
|
padding: var(--panneau-space-2);
|
|
73
74
|
font-size: var(--panneau-font-size-sm);
|
|
74
75
|
color: var(--panneau-color-text-muted);
|
|
75
76
|
}
|
|
76
77
|
|
|
77
|
-
.panneau-separator
|
|
78
|
+
.panneau-list-box-separator {
|
|
78
79
|
height: 1px;
|
|
79
80
|
margin: var(--panneau-space-1) 0;
|
|
80
81
|
background-color: var(--panneau-color-border);
|
|
81
82
|
}
|
|
82
83
|
|
|
83
|
-
.panneau-trigger
|
|
84
|
+
.panneau-list-box-trigger {
|
|
84
85
|
justify-content: space-between;
|
|
85
86
|
gap: var(--panneau-space-2);
|
|
86
87
|
text-align: start;
|
|
87
88
|
cursor: pointer;
|
|
88
89
|
}
|
|
89
90
|
|
|
90
|
-
.panneau-
|
|
91
|
+
.panneau-list-box-value {
|
|
91
92
|
flex: 1 1 auto;
|
|
92
93
|
min-width: 0;
|
|
93
94
|
overflow: hidden;
|
|
@@ -95,10 +96,10 @@
|
|
|
95
96
|
white-space: nowrap;
|
|
96
97
|
}
|
|
97
98
|
|
|
98
|
-
.panneau-
|
|
99
|
+
.panneau-list-box-value[data-placeholder] {
|
|
99
100
|
color: var(--panneau-color-text-muted);
|
|
100
101
|
}
|
|
101
102
|
|
|
102
|
-
.panneau-
|
|
103
|
+
.panneau-list-box-chevron {
|
|
103
104
|
color: var(--panneau-color-text-muted);
|
|
104
105
|
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import "./ListBox.css";
|
|
2
2
|
//#region src/select/ListBox.module.css
|
|
3
|
-
var listBox = "panneau-
|
|
4
|
-
var item = "panneau-item
|
|
5
|
-
var itemText = "panneau-
|
|
6
|
-
var itemLabel = "panneau-
|
|
7
|
-
var itemDescription = "panneau-
|
|
8
|
-
var check = "panneau-check
|
|
9
|
-
var placeholder = "panneau-placeholder
|
|
10
|
-
var empty = "panneau-empty
|
|
11
|
-
var separator = "panneau-separator
|
|
12
|
-
var trigger = "panneau-trigger
|
|
13
|
-
var value = "panneau-
|
|
14
|
-
var chevron = "panneau-
|
|
3
|
+
var listBox = "panneau-list-box";
|
|
4
|
+
var item = "panneau-list-box-item";
|
|
5
|
+
var itemText = "panneau-list-box-item-text";
|
|
6
|
+
var itemLabel = "panneau-list-box-item-label";
|
|
7
|
+
var itemDescription = "panneau-list-box-item-description";
|
|
8
|
+
var check = "panneau-list-box-check";
|
|
9
|
+
var placeholder = "panneau-list-box-placeholder";
|
|
10
|
+
var empty = "panneau-list-box-empty";
|
|
11
|
+
var separator = "panneau-list-box-separator";
|
|
12
|
+
var trigger = "panneau-list-box-trigger";
|
|
13
|
+
var value = "panneau-list-box-value";
|
|
14
|
+
var chevron = "panneau-list-box-chevron";
|
|
15
15
|
var ListBox_module_default = {
|
|
16
16
|
listBox,
|
|
17
17
|
item,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListBox.module.js","names":[],"sources":["../../src/select/ListBox.module.css"],"sourcesContent":["/* Options of selects, combo boxes and menus. */\n\n.listBox {\n display: flex;\n flex-direction: column;\n max-height: inherit;\n padding: var(--panneau-space-1);\n overflow: auto;\n outline: none;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--panneau-space-2);\n min-height: var(--panneau-control-height-sm);\n padding: var(--panneau-
|
|
1
|
+
{"version":3,"file":"ListBox.module.js","names":[],"sources":["../../src/select/ListBox.module.css"],"sourcesContent":["/* Options of selects, combo boxes and menus. */\n\n.listBox {\n display: flex;\n flex-direction: column;\n max-height: inherit;\n padding: var(--panneau-list-box-padding, var(--panneau-space-1));\n overflow: auto;\n outline: none;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--panneau-space-2);\n min-height: var(--panneau-control-height-sm);\n padding: var(--panneau-list-box-item-padding-y, calc(var(--panneau-row-padding-y) / 2))\n var(--panneau-list-box-item-padding-x, var(--panneau-space-2));\n font-size: var(--panneau-font-size-control);\n line-height: var(--panneau-line-height-tight);\n color: var(--panneau-color-text);\n cursor: default;\n border-radius: var(--panneau-list-box-item-radius, var(--panneau-radius-sm));\n outline: none;\n}\n\n.item[data-focused],\n.item[data-hovered] {\n background-color: var(--panneau-list-box-item-bg-hover, var(--panneau-color-hover));\n}\n\n.item[data-focus-visible] {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: -2px;\n}\n\n.item[data-disabled] {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.item[data-danger] {\n color: var(--panneau-color-danger);\n}\n\n.itemText {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-width: 0;\n}\n\n.itemLabel {\n overflow-wrap: anywhere;\n}\n\n.itemDescription {\n font-size: var(--panneau-font-size-sm);\n color: var(--panneau-color-text-muted);\n}\n\n.check {\n flex: 0 0 auto;\n width: 1rem;\n color: var(--panneau-color-text);\n}\n\n.placeholder {\n color: var(--panneau-color-text-muted);\n}\n\n.empty {\n padding: var(--panneau-space-2);\n font-size: var(--panneau-font-size-sm);\n color: var(--panneau-color-text-muted);\n}\n\n.separator {\n height: 1px;\n margin: var(--panneau-space-1) 0;\n background-color: var(--panneau-color-border);\n}\n\n.trigger {\n justify-content: space-between;\n gap: var(--panneau-space-2);\n text-align: start;\n cursor: pointer;\n}\n\n.value {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.value[data-placeholder] {\n color: var(--panneau-color-text-muted);\n}\n\n.chevron {\n color: var(--panneau-color-text-muted);\n}\n"],"mappings":""}
|
package/dist/select/Select.js
CHANGED
|
@@ -44,7 +44,7 @@ function Select$1(props) {
|
|
|
44
44
|
validationBehavior: "aria",
|
|
45
45
|
onBlur: onBlur !== void 0 ? () => onBlur() : void 0,
|
|
46
46
|
disabledKeys: items.filter((item) => item.disabled === true).map((item_0) => item_0.key),
|
|
47
|
-
className: cx(Field_module_default.field, className)
|
|
47
|
+
className: cx("panneau-select", Field_module_default.field, className)
|
|
48
48
|
};
|
|
49
49
|
const content = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
50
50
|
/* @__PURE__ */ jsx(FieldLabel, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","names":["item","key","value","onChange","Select","fieldStyles","_Fragment","styles","AriaSelect"],"sources":["../../src/select/Select.tsx"],"sourcesContent":["import { Check, ChevronDown } from 'lucide-react';\nimport type { Key } from 'react-aria-components';\nimport {\n Select as AriaSelect,\n Button,\n ListBox,\n ListBoxItem,\n SelectValue,\n Text,\n} from 'react-aria-components';\n\nimport {\n type FieldChromeProps,\n FieldDescription,\n FieldErrors,\n FieldLabel,\n fieldStyles,\n} from '../field/FieldParts';\nimport { Icon } from '../icon/Icon';\nimport { messages } from '../intl/messages';\nimport { usePanneauIntl } from '../intl/usePanneauIntl';\nimport { PopoverSurface } from '../popover/Popover';\nimport { cx } from '../utils/cx';\nimport styles from './ListBox.module.css';\n\n/** The value of an option. */\nexport type OptionValue = string | number | boolean;\n\n/** A choice of a select, a radio group or a combo box. Same shape as the protocol's `Option`. */\nexport interface SelectOption {\n value: OptionValue;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\n/** Props of both single and multiple selects. */\nexport interface SelectBaseProps extends FieldChromeProps {\n options: readonly SelectOption[];\n /** Text shown without a value. Defaults to \"Select…\". */\n placeholder?: string;\n isRequired?: boolean;\n isDisabled?: boolean;\n name?: string;\n autoFocus?: boolean;\n onBlur?: () => void;\n 'aria-label'?: string;\n id?: string;\n /** Class name of the button that opens the options. */\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\nexport interface SingleSelectProps extends SelectBaseProps {\n multiple?: false;\n /** The selected value, or `null`. */\n value?: OptionValue | null;\n onChange?: (value: OptionValue | null) => void;\n}\n\nexport interface MultipleSelectProps extends SelectBaseProps {\n /** Several values can be selected. */\n multiple: true;\n value?: readonly OptionValue[];\n onChange?: (value: OptionValue[]) => void;\n}\n\nexport type SelectProps = SingleSelectProps | MultipleSelectProps;\n\nconst EMPTY_KEY = '__panneau_empty__';\n\nfunction keyOf(options: readonly SelectOption[], value: OptionValue): Key | null {\n const index = options.findIndex((option) => option.value === value);\n return index === -1 ? null : String(index);\n}\n\nfunction valueOf(options: readonly SelectOption[], key: Key | null): OptionValue | null {\n if (key === null || key === EMPTY_KEY) {\n return null;\n }\n return options[Number(key)]?.value ?? null;\n}\n\n/**\n * A dropdown to pick one option, or several with `multiple`. Option values can be strings,\n * numbers or booleans. Unless `isRequired`, a single select has an empty choice first.\n */\nexport function Select(props: SelectProps) {\n const intl = usePanneauIntl();\n const {\n options,\n label,\n description,\n errors = [],\n placeholder = intl.formatMessage(messages.selectPlaceholder),\n isRequired = false,\n isDisabled,\n name,\n autoFocus,\n onBlur,\n id,\n className,\n labelClassName,\n descriptionClassName,\n errorsClassName,\n triggerClassName,\n popoverClassName,\n } = props;\n const invalid = errors.length > 0;\n const items = options.map((option, index) => ({ ...option, key: String(index) }));\n const withEmpty = props.multiple !== true && !isRequired;\n\n const shared = {\n id,\n name,\n autoFocus,\n isDisabled,\n isRequired,\n isInvalid: invalid,\n placeholder,\n 'aria-label': props['aria-label'],\n validationBehavior: 'aria' as const,\n onBlur: onBlur !== undefined ? () => onBlur() : undefined,\n disabledKeys: items.filter((item) => item.disabled === true).map((item) => item.key),\n className: cx(fieldStyles.field, className),\n };\n\n const content = (\n <>\n <FieldLabel isRequired={isRequired} className={labelClassName}>\n {label}\n </FieldLabel>\n <Button className={cx(fieldStyles.control, styles.trigger, triggerClassName)}>\n <SelectValue className={styles.value} />\n <Icon icon={ChevronDown} className={styles.chevron} />\n </Button>\n <FieldDescription className={descriptionClassName}>{description}</FieldDescription>\n <FieldErrors errors={errors} className={errorsClassName} />\n <PopoverSurface className={popoverClassName}>\n <ListBox className={styles.listBox}>\n {withEmpty ? (\n <ListBoxItem id={EMPTY_KEY} textValue={placeholder} className={styles.item}>\n <span className={styles.check} />\n <span className={styles.placeholder}>{placeholder}</span>\n </ListBoxItem>\n ) : null}\n {items.map((item) => (\n <ListBoxItem\n key={item.key}\n id={item.key}\n textValue={item.label}\n className={styles.item}\n >\n {({ isSelected }) => (\n <>\n <span className={styles.check}>\n {isSelected ? <Icon icon={Check} size=\"sm\" /> : null}\n </span>\n <span className={styles.itemText}>\n <Text slot=\"label\" className={styles.itemLabel}>\n {item.label}\n </Text>\n {item.description !== undefined ? (\n <Text\n slot=\"description\"\n className={styles.itemDescription}\n >\n {item.description}\n </Text>\n ) : null}\n </span>\n </>\n )}\n </ListBoxItem>\n ))}\n </ListBox>\n </PopoverSurface>\n </>\n );\n\n if (props.multiple === true) {\n const { value, onChange } = props;\n return (\n <AriaSelect\n {...shared}\n selectionMode=\"multiple\"\n value={\n value !== undefined\n ? value.flatMap((item) => {\n const key = keyOf(options, item);\n return key !== null ? [key] : [];\n })\n : undefined\n }\n onChange={(keys) =>\n onChange?.(\n keys.flatMap((key) => {\n const item = valueOf(options, key);\n return item !== null ? [item] : [];\n }),\n )\n }\n >\n {content}\n </AriaSelect>\n );\n }\n\n const { value, onChange } = props;\n return (\n <AriaSelect\n {...shared}\n selectionMode=\"single\"\n value={\n value !== undefined ? (value !== null ? keyOf(options, value) : null) : undefined\n }\n onChange={(key) => onChange?.(valueOf(options, key))}\n >\n {content}\n </AriaSelect>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Select.js","names":["item","key","value","onChange","Select","fieldStyles","_Fragment","styles","AriaSelect"],"sources":["../../src/select/Select.tsx"],"sourcesContent":["import { Check, ChevronDown } from 'lucide-react';\nimport type { Key } from 'react-aria-components';\nimport {\n Select as AriaSelect,\n Button,\n ListBox,\n ListBoxItem,\n SelectValue,\n Text,\n} from 'react-aria-components';\n\nimport {\n type FieldChromeProps,\n FieldDescription,\n FieldErrors,\n FieldLabel,\n fieldStyles,\n} from '../field/FieldParts';\nimport { Icon } from '../icon/Icon';\nimport { messages } from '../intl/messages';\nimport { usePanneauIntl } from '../intl/usePanneauIntl';\nimport { PopoverSurface } from '../popover/Popover';\nimport { cx } from '../utils/cx';\nimport styles from './ListBox.module.css';\n\n/** The value of an option. */\nexport type OptionValue = string | number | boolean;\n\n/** A choice of a select, a radio group or a combo box. Same shape as the protocol's `Option`. */\nexport interface SelectOption {\n value: OptionValue;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\n/** Props of both single and multiple selects. */\nexport interface SelectBaseProps extends FieldChromeProps {\n options: readonly SelectOption[];\n /** Text shown without a value. Defaults to \"Select…\". */\n placeholder?: string;\n isRequired?: boolean;\n isDisabled?: boolean;\n name?: string;\n autoFocus?: boolean;\n onBlur?: () => void;\n 'aria-label'?: string;\n id?: string;\n /** Class name of the button that opens the options. */\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\nexport interface SingleSelectProps extends SelectBaseProps {\n multiple?: false;\n /** The selected value, or `null`. */\n value?: OptionValue | null;\n onChange?: (value: OptionValue | null) => void;\n}\n\nexport interface MultipleSelectProps extends SelectBaseProps {\n /** Several values can be selected. */\n multiple: true;\n value?: readonly OptionValue[];\n onChange?: (value: OptionValue[]) => void;\n}\n\nexport type SelectProps = SingleSelectProps | MultipleSelectProps;\n\nconst EMPTY_KEY = '__panneau_empty__';\n\nfunction keyOf(options: readonly SelectOption[], value: OptionValue): Key | null {\n const index = options.findIndex((option) => option.value === value);\n return index === -1 ? null : String(index);\n}\n\nfunction valueOf(options: readonly SelectOption[], key: Key | null): OptionValue | null {\n if (key === null || key === EMPTY_KEY) {\n return null;\n }\n return options[Number(key)]?.value ?? null;\n}\n\n/**\n * A dropdown to pick one option, or several with `multiple`. Option values can be strings,\n * numbers or booleans. Unless `isRequired`, a single select has an empty choice first.\n */\nexport function Select(props: SelectProps) {\n const intl = usePanneauIntl();\n const {\n options,\n label,\n description,\n errors = [],\n placeholder = intl.formatMessage(messages.selectPlaceholder),\n isRequired = false,\n isDisabled,\n name,\n autoFocus,\n onBlur,\n id,\n className,\n labelClassName,\n descriptionClassName,\n errorsClassName,\n triggerClassName,\n popoverClassName,\n } = props;\n const invalid = errors.length > 0;\n const items = options.map((option, index) => ({ ...option, key: String(index) }));\n const withEmpty = props.multiple !== true && !isRequired;\n\n const shared = {\n id,\n name,\n autoFocus,\n isDisabled,\n isRequired,\n isInvalid: invalid,\n placeholder,\n 'aria-label': props['aria-label'],\n validationBehavior: 'aria' as const,\n onBlur: onBlur !== undefined ? () => onBlur() : undefined,\n disabledKeys: items.filter((item) => item.disabled === true).map((item) => item.key),\n className: cx('panneau-select', fieldStyles.field, className),\n };\n\n const content = (\n <>\n <FieldLabel isRequired={isRequired} className={labelClassName}>\n {label}\n </FieldLabel>\n <Button className={cx(fieldStyles.control, styles.trigger, triggerClassName)}>\n <SelectValue className={styles.value} />\n <Icon icon={ChevronDown} className={styles.chevron} />\n </Button>\n <FieldDescription className={descriptionClassName}>{description}</FieldDescription>\n <FieldErrors errors={errors} className={errorsClassName} />\n <PopoverSurface className={popoverClassName}>\n <ListBox className={styles.listBox}>\n {withEmpty ? (\n <ListBoxItem id={EMPTY_KEY} textValue={placeholder} className={styles.item}>\n <span className={styles.check} />\n <span className={styles.placeholder}>{placeholder}</span>\n </ListBoxItem>\n ) : null}\n {items.map((item) => (\n <ListBoxItem\n key={item.key}\n id={item.key}\n textValue={item.label}\n className={styles.item}\n >\n {({ isSelected }) => (\n <>\n <span className={styles.check}>\n {isSelected ? <Icon icon={Check} size=\"sm\" /> : null}\n </span>\n <span className={styles.itemText}>\n <Text slot=\"label\" className={styles.itemLabel}>\n {item.label}\n </Text>\n {item.description !== undefined ? (\n <Text\n slot=\"description\"\n className={styles.itemDescription}\n >\n {item.description}\n </Text>\n ) : null}\n </span>\n </>\n )}\n </ListBoxItem>\n ))}\n </ListBox>\n </PopoverSurface>\n </>\n );\n\n if (props.multiple === true) {\n const { value, onChange } = props;\n return (\n <AriaSelect\n {...shared}\n selectionMode=\"multiple\"\n value={\n value !== undefined\n ? value.flatMap((item) => {\n const key = keyOf(options, item);\n return key !== null ? [key] : [];\n })\n : undefined\n }\n onChange={(keys) =>\n onChange?.(\n keys.flatMap((key) => {\n const item = valueOf(options, key);\n return item !== null ? [item] : [];\n }),\n )\n }\n >\n {content}\n </AriaSelect>\n );\n }\n\n const { value, onChange } = props;\n return (\n <AriaSelect\n {...shared}\n selectionMode=\"single\"\n value={\n value !== undefined ? (value !== null ? keyOf(options, value) : null) : undefined\n }\n onChange={(key) => onChange?.(valueOf(options, key))}\n >\n {content}\n </AriaSelect>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** Tokens of the options of `Select`, `ComboBox` and `Menu`. */
|
|
2
|
+
export declare const listBoxTokens: import("..").ComponentTokens<"list-box", "panneau-list-box-padding" | "panneau-list-box-item-padding-y" | "panneau-list-box-item-padding-x" | "panneau-list-box-item-radius" | "panneau-list-box-item-bg-hover">;
|
|
3
|
+
//# sourceMappingURL=listBoxTokens.d.ts.map
|