@themeable/layout 1.0.2 → 1.0.5

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.
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
- import { useThemeable } from "./Provider";
3
- import { useTokens } from "./Provider/Tokens";
2
+ import { useThemeableLayout } from "./Provider";
3
+ import { useLayout } from "./Provider/Layout";
4
4
  export var EnviroSniffer = function () {
5
- var viewSize = useTokens().viewSize;
6
- var browserViewport = useThemeable().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
+ };
@@ -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 useThemeable: () => Theme;
8
+ export declare const useThemeableLayout: () => Theme;
9
9
  export {};
@@ -28,10 +28,10 @@ export var LayoutProvider = function (_a) {
28
28
  browserViewport: browserViewport
29
29
  } }, children));
30
30
  };
31
- export var useThemeable = function () {
31
+ export var useThemeableLayout = function () {
32
32
  var context = useContext(ThemeableContext);
33
33
  if (!context) {
34
- throw new Error('useThemeable must be used within a ThemeableProvider');
34
+ throw new Error('useThemeableLayout must be used within a ThemeableLayoutProvider');
35
35
  }
36
36
  return context;
37
37
  };
@@ -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, useTokens } from "../Provider/Tokens";
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, _c = _a.width, width = _c === void 0 ? 'fill' : _c, _d = _a.height, height = _d === void 0 ? 'hug' : _d, wrap = _a.wrap, _e = _a.sectionSpacing, sectionSpacing = _e === void 0 ? false : _e, _f = _a.group, group = _f === void 0 ? false : _f, setMaxViewSize = _a.setMaxViewSize;
18
- var _g = useTokens(), spacingMode = _g.spacingMode, viewSize = _g.viewSize;
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
- return __assign({ maxWidth: maxWidth, transition: '.2s', display: display,
33
- // paddingTop: group ? `${space.vExtra}px` : undefined,
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,
@@ -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, useTokens } from "../Provider/Tokens";
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 = _b === void 0 ? 'hug' : _b, _c = _a.width, width = _c === void 0 ? 'fill' : _c, scroll = _a.scroll, _d = _a.group, group = _d === void 0 ? false : _d, setMaxViewSize = _a.setMaxViewSize;
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 = useTokens().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 content = (React.createElement("div", { ref: localRef, style: __assign({ maxWidth: maxWidth, display: viewSize !== undefined && showOn ? showOnSplit(showOn, viewSize) : undefined, transition: '.2s' }, style), className: combinedClasses }, children));
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
  }
@@ -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
@@ -1,4 +1,4 @@
1
1
  export { HStack, VStack } from './Stack/index';
2
2
  export { EnviroSniffer } from './EnviroSniffer';
3
- export { LayoutProvider } from './Provider/index';
4
- export { useTokens } from './Provider/Tokens';
3
+ export { LayoutProvider, useThemeableLayout } from './Provider/index';
4
+ export { useLayout } from './Provider/Layout';
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export { HStack, VStack } from './Stack/index';
2
2
  export { EnviroSniffer } from './EnviroSniffer';
3
- export { LayoutProvider } from './Provider/index';
4
- export { useTokens } from './Provider/Tokens';
3
+ export { LayoutProvider, useThemeableLayout } from './Provider/index';
4
+ export { useLayout } from './Provider/Layout';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@themeable/layout",
3
3
  "author": "Themeable Systems",
4
- "version": "1.0.2",
4
+ "version": "1.0.5",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -1,11 +1,11 @@
1
1
  import React from 'react';
2
- import { useThemeable } from "./Provider";
3
- import { useTokens } from "./Provider/Tokens";
2
+ import { useThemeableLayout } from "./Provider";
3
+ import { useLayout } from "./Provider/Layout";
4
4
 
5
5
  export const EnviroSniffer = () => {
6
6
 
7
- const { viewSize } = useTokens();
8
- const { browserViewport } = useThemeable()
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, useThemeable } from './index';
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 } = useThemeable();
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 useTokens = () => {
53
+ export const useLayout = () => {
54
54
  return useContext(TokenContext);
55
55
  };
@@ -42,10 +42,10 @@ export const LayoutProvider = ({
42
42
  );
43
43
  };
44
44
 
45
- export const useThemeable = () => {
45
+ export const useThemeableLayout = () => {
46
46
  const context = useContext(ThemeableContext);
47
47
  if (!context) {
48
- throw new Error('useThemeable must be used within a ThemeableProvider');
48
+ throw new Error('useThemeableLayout must be used within a ThemeableLayoutProvider');
49
49
  }
50
50
  return context;
51
51
  };
@@ -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, useTokens } from "../Provider/Tokens";
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 { spacingMode, viewSize } = useTokens();
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
- // paddingTop: group ? `${space.vExtra}px` : undefined,
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])
@@ -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, useTokens } from "../Provider/Tokens";
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 } = useTokens();
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
- // paddingTop: group ? `${space.vExtra}px` : undefined,
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
  );
@@ -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
@@ -1,5 +1,5 @@
1
1
  export { HStack, VStack } from './Stack/index';
2
2
  export { EnviroSniffer } from './EnviroSniffer'
3
3
 
4
- export { LayoutProvider } from './Provider/index';
5
- export { useTokens } from './Provider/Tokens'
4
+ export { LayoutProvider, useThemeableLayout } from './Provider/index';
5
+ export { useLayout } from './Provider/Layout'