@themeable/layout 1.0.2 → 1.0.3
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/EnviroSniffer.js +4 -4
- package/dist/Provider/Layout.d.ts +14 -0
- package/dist/Provider/Layout.js +35 -0
- package/dist/Provider/index.d.ts +1 -1
- package/dist/Provider/index.js +2 -2
- package/dist/Stack/HStack.js +5 -9
- package/dist/Stack/VStack.js +7 -4
- package/dist/Stack/types.d.ts +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/EnviroSniffer.tsx +4 -4
- package/src/Provider/{Tokens.tsx → Layout.tsx} +3 -3
- package/src/Provider/index.tsx +2 -2
- package/src/Stack/HStack.tsx +6 -7
- package/src/Stack/VStack.tsx +8 -7
- package/src/Stack/types.tsx +1 -0
- package/src/index.ts +1 -1
package/dist/EnviroSniffer.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { useThemeableLayout } from "./Provider";
|
|
3
|
+
import { useLayout } from "./Provider/Layout";
|
|
4
4
|
export var EnviroSniffer = function () {
|
|
5
|
-
var viewSize =
|
|
6
|
-
var browserViewport =
|
|
5
|
+
var viewSize = useLayout().viewSize;
|
|
6
|
+
var browserViewport = useThemeableLayout().browserViewport;
|
|
7
7
|
return (React.createElement(React.Fragment, null,
|
|
8
8
|
React.createElement("p", null,
|
|
9
9
|
"Browser size: ",
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type ViewSize = 'compact' | 'medium' | 'expanded';
|
|
3
|
+
type ViewSizeLimit = 'compact' | 'medium';
|
|
4
|
+
type SpacingContextValue = {
|
|
5
|
+
spacingMode?: 'normal' | 'grouped';
|
|
6
|
+
setMaxViewSize?: ViewSizeLimit;
|
|
7
|
+
viewSize?: ViewSize;
|
|
8
|
+
};
|
|
9
|
+
export declare const Modifier: ({ setMaxViewSize: localSetMaxViewSize, children, }: {
|
|
10
|
+
setMaxViewSize?: ViewSizeLimit;
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
}) => React.JSX.Element;
|
|
13
|
+
export declare const useLayout: () => SpacingContextValue;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import React, { createContext, useContext } from 'react';
|
|
13
|
+
import { useThemeableLayout } from './index';
|
|
14
|
+
var clampViewSize = function (actual, limit) {
|
|
15
|
+
if (!limit)
|
|
16
|
+
return actual;
|
|
17
|
+
if (limit === 'compact')
|
|
18
|
+
return 'compact';
|
|
19
|
+
return actual === 'compact' ? 'compact' : 'medium';
|
|
20
|
+
};
|
|
21
|
+
// @ts-ignore
|
|
22
|
+
var TokenContext = createContext({});
|
|
23
|
+
export var Modifier = function (_a) {
|
|
24
|
+
var localSetMaxViewSize = _a.setMaxViewSize, children = _a.children;
|
|
25
|
+
var parent = useContext(TokenContext);
|
|
26
|
+
var browserViewport = useThemeableLayout().browserViewport;
|
|
27
|
+
// Inherit from parent if not provided locally
|
|
28
|
+
var inheritedSetMaxViewSize = localSetMaxViewSize !== null && localSetMaxViewSize !== void 0 ? localSetMaxViewSize : parent.setMaxViewSize;
|
|
29
|
+
var maxViewSize = clampViewSize(browserViewport || 'expanded', inheritedSetMaxViewSize);
|
|
30
|
+
var value = __assign(__assign({}, parent), { setMaxViewSize: inheritedSetMaxViewSize, viewSize: maxViewSize });
|
|
31
|
+
return (React.createElement(TokenContext.Provider, { value: value }, children));
|
|
32
|
+
};
|
|
33
|
+
export var useLayout = function () {
|
|
34
|
+
return useContext(TokenContext);
|
|
35
|
+
};
|
package/dist/Provider/index.d.ts
CHANGED
|
@@ -5,5 +5,5 @@ interface ThemeConfigProps {
|
|
|
5
5
|
children: React.ReactNode;
|
|
6
6
|
}
|
|
7
7
|
export declare const LayoutProvider: ({ children, }: ThemeConfigProps) => React.JSX.Element;
|
|
8
|
-
export declare const
|
|
8
|
+
export declare const useThemeableLayout: () => Theme;
|
|
9
9
|
export {};
|
package/dist/Provider/index.js
CHANGED
|
@@ -28,10 +28,10 @@ export var LayoutProvider = function (_a) {
|
|
|
28
28
|
browserViewport: browserViewport
|
|
29
29
|
} }, children));
|
|
30
30
|
};
|
|
31
|
-
export var
|
|
31
|
+
export var useThemeableLayout = function () {
|
|
32
32
|
var context = useContext(ThemeableContext);
|
|
33
33
|
if (!context) {
|
|
34
|
-
throw new Error('
|
|
34
|
+
throw new Error('useThemeableLayout must be used within a ThemeableLayoutProvider');
|
|
35
35
|
}
|
|
36
36
|
return context;
|
|
37
37
|
};
|
package/dist/Stack/HStack.js
CHANGED
|
@@ -12,10 +12,10 @@ var __assign = (this && this.__assign) || function () {
|
|
|
12
12
|
import React, { useMemo } from "react";
|
|
13
13
|
import { generateGridTemplateColumns, showOnSplit } from "./utils";
|
|
14
14
|
import '../../Stack.css';
|
|
15
|
-
import { Modifier,
|
|
15
|
+
import { Modifier, useLayout } from "../Provider/Layout";
|
|
16
16
|
export var HStack = function (_a) {
|
|
17
|
-
var style = _a.style, _b = _a.maxWidth, maxWidth = _b === void 0 ? undefined : _b, children = _a.children, className = _a.className, align = _a.align, showOn = _a.showOn, gridExpanded = _a.gridExpanded, gridMedium = _a.gridMedium, gridCompact = _a.gridCompact, ref = _a.ref,
|
|
18
|
-
var
|
|
17
|
+
var style = _a.style, _b = _a.maxWidth, maxWidth = _b === void 0 ? undefined : _b, children = _a.children, className = _a.className, align = _a.align, showOn = _a.showOn, _c = _a.padding, padding = _c === void 0 ? false : _c, gridExpanded = _a.gridExpanded, gridMedium = _a.gridMedium, gridCompact = _a.gridCompact, ref = _a.ref, _d = _a.width, width = _d === void 0 ? 'fill' : _d, _e = _a.height, height = _e === void 0 ? 'hug' : _e, wrap = _a.wrap, _f = _a.sectionSpacing, sectionSpacing = _f === void 0 ? false : _f, _g = _a.group, group = _g === void 0 ? false : _g, setMaxViewSize = _a.setMaxViewSize;
|
|
18
|
+
var viewSize = useLayout().viewSize;
|
|
19
19
|
var grid = {
|
|
20
20
|
compact: gridCompact,
|
|
21
21
|
medium: gridMedium,
|
|
@@ -29,12 +29,8 @@ export var HStack = function (_a) {
|
|
|
29
29
|
return showOnSplit(showOn, viewSize);
|
|
30
30
|
return undefined;
|
|
31
31
|
})();
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
// paddingBottom: group ? `${space.vExtra}px` : undefined,
|
|
35
|
-
// paddingRight: group ? `${space.hExtra}px` : undefined,
|
|
36
|
-
// paddingLeft: group ? `${space.hExtra}px` : undefined,
|
|
37
|
-
gridTemplateColumns: gridCompact && gridMedium && gridExpanded && viewSize
|
|
32
|
+
var paddingUtil = viewSize !== 'compact' ? 20 : 16;
|
|
33
|
+
return __assign({ maxWidth: maxWidth, transition: '.2s', display: display, padding: padding ? paddingUtil : undefined, gridTemplateColumns: gridCompact && gridMedium && gridExpanded && viewSize
|
|
38
34
|
? generateGridTemplateColumns(grid[viewSize])
|
|
39
35
|
: undefined,
|
|
40
36
|
// gap: sectionSpacing ? `${space.vSection}px ${space.hSection}px` : undefined,
|
package/dist/Stack/VStack.js
CHANGED
|
@@ -13,12 +13,12 @@ import React, { forwardRef, useRef, useImperativeHandle } from "react";
|
|
|
13
13
|
// import { useViewportSize, ViewportSizeProvider } from "../ProviderResponsive";
|
|
14
14
|
import { showOnSplit } from "./utils";
|
|
15
15
|
import '../../Stack.css';
|
|
16
|
-
import { Modifier,
|
|
16
|
+
import { Modifier, useLayout } from "../Provider/Layout";
|
|
17
17
|
export var VStack = forwardRef(function (_a, parentRef) {
|
|
18
|
-
var style = _a.style, maxWidth = _a.maxWidth, children = _a.children, className = _a.className, align = _a.align, showOn = _a.showOn, _b = _a.height, height =
|
|
18
|
+
var style = _a.style, maxWidth = _a.maxWidth, children = _a.children, className = _a.className, align = _a.align, showOn = _a.showOn, _b = _a.padding, padding = _b === void 0 ? false : _b, _c = _a.height, height = _c === void 0 ? 'hug' : _c, _d = _a.width, width = _d === void 0 ? 'fill' : _d, scroll = _a.scroll, _e = _a.group, group = _e === void 0 ? false : _e, setMaxViewSize = _a.setMaxViewSize;
|
|
19
19
|
var localRef = useRef(null);
|
|
20
20
|
useImperativeHandle(parentRef, function () { return localRef.current; });
|
|
21
|
-
var viewSize =
|
|
21
|
+
var viewSize = useLayout().viewSize;
|
|
22
22
|
var combinedClasses = [
|
|
23
23
|
'v-stack',
|
|
24
24
|
group && 'is-group',
|
|
@@ -30,7 +30,10 @@ export var VStack = forwardRef(function (_a, parentRef) {
|
|
|
30
30
|
]
|
|
31
31
|
.filter(Boolean)
|
|
32
32
|
.join(' ');
|
|
33
|
-
var
|
|
33
|
+
var paddingUtil = viewSize !== 'compact' ? 20 : 16;
|
|
34
|
+
var content = (React.createElement("div", { ref: localRef, style: __assign({ maxWidth: maxWidth, display: viewSize !== undefined && showOn ? showOnSplit(showOn, viewSize) : undefined, transition: '.2s', padding: padding ? paddingUtil : undefined }, style), className: combinedClasses },
|
|
35
|
+
viewSize,
|
|
36
|
+
children));
|
|
34
37
|
if (setMaxViewSize === 'medium' || setMaxViewSize === 'compact') {
|
|
35
38
|
return (React.createElement(Modifier, { setMaxViewSize: setMaxViewSize || 'compact' }, content));
|
|
36
39
|
}
|
package/dist/Stack/types.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ interface StackProps {
|
|
|
5
5
|
children?: ReactNode;
|
|
6
6
|
className?: string;
|
|
7
7
|
align?: string;
|
|
8
|
+
padding?: boolean;
|
|
8
9
|
ref?: RefObject<HTMLDivElement>;
|
|
9
10
|
showOn?: 'compact' | 'medium' | 'expanded' | 'compact medium' | 'medium expanded' | 'compact expanded';
|
|
10
11
|
width?: 'hug' | 'fill';
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
package/src/EnviroSniffer.tsx
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { useThemeableLayout } from "./Provider";
|
|
3
|
+
import { useLayout } from "./Provider/Layout";
|
|
4
4
|
|
|
5
5
|
export const EnviroSniffer = () => {
|
|
6
6
|
|
|
7
|
-
const { viewSize } =
|
|
8
|
-
const { browserViewport } =
|
|
7
|
+
const { viewSize } = useLayout();
|
|
8
|
+
const { browserViewport } = useThemeableLayout()
|
|
9
9
|
return (
|
|
10
10
|
<>
|
|
11
11
|
<p>Browser size: {browserViewport}</p>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { createContext, useContext } from 'react';
|
|
2
|
-
import { ThemeableContext,
|
|
2
|
+
import { ThemeableContext, useThemeableLayout } from './index';
|
|
3
3
|
|
|
4
4
|
type ViewSize = 'compact' | 'medium' | 'expanded';
|
|
5
5
|
type ViewSizeLimit = 'compact' | 'medium';
|
|
@@ -30,7 +30,7 @@ export const Modifier = ({
|
|
|
30
30
|
children: React.ReactNode;
|
|
31
31
|
}) => {
|
|
32
32
|
const parent = useContext(TokenContext);
|
|
33
|
-
const { browserViewport } =
|
|
33
|
+
const { browserViewport } = useThemeableLayout();
|
|
34
34
|
|
|
35
35
|
// Inherit from parent if not provided locally
|
|
36
36
|
const inheritedSetMaxViewSize = localSetMaxViewSize ?? parent.setMaxViewSize;
|
|
@@ -50,6 +50,6 @@ export const Modifier = ({
|
|
|
50
50
|
);
|
|
51
51
|
};
|
|
52
52
|
|
|
53
|
-
export const
|
|
53
|
+
export const useLayout = () => {
|
|
54
54
|
return useContext(TokenContext);
|
|
55
55
|
};
|
package/src/Provider/index.tsx
CHANGED
|
@@ -42,10 +42,10 @@ export const LayoutProvider = ({
|
|
|
42
42
|
);
|
|
43
43
|
};
|
|
44
44
|
|
|
45
|
-
export const
|
|
45
|
+
export const useThemeableLayout = () => {
|
|
46
46
|
const context = useContext(ThemeableContext);
|
|
47
47
|
if (!context) {
|
|
48
|
-
throw new Error('
|
|
48
|
+
throw new Error('useThemeableLayout must be used within a ThemeableLayoutProvider');
|
|
49
49
|
}
|
|
50
50
|
return context;
|
|
51
51
|
};
|
package/src/Stack/HStack.tsx
CHANGED
|
@@ -2,8 +2,7 @@ import React, { useMemo } from "react";
|
|
|
2
2
|
import { generateGridTemplateColumns, showOnSplit } from "./utils";
|
|
3
3
|
import { HStackProps } from "./types";
|
|
4
4
|
import '../../Stack.css';
|
|
5
|
-
import { Modifier,
|
|
6
|
-
import { useThemeable } from "../Provider";
|
|
5
|
+
import { Modifier, useLayout } from "../Provider/Layout";
|
|
7
6
|
|
|
8
7
|
export const HStack: React.FC<HStackProps> = ({
|
|
9
8
|
style,
|
|
@@ -12,6 +11,7 @@ export const HStack: React.FC<HStackProps> = ({
|
|
|
12
11
|
className,
|
|
13
12
|
align,
|
|
14
13
|
showOn,
|
|
14
|
+
padding = false,
|
|
15
15
|
gridExpanded,
|
|
16
16
|
gridMedium,
|
|
17
17
|
gridCompact,
|
|
@@ -23,7 +23,7 @@ export const HStack: React.FC<HStackProps> = ({
|
|
|
23
23
|
group = false,
|
|
24
24
|
setMaxViewSize
|
|
25
25
|
}) => {
|
|
26
|
-
const {
|
|
26
|
+
const { viewSize } = useLayout();
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
const grid = {
|
|
@@ -39,14 +39,13 @@ export const HStack: React.FC<HStackProps> = ({
|
|
|
39
39
|
return undefined;
|
|
40
40
|
})();
|
|
41
41
|
|
|
42
|
+
const paddingUtil = viewSize !== 'compact' ? 20 : 16
|
|
43
|
+
|
|
42
44
|
return {
|
|
43
45
|
maxWidth,
|
|
44
46
|
transition: '.2s',
|
|
45
47
|
display,
|
|
46
|
-
|
|
47
|
-
// paddingBottom: group ? `${space.vExtra}px` : undefined,
|
|
48
|
-
// paddingRight: group ? `${space.hExtra}px` : undefined,
|
|
49
|
-
// paddingLeft: group ? `${space.hExtra}px` : undefined,
|
|
48
|
+
padding: padding ? paddingUtil : undefined,
|
|
50
49
|
gridTemplateColumns:
|
|
51
50
|
gridCompact && gridMedium && gridExpanded && viewSize
|
|
52
51
|
? generateGridTemplateColumns(grid[viewSize])
|
package/src/Stack/VStack.tsx
CHANGED
|
@@ -3,8 +3,7 @@ import { VStackProps } from "./types";
|
|
|
3
3
|
// import { useViewportSize, ViewportSizeProvider } from "../ProviderResponsive";
|
|
4
4
|
import { showOnSplit } from "./utils";
|
|
5
5
|
import '../../Stack.css';
|
|
6
|
-
import { Modifier,
|
|
7
|
-
import { useThemeable } from "../Provider";
|
|
6
|
+
import { Modifier, useLayout } from "../Provider/Layout";
|
|
8
7
|
|
|
9
8
|
export const VStack = forwardRef<HTMLDivElement, VStackProps>(
|
|
10
9
|
({
|
|
@@ -14,6 +13,7 @@ export const VStack = forwardRef<HTMLDivElement, VStackProps>(
|
|
|
14
13
|
className,
|
|
15
14
|
align,
|
|
16
15
|
showOn,
|
|
16
|
+
padding = false,
|
|
17
17
|
height = 'hug',
|
|
18
18
|
width = 'fill',
|
|
19
19
|
scroll,
|
|
@@ -24,7 +24,7 @@ export const VStack = forwardRef<HTMLDivElement, VStackProps>(
|
|
|
24
24
|
|
|
25
25
|
useImperativeHandle(parentRef, () => localRef.current!);
|
|
26
26
|
|
|
27
|
-
const { viewSize } =
|
|
27
|
+
const { viewSize } = useLayout();
|
|
28
28
|
|
|
29
29
|
const combinedClasses = [
|
|
30
30
|
'v-stack',
|
|
@@ -38,6 +38,9 @@ export const VStack = forwardRef<HTMLDivElement, VStackProps>(
|
|
|
38
38
|
.filter(Boolean)
|
|
39
39
|
.join(' ');
|
|
40
40
|
|
|
41
|
+
|
|
42
|
+
const paddingUtil = viewSize !== 'compact' ? 20 : 16
|
|
43
|
+
|
|
41
44
|
const content = (
|
|
42
45
|
<div
|
|
43
46
|
ref={localRef}
|
|
@@ -45,14 +48,12 @@ export const VStack = forwardRef<HTMLDivElement, VStackProps>(
|
|
|
45
48
|
maxWidth,
|
|
46
49
|
display: viewSize !== undefined && showOn ? showOnSplit(showOn, viewSize) : undefined,
|
|
47
50
|
transition: '.2s',
|
|
48
|
-
|
|
49
|
-
// paddingBottom: group ? `${space.vExtra}px` : undefined,
|
|
50
|
-
// paddingRight: group ? `${space.hExtra}px` : undefined,
|
|
51
|
-
// paddingLeft: group ? `${space.hExtra}px` : undefined,
|
|
51
|
+
padding: padding ? paddingUtil : undefined,
|
|
52
52
|
...style
|
|
53
53
|
}}
|
|
54
54
|
className={combinedClasses}
|
|
55
55
|
>
|
|
56
|
+
{viewSize}
|
|
56
57
|
{children}
|
|
57
58
|
</div>
|
|
58
59
|
);
|
package/src/Stack/types.tsx
CHANGED
|
@@ -6,6 +6,7 @@ interface StackProps {
|
|
|
6
6
|
children?: ReactNode;
|
|
7
7
|
className?: string;
|
|
8
8
|
align?: string;
|
|
9
|
+
padding?: boolean;
|
|
9
10
|
ref?: RefObject<HTMLDivElement>;
|
|
10
11
|
showOn?: 'compact' | 'medium' | 'expanded' | 'compact medium' | 'medium expanded' | 'compact expanded';
|
|
11
12
|
width?: 'hug' | 'fill';
|
package/src/index.ts
CHANGED