@contember/react-utils 1.2.0-rc.0 → 1.2.0-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/development/context/createOptionalContextFactory.js +13 -0
- package/dist/development/context/createOptionalContextFactory.js.map +1 -0
- package/dist/development/hooks/useId.js +13 -0
- package/dist/development/hooks/useId.js.map +1 -0
- package/dist/development/index.js +20 -0
- package/dist/development/index.js.map +1 -1
- package/dist/development/theming/ColorSchemeProvider.js +18 -0
- package/dist/development/theming/ColorSchemeProvider.js.map +1 -0
- package/dist/development/theming/GlobalClassNamePrefixContext.js +6 -0
- package/dist/development/theming/GlobalClassNamePrefixContext.js.map +1 -0
- package/dist/development/theming/contexts.js +12 -0
- package/dist/development/theming/contexts.js.map +1 -0
- package/dist/development/theming/useClassName.js +17 -0
- package/dist/development/theming/useClassName.js.map +1 -0
- package/dist/development/theming/useClassNameFactory.js +20 -0
- package/dist/development/theming/useClassNameFactory.js.map +1 -0
- package/dist/development/theming/useThemedClassName.js +17 -0
- package/dist/development/theming/useThemedClassName.js.map +1 -0
- package/dist/development/theming/useThemedClassNameFactory.js +27 -0
- package/dist/development/theming/useThemedClassNameFactory.js.map +1 -0
- package/dist/production/context/createOptionalContextFactory.js +13 -0
- package/dist/production/context/createOptionalContextFactory.js.map +1 -0
- package/dist/production/hooks/useId.js +13 -0
- package/dist/production/hooks/useId.js.map +1 -0
- package/dist/production/index.js +20 -0
- package/dist/production/index.js.map +1 -1
- package/dist/production/theming/ColorSchemeProvider.js +14 -0
- package/dist/production/theming/ColorSchemeProvider.js.map +1 -0
- package/dist/production/theming/GlobalClassNamePrefixContext.js +6 -0
- package/dist/production/theming/GlobalClassNamePrefixContext.js.map +1 -0
- package/dist/production/theming/contexts.js +12 -0
- package/dist/production/theming/contexts.js.map +1 -0
- package/dist/production/theming/useClassName.js +17 -0
- package/dist/production/theming/useClassName.js.map +1 -0
- package/dist/production/theming/useClassNameFactory.js +20 -0
- package/dist/production/theming/useClassNameFactory.js.map +1 -0
- package/dist/production/theming/useThemedClassName.js +17 -0
- package/dist/production/theming/useThemedClassName.js.map +1 -0
- package/dist/production/theming/useThemedClassNameFactory.js +27 -0
- package/dist/production/theming/useThemedClassNameFactory.js.map +1 -0
- package/dist/types/context/createOptionalContextFactory.d.ts +3 -0
- package/dist/types/context/createOptionalContextFactory.d.ts.map +1 -0
- package/dist/types/context/index.d.ts +1 -0
- package/dist/types/context/index.d.ts.map +1 -1
- package/dist/types/hooks/index.d.ts +1 -0
- package/dist/types/hooks/index.d.ts.map +1 -1
- package/dist/types/hooks/useId.d.ts +10 -0
- package/dist/types/hooks/useId.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/theming/ColorSchemeProvider.d.ts +7 -0
- package/dist/types/theming/ColorSchemeProvider.d.ts.map +1 -0
- package/dist/types/theming/GlobalClassNamePrefixContext.d.ts +2 -0
- package/dist/types/theming/GlobalClassNamePrefixContext.d.ts.map +1 -0
- package/dist/types/theming/contexts.d.ts +12 -0
- package/dist/types/theming/contexts.d.ts.map +1 -0
- package/dist/types/theming/index.d.ts +8 -0
- package/dist/types/theming/index.d.ts.map +1 -0
- package/dist/types/theming/useClassName.d.ts +11 -0
- package/dist/types/theming/useClassName.d.ts.map +1 -0
- package/dist/types/theming/useClassNameFactory.d.ts +17 -0
- package/dist/types/theming/useClassNameFactory.d.ts.map +1 -0
- package/dist/types/theming/useThemedClassName.d.ts +39 -0
- package/dist/types/theming/useThemedClassName.d.ts.map +1 -0
- package/dist/types/theming/useThemedClassNameFactory.d.ts +3 -0
- package/dist/types/theming/useThemedClassNameFactory.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/context/createOptionalContextFactory.ts +13 -0
- package/src/context/index.ts +1 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useId.ts +21 -0
- package/src/index.ts +1 -0
- package/src/theming/ColorSchemeProvider.tsx +19 -0
- package/src/theming/GlobalClassNamePrefixContext.ts +3 -0
- package/src/theming/contexts.ts +18 -0
- package/src/theming/index.ts +7 -0
- package/src/theming/useClassName.ts +28 -0
- package/src/theming/useClassNameFactory.ts +47 -0
- package/src/theming/useThemedClassName.ts +54 -0
- package/src/theming/useThemedClassNameFactory.ts +41 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
function createOptionalContextFactory(name, initialValue) {
|
|
3
|
+
const OptionalContext = createContext(initialValue);
|
|
4
|
+
OptionalContext.displayName = name;
|
|
5
|
+
const useOptionalContext = () => {
|
|
6
|
+
return useContext(OptionalContext) ?? initialValue;
|
|
7
|
+
};
|
|
8
|
+
return [OptionalContext, useOptionalContext];
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
createOptionalContextFactory
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=createOptionalContextFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createOptionalContextFactory.js","sources":["../../../src/context/createOptionalContextFactory.ts"],"sourcesContent":["import type { Context } from 'react'\nimport { createContext, useContext } from 'react'\n\nexport function createOptionalContextFactory<T>(name: string, initialValue: T): [Context<T>, () => T] {\n const OptionalContext = createContext<T>(initialValue)\n OptionalContext.displayName = name\n\n const useOptionalContext = () => {\n return useContext(OptionalContext) ?? initialValue\n }\n\n return [OptionalContext, useOptionalContext]\n}\n"],"names":[],"mappings":";AAGgB,SAAA,6BAAgC,MAAc,cAAwC;AAC9F,QAAA,kBAAkB,cAAiB,YAAY;AACrD,kBAAgB,cAAc;AAE9B,QAAM,qBAAqB,MAAM;AACxB,WAAA,WAAW,eAAe,KAAK;AAAA,EAAA;AAGjC,SAAA,CAAC,iBAAiB,kBAAkB;AAC7C;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { useRef } from "react";
|
|
2
|
+
const count = { current: 360 };
|
|
3
|
+
function nextId() {
|
|
4
|
+
count.current += 1;
|
|
5
|
+
return `:${count.current.toString(36)}:`;
|
|
6
|
+
}
|
|
7
|
+
function useId() {
|
|
8
|
+
return useRef(nextId()).current;
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
useId
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=useId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useId.js","sources":["../../../src/hooks/useId.ts"],"sourcesContent":["import { useRef } from 'react'\n\nconst count = { current: 360 }\n\nfunction nextId() {\n\tcount.current += 1\n\n\treturn `:${count.current.toString(36)}:`\n}\n\n/**\n * Returns a unique ID string\n * @internal\n *\n * NOTE: This hook is a temporary solution until we stop supporting React < 18\n *\n * @returns a unique id\n */\nexport function useId() {\n\treturn useRef(nextId()).current\n}\n"],"names":[],"mappings":";AAEA,MAAM,QAAQ,EAAE,SAAS;AAEzB,SAAS,SAAS;AACjB,QAAM,WAAW;AAEjB,SAAO,IAAI,MAAM,QAAQ,SAAS,EAAE;AACrC;AAUO,SAAS,QAAQ;AAChB,SAAA,OAAO,QAAQ,EAAE;AACzB;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createNonNullableContextFactory } from "./context/createNonNullableContextFactory.js";
|
|
2
|
+
import { createOptionalContextFactory } from "./context/createOptionalContextFactory.js";
|
|
2
3
|
import { isNoopScopedConsole, noopLog, noopLogged, noopScopedConsole } from "./debug-context/Constants.js";
|
|
3
4
|
import { DebugChildren, ScopedConsoleContext, useScopedConsoleRef } from "./debug-context/Context.js";
|
|
4
5
|
import { unwrapRefValue } from "./hooks/unwrapRefValue.js";
|
|
@@ -16,6 +17,7 @@ import { useElementSize } from "./hooks/useElementSize.js";
|
|
|
16
17
|
import { useEventHandler } from "./hooks/useEventHandler.js";
|
|
17
18
|
import { useExpectSameValueReference } from "./hooks/useExpectSameValueReference.js";
|
|
18
19
|
import { useForceRender } from "./hooks/useForceRender.js";
|
|
20
|
+
import { useId } from "./hooks/useId.js";
|
|
19
21
|
import { useIsMounted } from "./hooks/useIsMounted.js";
|
|
20
22
|
import { useObjectMemo } from "./hooks/useObjectMemo.js";
|
|
21
23
|
import { useOnElementMutation } from "./hooks/useOnElementMutation.js";
|
|
@@ -33,11 +35,23 @@ import { noop } from "./referentiallyStable/noop.js";
|
|
|
33
35
|
import { returnFalse } from "./referentiallyStable/returnFalse.js";
|
|
34
36
|
import { returnTrue } from "./referentiallyStable/returnTrue.js";
|
|
35
37
|
import { useReferentiallyStableCallback } from "./referentiallyStable/useReferentiallyStableCallback.js";
|
|
38
|
+
import { ColorSchemeProvider } from "./theming/ColorSchemeProvider.js";
|
|
39
|
+
import { GlobalClassNamePrefixContext } from "./theming/GlobalClassNamePrefixContext.js";
|
|
40
|
+
import { ColorSchemeContext, DEFAULT_COLOR_SCHEME, useColorScheme } from "./theming/contexts.js";
|
|
41
|
+
import { useClassName } from "./theming/useClassName.js";
|
|
42
|
+
import { useClassNameFactory } from "./theming/useClassNameFactory.js";
|
|
43
|
+
import { useThemedClassName } from "./theming/useThemedClassName.js";
|
|
44
|
+
import { useThemedClassNameFactory } from "./theming/useThemedClassNameFactory.js";
|
|
36
45
|
export {
|
|
46
|
+
ColorSchemeContext,
|
|
47
|
+
ColorSchemeProvider,
|
|
37
48
|
ContainerWidthContext,
|
|
49
|
+
DEFAULT_COLOR_SCHEME,
|
|
38
50
|
DebugChildren,
|
|
51
|
+
GlobalClassNamePrefixContext,
|
|
39
52
|
ScopedConsoleContext,
|
|
40
53
|
createNonNullableContextFactory,
|
|
54
|
+
createOptionalContextFactory,
|
|
41
55
|
emptyArray,
|
|
42
56
|
emptyObject,
|
|
43
57
|
identityFunction,
|
|
@@ -52,6 +66,9 @@ export {
|
|
|
52
66
|
useAbortController,
|
|
53
67
|
useAddClassNameDuringResize,
|
|
54
68
|
useArrayMapMemo,
|
|
69
|
+
useClassName,
|
|
70
|
+
useClassNameFactory,
|
|
71
|
+
useColorScheme,
|
|
55
72
|
useComposeRef,
|
|
56
73
|
useConstantLengthInvariant,
|
|
57
74
|
useConstantValueInvariant,
|
|
@@ -63,6 +80,7 @@ export {
|
|
|
63
80
|
useEventHandler,
|
|
64
81
|
useExpectSameValueReference,
|
|
65
82
|
useForceRender,
|
|
83
|
+
useId,
|
|
66
84
|
useIsMounted,
|
|
67
85
|
useObjectMemo,
|
|
68
86
|
useOnElementMutation,
|
|
@@ -73,6 +91,8 @@ export {
|
|
|
73
91
|
useScopedConsoleRef,
|
|
74
92
|
useScrollOffsets,
|
|
75
93
|
useSessionStorageState,
|
|
94
|
+
useThemedClassName,
|
|
95
|
+
useThemedClassNameFactory,
|
|
76
96
|
useUpdatedRef,
|
|
77
97
|
useWindowSize
|
|
78
98
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsxDEV } from "react/jsx-dev-runtime";
|
|
2
|
+
import { memo } from "react";
|
|
3
|
+
import { useColorScheme, ColorSchemeContext } from "./contexts.js";
|
|
4
|
+
const ColorSchemeProvider = memo(
|
|
5
|
+
({ children, scheme }) => {
|
|
6
|
+
const inheritedColorScheme = useColorScheme();
|
|
7
|
+
return /* @__PURE__ */ jsxDEV(ColorSchemeContext.Provider, { value: scheme ?? inheritedColorScheme, children }, void 0, false, {
|
|
8
|
+
fileName: "/__w/interface/interface/packages/react-utils/src/theming/ColorSchemeProvider.tsx",
|
|
9
|
+
lineNumber: 15,
|
|
10
|
+
columnNumber: 4
|
|
11
|
+
}, globalThis);
|
|
12
|
+
}
|
|
13
|
+
);
|
|
14
|
+
ColorSchemeProvider.displayName = "Interface.ColorSchemeProvider";
|
|
15
|
+
export {
|
|
16
|
+
ColorSchemeProvider
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=ColorSchemeProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorSchemeProvider.js","sources":["../../../src/theming/ColorSchemeProvider.tsx"],"sourcesContent":["import { KebabCase } from '@contember/utilities'\nimport { memo } from 'react'\nimport { ColorSchemeContext, useColorScheme } from './contexts'\n\nexport type ColorSchemeProviderProps<T extends KebabCase<string>> = {\n\tchildren: React.ReactNode\n\tscheme?: T\n}\n\nexport const ColorSchemeProvider = memo(\n\t<T extends KebabCase<string>>({ children, scheme }: ColorSchemeProviderProps<T>) => {\n\t\tconst inheritedColorScheme = useColorScheme()\n\n\t\treturn (\n\t\t\t<ColorSchemeContext.Provider value={scheme ?? inheritedColorScheme}>{children}</ColorSchemeContext.Provider>\n\t\t)\n\t},\n)\nColorSchemeProvider.displayName = 'Interface.ColorSchemeProvider'\n"],"names":["this"],"mappings":";;;AASO,MAAM,sBAAsB;AAAA,EAClC,CAA8B,EAAE,UAAU,aAA0C;AACnF,UAAM,uBAAuB;AAE7B,kCACE,mBAAmB,UAAnB,EAA4B,OAAO,UAAU,sBAAuB,SAArE,GAAA,QAAA,OAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAA8E,GAAAA,UAAA;AAAA,EAEhF;AACD;AACA,oBAAoB,cAAc;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalClassNamePrefixContext.js","sources":["../../../src/theming/GlobalClassNamePrefixContext.ts"],"sourcesContent":["import { createContext } from 'react'\n\nexport const GlobalClassNamePrefixContext = createContext<string>('cui-')\n"],"names":[],"mappings":";AAEa,MAAA,+BAA+B,cAAsB,MAAM;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createOptionalContextFactory } from "../context/createOptionalContextFactory.js";
|
|
2
|
+
const DEFAULT_COLOR_SCHEME = "system";
|
|
3
|
+
const [ColorSchemeContext, useColorScheme] = createOptionalContextFactory(
|
|
4
|
+
"Interface.ColorScheme",
|
|
5
|
+
DEFAULT_COLOR_SCHEME
|
|
6
|
+
);
|
|
7
|
+
export {
|
|
8
|
+
ColorSchemeContext,
|
|
9
|
+
DEFAULT_COLOR_SCHEME,
|
|
10
|
+
useColorScheme
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=contexts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contexts.js","sources":["../../../src/theming/contexts.ts"],"sourcesContent":["import { createOptionalContextFactory } from '../context'\n\nexport const DEFAULT_COLOR_SCHEME = 'system'\n\n\n/**\n * @group UI\n *\n * @description\n * Provides the current color scheme, possible values are `'light'`, `'dark'` or `'system'`.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme\n *\n */\nexport const [ColorSchemeContext, useColorScheme] = createOptionalContextFactory<string>(\n\t'Interface.ColorScheme',\n\tDEFAULT_COLOR_SCHEME,\n)\n"],"names":[],"mappings":";AAEO,MAAM,uBAAuB;AAYvB,MAAA,CAAC,oBAAoB,cAAc,IAAI;AAAA,EACnD;AAAA,EACA;AACD;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { flatClassNameList, deduplicateClassName } from "@contember/utilities";
|
|
2
|
+
import { useContext } from "react";
|
|
3
|
+
import { GlobalClassNamePrefixContext } from "./GlobalClassNamePrefixContext.js";
|
|
4
|
+
function useClassName(componentClassName, additionalClassName = null, prefixOverride) {
|
|
5
|
+
const contextPrefix = useContext(GlobalClassNamePrefixContext);
|
|
6
|
+
const classNamePrefix = prefixOverride === null || prefixOverride === "" ? "" : prefixOverride || contextPrefix;
|
|
7
|
+
const componentClassNameList = flatClassNameList(componentClassName).map(
|
|
8
|
+
(componentClassName2) => `${classNamePrefix}${componentClassName2}`
|
|
9
|
+
);
|
|
10
|
+
return deduplicateClassName(componentClassNameList.concat(
|
|
11
|
+
flatClassNameList(additionalClassName)
|
|
12
|
+
)).join(" ");
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
useClassName
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=useClassName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useClassName.js","sources":["../../../src/theming/useClassName.ts"],"sourcesContent":["import { NestedClassName, deduplicateClassName, flatClassNameList } from '@contember/utilities'\nimport { useContext } from 'react'\nimport { GlobalClassNamePrefixContext } from './GlobalClassNamePrefixContext'\n\n/**\n * Hook for component class name accepting outer class name\n *\n * @param componentClassName - Component class name\n * @param additionalClassName - Additional class name\n * @param prefixOverride - Context component prefix override\n * @returns Prefixed component class name.\n */\nexport function useClassName (\n\tcomponentClassName: NestedClassName,\n\tadditionalClassName: NestedClassName = null,\n\tprefixOverride?: string | null | undefined,\n) {\n\tconst contextPrefix = useContext(GlobalClassNamePrefixContext)\n\tconst classNamePrefix: string = prefixOverride === null || prefixOverride === '' ? '' : prefixOverride || contextPrefix\n\n\tconst componentClassNameList: string[] = flatClassNameList(componentClassName).map(\n\t\tcomponentClassName => `${classNamePrefix}${componentClassName}`,\n\t)\n\n\treturn deduplicateClassName(componentClassNameList.concat(\n\t\tflatClassNameList(additionalClassName),\n\t)).join(' ')\n}\n"],"names":["componentClassName"],"mappings":";;;AAYO,SAAS,aACf,oBACA,sBAAuC,MACvC,gBACC;AACK,QAAA,gBAAgB,WAAW,4BAA4B;AAC7D,QAAM,kBAA0B,mBAAmB,QAAQ,mBAAmB,KAAK,KAAK,kBAAkB;AAEpG,QAAA,yBAAmC,kBAAkB,kBAAkB,EAAE;AAAA,IAC9E,CAAAA,wBAAsB,GAAG,kBAAkBA;AAAAA,EAAA;AAG5C,SAAO,qBAAqB,uBAAuB;AAAA,IAClD,kBAAkB,mBAAmB;AAAA,EAAA,CACrC,EAAE,KAAK,GAAG;AACZ;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { flatClassNameList, deduplicateClassName } from "@contember/utilities";
|
|
2
|
+
import { useContext } from "react";
|
|
3
|
+
import { GlobalClassNamePrefixContext } from "./GlobalClassNamePrefixContext.js";
|
|
4
|
+
function useClassNameFactory(componentClassName, glue = "-", prefixOverride) {
|
|
5
|
+
const contextPrefix = useContext(GlobalClassNamePrefixContext);
|
|
6
|
+
const classNamePrefix = prefixOverride === null || prefixOverride === "" ? "" : prefixOverride || contextPrefix;
|
|
7
|
+
const componentClassNameList = flatClassNameList(componentClassName).map(
|
|
8
|
+
(componentClassName2) => `${classNamePrefix}${componentClassName2}`
|
|
9
|
+
);
|
|
10
|
+
return function componentClassNameFor(suffix = null, additionalClassName = null) {
|
|
11
|
+
const classNameSuffix = suffix ?? "";
|
|
12
|
+
return deduplicateClassName((classNameSuffix ? classNameSuffix.match(/^[a-zA-Z0-9]/) ? componentClassNameList.map((componentClassName2) => `${componentClassName2}${glue}${classNameSuffix}`) : componentClassNameList.map((componentClassName2) => `${componentClassName2}${classNameSuffix}`) : componentClassNameList).concat(
|
|
13
|
+
flatClassNameList(additionalClassName)
|
|
14
|
+
)).join(" ");
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
useClassNameFactory
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=useClassNameFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useClassNameFactory.js","sources":["../../../src/theming/useClassNameFactory.ts"],"sourcesContent":["import { NestedClassName, deduplicateClassName, flatClassNameList } from '@contember/utilities'\nimport { useContext } from 'react'\nimport { GlobalClassNamePrefixContext } from './GlobalClassNamePrefixContext'\n\n/**\n * Hook for component class name accepting outer class name\n *\n * Returns a reusable function almost that is handy for components\n * with many sub-component parts that should inherit the root component\n * name.\n *\n * Also, product of the factory is a function that can be used outside of rules of hooks.\n *\n * @param componentClassName - Component class name\n * @param glue - String to use to glue component and sub-component suffix\n * @param prefixOverride - Context component prefix override\n * @returns\n */\nexport function useClassNameFactory(\n\tcomponentClassName: NestedClassName,\n\tglue: string | null = '-',\n\tprefixOverride?: string | null | undefined,\n) {\n\tconst contextPrefix = useContext(GlobalClassNamePrefixContext)\n\tconst classNamePrefix: string = prefixOverride === null || prefixOverride === '' ? '' : prefixOverride || contextPrefix\n\n\tconst componentClassNameList: string[] = flatClassNameList(componentClassName).map(\n\t\tcomponentClassName => `${classNamePrefix}${componentClassName}`,\n\t)\n\n\treturn function componentClassNameFor(\n\t\tsuffix: string | null | undefined = null,\n\t\tadditionalClassName: NestedClassName = null,\n\t): string {\n\t\tconst classNameSuffix: string = suffix ?? ''\n\n\t\treturn deduplicateClassName((classNameSuffix\n\t\t\t? (classNameSuffix.match(/^[a-zA-Z0-9]/)\n\t\t\t\t? componentClassNameList.map(componentClassName => `${componentClassName}${glue}${classNameSuffix}`)\n\t\t\t\t: componentClassNameList.map(componentClassName => `${componentClassName}${classNameSuffix}`)\n\t\t\t)\n\t\t\t: componentClassNameList\n\t\t).concat(\n\t\t\tflatClassNameList(additionalClassName),\n\t\t)).join(' ')\n\t}\n}\n"],"names":["componentClassName"],"mappings":";;;AAkBO,SAAS,oBACf,oBACA,OAAsB,KACtB,gBACC;AACK,QAAA,gBAAgB,WAAW,4BAA4B;AAC7D,QAAM,kBAA0B,mBAAmB,QAAQ,mBAAmB,KAAK,KAAK,kBAAkB;AAEpG,QAAA,yBAAmC,kBAAkB,kBAAkB,EAAE;AAAA,IAC9E,CAAAA,wBAAsB,GAAG,kBAAkBA;AAAAA,EAAA;AAG5C,SAAO,SAAS,sBACf,SAAoC,MACpC,sBAAuC,MAC9B;AACT,UAAM,kBAA0B,UAAU;AAEnC,WAAA,sBAAsB,kBACzB,gBAAgB,MAAM,cAAc,IACpC,uBAAuB,IAAI,CAAAA,wBAAsB,GAAGA,sBAAqB,OAAO,iBAAiB,IACjG,uBAAuB,IAAI,CAAAA,wBAAsB,GAAGA,sBAAqB,iBAAiB,IAE3F,wBACD;AAAA,MACD,kBAAkB,mBAAmB;AAAA,IAAA,CACrC,EAAE,KAAK,GAAG;AAAA,EAAA;AAEb;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { filterThemedClassName, colorSchemeClassName } from "@contember/utilities";
|
|
2
|
+
import { useColorScheme } from "./contexts.js";
|
|
3
|
+
import { useClassName } from "./useClassName.js";
|
|
4
|
+
function useThemedClassName(componentClassName, additionalClassName, prefixOverride) {
|
|
5
|
+
return useClassName(
|
|
6
|
+
componentClassName,
|
|
7
|
+
filterThemedClassName(
|
|
8
|
+
additionalClassName,
|
|
9
|
+
colorSchemeClassName(useColorScheme())
|
|
10
|
+
),
|
|
11
|
+
prefixOverride
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
useThemedClassName
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=useThemedClassName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useThemedClassName.js","sources":["../../../src/theming/useThemedClassName.ts"],"sourcesContent":["import { NestedClassName, colorSchemeClassName, filterThemedClassName } from '@contember/utilities'\nimport { useColorScheme } from './contexts'\nimport { useClassName } from './useClassName'\n\n/**\n * Hook for component class name accepting outer class name with theme-* and scheme-* class manes\n *\n * It looks for theme CSS classes in the given class name, deduplicates them and returns final theme class name with scheme CSS class set\n * @internal\n *\n * @param componentClassName - Component class name\n * @param additionalClassName - Additional class name\n * @param prefixOverride - Context component prefix override\n * @returns string\n * @see useColorScheme\n *\n * @example\n * ```tsx\n * function Button({ className }: { className?: string | string[] }) {\n * \t const [contentThemeClassName, controlsThemeClassName] = useThemedClassName(className)\n *\n * \t return (\n * \t\t <div className={contentThemeClassName}>\n * \t\t\t <button className={controlsThemeClassName}>Click me</button>\n * \t\t </div>\n * \t )\n * }\n *\n * function App() {\n * \t return (\n * \t\t <Button className=\"theme-default theme-danger:hover\" />\n * \t )\n * }\n *\n * // renders:\n * // <div class=\"scheme-system theme-default-content theme-danger-content:hover\">\n * // \t<button class=\"scheme-system theme-default-controls theme-danger-controls:hover\">Click me</button>\n * // </div>\n * ```\n */\nexport function useThemedClassName(\n\tcomponentClassName: NestedClassName,\n\tadditionalClassName: NestedClassName,\n\tprefixOverride?: string | null | undefined,\n): string {\n\treturn useClassName(\n\t\tcomponentClassName,\n\t\tfilterThemedClassName(\n\t\t\tadditionalClassName,\n\t\t\tcolorSchemeClassName(useColorScheme()),\n\t\t),\n\t\tprefixOverride,\n\t)\n}\n"],"names":[],"mappings":";;;AAwCgB,SAAA,mBACf,oBACA,qBACA,gBACS;AACF,SAAA;AAAA,IACN;AAAA,IACA;AAAA,MACC;AAAA,MACA,qBAAqB,gBAAgB;AAAA,IACtC;AAAA,IACA;AAAA,EAAA;AAEF;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { flatClassNameList, colorSchemeClassName, deduplicateClassName, filterThemedClassName } from "@contember/utilities";
|
|
2
|
+
import { useContext } from "react";
|
|
3
|
+
import { GlobalClassNamePrefixContext } from "./GlobalClassNamePrefixContext.js";
|
|
4
|
+
import { useColorScheme } from "./contexts.js";
|
|
5
|
+
function useThemedClassNameFactory(componentClassName, glue = "-", prefixOverride) {
|
|
6
|
+
const contextPrefix = useContext(GlobalClassNamePrefixContext);
|
|
7
|
+
const classNamePrefix = prefixOverride === null || prefixOverride === "" ? "" : prefixOverride || contextPrefix;
|
|
8
|
+
const componentClassNameList = flatClassNameList(componentClassName).map(
|
|
9
|
+
(componentClassName2) => `${classNamePrefix}${componentClassName2}`
|
|
10
|
+
);
|
|
11
|
+
const colorScheme = colorSchemeClassName(useColorScheme());
|
|
12
|
+
return function componentClassNameFor(suffix = null, additionalClassName = null) {
|
|
13
|
+
const classNameSuffix = suffix ?? "";
|
|
14
|
+
return deduplicateClassName((classNameSuffix ? classNameSuffix.match(/^[a-zA-Z0-9]/) ? componentClassNameList.map((componentClassName2) => `${componentClassName2}${glue}${classNameSuffix}`) : componentClassNameList.map((componentClassName2) => `${componentClassName2}${classNameSuffix}`) : componentClassNameList).concat(
|
|
15
|
+
flatClassNameList(
|
|
16
|
+
filterThemedClassName(
|
|
17
|
+
additionalClassName,
|
|
18
|
+
colorScheme
|
|
19
|
+
)
|
|
20
|
+
)
|
|
21
|
+
)).join(" ");
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
useThemedClassNameFactory
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=useThemedClassNameFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useThemedClassNameFactory.js","sources":["../../../src/theming/useThemedClassNameFactory.ts"],"sourcesContent":["import { NestedClassName, colorSchemeClassName, deduplicateClassName, filterThemedClassName, flatClassNameList } from '@contember/utilities'\nimport { useContext } from 'react'\nimport { GlobalClassNamePrefixContext } from './GlobalClassNamePrefixContext'\nimport { useColorScheme } from './contexts'\n\nexport function useThemedClassNameFactory(\n\tcomponentClassName: NestedClassName,\n\tglue: string | null = '-',\n\tprefixOverride?: string | null | undefined,\n) {\n\tconst contextPrefix = useContext(GlobalClassNamePrefixContext)\n\tconst classNamePrefix: string = prefixOverride === null || prefixOverride === '' ? '' : prefixOverride || contextPrefix\n\n\tconst componentClassNameList: string[] = flatClassNameList(componentClassName).map(\n\t\tcomponentClassName => `${classNamePrefix}${componentClassName}`,\n\t)\n\n\tconst colorScheme = colorSchemeClassName(useColorScheme())\n\n\treturn function componentClassNameFor(\n\t\tsuffix: string | null | undefined = null,\n\t\tadditionalClassName: NestedClassName = null,\n\t): string {\n\t\tconst classNameSuffix: string = suffix ?? ''\n\n\t\treturn deduplicateClassName((classNameSuffix\n\t\t\t? (classNameSuffix.match(/^[a-zA-Z0-9]/)\n\t\t\t\t? componentClassNameList.map(componentClassName => `${componentClassName}${glue}${classNameSuffix}`)\n\t\t\t\t: componentClassNameList.map(componentClassName => `${componentClassName}${classNameSuffix}`)\n\t\t\t)\n\t\t\t: componentClassNameList\n\t\t).concat(\n\t\t\tflatClassNameList(\n\t\t\t\tfilterThemedClassName(\n\t\t\t\t\tadditionalClassName,\n\t\t\t\t\tcolorScheme,\n\t\t\t\t),\n\t\t\t),\n\t\t)).join(' ')\n\t}\n}\n"],"names":["componentClassName"],"mappings":";;;;AAKO,SAAS,0BACf,oBACA,OAAsB,KACtB,gBACC;AACK,QAAA,gBAAgB,WAAW,4BAA4B;AAC7D,QAAM,kBAA0B,mBAAmB,QAAQ,mBAAmB,KAAK,KAAK,kBAAkB;AAEpG,QAAA,yBAAmC,kBAAkB,kBAAkB,EAAE;AAAA,IAC9E,CAAAA,wBAAsB,GAAG,kBAAkBA;AAAAA,EAAA;AAGtC,QAAA,cAAc,qBAAqB,eAAA,CAAgB;AAEzD,SAAO,SAAS,sBACf,SAAoC,MACpC,sBAAuC,MAC9B;AACT,UAAM,kBAA0B,UAAU;AAEnC,WAAA,sBAAsB,kBACzB,gBAAgB,MAAM,cAAc,IACpC,uBAAuB,IAAI,CAAAA,wBAAsB,GAAGA,sBAAqB,OAAO,iBAAiB,IACjG,uBAAuB,IAAI,CAAAA,wBAAsB,GAAGA,sBAAqB,iBAAiB,IAE3F,wBACD;AAAA,MACD;AAAA,QACC;AAAA,UACC;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAAA,IAAA,CACA,EAAE,KAAK,GAAG;AAAA,EAAA;AAEb;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
function createOptionalContextFactory(name, initialValue) {
|
|
3
|
+
const OptionalContext = createContext(initialValue);
|
|
4
|
+
OptionalContext.displayName = name;
|
|
5
|
+
const useOptionalContext = () => {
|
|
6
|
+
return useContext(OptionalContext) ?? initialValue;
|
|
7
|
+
};
|
|
8
|
+
return [OptionalContext, useOptionalContext];
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
createOptionalContextFactory
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=createOptionalContextFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createOptionalContextFactory.js","sources":["../../../src/context/createOptionalContextFactory.ts"],"sourcesContent":["import type { Context } from 'react'\nimport { createContext, useContext } from 'react'\n\nexport function createOptionalContextFactory<T>(name: string, initialValue: T): [Context<T>, () => T] {\n const OptionalContext = createContext<T>(initialValue)\n OptionalContext.displayName = name\n\n const useOptionalContext = () => {\n return useContext(OptionalContext) ?? initialValue\n }\n\n return [OptionalContext, useOptionalContext]\n}\n"],"names":[],"mappings":";AAGgB,SAAA,6BAAgC,MAAc,cAAwC;AAC9F,QAAA,kBAAkB,cAAiB,YAAY;AACrD,kBAAgB,cAAc;AAE9B,QAAM,qBAAqB,MAAM;AACxB,WAAA,WAAW,eAAe,KAAK;AAAA,EAAA;AAGjC,SAAA,CAAC,iBAAiB,kBAAkB;AAC7C;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { useRef } from "react";
|
|
2
|
+
const count = { current: 360 };
|
|
3
|
+
function nextId() {
|
|
4
|
+
count.current += 1;
|
|
5
|
+
return `:${count.current.toString(36)}:`;
|
|
6
|
+
}
|
|
7
|
+
function useId() {
|
|
8
|
+
return useRef(nextId()).current;
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
useId
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=useId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useId.js","sources":["../../../src/hooks/useId.ts"],"sourcesContent":["import { useRef } from 'react'\n\nconst count = { current: 360 }\n\nfunction nextId() {\n\tcount.current += 1\n\n\treturn `:${count.current.toString(36)}:`\n}\n\n/**\n * Returns a unique ID string\n * @internal\n *\n * NOTE: This hook is a temporary solution until we stop supporting React < 18\n *\n * @returns a unique id\n */\nexport function useId() {\n\treturn useRef(nextId()).current\n}\n"],"names":[],"mappings":";AAEA,MAAM,QAAQ,EAAE,SAAS;AAEzB,SAAS,SAAS;AACjB,QAAM,WAAW;AAEjB,SAAO,IAAI,MAAM,QAAQ,SAAS,EAAE;AACrC;AAUO,SAAS,QAAQ;AAChB,SAAA,OAAO,QAAQ,EAAE;AACzB;"}
|
package/dist/production/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createNonNullableContextFactory } from "./context/createNonNullableContextFactory.js";
|
|
2
|
+
import { createOptionalContextFactory } from "./context/createOptionalContextFactory.js";
|
|
2
3
|
import { isNoopScopedConsole, noopLog, noopLogged, noopScopedConsole } from "./debug-context/Constants.js";
|
|
3
4
|
import { DebugChildren, ScopedConsoleContext, useScopedConsoleRef } from "./debug-context/Context.js";
|
|
4
5
|
import { unwrapRefValue } from "./hooks/unwrapRefValue.js";
|
|
@@ -16,6 +17,7 @@ import { useElementSize } from "./hooks/useElementSize.js";
|
|
|
16
17
|
import { useEventHandler } from "./hooks/useEventHandler.js";
|
|
17
18
|
import { useExpectSameValueReference } from "./hooks/useExpectSameValueReference.js";
|
|
18
19
|
import { useForceRender } from "./hooks/useForceRender.js";
|
|
20
|
+
import { useId } from "./hooks/useId.js";
|
|
19
21
|
import { useIsMounted } from "./hooks/useIsMounted.js";
|
|
20
22
|
import { useObjectMemo } from "./hooks/useObjectMemo.js";
|
|
21
23
|
import { useOnElementMutation } from "./hooks/useOnElementMutation.js";
|
|
@@ -33,11 +35,23 @@ import { noop } from "./referentiallyStable/noop.js";
|
|
|
33
35
|
import { returnFalse } from "./referentiallyStable/returnFalse.js";
|
|
34
36
|
import { returnTrue } from "./referentiallyStable/returnTrue.js";
|
|
35
37
|
import { useReferentiallyStableCallback } from "./referentiallyStable/useReferentiallyStableCallback.js";
|
|
38
|
+
import { ColorSchemeProvider } from "./theming/ColorSchemeProvider.js";
|
|
39
|
+
import { GlobalClassNamePrefixContext } from "./theming/GlobalClassNamePrefixContext.js";
|
|
40
|
+
import { ColorSchemeContext, DEFAULT_COLOR_SCHEME, useColorScheme } from "./theming/contexts.js";
|
|
41
|
+
import { useClassName } from "./theming/useClassName.js";
|
|
42
|
+
import { useClassNameFactory } from "./theming/useClassNameFactory.js";
|
|
43
|
+
import { useThemedClassName } from "./theming/useThemedClassName.js";
|
|
44
|
+
import { useThemedClassNameFactory } from "./theming/useThemedClassNameFactory.js";
|
|
36
45
|
export {
|
|
46
|
+
ColorSchemeContext,
|
|
47
|
+
ColorSchemeProvider,
|
|
37
48
|
ContainerWidthContext,
|
|
49
|
+
DEFAULT_COLOR_SCHEME,
|
|
38
50
|
DebugChildren,
|
|
51
|
+
GlobalClassNamePrefixContext,
|
|
39
52
|
ScopedConsoleContext,
|
|
40
53
|
createNonNullableContextFactory,
|
|
54
|
+
createOptionalContextFactory,
|
|
41
55
|
emptyArray,
|
|
42
56
|
emptyObject,
|
|
43
57
|
identityFunction,
|
|
@@ -52,6 +66,9 @@ export {
|
|
|
52
66
|
useAbortController,
|
|
53
67
|
useAddClassNameDuringResize,
|
|
54
68
|
useArrayMapMemo,
|
|
69
|
+
useClassName,
|
|
70
|
+
useClassNameFactory,
|
|
71
|
+
useColorScheme,
|
|
55
72
|
useComposeRef,
|
|
56
73
|
useConstantLengthInvariant,
|
|
57
74
|
useConstantValueInvariant,
|
|
@@ -63,6 +80,7 @@ export {
|
|
|
63
80
|
useEventHandler,
|
|
64
81
|
useExpectSameValueReference,
|
|
65
82
|
useForceRender,
|
|
83
|
+
useId,
|
|
66
84
|
useIsMounted,
|
|
67
85
|
useObjectMemo,
|
|
68
86
|
useOnElementMutation,
|
|
@@ -73,6 +91,8 @@ export {
|
|
|
73
91
|
useScopedConsoleRef,
|
|
74
92
|
useScrollOffsets,
|
|
75
93
|
useSessionStorageState,
|
|
94
|
+
useThemedClassName,
|
|
95
|
+
useThemedClassNameFactory,
|
|
76
96
|
useUpdatedRef,
|
|
77
97
|
useWindowSize
|
|
78
98
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { memo } from "react";
|
|
3
|
+
import { useColorScheme, ColorSchemeContext } from "./contexts.js";
|
|
4
|
+
const ColorSchemeProvider = memo(
|
|
5
|
+
({ children, scheme }) => {
|
|
6
|
+
const inheritedColorScheme = useColorScheme();
|
|
7
|
+
return /* @__PURE__ */ jsx(ColorSchemeContext.Provider, { value: scheme ?? inheritedColorScheme, children });
|
|
8
|
+
}
|
|
9
|
+
);
|
|
10
|
+
ColorSchemeProvider.displayName = "Interface.ColorSchemeProvider";
|
|
11
|
+
export {
|
|
12
|
+
ColorSchemeProvider
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=ColorSchemeProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorSchemeProvider.js","sources":["../../../src/theming/ColorSchemeProvider.tsx"],"sourcesContent":["import { KebabCase } from '@contember/utilities'\nimport { memo } from 'react'\nimport { ColorSchemeContext, useColorScheme } from './contexts'\n\nexport type ColorSchemeProviderProps<T extends KebabCase<string>> = {\n\tchildren: React.ReactNode\n\tscheme?: T\n}\n\nexport const ColorSchemeProvider = memo(\n\t<T extends KebabCase<string>>({ children, scheme }: ColorSchemeProviderProps<T>) => {\n\t\tconst inheritedColorScheme = useColorScheme()\n\n\t\treturn (\n\t\t\t<ColorSchemeContext.Provider value={scheme ?? inheritedColorScheme}>{children}</ColorSchemeContext.Provider>\n\t\t)\n\t},\n)\nColorSchemeProvider.displayName = 'Interface.ColorSchemeProvider'\n"],"names":[],"mappings":";;;AASO,MAAM,sBAAsB;AAAA,EAClC,CAA8B,EAAE,UAAU,aAA0C;AACnF,UAAM,uBAAuB;AAE7B,+BACE,mBAAmB,UAAnB,EAA4B,OAAO,UAAU,sBAAuB,SAAS,CAAA;AAAA,EAEhF;AACD;AACA,oBAAoB,cAAc;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalClassNamePrefixContext.js","sources":["../../../src/theming/GlobalClassNamePrefixContext.ts"],"sourcesContent":["import { createContext } from 'react'\n\nexport const GlobalClassNamePrefixContext = createContext<string>('cui-')\n"],"names":[],"mappings":";AAEa,MAAA,+BAA+B,cAAsB,MAAM;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createOptionalContextFactory } from "../context/createOptionalContextFactory.js";
|
|
2
|
+
const DEFAULT_COLOR_SCHEME = "system";
|
|
3
|
+
const [ColorSchemeContext, useColorScheme] = createOptionalContextFactory(
|
|
4
|
+
"Interface.ColorScheme",
|
|
5
|
+
DEFAULT_COLOR_SCHEME
|
|
6
|
+
);
|
|
7
|
+
export {
|
|
8
|
+
ColorSchemeContext,
|
|
9
|
+
DEFAULT_COLOR_SCHEME,
|
|
10
|
+
useColorScheme
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=contexts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contexts.js","sources":["../../../src/theming/contexts.ts"],"sourcesContent":["import { createOptionalContextFactory } from '../context'\n\nexport const DEFAULT_COLOR_SCHEME = 'system'\n\n\n/**\n * @group UI\n *\n * @description\n * Provides the current color scheme, possible values are `'light'`, `'dark'` or `'system'`.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme\n *\n */\nexport const [ColorSchemeContext, useColorScheme] = createOptionalContextFactory<string>(\n\t'Interface.ColorScheme',\n\tDEFAULT_COLOR_SCHEME,\n)\n"],"names":[],"mappings":";AAEO,MAAM,uBAAuB;AAYvB,MAAA,CAAC,oBAAoB,cAAc,IAAI;AAAA,EACnD;AAAA,EACA;AACD;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { flatClassNameList, deduplicateClassName } from "@contember/utilities";
|
|
2
|
+
import { useContext } from "react";
|
|
3
|
+
import { GlobalClassNamePrefixContext } from "./GlobalClassNamePrefixContext.js";
|
|
4
|
+
function useClassName(componentClassName, additionalClassName = null, prefixOverride) {
|
|
5
|
+
const contextPrefix = useContext(GlobalClassNamePrefixContext);
|
|
6
|
+
const classNamePrefix = prefixOverride === null || prefixOverride === "" ? "" : prefixOverride || contextPrefix;
|
|
7
|
+
const componentClassNameList = flatClassNameList(componentClassName).map(
|
|
8
|
+
(componentClassName2) => `${classNamePrefix}${componentClassName2}`
|
|
9
|
+
);
|
|
10
|
+
return deduplicateClassName(componentClassNameList.concat(
|
|
11
|
+
flatClassNameList(additionalClassName)
|
|
12
|
+
)).join(" ");
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
useClassName
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=useClassName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useClassName.js","sources":["../../../src/theming/useClassName.ts"],"sourcesContent":["import { NestedClassName, deduplicateClassName, flatClassNameList } from '@contember/utilities'\nimport { useContext } from 'react'\nimport { GlobalClassNamePrefixContext } from './GlobalClassNamePrefixContext'\n\n/**\n * Hook for component class name accepting outer class name\n *\n * @param componentClassName - Component class name\n * @param additionalClassName - Additional class name\n * @param prefixOverride - Context component prefix override\n * @returns Prefixed component class name.\n */\nexport function useClassName (\n\tcomponentClassName: NestedClassName,\n\tadditionalClassName: NestedClassName = null,\n\tprefixOverride?: string | null | undefined,\n) {\n\tconst contextPrefix = useContext(GlobalClassNamePrefixContext)\n\tconst classNamePrefix: string = prefixOverride === null || prefixOverride === '' ? '' : prefixOverride || contextPrefix\n\n\tconst componentClassNameList: string[] = flatClassNameList(componentClassName).map(\n\t\tcomponentClassName => `${classNamePrefix}${componentClassName}`,\n\t)\n\n\treturn deduplicateClassName(componentClassNameList.concat(\n\t\tflatClassNameList(additionalClassName),\n\t)).join(' ')\n}\n"],"names":["componentClassName"],"mappings":";;;AAYO,SAAS,aACf,oBACA,sBAAuC,MACvC,gBACC;AACK,QAAA,gBAAgB,WAAW,4BAA4B;AAC7D,QAAM,kBAA0B,mBAAmB,QAAQ,mBAAmB,KAAK,KAAK,kBAAkB;AAEpG,QAAA,yBAAmC,kBAAkB,kBAAkB,EAAE;AAAA,IAC9E,CAAAA,wBAAsB,GAAG,kBAAkBA;AAAAA,EAAA;AAG5C,SAAO,qBAAqB,uBAAuB;AAAA,IAClD,kBAAkB,mBAAmB;AAAA,EAAA,CACrC,EAAE,KAAK,GAAG;AACZ;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { flatClassNameList, deduplicateClassName } from "@contember/utilities";
|
|
2
|
+
import { useContext } from "react";
|
|
3
|
+
import { GlobalClassNamePrefixContext } from "./GlobalClassNamePrefixContext.js";
|
|
4
|
+
function useClassNameFactory(componentClassName, glue = "-", prefixOverride) {
|
|
5
|
+
const contextPrefix = useContext(GlobalClassNamePrefixContext);
|
|
6
|
+
const classNamePrefix = prefixOverride === null || prefixOverride === "" ? "" : prefixOverride || contextPrefix;
|
|
7
|
+
const componentClassNameList = flatClassNameList(componentClassName).map(
|
|
8
|
+
(componentClassName2) => `${classNamePrefix}${componentClassName2}`
|
|
9
|
+
);
|
|
10
|
+
return function componentClassNameFor(suffix = null, additionalClassName = null) {
|
|
11
|
+
const classNameSuffix = suffix ?? "";
|
|
12
|
+
return deduplicateClassName((classNameSuffix ? classNameSuffix.match(/^[a-zA-Z0-9]/) ? componentClassNameList.map((componentClassName2) => `${componentClassName2}${glue}${classNameSuffix}`) : componentClassNameList.map((componentClassName2) => `${componentClassName2}${classNameSuffix}`) : componentClassNameList).concat(
|
|
13
|
+
flatClassNameList(additionalClassName)
|
|
14
|
+
)).join(" ");
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
useClassNameFactory
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=useClassNameFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useClassNameFactory.js","sources":["../../../src/theming/useClassNameFactory.ts"],"sourcesContent":["import { NestedClassName, deduplicateClassName, flatClassNameList } from '@contember/utilities'\nimport { useContext } from 'react'\nimport { GlobalClassNamePrefixContext } from './GlobalClassNamePrefixContext'\n\n/**\n * Hook for component class name accepting outer class name\n *\n * Returns a reusable function almost that is handy for components\n * with many sub-component parts that should inherit the root component\n * name.\n *\n * Also, product of the factory is a function that can be used outside of rules of hooks.\n *\n * @param componentClassName - Component class name\n * @param glue - String to use to glue component and sub-component suffix\n * @param prefixOverride - Context component prefix override\n * @returns\n */\nexport function useClassNameFactory(\n\tcomponentClassName: NestedClassName,\n\tglue: string | null = '-',\n\tprefixOverride?: string | null | undefined,\n) {\n\tconst contextPrefix = useContext(GlobalClassNamePrefixContext)\n\tconst classNamePrefix: string = prefixOverride === null || prefixOverride === '' ? '' : prefixOverride || contextPrefix\n\n\tconst componentClassNameList: string[] = flatClassNameList(componentClassName).map(\n\t\tcomponentClassName => `${classNamePrefix}${componentClassName}`,\n\t)\n\n\treturn function componentClassNameFor(\n\t\tsuffix: string | null | undefined = null,\n\t\tadditionalClassName: NestedClassName = null,\n\t): string {\n\t\tconst classNameSuffix: string = suffix ?? ''\n\n\t\treturn deduplicateClassName((classNameSuffix\n\t\t\t? (classNameSuffix.match(/^[a-zA-Z0-9]/)\n\t\t\t\t? componentClassNameList.map(componentClassName => `${componentClassName}${glue}${classNameSuffix}`)\n\t\t\t\t: componentClassNameList.map(componentClassName => `${componentClassName}${classNameSuffix}`)\n\t\t\t)\n\t\t\t: componentClassNameList\n\t\t).concat(\n\t\t\tflatClassNameList(additionalClassName),\n\t\t)).join(' ')\n\t}\n}\n"],"names":["componentClassName"],"mappings":";;;AAkBO,SAAS,oBACf,oBACA,OAAsB,KACtB,gBACC;AACK,QAAA,gBAAgB,WAAW,4BAA4B;AAC7D,QAAM,kBAA0B,mBAAmB,QAAQ,mBAAmB,KAAK,KAAK,kBAAkB;AAEpG,QAAA,yBAAmC,kBAAkB,kBAAkB,EAAE;AAAA,IAC9E,CAAAA,wBAAsB,GAAG,kBAAkBA;AAAAA,EAAA;AAG5C,SAAO,SAAS,sBACf,SAAoC,MACpC,sBAAuC,MAC9B;AACT,UAAM,kBAA0B,UAAU;AAEnC,WAAA,sBAAsB,kBACzB,gBAAgB,MAAM,cAAc,IACpC,uBAAuB,IAAI,CAAAA,wBAAsB,GAAGA,sBAAqB,OAAO,iBAAiB,IACjG,uBAAuB,IAAI,CAAAA,wBAAsB,GAAGA,sBAAqB,iBAAiB,IAE3F,wBACD;AAAA,MACD,kBAAkB,mBAAmB;AAAA,IAAA,CACrC,EAAE,KAAK,GAAG;AAAA,EAAA;AAEb;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { filterThemedClassName, colorSchemeClassName } from "@contember/utilities";
|
|
2
|
+
import { useColorScheme } from "./contexts.js";
|
|
3
|
+
import { useClassName } from "./useClassName.js";
|
|
4
|
+
function useThemedClassName(componentClassName, additionalClassName, prefixOverride) {
|
|
5
|
+
return useClassName(
|
|
6
|
+
componentClassName,
|
|
7
|
+
filterThemedClassName(
|
|
8
|
+
additionalClassName,
|
|
9
|
+
colorSchemeClassName(useColorScheme())
|
|
10
|
+
),
|
|
11
|
+
prefixOverride
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
useThemedClassName
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=useThemedClassName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useThemedClassName.js","sources":["../../../src/theming/useThemedClassName.ts"],"sourcesContent":["import { NestedClassName, colorSchemeClassName, filterThemedClassName } from '@contember/utilities'\nimport { useColorScheme } from './contexts'\nimport { useClassName } from './useClassName'\n\n/**\n * Hook for component class name accepting outer class name with theme-* and scheme-* class manes\n *\n * It looks for theme CSS classes in the given class name, deduplicates them and returns final theme class name with scheme CSS class set\n * @internal\n *\n * @param componentClassName - Component class name\n * @param additionalClassName - Additional class name\n * @param prefixOverride - Context component prefix override\n * @returns string\n * @see useColorScheme\n *\n * @example\n * ```tsx\n * function Button({ className }: { className?: string | string[] }) {\n * \t const [contentThemeClassName, controlsThemeClassName] = useThemedClassName(className)\n *\n * \t return (\n * \t\t <div className={contentThemeClassName}>\n * \t\t\t <button className={controlsThemeClassName}>Click me</button>\n * \t\t </div>\n * \t )\n * }\n *\n * function App() {\n * \t return (\n * \t\t <Button className=\"theme-default theme-danger:hover\" />\n * \t )\n * }\n *\n * // renders:\n * // <div class=\"scheme-system theme-default-content theme-danger-content:hover\">\n * // \t<button class=\"scheme-system theme-default-controls theme-danger-controls:hover\">Click me</button>\n * // </div>\n * ```\n */\nexport function useThemedClassName(\n\tcomponentClassName: NestedClassName,\n\tadditionalClassName: NestedClassName,\n\tprefixOverride?: string | null | undefined,\n): string {\n\treturn useClassName(\n\t\tcomponentClassName,\n\t\tfilterThemedClassName(\n\t\t\tadditionalClassName,\n\t\t\tcolorSchemeClassName(useColorScheme()),\n\t\t),\n\t\tprefixOverride,\n\t)\n}\n"],"names":[],"mappings":";;;AAwCgB,SAAA,mBACf,oBACA,qBACA,gBACS;AACF,SAAA;AAAA,IACN;AAAA,IACA;AAAA,MACC;AAAA,MACA,qBAAqB,gBAAgB;AAAA,IACtC;AAAA,IACA;AAAA,EAAA;AAEF;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { flatClassNameList, colorSchemeClassName, deduplicateClassName, filterThemedClassName } from "@contember/utilities";
|
|
2
|
+
import { useContext } from "react";
|
|
3
|
+
import { GlobalClassNamePrefixContext } from "./GlobalClassNamePrefixContext.js";
|
|
4
|
+
import { useColorScheme } from "./contexts.js";
|
|
5
|
+
function useThemedClassNameFactory(componentClassName, glue = "-", prefixOverride) {
|
|
6
|
+
const contextPrefix = useContext(GlobalClassNamePrefixContext);
|
|
7
|
+
const classNamePrefix = prefixOverride === null || prefixOverride === "" ? "" : prefixOverride || contextPrefix;
|
|
8
|
+
const componentClassNameList = flatClassNameList(componentClassName).map(
|
|
9
|
+
(componentClassName2) => `${classNamePrefix}${componentClassName2}`
|
|
10
|
+
);
|
|
11
|
+
const colorScheme = colorSchemeClassName(useColorScheme());
|
|
12
|
+
return function componentClassNameFor(suffix = null, additionalClassName = null) {
|
|
13
|
+
const classNameSuffix = suffix ?? "";
|
|
14
|
+
return deduplicateClassName((classNameSuffix ? classNameSuffix.match(/^[a-zA-Z0-9]/) ? componentClassNameList.map((componentClassName2) => `${componentClassName2}${glue}${classNameSuffix}`) : componentClassNameList.map((componentClassName2) => `${componentClassName2}${classNameSuffix}`) : componentClassNameList).concat(
|
|
15
|
+
flatClassNameList(
|
|
16
|
+
filterThemedClassName(
|
|
17
|
+
additionalClassName,
|
|
18
|
+
colorScheme
|
|
19
|
+
)
|
|
20
|
+
)
|
|
21
|
+
)).join(" ");
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
useThemedClassNameFactory
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=useThemedClassNameFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useThemedClassNameFactory.js","sources":["../../../src/theming/useThemedClassNameFactory.ts"],"sourcesContent":["import { NestedClassName, colorSchemeClassName, deduplicateClassName, filterThemedClassName, flatClassNameList } from '@contember/utilities'\nimport { useContext } from 'react'\nimport { GlobalClassNamePrefixContext } from './GlobalClassNamePrefixContext'\nimport { useColorScheme } from './contexts'\n\nexport function useThemedClassNameFactory(\n\tcomponentClassName: NestedClassName,\n\tglue: string | null = '-',\n\tprefixOverride?: string | null | undefined,\n) {\n\tconst contextPrefix = useContext(GlobalClassNamePrefixContext)\n\tconst classNamePrefix: string = prefixOverride === null || prefixOverride === '' ? '' : prefixOverride || contextPrefix\n\n\tconst componentClassNameList: string[] = flatClassNameList(componentClassName).map(\n\t\tcomponentClassName => `${classNamePrefix}${componentClassName}`,\n\t)\n\n\tconst colorScheme = colorSchemeClassName(useColorScheme())\n\n\treturn function componentClassNameFor(\n\t\tsuffix: string | null | undefined = null,\n\t\tadditionalClassName: NestedClassName = null,\n\t): string {\n\t\tconst classNameSuffix: string = suffix ?? ''\n\n\t\treturn deduplicateClassName((classNameSuffix\n\t\t\t? (classNameSuffix.match(/^[a-zA-Z0-9]/)\n\t\t\t\t? componentClassNameList.map(componentClassName => `${componentClassName}${glue}${classNameSuffix}`)\n\t\t\t\t: componentClassNameList.map(componentClassName => `${componentClassName}${classNameSuffix}`)\n\t\t\t)\n\t\t\t: componentClassNameList\n\t\t).concat(\n\t\t\tflatClassNameList(\n\t\t\t\tfilterThemedClassName(\n\t\t\t\t\tadditionalClassName,\n\t\t\t\t\tcolorScheme,\n\t\t\t\t),\n\t\t\t),\n\t\t)).join(' ')\n\t}\n}\n"],"names":["componentClassName"],"mappings":";;;;AAKO,SAAS,0BACf,oBACA,OAAsB,KACtB,gBACC;AACK,QAAA,gBAAgB,WAAW,4BAA4B;AAC7D,QAAM,kBAA0B,mBAAmB,QAAQ,mBAAmB,KAAK,KAAK,kBAAkB;AAEpG,QAAA,yBAAmC,kBAAkB,kBAAkB,EAAE;AAAA,IAC9E,CAAAA,wBAAsB,GAAG,kBAAkBA;AAAAA,EAAA;AAGtC,QAAA,cAAc,qBAAqB,eAAA,CAAgB;AAEzD,SAAO,SAAS,sBACf,SAAoC,MACpC,sBAAuC,MAC9B;AACT,UAAM,kBAA0B,UAAU;AAEnC,WAAA,sBAAsB,kBACzB,gBAAgB,MAAM,cAAc,IACpC,uBAAuB,IAAI,CAAAA,wBAAsB,GAAGA,sBAAqB,OAAO,iBAAiB,IACjG,uBAAuB,IAAI,CAAAA,wBAAsB,GAAGA,sBAAqB,iBAAiB,IAE3F,wBACD;AAAA,MACD;AAAA,QACC;AAAA,UACC;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAAA,IAAA,CACA,EAAE,KAAK,GAAG;AAAA,EAAA;AAEb;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createOptionalContextFactory.d.ts","sourceRoot":"","sources":["../../../src/context/createOptionalContextFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAGpC,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CASpG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/context/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/context/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAA;AACjD,cAAc,gCAAgC,CAAA"}
|
|
@@ -13,6 +13,7 @@ export * from './useElementSize';
|
|
|
13
13
|
export * from './useEventHandler';
|
|
14
14
|
export * from './useExpectSameValueReference';
|
|
15
15
|
export * from './useForceRender';
|
|
16
|
+
export * from './useId';
|
|
16
17
|
export * from './useIsMounted';
|
|
17
18
|
export * from './useObjectMemo';
|
|
18
19
|
export * from './useOnElementMutation';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,8BAA8B,CAAA;AAC5C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,8BAA8B,CAAA;AAC5C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qBAAqB,CAAA;AACnC,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,kBAAkB,CAAA;AAChC,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useId.d.ts","sourceRoot":"","sources":["../../../src/hooks/useId.ts"],"names":[],"mappings":"AAUA;;;;;;;GAOG;AACH,wBAAgB,KAAK,WAEpB"}
|