@traefik-labs/faency 12.0.12 → 12.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AriaTable/AriaTable.cjs.map +1 -1
- package/dist/components/AriaTable/AriaTable.js.map +1 -1
- package/dist/components/Avatar/Avatar.vanilla.css.cjs +3 -3
- package/dist/components/Avatar/Avatar.vanilla.css.js +1 -1
- package/dist/components/Badge/Badge.vanilla.css.cjs +3 -3
- package/dist/components/Badge/Badge.vanilla.css.js +1 -1
- package/dist/components/Blockquote/Blockquote.vanilla.css.cjs +2 -2
- package/dist/components/Blockquote/Blockquote.vanilla.css.js +1 -1
- package/dist/components/Bubble/Bubble.vanilla.css.cjs +2 -2
- package/dist/components/Bubble/Bubble.vanilla.css.js +1 -1
- package/dist/components/Button/Button.cjs +2 -1
- package/dist/components/Button/Button.cjs.map +1 -1
- package/dist/components/Button/Button.js +2 -1
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Button/Button.vanilla.css.cjs +2 -2
- package/dist/components/Button/Button.vanilla.css.js +1 -1
- package/dist/components/Card/Card.vanilla.css.cjs +3 -3
- package/dist/components/Card/Card.vanilla.css.js +1 -1
- package/dist/components/CodeBlock/CodeBlock.cjs +108 -0
- package/dist/components/CodeBlock/CodeBlock.cjs.map +1 -0
- package/dist/components/CodeBlock/CodeBlock.js +108 -0
- package/dist/components/CodeBlock/CodeBlock.js.map +1 -0
- package/dist/components/CodeBlock/CodeBlock.vanilla.cjs +103 -0
- package/dist/components/CodeBlock/CodeBlock.vanilla.cjs.map +1 -0
- package/dist/components/CodeBlock/CodeBlock.vanilla.css.cjs +18 -0
- package/dist/components/CodeBlock/CodeBlock.vanilla.css.cjs.map +1 -0
- package/dist/components/CodeBlock/CodeBlock.vanilla.css.js +18 -0
- package/dist/components/CodeBlock/CodeBlock.vanilla.css.js.map +1 -0
- package/dist/components/CodeBlock/CodeBlock.vanilla.js +103 -0
- package/dist/components/CodeBlock/CodeBlock.vanilla.js.map +1 -0
- package/dist/components/Container/Container.vanilla.css.cjs +2 -2
- package/dist/components/Container/Container.vanilla.css.js +1 -1
- package/dist/components/DateTimePicker/DateTimePicker.cjs +1 -1
- package/dist/components/DateTimePicker/DateTimePicker.js +1 -1
- package/dist/components/Elevation/Elevation.vanilla.css.cjs +2 -2
- package/dist/components/Elevation/Elevation.vanilla.css.js +1 -1
- package/dist/components/FaencyProvider.cjs +2 -1
- package/dist/components/FaencyProvider.cjs.map +1 -1
- package/dist/components/FaencyProvider.js +2 -1
- package/dist/components/FaencyProvider.js.map +1 -1
- package/dist/components/Flex/Flex.vanilla.css.cjs +2 -2
- package/dist/components/Flex/Flex.vanilla.css.js +1 -1
- package/dist/components/Grid/Grid.vanilla.css.cjs +2 -2
- package/dist/components/Grid/Grid.vanilla.css.js +1 -1
- package/dist/components/IconButton/IconButton.vanilla.css.cjs +2 -2
- package/dist/components/IconButton/IconButton.vanilla.css.js +1 -1
- package/dist/components/Input/Input.vanilla.css.cjs +4 -4
- package/dist/components/Input/Input.vanilla.css.js +1 -1
- package/dist/components/Label/Label.vanilla.css.cjs +2 -2
- package/dist/components/Label/Label.vanilla.css.js +1 -1
- package/dist/components/List/List.cjs +36 -7
- package/dist/components/List/List.cjs.map +1 -1
- package/dist/components/List/List.js +36 -7
- package/dist/components/List/List.js.map +1 -1
- package/dist/components/Paragraph/Paragraph.vanilla.css.cjs +2 -2
- package/dist/components/Paragraph/Paragraph.vanilla.css.js +1 -1
- package/dist/components/Skeleton/Skeleton.vanilla.css.cjs +2 -2
- package/dist/components/Skeleton/Skeleton.vanilla.css.js +1 -1
- package/dist/components/Textarea/Textarea.vanilla.css.cjs +3 -3
- package/dist/components/Textarea/Textarea.vanilla.css.js +1 -1
- package/dist/components/colorSchemeContext.cjs +45 -0
- package/dist/components/colorSchemeContext.cjs.map +1 -0
- package/dist/components/colorSchemeContext.js +45 -0
- package/dist/components/colorSchemeContext.js.map +1 -0
- package/dist/faency.css +135 -107
- package/dist/index.cjs +6 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +388 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
- package/dist/node_modules/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.cjs +0 -109
- package/dist/node_modules/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.cjs.map +0 -1
- package/dist/node_modules/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js +0 -109
- package/dist/node_modules/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* empty css */
|
|
2
|
-
import {
|
|
2
|
+
import { createRuntimeFn } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
3
3
|
var styledInputRecipe = createRuntimeFn({ defaultClassName: "_1st6suv1 _1st6suv0", variantClassNames: { size: { small: "_1st6suv2", medium: "_1st6suv3", large: "_1st6suv4" }, variant: { ghost: "_1st6suv5" }, state: { invalid: "_1st6suv6" }, cursor: { "default": "_1st6suv7", text: "_1st6suv8" }, startAdornment: { true: "_1st6suv9" }, endAdornment: { true: "_1st6suva" } }, defaultVariants: { size: "medium", cursor: "default" }, compoundVariants: [[{ variant: "ghost", state: "invalid" }, "_1st6suvb"], [{ startAdornment: true, size: "small" }, "_1st6suvc"], [{ startAdornment: true, size: "medium" }, "_1st6suvd"], [{ startAdornment: true, size: "large" }, "_1st6suve"], [{ endAdornment: true, size: "small" }, "_1st6suvf"], [{ endAdornment: true, size: "medium" }, "_1st6suvg"], [{ endAdornment: true, size: "large" }, "_1st6suvh"], [{ endAdornment: true, size: "small", state: "invalid" }, "_1st6suvi"], [{ endAdornment: true, size: "medium", state: "invalid" }, "_1st6suvj"], [{ endAdornment: true, size: "large", state: "invalid" }, "_1st6suvk"]] });
|
|
4
4
|
var inputWrapperRecipe = createRuntimeFn({ defaultClassName: "_1st6suvm _1st6suvl", variantClassNames: { disabled: { true: "_1st6suvn" }, state: { invalid: "_1st6suvo" }, size: { small: "_1st6suvp", medium: "_1st6suvq", large: "_1st6suvr" } }, defaultVariants: { size: "medium", disabled: false }, compoundVariants: [] });
|
|
5
5
|
var adornmentWrapperRecipe = createRuntimeFn({ defaultClassName: "_1st6suvt _1st6suvs", variantClassNames: { size: { small: "_1st6suvu", medium: "_1st6suvv", large: "_1st6suvw" }, variant: { start: "_1st6suvx", end: "_1st6suvy" } }, defaultVariants: { size: "medium" }, compoundVariants: [] });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
;/* empty css */
|
|
4
|
-
const
|
|
5
|
-
var labelRecipe =
|
|
4
|
+
const createRuntimeFn = require("@vanilla-extract/recipes/createRuntimeFn");
|
|
5
|
+
var labelRecipe = createRuntimeFn.createRuntimeFn({ defaultClassName: "_14umx1r1 _14umx1r0", variantClassNames: { size: { "0": "_14umx1r2", "1": "_14umx1r3", "2": "_14umx1r4", "3": "_14umx1r5", "4": "_14umx1r6", "5": "_14umx1r7", "6": "_14umx1r8", "7": "_14umx1r9", "8": "_14umx1ra", "9": "_14umx1rb", "10": "_14umx1rc", "11": "_14umx1rd", "12": "_14umx1re", inherit: "_14umx1rf" }, weight: { light: "_14umx1rg", regular: "_14umx1rh", medium: "_14umx1ri", semiBold: "_14umx1rj", bold: "_14umx1rk" }, variant: { red: "_14umx1rl", subtle: "_14umx1rm", "default": "_14umx1rn", contrast: "_14umx1ro", inherit: "_14umx1rp", invalid: "_14umx1rq" }, gradient: { true: "_14umx1rr" }, transform: { uppercase: "_14umx1rs", capitalize: "_14umx1rt", capitalizeWords: "_14umx1ru" }, noWrap: { true: "_14umx1rv" } }, defaultVariants: { size: "0", variant: "subtle", transform: "capitalize" }, compoundVariants: [] });
|
|
6
6
|
exports.labelRecipe = labelRecipe;
|
|
7
7
|
//# sourceMappingURL=Label.vanilla.css.cjs.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* empty css */
|
|
2
|
-
import {
|
|
2
|
+
import { createRuntimeFn } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
3
3
|
var labelRecipe = createRuntimeFn({ defaultClassName: "_14umx1r1 _14umx1r0", variantClassNames: { size: { "0": "_14umx1r2", "1": "_14umx1r3", "2": "_14umx1r4", "3": "_14umx1r5", "4": "_14umx1r6", "5": "_14umx1r7", "6": "_14umx1r8", "7": "_14umx1r9", "8": "_14umx1ra", "9": "_14umx1rb", "10": "_14umx1rc", "11": "_14umx1rd", "12": "_14umx1re", inherit: "_14umx1rf" }, weight: { light: "_14umx1rg", regular: "_14umx1rh", medium: "_14umx1ri", semiBold: "_14umx1rj", bold: "_14umx1rk" }, variant: { red: "_14umx1rl", subtle: "_14umx1rm", "default": "_14umx1rn", contrast: "_14umx1ro", inherit: "_14umx1rp", invalid: "_14umx1rq" }, gradient: { true: "_14umx1rr" }, transform: { uppercase: "_14umx1rs", capitalize: "_14umx1rt", capitalizeWords: "_14umx1ru" }, noWrap: { true: "_14umx1rv" } }, defaultVariants: { size: "0", variant: "subtle", transform: "capitalize" }, compoundVariants: [] });
|
|
4
4
|
export {
|
|
5
5
|
labelRecipe
|
|
@@ -27,7 +27,9 @@ const StyledListItemButton = stitches_config.styled("button", Flex.Flex, {
|
|
|
27
27
|
outline: "none",
|
|
28
28
|
// CUSTOM
|
|
29
29
|
flexGrow: 1,
|
|
30
|
+
width: "100%",
|
|
30
31
|
p: "$2",
|
|
32
|
+
position: "relative",
|
|
31
33
|
"&::before": {
|
|
32
34
|
borderRadius: "inherit",
|
|
33
35
|
boxSizing: "border-box",
|
|
@@ -85,17 +87,24 @@ const StyledUl = stitches_config.styled("ul", {
|
|
|
85
87
|
m: "0 0 0 8px",
|
|
86
88
|
p: 0,
|
|
87
89
|
color: "$textDefault",
|
|
88
|
-
'&:has(li > span > input[type="checkbox"])': {
|
|
90
|
+
'&:has(> li > span > input[type="checkbox"])': {
|
|
89
91
|
m: 0,
|
|
90
92
|
listStyle: "none",
|
|
91
|
-
li: {
|
|
93
|
+
"> li": {
|
|
92
94
|
marginLeft: 0,
|
|
93
|
-
span: {
|
|
95
|
+
"> span": {
|
|
94
96
|
input: {
|
|
95
97
|
margin: "0 3px 0 0"
|
|
96
98
|
}
|
|
97
99
|
}
|
|
98
100
|
}
|
|
101
|
+
},
|
|
102
|
+
// Restore left-margin indentation when a nested checkbox list is inside a li
|
|
103
|
+
'li > &:has(> li > span > input[type="checkbox"])': {
|
|
104
|
+
marginLeft: "$2",
|
|
105
|
+
"> li": {
|
|
106
|
+
marginLeft: "$2"
|
|
107
|
+
}
|
|
99
108
|
}
|
|
100
109
|
});
|
|
101
110
|
const StyledOl = stitches_config.styled("ol", {
|
|
@@ -112,13 +121,25 @@ const ListContext = React.createContext({
|
|
|
112
121
|
});
|
|
113
122
|
const Ul = React.forwardRef(
|
|
114
123
|
({ interactive, ...props }, forwardedRef) => {
|
|
115
|
-
const
|
|
124
|
+
const parentContext = React.useContext(ListContext);
|
|
125
|
+
const contextValue = React.useMemo(
|
|
126
|
+
() => ({
|
|
127
|
+
interactive: interactive !== void 0 ? !!interactive : parentContext.interactive
|
|
128
|
+
}),
|
|
129
|
+
[interactive, parentContext.interactive]
|
|
130
|
+
);
|
|
116
131
|
return /* @__PURE__ */ jsxRuntime.jsx(ListContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(StyledUl, { role: "list", ref: forwardedRef, ...props }) });
|
|
117
132
|
}
|
|
118
133
|
);
|
|
119
134
|
const Ol = React.forwardRef(
|
|
120
135
|
({ interactive, ...props }, forwardedRef) => {
|
|
121
|
-
const
|
|
136
|
+
const parentContext = React.useContext(ListContext);
|
|
137
|
+
const contextValue = React.useMemo(
|
|
138
|
+
() => ({
|
|
139
|
+
interactive: interactive !== void 0 ? !!interactive : parentContext.interactive
|
|
140
|
+
}),
|
|
141
|
+
[interactive, parentContext.interactive]
|
|
142
|
+
);
|
|
122
143
|
return /* @__PURE__ */ jsxRuntime.jsx(ListContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(StyledOl, { role: "list", ref: forwardedRef, ...props }) });
|
|
123
144
|
}
|
|
124
145
|
);
|
|
@@ -136,6 +157,13 @@ const ControlsWrapper = stitches_config.styled("div", {
|
|
|
136
157
|
const Li = React.forwardRef(
|
|
137
158
|
({ children, controls, align, justify, direction, gap, wrap, ...props }, forwardedRef) => {
|
|
138
159
|
const { interactive } = React.useContext(ListContext);
|
|
160
|
+
const childArray = React.Children.toArray(children);
|
|
161
|
+
const nestedLists = childArray.filter(
|
|
162
|
+
(child) => React.isValidElement(child) && (child.type === Ul || child.type === Ol)
|
|
163
|
+
);
|
|
164
|
+
const inlineChildren = childArray.filter(
|
|
165
|
+
(child) => !(React.isValidElement(child) && (child.type === Ul || child.type === Ol))
|
|
166
|
+
);
|
|
139
167
|
return /* @__PURE__ */ jsxRuntime.jsxs(StyledLi, { ...props, ref: forwardedRef, children: [
|
|
140
168
|
interactive ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
141
169
|
StyledListItemButton,
|
|
@@ -145,7 +173,7 @@ const Li = React.forwardRef(
|
|
|
145
173
|
direction,
|
|
146
174
|
gap,
|
|
147
175
|
wrap,
|
|
148
|
-
children
|
|
176
|
+
children: inlineChildren
|
|
149
177
|
}
|
|
150
178
|
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
151
179
|
StyledSpan,
|
|
@@ -156,9 +184,10 @@ const Li = React.forwardRef(
|
|
|
156
184
|
gap,
|
|
157
185
|
wrap,
|
|
158
186
|
css: { flexGrow: 1 },
|
|
159
|
-
children
|
|
187
|
+
children: inlineChildren
|
|
160
188
|
}
|
|
161
189
|
),
|
|
190
|
+
nestedLists,
|
|
162
191
|
!!controls && /* @__PURE__ */ jsxRuntime.jsx(ControlsWrapper, { children: controls })
|
|
163
192
|
] });
|
|
164
193
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.cjs","sources":["../../../components/List/List.tsx"],"sourcesContent":["import React, { ComponentProps, createContext, ReactNode, useContext, useMemo } from 'react';\n\nimport { styled, VariantProps } from '../../stitches.config';\nimport { BUTTON_BASE_STYLES } from '../Button';\nimport { elevationVariants } from '../Elevation';\nimport { Flex } from '../Flex';\n\nconst LIST_ITEM_CONTENT_STYLES = {\n bc: 'transparent',\n c: 'inherit',\n borderRadius: 'inherit',\n fontFamily: '$rubik',\n fontSize: '$3',\n fontVariantNumeric: 'tabular-nums',\n};\n\nconst StyledSpan = styled('span', Flex, {\n // APPLY BUTTON STYLES\n ...LIST_ITEM_CONTENT_STYLES,\n // CUSTOM\n p: '$1',\n gap: '$1',\n});\n\nconst StyledListItemButton = styled('button', Flex, {\n ...BUTTON_BASE_STYLES,\n ...LIST_ITEM_CONTENT_STYLES,\n outline: 'none',\n\n // CUSTOM\n flexGrow: 1,\n p: '$2',\n '&::before': {\n borderRadius: 'inherit',\n boxSizing: 'border-box',\n content: '\"\"',\n position: 'absolute',\n inset: 0,\n },\n '&::after': {\n borderRadius: 'inherit',\n boxSizing: 'border-box',\n content: '\"\"',\n position: 'absolute',\n inset: 0,\n },\n '&:focus, &:focus-visible': {\n boxShadow: 'inset 0 0 0 2px $colors$listItemFocusBorder',\n },\n\n '@hover': {\n '&:hover': {\n cursor: 'pointer',\n '&::before': {\n backgroundColor: '$listItemHoverBg',\n },\n '&::after': {\n backgroundColor: '$primary',\n opacity: 0.05,\n },\n },\n },\n '&:active': {\n '&::before': {\n backgroundColor: '$listItemActiveBg',\n },\n '&::after': {\n backgroundColor: '$primary',\n opacity: 0.05,\n },\n },\n});\n\nconst StyledLi = styled('li', {\n m: '$2',\n outline: 'none',\n position: 'relative',\n '&:focus-within': {\n boxShadow: 'none',\n },\n variants: {\n elevation: elevationVariants,\n },\n defaultVariants: {\n elevation: '0',\n },\n});\n\nconst StyledUl = styled('ul', {\n m: '0 0 0 8px',\n p: 0,\n color: '$textDefault',\n\n '&:has(li > span > input[type=\"checkbox\"])': {\n m: 0,\n listStyle: 'none',\n li: {\n marginLeft: 0,\n span: {\n input: {\n margin: '0 3px 0 0',\n },\n },\n },\n },\n});\n\nconst StyledOl = styled('ol', {\n m: '0 0 0 8px',\n p: 0,\n color: '$textDefault',\n\n '> li::marker': {\n fontSize: '$3',\n fontFamily: '$rubik',\n },\n});\n\nconst ListContext = createContext({\n interactive: false,\n});\n\nexport interface ListProps extends ComponentProps<typeof StyledUl>, VariantProps<typeof StyledUl> {\n interactive?: boolean;\n}\nexport const Ul = React.forwardRef<React.ElementRef<typeof StyledUl>, ListProps>(\n ({ interactive, ...props }, forwardedRef) => {\n const contextValue = useMemo(() => ({
|
|
1
|
+
{"version":3,"file":"List.cjs","sources":["../../../components/List/List.tsx"],"sourcesContent":["import React, { ComponentProps, createContext, ReactNode, useContext, useMemo } from 'react';\n\nimport { styled, VariantProps } from '../../stitches.config';\nimport { BUTTON_BASE_STYLES } from '../Button';\nimport { elevationVariants } from '../Elevation';\nimport { Flex } from '../Flex';\n\nconst LIST_ITEM_CONTENT_STYLES = {\n bc: 'transparent',\n c: 'inherit',\n borderRadius: 'inherit',\n fontFamily: '$rubik',\n fontSize: '$3',\n fontVariantNumeric: 'tabular-nums',\n};\n\nconst StyledSpan = styled('span', Flex, {\n // APPLY BUTTON STYLES\n ...LIST_ITEM_CONTENT_STYLES,\n // CUSTOM\n p: '$1',\n gap: '$1',\n});\n\nconst StyledListItemButton = styled('button', Flex, {\n ...BUTTON_BASE_STYLES,\n ...LIST_ITEM_CONTENT_STYLES,\n outline: 'none',\n\n // CUSTOM\n flexGrow: 1,\n width: '100%',\n p: '$2',\n position: 'relative',\n '&::before': {\n borderRadius: 'inherit',\n boxSizing: 'border-box',\n content: '\"\"',\n position: 'absolute',\n inset: 0,\n },\n '&::after': {\n borderRadius: 'inherit',\n boxSizing: 'border-box',\n content: '\"\"',\n position: 'absolute',\n inset: 0,\n },\n '&:focus, &:focus-visible': {\n boxShadow: 'inset 0 0 0 2px $colors$listItemFocusBorder',\n },\n\n '@hover': {\n '&:hover': {\n cursor: 'pointer',\n '&::before': {\n backgroundColor: '$listItemHoverBg',\n },\n '&::after': {\n backgroundColor: '$primary',\n opacity: 0.05,\n },\n },\n },\n '&:active': {\n '&::before': {\n backgroundColor: '$listItemActiveBg',\n },\n '&::after': {\n backgroundColor: '$primary',\n opacity: 0.05,\n },\n },\n});\n\nconst StyledLi = styled('li', {\n m: '$2',\n outline: 'none',\n position: 'relative',\n '&:focus-within': {\n boxShadow: 'none',\n },\n variants: {\n elevation: elevationVariants,\n },\n defaultVariants: {\n elevation: '0',\n },\n});\n\nconst StyledUl = styled('ul', {\n m: '0 0 0 8px',\n p: 0,\n color: '$textDefault',\n\n '&:has(> li > span > input[type=\"checkbox\"])': {\n m: 0,\n listStyle: 'none',\n '> li': {\n marginLeft: 0,\n '> span': {\n input: {\n margin: '0 3px 0 0',\n },\n },\n },\n },\n // Restore left-margin indentation when a nested checkbox list is inside a li\n 'li > &:has(> li > span > input[type=\"checkbox\"])': {\n marginLeft: '$2',\n '> li': {\n marginLeft: '$2',\n },\n },\n});\n\nconst StyledOl = styled('ol', {\n m: '0 0 0 8px',\n p: 0,\n color: '$textDefault',\n\n '> li::marker': {\n fontSize: '$3',\n fontFamily: '$rubik',\n },\n});\n\nconst ListContext = createContext({\n interactive: false,\n});\n\nexport interface ListProps extends ComponentProps<typeof StyledUl>, VariantProps<typeof StyledUl> {\n interactive?: boolean;\n}\nexport const Ul = React.forwardRef<React.ElementRef<typeof StyledUl>, ListProps>(\n ({ interactive, ...props }, forwardedRef) => {\n const parentContext = useContext(ListContext);\n const contextValue = useMemo(\n () => ({\n interactive: interactive !== undefined ? !!interactive : parentContext.interactive,\n }),\n [interactive, parentContext.interactive],\n );\n\n return (\n <ListContext.Provider value={contextValue}>\n <StyledUl role=\"list\" ref={forwardedRef} {...props} />\n </ListContext.Provider>\n );\n },\n);\n\nexport interface OrderedListProps\n extends ComponentProps<typeof StyledOl>,\n VariantProps<typeof StyledOl> {\n interactive?: boolean;\n}\n\nexport const Ol = React.forwardRef<React.ElementRef<typeof StyledOl>, OrderedListProps>(\n ({ interactive, ...props }, forwardedRef) => {\n const parentContext = useContext(ListContext);\n const contextValue = useMemo(\n () => ({\n interactive: interactive !== undefined ? !!interactive : parentContext.interactive,\n }),\n [interactive, parentContext.interactive],\n );\n\n return (\n <ListContext.Provider value={contextValue}>\n <StyledOl role=\"list\" ref={forwardedRef} {...props} />\n </ListContext.Provider>\n );\n },\n);\n\nconst ControlsWrapper = styled('div', {\n position: 'absolute',\n top: 0,\n right: '$2',\n zIndex: 1,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'visible',\n});\n\nexport interface ListItemProps\n extends ComponentProps<typeof StyledLi>,\n VariantProps<typeof StyledLi>,\n VariantProps<typeof Flex> {\n controls?: ReactNode;\n}\nexport const Li = React.forwardRef<React.ElementRef<typeof StyledLi>, ListItemProps>(\n ({ children, controls, align, justify, direction, gap, wrap, ...props }, forwardedRef) => {\n const { interactive } = useContext(ListContext);\n\n const childArray = React.Children.toArray(children);\n const nestedLists = childArray.filter(\n (child) => React.isValidElement(child) && (child.type === Ul || child.type === Ol),\n );\n const inlineChildren = childArray.filter(\n (child) => !(React.isValidElement(child) && (child.type === Ul || child.type === Ol)),\n );\n\n return (\n <StyledLi {...props} ref={forwardedRef}>\n {interactive ? (\n <StyledListItemButton\n align={align}\n justify={justify}\n direction={direction}\n gap={gap}\n wrap={wrap}\n >\n {inlineChildren}\n </StyledListItemButton>\n ) : (\n <StyledSpan\n align={align || 'center'}\n justify={justify}\n direction={direction}\n gap={gap}\n wrap={wrap}\n css={{ flexGrow: 1 }}\n >\n {inlineChildren}\n </StyledSpan>\n )}\n {nestedLists}\n {!!controls && <ControlsWrapper>{controls}</ControlsWrapper>}\n </StyledLi>\n );\n },\n);\n"],"names":["styled","Flex","BUTTON_BASE_STYLES","elevationVariants","createContext","useContext","useMemo","jsx","jsxs"],"mappings":"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"}
|
|
@@ -25,7 +25,9 @@ const StyledListItemButton = styled("button", Flex, {
|
|
|
25
25
|
outline: "none",
|
|
26
26
|
// CUSTOM
|
|
27
27
|
flexGrow: 1,
|
|
28
|
+
width: "100%",
|
|
28
29
|
p: "$2",
|
|
30
|
+
position: "relative",
|
|
29
31
|
"&::before": {
|
|
30
32
|
borderRadius: "inherit",
|
|
31
33
|
boxSizing: "border-box",
|
|
@@ -83,17 +85,24 @@ const StyledUl = styled("ul", {
|
|
|
83
85
|
m: "0 0 0 8px",
|
|
84
86
|
p: 0,
|
|
85
87
|
color: "$textDefault",
|
|
86
|
-
'&:has(li > span > input[type="checkbox"])': {
|
|
88
|
+
'&:has(> li > span > input[type="checkbox"])': {
|
|
87
89
|
m: 0,
|
|
88
90
|
listStyle: "none",
|
|
89
|
-
li: {
|
|
91
|
+
"> li": {
|
|
90
92
|
marginLeft: 0,
|
|
91
|
-
span: {
|
|
93
|
+
"> span": {
|
|
92
94
|
input: {
|
|
93
95
|
margin: "0 3px 0 0"
|
|
94
96
|
}
|
|
95
97
|
}
|
|
96
98
|
}
|
|
99
|
+
},
|
|
100
|
+
// Restore left-margin indentation when a nested checkbox list is inside a li
|
|
101
|
+
'li > &:has(> li > span > input[type="checkbox"])': {
|
|
102
|
+
marginLeft: "$2",
|
|
103
|
+
"> li": {
|
|
104
|
+
marginLeft: "$2"
|
|
105
|
+
}
|
|
97
106
|
}
|
|
98
107
|
});
|
|
99
108
|
const StyledOl = styled("ol", {
|
|
@@ -110,13 +119,25 @@ const ListContext = createContext({
|
|
|
110
119
|
});
|
|
111
120
|
const Ul = React.forwardRef(
|
|
112
121
|
({ interactive, ...props }, forwardedRef) => {
|
|
113
|
-
const
|
|
122
|
+
const parentContext = useContext(ListContext);
|
|
123
|
+
const contextValue = useMemo(
|
|
124
|
+
() => ({
|
|
125
|
+
interactive: interactive !== void 0 ? !!interactive : parentContext.interactive
|
|
126
|
+
}),
|
|
127
|
+
[interactive, parentContext.interactive]
|
|
128
|
+
);
|
|
114
129
|
return /* @__PURE__ */ jsx(ListContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(StyledUl, { role: "list", ref: forwardedRef, ...props }) });
|
|
115
130
|
}
|
|
116
131
|
);
|
|
117
132
|
const Ol = React.forwardRef(
|
|
118
133
|
({ interactive, ...props }, forwardedRef) => {
|
|
119
|
-
const
|
|
134
|
+
const parentContext = useContext(ListContext);
|
|
135
|
+
const contextValue = useMemo(
|
|
136
|
+
() => ({
|
|
137
|
+
interactive: interactive !== void 0 ? !!interactive : parentContext.interactive
|
|
138
|
+
}),
|
|
139
|
+
[interactive, parentContext.interactive]
|
|
140
|
+
);
|
|
120
141
|
return /* @__PURE__ */ jsx(ListContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(StyledOl, { role: "list", ref: forwardedRef, ...props }) });
|
|
121
142
|
}
|
|
122
143
|
);
|
|
@@ -134,6 +155,13 @@ const ControlsWrapper = styled("div", {
|
|
|
134
155
|
const Li = React.forwardRef(
|
|
135
156
|
({ children, controls, align, justify, direction, gap, wrap, ...props }, forwardedRef) => {
|
|
136
157
|
const { interactive } = useContext(ListContext);
|
|
158
|
+
const childArray = React.Children.toArray(children);
|
|
159
|
+
const nestedLists = childArray.filter(
|
|
160
|
+
(child) => React.isValidElement(child) && (child.type === Ul || child.type === Ol)
|
|
161
|
+
);
|
|
162
|
+
const inlineChildren = childArray.filter(
|
|
163
|
+
(child) => !(React.isValidElement(child) && (child.type === Ul || child.type === Ol))
|
|
164
|
+
);
|
|
137
165
|
return /* @__PURE__ */ jsxs(StyledLi, { ...props, ref: forwardedRef, children: [
|
|
138
166
|
interactive ? /* @__PURE__ */ jsx(
|
|
139
167
|
StyledListItemButton,
|
|
@@ -143,7 +171,7 @@ const Li = React.forwardRef(
|
|
|
143
171
|
direction,
|
|
144
172
|
gap,
|
|
145
173
|
wrap,
|
|
146
|
-
children
|
|
174
|
+
children: inlineChildren
|
|
147
175
|
}
|
|
148
176
|
) : /* @__PURE__ */ jsx(
|
|
149
177
|
StyledSpan,
|
|
@@ -154,9 +182,10 @@ const Li = React.forwardRef(
|
|
|
154
182
|
gap,
|
|
155
183
|
wrap,
|
|
156
184
|
css: { flexGrow: 1 },
|
|
157
|
-
children
|
|
185
|
+
children: inlineChildren
|
|
158
186
|
}
|
|
159
187
|
),
|
|
188
|
+
nestedLists,
|
|
160
189
|
!!controls && /* @__PURE__ */ jsx(ControlsWrapper, { children: controls })
|
|
161
190
|
] });
|
|
162
191
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.js","sources":["../../../components/List/List.tsx"],"sourcesContent":["import React, { ComponentProps, createContext, ReactNode, useContext, useMemo } from 'react';\n\nimport { styled, VariantProps } from '../../stitches.config';\nimport { BUTTON_BASE_STYLES } from '../Button';\nimport { elevationVariants } from '../Elevation';\nimport { Flex } from '../Flex';\n\nconst LIST_ITEM_CONTENT_STYLES = {\n bc: 'transparent',\n c: 'inherit',\n borderRadius: 'inherit',\n fontFamily: '$rubik',\n fontSize: '$3',\n fontVariantNumeric: 'tabular-nums',\n};\n\nconst StyledSpan = styled('span', Flex, {\n // APPLY BUTTON STYLES\n ...LIST_ITEM_CONTENT_STYLES,\n // CUSTOM\n p: '$1',\n gap: '$1',\n});\n\nconst StyledListItemButton = styled('button', Flex, {\n ...BUTTON_BASE_STYLES,\n ...LIST_ITEM_CONTENT_STYLES,\n outline: 'none',\n\n // CUSTOM\n flexGrow: 1,\n p: '$2',\n '&::before': {\n borderRadius: 'inherit',\n boxSizing: 'border-box',\n content: '\"\"',\n position: 'absolute',\n inset: 0,\n },\n '&::after': {\n borderRadius: 'inherit',\n boxSizing: 'border-box',\n content: '\"\"',\n position: 'absolute',\n inset: 0,\n },\n '&:focus, &:focus-visible': {\n boxShadow: 'inset 0 0 0 2px $colors$listItemFocusBorder',\n },\n\n '@hover': {\n '&:hover': {\n cursor: 'pointer',\n '&::before': {\n backgroundColor: '$listItemHoverBg',\n },\n '&::after': {\n backgroundColor: '$primary',\n opacity: 0.05,\n },\n },\n },\n '&:active': {\n '&::before': {\n backgroundColor: '$listItemActiveBg',\n },\n '&::after': {\n backgroundColor: '$primary',\n opacity: 0.05,\n },\n },\n});\n\nconst StyledLi = styled('li', {\n m: '$2',\n outline: 'none',\n position: 'relative',\n '&:focus-within': {\n boxShadow: 'none',\n },\n variants: {\n elevation: elevationVariants,\n },\n defaultVariants: {\n elevation: '0',\n },\n});\n\nconst StyledUl = styled('ul', {\n m: '0 0 0 8px',\n p: 0,\n color: '$textDefault',\n\n '&:has(li > span > input[type=\"checkbox\"])': {\n m: 0,\n listStyle: 'none',\n li: {\n marginLeft: 0,\n span: {\n input: {\n margin: '0 3px 0 0',\n },\n },\n },\n },\n});\n\nconst StyledOl = styled('ol', {\n m: '0 0 0 8px',\n p: 0,\n color: '$textDefault',\n\n '> li::marker': {\n fontSize: '$3',\n fontFamily: '$rubik',\n },\n});\n\nconst ListContext = createContext({\n interactive: false,\n});\n\nexport interface ListProps extends ComponentProps<typeof StyledUl>, VariantProps<typeof StyledUl> {\n interactive?: boolean;\n}\nexport const Ul = React.forwardRef<React.ElementRef<typeof StyledUl>, ListProps>(\n ({ interactive, ...props }, forwardedRef) => {\n const contextValue = useMemo(() => ({
|
|
1
|
+
{"version":3,"file":"List.js","sources":["../../../components/List/List.tsx"],"sourcesContent":["import React, { ComponentProps, createContext, ReactNode, useContext, useMemo } from 'react';\n\nimport { styled, VariantProps } from '../../stitches.config';\nimport { BUTTON_BASE_STYLES } from '../Button';\nimport { elevationVariants } from '../Elevation';\nimport { Flex } from '../Flex';\n\nconst LIST_ITEM_CONTENT_STYLES = {\n bc: 'transparent',\n c: 'inherit',\n borderRadius: 'inherit',\n fontFamily: '$rubik',\n fontSize: '$3',\n fontVariantNumeric: 'tabular-nums',\n};\n\nconst StyledSpan = styled('span', Flex, {\n // APPLY BUTTON STYLES\n ...LIST_ITEM_CONTENT_STYLES,\n // CUSTOM\n p: '$1',\n gap: '$1',\n});\n\nconst StyledListItemButton = styled('button', Flex, {\n ...BUTTON_BASE_STYLES,\n ...LIST_ITEM_CONTENT_STYLES,\n outline: 'none',\n\n // CUSTOM\n flexGrow: 1,\n width: '100%',\n p: '$2',\n position: 'relative',\n '&::before': {\n borderRadius: 'inherit',\n boxSizing: 'border-box',\n content: '\"\"',\n position: 'absolute',\n inset: 0,\n },\n '&::after': {\n borderRadius: 'inherit',\n boxSizing: 'border-box',\n content: '\"\"',\n position: 'absolute',\n inset: 0,\n },\n '&:focus, &:focus-visible': {\n boxShadow: 'inset 0 0 0 2px $colors$listItemFocusBorder',\n },\n\n '@hover': {\n '&:hover': {\n cursor: 'pointer',\n '&::before': {\n backgroundColor: '$listItemHoverBg',\n },\n '&::after': {\n backgroundColor: '$primary',\n opacity: 0.05,\n },\n },\n },\n '&:active': {\n '&::before': {\n backgroundColor: '$listItemActiveBg',\n },\n '&::after': {\n backgroundColor: '$primary',\n opacity: 0.05,\n },\n },\n});\n\nconst StyledLi = styled('li', {\n m: '$2',\n outline: 'none',\n position: 'relative',\n '&:focus-within': {\n boxShadow: 'none',\n },\n variants: {\n elevation: elevationVariants,\n },\n defaultVariants: {\n elevation: '0',\n },\n});\n\nconst StyledUl = styled('ul', {\n m: '0 0 0 8px',\n p: 0,\n color: '$textDefault',\n\n '&:has(> li > span > input[type=\"checkbox\"])': {\n m: 0,\n listStyle: 'none',\n '> li': {\n marginLeft: 0,\n '> span': {\n input: {\n margin: '0 3px 0 0',\n },\n },\n },\n },\n // Restore left-margin indentation when a nested checkbox list is inside a li\n 'li > &:has(> li > span > input[type=\"checkbox\"])': {\n marginLeft: '$2',\n '> li': {\n marginLeft: '$2',\n },\n },\n});\n\nconst StyledOl = styled('ol', {\n m: '0 0 0 8px',\n p: 0,\n color: '$textDefault',\n\n '> li::marker': {\n fontSize: '$3',\n fontFamily: '$rubik',\n },\n});\n\nconst ListContext = createContext({\n interactive: false,\n});\n\nexport interface ListProps extends ComponentProps<typeof StyledUl>, VariantProps<typeof StyledUl> {\n interactive?: boolean;\n}\nexport const Ul = React.forwardRef<React.ElementRef<typeof StyledUl>, ListProps>(\n ({ interactive, ...props }, forwardedRef) => {\n const parentContext = useContext(ListContext);\n const contextValue = useMemo(\n () => ({\n interactive: interactive !== undefined ? !!interactive : parentContext.interactive,\n }),\n [interactive, parentContext.interactive],\n );\n\n return (\n <ListContext.Provider value={contextValue}>\n <StyledUl role=\"list\" ref={forwardedRef} {...props} />\n </ListContext.Provider>\n );\n },\n);\n\nexport interface OrderedListProps\n extends ComponentProps<typeof StyledOl>,\n VariantProps<typeof StyledOl> {\n interactive?: boolean;\n}\n\nexport const Ol = React.forwardRef<React.ElementRef<typeof StyledOl>, OrderedListProps>(\n ({ interactive, ...props }, forwardedRef) => {\n const parentContext = useContext(ListContext);\n const contextValue = useMemo(\n () => ({\n interactive: interactive !== undefined ? !!interactive : parentContext.interactive,\n }),\n [interactive, parentContext.interactive],\n );\n\n return (\n <ListContext.Provider value={contextValue}>\n <StyledOl role=\"list\" ref={forwardedRef} {...props} />\n </ListContext.Provider>\n );\n },\n);\n\nconst ControlsWrapper = styled('div', {\n position: 'absolute',\n top: 0,\n right: '$2',\n zIndex: 1,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'visible',\n});\n\nexport interface ListItemProps\n extends ComponentProps<typeof StyledLi>,\n VariantProps<typeof StyledLi>,\n VariantProps<typeof Flex> {\n controls?: ReactNode;\n}\nexport const Li = React.forwardRef<React.ElementRef<typeof StyledLi>, ListItemProps>(\n ({ children, controls, align, justify, direction, gap, wrap, ...props }, forwardedRef) => {\n const { interactive } = useContext(ListContext);\n\n const childArray = React.Children.toArray(children);\n const nestedLists = childArray.filter(\n (child) => React.isValidElement(child) && (child.type === Ul || child.type === Ol),\n );\n const inlineChildren = childArray.filter(\n (child) => !(React.isValidElement(child) && (child.type === Ul || child.type === Ol)),\n );\n\n return (\n <StyledLi {...props} ref={forwardedRef}>\n {interactive ? (\n <StyledListItemButton\n align={align}\n justify={justify}\n direction={direction}\n gap={gap}\n wrap={wrap}\n >\n {inlineChildren}\n </StyledListItemButton>\n ) : (\n <StyledSpan\n align={align || 'center'}\n justify={justify}\n direction={direction}\n gap={gap}\n wrap={wrap}\n css={{ flexGrow: 1 }}\n >\n {inlineChildren}\n </StyledSpan>\n )}\n {nestedLists}\n {!!controls && <ControlsWrapper>{controls}</ControlsWrapper>}\n </StyledLi>\n );\n },\n);\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
;/* empty css */
|
|
4
|
-
const
|
|
5
|
-
var paragraphRecipe =
|
|
4
|
+
const createRuntimeFn = require("@vanilla-extract/recipes/createRuntimeFn");
|
|
5
|
+
var paragraphRecipe = createRuntimeFn.createRuntimeFn({ defaultClassName: "ssoibc1 ssoibc0", variantClassNames: { size: { "1": "ssoibc2", "2": "ssoibc3" } }, defaultVariants: { size: "1" }, compoundVariants: [] });
|
|
6
6
|
exports.paragraphRecipe = paragraphRecipe;
|
|
7
7
|
//# sourceMappingURL=Paragraph.vanilla.css.cjs.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* empty css */
|
|
2
|
-
import {
|
|
2
|
+
import { createRuntimeFn } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
3
3
|
var paragraphRecipe = createRuntimeFn({ defaultClassName: "ssoibc1 ssoibc0", variantClassNames: { size: { "1": "ssoibc2", "2": "ssoibc3" } }, defaultVariants: { size: "1" }, compoundVariants: [] });
|
|
4
4
|
export {
|
|
5
5
|
paragraphRecipe
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
;/* empty css */
|
|
4
|
-
const
|
|
5
|
-
var skeletonRecipe =
|
|
4
|
+
const createRuntimeFn = require("@vanilla-extract/recipes/createRuntimeFn");
|
|
5
|
+
var skeletonRecipe = createRuntimeFn.createRuntimeFn({ defaultClassName: "_12qsecm2 _12qsecm1", variantClassNames: { variant: { square: "_12qsecm3", circle: "_12qsecm4", badge: "_12qsecm5", button: "_12qsecm6", text: "_12qsecm7" } }, defaultVariants: { variant: "text" }, compoundVariants: [] });
|
|
6
6
|
exports.skeletonRecipe = skeletonRecipe;
|
|
7
7
|
//# sourceMappingURL=Skeleton.vanilla.css.cjs.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* empty css */
|
|
2
|
-
import {
|
|
2
|
+
import { createRuntimeFn } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
3
3
|
var skeletonRecipe = createRuntimeFn({ defaultClassName: "_12qsecm2 _12qsecm1", variantClassNames: { variant: { square: "_12qsecm3", circle: "_12qsecm4", badge: "_12qsecm5", button: "_12qsecm6", text: "_12qsecm7" } }, defaultVariants: { variant: "text" }, compoundVariants: [] });
|
|
4
4
|
export {
|
|
5
5
|
skeletonRecipe
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
;/* empty css */
|
|
4
|
-
const
|
|
5
|
-
var styledTextareaRecipe =
|
|
6
|
-
var textareaWrapperRecipe =
|
|
4
|
+
const createRuntimeFn = require("@vanilla-extract/recipes/createRuntimeFn");
|
|
5
|
+
var styledTextareaRecipe = createRuntimeFn.createRuntimeFn({ defaultClassName: "q2igaw1 q2igaw0", variantClassNames: { variant: { ghost: "q2igaw2" }, state: { invalid: "q2igaw3" }, cursor: { "default": "q2igaw4", text: "q2igaw5" }, resize: { none: "q2igaw6", both: "q2igaw7", vertical: "q2igaw8", horizontal: "q2igaw9" }, endAdornment: { true: "q2igawa" } }, defaultVariants: { cursor: "default", resize: "both" }, compoundVariants: [[{ variant: "ghost", state: "invalid" }, "q2igawb"]] });
|
|
6
|
+
var textareaWrapperRecipe = createRuntimeFn.createRuntimeFn({ defaultClassName: "q2igawd q2igawc", variantClassNames: { disabled: { true: "q2igawe" }, state: { invalid: "q2igawf" } }, defaultVariants: { disabled: false }, compoundVariants: [] });
|
|
7
7
|
var adornmentWrapperEnd = "q2igawg";
|
|
8
8
|
exports.adornmentWrapperEnd = adornmentWrapperEnd;
|
|
9
9
|
exports.styledTextareaRecipe = styledTextareaRecipe;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* empty css */
|
|
2
|
-
import {
|
|
2
|
+
import { createRuntimeFn } from "@vanilla-extract/recipes/createRuntimeFn";
|
|
3
3
|
var styledTextareaRecipe = createRuntimeFn({ defaultClassName: "q2igaw1 q2igaw0", variantClassNames: { variant: { ghost: "q2igaw2" }, state: { invalid: "q2igaw3" }, cursor: { "default": "q2igaw4", text: "q2igaw5" }, resize: { none: "q2igaw6", both: "q2igaw7", vertical: "q2igaw8", horizontal: "q2igaw9" }, endAdornment: { true: "q2igawa" } }, defaultVariants: { cursor: "default", resize: "both" }, compoundVariants: [[{ variant: "ghost", state: "invalid" }, "q2igawb"]] });
|
|
4
4
|
var textareaWrapperRecipe = createRuntimeFn({ defaultClassName: "q2igawd q2igawc", variantClassNames: { disabled: { true: "q2igawe" }, state: { invalid: "q2igawf" } }, defaultVariants: { disabled: false }, compoundVariants: [] });
|
|
5
5
|
var adornmentWrapperEnd = "q2igawg";
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const React = require("react");
|
|
5
|
+
function readDocumentTheme() {
|
|
6
|
+
const el = document.documentElement;
|
|
7
|
+
if (el.classList.contains("dark")) return "dark";
|
|
8
|
+
if (el.classList.contains("light")) return "light";
|
|
9
|
+
const attr = el.dataset.theme;
|
|
10
|
+
if (attr === "dark" || attr === "light") return attr;
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
const ColorSchemeContext = React.createContext("light");
|
|
14
|
+
function ColorSchemeProvider({ children }) {
|
|
15
|
+
const [scheme, setScheme] = React.useState(() => {
|
|
16
|
+
if (typeof window === "undefined") return "light";
|
|
17
|
+
return readDocumentTheme() ?? (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
|
|
18
|
+
});
|
|
19
|
+
React.useEffect(() => {
|
|
20
|
+
const observer = new MutationObserver(() => {
|
|
21
|
+
const docTheme = readDocumentTheme();
|
|
22
|
+
if (docTheme) setScheme(docTheme);
|
|
23
|
+
});
|
|
24
|
+
observer.observe(document.documentElement, {
|
|
25
|
+
attributes: true,
|
|
26
|
+
attributeFilter: ["class", "data-theme"]
|
|
27
|
+
});
|
|
28
|
+
const mq = window.matchMedia("(prefers-color-scheme: dark)");
|
|
29
|
+
const mqHandler = (e) => {
|
|
30
|
+
if (!readDocumentTheme()) setScheme(e.matches ? "dark" : "light");
|
|
31
|
+
};
|
|
32
|
+
mq.addEventListener("change", mqHandler);
|
|
33
|
+
return () => {
|
|
34
|
+
observer.disconnect();
|
|
35
|
+
mq.removeEventListener("change", mqHandler);
|
|
36
|
+
};
|
|
37
|
+
}, []);
|
|
38
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ColorSchemeContext.Provider, { value: scheme, children });
|
|
39
|
+
}
|
|
40
|
+
function useColorScheme() {
|
|
41
|
+
return React.useContext(ColorSchemeContext);
|
|
42
|
+
}
|
|
43
|
+
exports.ColorSchemeProvider = ColorSchemeProvider;
|
|
44
|
+
exports.useColorScheme = useColorScheme;
|
|
45
|
+
//# sourceMappingURL=colorSchemeContext.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colorSchemeContext.cjs","sources":["../../components/colorSchemeContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useEffect, useState } from 'react';\n\nexport type ColorScheme = 'light' | 'dark';\n\nfunction readDocumentTheme(): ColorScheme | null {\n const el = document.documentElement;\n if (el.classList.contains('dark')) return 'dark';\n if (el.classList.contains('light')) return 'light';\n const attr = el.dataset.theme;\n if (attr === 'dark' || attr === 'light') return attr;\n return null;\n}\n\nconst ColorSchemeContext = createContext<ColorScheme>('light');\n\nexport function ColorSchemeProvider({ children }: { children: React.ReactNode }) {\n const [scheme, setScheme] = useState<ColorScheme>(() => {\n if (typeof window === 'undefined') return 'light';\n return (\n readDocumentTheme() ??\n (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\n );\n });\n\n useEffect(() => {\n const observer = new MutationObserver(() => {\n const docTheme = readDocumentTheme();\n if (docTheme) setScheme(docTheme);\n });\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme'],\n });\n\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n const mqHandler = (e: MediaQueryListEvent) => {\n if (!readDocumentTheme()) setScheme(e.matches ? 'dark' : 'light');\n };\n mq.addEventListener('change', mqHandler);\n\n return () => {\n observer.disconnect();\n mq.removeEventListener('change', mqHandler);\n };\n }, []);\n\n return <ColorSchemeContext.Provider value={scheme}>{children}</ColorSchemeContext.Provider>;\n}\n\nexport function useColorScheme(): ColorScheme {\n return useContext(ColorSchemeContext);\n}\n"],"names":["createContext","useState","useEffect","useContext"],"mappings":";;;;AAIA,SAAS,oBAAwC;AAC/C,QAAM,KAAK,SAAS;AACpB,MAAI,GAAG,UAAU,SAAS,MAAM,EAAG,QAAO;AAC1C,MAAI,GAAG,UAAU,SAAS,OAAO,EAAG,QAAO;AAC3C,QAAM,OAAO,GAAG,QAAQ;AACxB,MAAI,SAAS,UAAU,SAAS,QAAS,QAAO;AAChD,SAAO;AACT;AAEA,MAAM,qBAAqBA,MAAAA,cAA2B,OAAO;AAEtD,SAAS,oBAAoB,EAAE,YAA2C;AAC/E,QAAM,CAAC,QAAQ,SAAS,IAAIC,MAAAA,SAAsB,MAAM;AACtD,QAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,WACE,wBACC,OAAO,WAAW,8BAA8B,EAAE,UAAU,SAAS;AAAA,EAE1E,CAAC;AAEDC,QAAAA,UAAU,MAAM;AACd,UAAM,WAAW,IAAI,iBAAiB,MAAM;AAC1C,YAAM,WAAW,kBAAA;AACjB,UAAI,oBAAoB,QAAQ;AAAA,IAClC,CAAC;AACD,aAAS,QAAQ,SAAS,iBAAiB;AAAA,MACzC,YAAY;AAAA,MACZ,iBAAiB,CAAC,SAAS,YAAY;AAAA,IAAA,CACxC;AAED,UAAM,KAAK,OAAO,WAAW,8BAA8B;AAC3D,UAAM,YAAY,CAAC,MAA2B;AAC5C,UAAI,CAAC,kBAAA,aAA+B,EAAE,UAAU,SAAS,OAAO;AAAA,IAClE;AACA,OAAG,iBAAiB,UAAU,SAAS;AAEvC,WAAO,MAAM;AACX,eAAS,WAAA;AACT,SAAG,oBAAoB,UAAU,SAAS;AAAA,IAC5C;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,wCAAQ,mBAAmB,UAAnB,EAA4B,OAAO,QAAS,UAAS;AAC/D;AAEO,SAAS,iBAA8B;AAC5C,SAAOC,MAAAA,WAAW,kBAAkB;AACtC;;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, createContext, useState, useEffect } from "react";
|
|
3
|
+
function readDocumentTheme() {
|
|
4
|
+
const el = document.documentElement;
|
|
5
|
+
if (el.classList.contains("dark")) return "dark";
|
|
6
|
+
if (el.classList.contains("light")) return "light";
|
|
7
|
+
const attr = el.dataset.theme;
|
|
8
|
+
if (attr === "dark" || attr === "light") return attr;
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
const ColorSchemeContext = createContext("light");
|
|
12
|
+
function ColorSchemeProvider({ children }) {
|
|
13
|
+
const [scheme, setScheme] = useState(() => {
|
|
14
|
+
if (typeof window === "undefined") return "light";
|
|
15
|
+
return readDocumentTheme() ?? (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
|
|
16
|
+
});
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
const observer = new MutationObserver(() => {
|
|
19
|
+
const docTheme = readDocumentTheme();
|
|
20
|
+
if (docTheme) setScheme(docTheme);
|
|
21
|
+
});
|
|
22
|
+
observer.observe(document.documentElement, {
|
|
23
|
+
attributes: true,
|
|
24
|
+
attributeFilter: ["class", "data-theme"]
|
|
25
|
+
});
|
|
26
|
+
const mq = window.matchMedia("(prefers-color-scheme: dark)");
|
|
27
|
+
const mqHandler = (e) => {
|
|
28
|
+
if (!readDocumentTheme()) setScheme(e.matches ? "dark" : "light");
|
|
29
|
+
};
|
|
30
|
+
mq.addEventListener("change", mqHandler);
|
|
31
|
+
return () => {
|
|
32
|
+
observer.disconnect();
|
|
33
|
+
mq.removeEventListener("change", mqHandler);
|
|
34
|
+
};
|
|
35
|
+
}, []);
|
|
36
|
+
return /* @__PURE__ */ jsx(ColorSchemeContext.Provider, { value: scheme, children });
|
|
37
|
+
}
|
|
38
|
+
function useColorScheme() {
|
|
39
|
+
return useContext(ColorSchemeContext);
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
ColorSchemeProvider,
|
|
43
|
+
useColorScheme
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=colorSchemeContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colorSchemeContext.js","sources":["../../components/colorSchemeContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useEffect, useState } from 'react';\n\nexport type ColorScheme = 'light' | 'dark';\n\nfunction readDocumentTheme(): ColorScheme | null {\n const el = document.documentElement;\n if (el.classList.contains('dark')) return 'dark';\n if (el.classList.contains('light')) return 'light';\n const attr = el.dataset.theme;\n if (attr === 'dark' || attr === 'light') return attr;\n return null;\n}\n\nconst ColorSchemeContext = createContext<ColorScheme>('light');\n\nexport function ColorSchemeProvider({ children }: { children: React.ReactNode }) {\n const [scheme, setScheme] = useState<ColorScheme>(() => {\n if (typeof window === 'undefined') return 'light';\n return (\n readDocumentTheme() ??\n (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\n );\n });\n\n useEffect(() => {\n const observer = new MutationObserver(() => {\n const docTheme = readDocumentTheme();\n if (docTheme) setScheme(docTheme);\n });\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme'],\n });\n\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n const mqHandler = (e: MediaQueryListEvent) => {\n if (!readDocumentTheme()) setScheme(e.matches ? 'dark' : 'light');\n };\n mq.addEventListener('change', mqHandler);\n\n return () => {\n observer.disconnect();\n mq.removeEventListener('change', mqHandler);\n };\n }, []);\n\n return <ColorSchemeContext.Provider value={scheme}>{children}</ColorSchemeContext.Provider>;\n}\n\nexport function useColorScheme(): ColorScheme {\n return useContext(ColorSchemeContext);\n}\n"],"names":[],"mappings":";;AAIA,SAAS,oBAAwC;AAC/C,QAAM,KAAK,SAAS;AACpB,MAAI,GAAG,UAAU,SAAS,MAAM,EAAG,QAAO;AAC1C,MAAI,GAAG,UAAU,SAAS,OAAO,EAAG,QAAO;AAC3C,QAAM,OAAO,GAAG,QAAQ;AACxB,MAAI,SAAS,UAAU,SAAS,QAAS,QAAO;AAChD,SAAO;AACT;AAEA,MAAM,qBAAqB,cAA2B,OAAO;AAEtD,SAAS,oBAAoB,EAAE,YAA2C;AAC/E,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAsB,MAAM;AACtD,QAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,WACE,wBACC,OAAO,WAAW,8BAA8B,EAAE,UAAU,SAAS;AAAA,EAE1E,CAAC;AAED,YAAU,MAAM;AACd,UAAM,WAAW,IAAI,iBAAiB,MAAM;AAC1C,YAAM,WAAW,kBAAA;AACjB,UAAI,oBAAoB,QAAQ;AAAA,IAClC,CAAC;AACD,aAAS,QAAQ,SAAS,iBAAiB;AAAA,MACzC,YAAY;AAAA,MACZ,iBAAiB,CAAC,SAAS,YAAY;AAAA,IAAA,CACxC;AAED,UAAM,KAAK,OAAO,WAAW,8BAA8B;AAC3D,UAAM,YAAY,CAAC,MAA2B;AAC5C,UAAI,CAAC,kBAAA,aAA+B,EAAE,UAAU,SAAS,OAAO;AAAA,IAClE;AACA,OAAG,iBAAiB,UAAU,SAAS;AAEvC,WAAO,MAAM;AACX,eAAS,WAAA;AACT,SAAG,oBAAoB,UAAU,SAAS;AAAA,IAC5C;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,6BAAQ,mBAAmB,UAAnB,EAA4B,OAAO,QAAS,UAAS;AAC/D;AAEO,SAAS,iBAA8B;AAC5C,SAAO,WAAW,kBAAkB;AACtC;"}
|