@chayns-ui/layout 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -3
- package/dist/app-layout.css +8 -139
- package/dist/components/app-layout/AppLayout.d.ts.map +1 -1
- package/dist/components/app-layout/AppLayout.js +7 -4
- package/dist/components/app-layout/AppLayout.js.map +1 -1
- package/dist/components/app-layout/AppLayout.types.d.ts +5 -0
- package/dist/components/app-layout/AppLayout.types.d.ts.map +1 -1
- package/dist/styles.css +2 -0
- package/dist/tabs.css +142 -0
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -9,16 +9,21 @@ pnpm add @chayns-ui/layout @chayns-ui/core @chayns-ui/tokens react
|
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Load the resolved token stylesheet, Core stylesheet required by the host
|
|
12
|
-
application, and the
|
|
12
|
+
application, and the Layout stylesheet:
|
|
13
13
|
|
|
14
14
|
```tsx
|
|
15
15
|
import '@chayns-ui/tokens/baseline.css';
|
|
16
16
|
import '@chayns-ui/tokens/patch.css';
|
|
17
17
|
import '@chayns-ui/core/styles.css';
|
|
18
|
-
import '@chayns-ui/layout/
|
|
18
|
+
import '@chayns-ui/layout/styles.css';
|
|
19
19
|
|
|
20
20
|
import { AppLayout } from '@chayns-ui/layout';
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
`AppLayout` renders the application shell with a 64px header, recursive
|
|
24
|
-
navigation, controlled or uncontrolled sidebar collapse,
|
|
24
|
+
navigation, controlled or uncontrolled sidebar collapse, optional
|
|
25
|
+
`headerContent` beside the logo, and consumer content.
|
|
26
|
+
|
|
27
|
+
Alternatively, the component stylesheet is available as
|
|
28
|
+
`@chayns-ui/layout/app-layout.css` or
|
|
29
|
+
`@chayns-ui/layout/tabs.css`.
|
package/dist/app-layout.css
CHANGED
|
@@ -10,152 +10,21 @@
|
|
|
10
10
|
color: var(--on-accent);
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
.chayns-
|
|
14
|
-
display: flex;
|
|
15
|
-
flex-direction: column;
|
|
16
|
-
container-type: inline-size;
|
|
17
|
-
inline-size: 100%;
|
|
18
|
-
block-size: 100%;
|
|
19
|
-
min-inline-size: 0;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.chayns-tabs__list {
|
|
23
|
-
display: flex;
|
|
24
|
-
gap: var(--sp-1);
|
|
25
|
-
align-items: stretch;
|
|
26
|
-
min-inline-size: 0;
|
|
27
|
-
overflow-x: auto;
|
|
28
|
-
background: transparent;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.chayns-tabs__bar {
|
|
13
|
+
.chayns-app-layout__header {
|
|
32
14
|
display: flex;
|
|
33
|
-
|
|
34
|
-
block-size: var(--ctrl-h);
|
|
35
|
-
min-inline-size: 0;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
.chayns-tabs__item {
|
|
39
|
-
display: inline-flex;
|
|
40
|
-
flex: 0 0 auto;
|
|
41
|
-
align-items: stretch;
|
|
42
|
-
border-radius: var(--k12) var(--k12) 0 0;
|
|
43
|
-
overflow: hidden;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
.chayns-tabs__tab {
|
|
47
|
-
display: inline-flex;
|
|
48
|
-
flex: 0 0 auto;
|
|
49
|
-
align-items: center;
|
|
50
|
-
justify-content: center;
|
|
51
|
-
gap: var(--sp-2);
|
|
52
|
-
block-size: var(--ctrl-h);
|
|
53
|
-
min-block-size: var(--ctrl-h);
|
|
54
|
-
min-inline-size: var(--ctrl-h);
|
|
55
|
-
padding-block: 0;
|
|
56
|
-
padding-inline: var(--sp-3) var(--sp-2);
|
|
57
|
-
border: 0;
|
|
58
|
-
border-radius: 0;
|
|
59
|
-
color: var(--on-accent);
|
|
60
|
-
font: inherit;
|
|
61
|
-
cursor: pointer;
|
|
62
|
-
background: transparent;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.chayns-tabs__item:has(.chayns-tabs__tab--active) {
|
|
66
|
-
background: var(--surface);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
.chayns-tabs__item:not(:has(.chayns-tabs__tab--active)) {
|
|
70
|
-
background: color-mix(in srgb, var(--surface) 10%, transparent);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.chayns-tabs__remove,
|
|
74
|
-
.chayns-tabs__add {
|
|
75
|
-
display: inline-flex;
|
|
76
|
-
align-items: center;
|
|
77
|
-
justify-content: center;
|
|
78
|
-
inline-size: var(--ctrl-h);
|
|
79
|
-
block-size: var(--ctrl-h);
|
|
80
|
-
min-block-size: var(--ctrl-h);
|
|
81
|
-
padding: 0 var(--sp-2);
|
|
82
|
-
border: 0;
|
|
83
|
-
color: var(--on-accent);
|
|
84
|
-
font: inherit;
|
|
85
|
-
cursor: pointer;
|
|
86
|
-
background: transparent;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.chayns-tabs__remove {
|
|
90
|
-
inline-size: var(--icon);
|
|
91
|
-
padding: 0;
|
|
92
|
-
border-radius: 0;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
.chayns-tabs__add {
|
|
96
|
-
flex: 0 0 auto;
|
|
97
|
-
border-radius: 0;
|
|
98
|
-
color: var(--on-accent);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.chayns-tabs__item:has(:focus-visible) {
|
|
102
|
-
outline: none;
|
|
103
|
-
box-shadow: inset 0 0 0 var(--focus-ring-size)
|
|
104
|
-
rgb(var(--focus-ring-rgb), var(--focus-ring-alpha-strong));
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
.chayns-tabs__tab:focus-visible,
|
|
108
|
-
.chayns-tabs__remove:focus-visible,
|
|
109
|
-
.chayns-tabs__add:focus-visible {
|
|
110
|
-
outline: none;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
.chayns-tabs__icon {
|
|
114
|
-
display: inline-flex;
|
|
115
|
-
flex: none;
|
|
15
|
+
grid-area: header;
|
|
116
16
|
align-items: center;
|
|
117
|
-
justify-content: center;
|
|
118
|
-
inline-size: var(--icon);
|
|
119
|
-
block-size: var(--icon);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
.chayns-tabs__remove .chayns-tabs__icon {
|
|
123
|
-
inline-size: var(--fs-meta);
|
|
124
|
-
block-size: var(--fs-meta);
|
|
125
|
-
font-size: var(--fs-meta);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
.chayns-tabs__item:has(.chayns-tabs__tab--active) .chayns-tabs__tab,
|
|
129
|
-
.chayns-tabs__item:has(.chayns-tabs__tab--active) .chayns-tabs__remove {
|
|
130
|
-
color: var(--accent);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
.chayns-tabs__panel {
|
|
134
|
-
flex: 1 1 auto;
|
|
135
17
|
min-inline-size: 0;
|
|
136
|
-
|
|
137
|
-
padding: var(--sp-4);
|
|
138
|
-
overflow: auto;
|
|
139
|
-
background: var(--surface);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
@container (max-width: 20rem) {
|
|
143
|
-
.chayns-tabs__label {
|
|
144
|
-
position: absolute;
|
|
145
|
-
inline-size: 1px;
|
|
146
|
-
block-size: 1px;
|
|
147
|
-
overflow: hidden;
|
|
148
|
-
clip-path: inset(50%);
|
|
149
|
-
white-space: nowrap;
|
|
150
|
-
}
|
|
18
|
+
padding-inline: var(--sp-4);
|
|
151
19
|
}
|
|
152
20
|
|
|
153
|
-
.chayns-app-layout__header {
|
|
21
|
+
.chayns-app-layout__header-content {
|
|
154
22
|
display: flex;
|
|
155
|
-
|
|
23
|
+
flex: 1 1 auto;
|
|
156
24
|
align-items: center;
|
|
25
|
+
justify-content: flex-end;
|
|
157
26
|
min-inline-size: 0;
|
|
158
|
-
|
|
27
|
+
margin-inline-start: var(--sp-4);
|
|
159
28
|
}
|
|
160
29
|
|
|
161
30
|
.chayns-app-layout__logo {
|
|
@@ -170,7 +39,7 @@
|
|
|
170
39
|
flex-direction: column;
|
|
171
40
|
min-inline-size: 0;
|
|
172
41
|
min-block-size: 0;
|
|
173
|
-
padding: var(--sp-2);
|
|
42
|
+
padding: 0 var(--sp-2) var(--sp-2);
|
|
174
43
|
}
|
|
175
44
|
|
|
176
45
|
.chayns-app-layout__navigation {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppLayout.d.ts","sourceRoot":"","sources":["../../../src/components/app-layout/AppLayout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"AppLayout.d.ts","sourceRoot":"","sources":["../../../src/components/app-layout/AppLayout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,eAAO,MAAM,SAAS,wHAqFrB,CAAC"}
|
|
@@ -3,7 +3,7 @@ import NavigationItems from "./navigation-items/NavigationItems.js";
|
|
|
3
3
|
import { forwardRef, useId, useState } from "react";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/app-layout/AppLayout.tsx
|
|
6
|
-
var AppLayout = forwardRef(({ activeItemId, children, className, collapseLabel, collapsed, defaultCollapsed = false, expandLabel, items, logo, navigationLabel, onClick, onCollapsedChange, ...rootProps }, ref) => {
|
|
6
|
+
var AppLayout = forwardRef(({ activeItemId, children, className, collapseLabel, collapsed, defaultCollapsed = false, expandLabel, headerContent, items, logo, navigationLabel, onClick, onCollapsedChange, ...rootProps }, ref) => {
|
|
7
7
|
const baseId = useId();
|
|
8
8
|
const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed);
|
|
9
9
|
const [expandedIds, setExpandedIds] = useState(() => /* @__PURE__ */ new Set());
|
|
@@ -31,13 +31,16 @@ var AppLayout = forwardRef(({ activeItemId, children, className, collapseLabel,
|
|
|
31
31
|
className: rootClassName,
|
|
32
32
|
ref,
|
|
33
33
|
children: [
|
|
34
|
-
/* @__PURE__ */
|
|
34
|
+
/* @__PURE__ */ jsxs("header", {
|
|
35
35
|
className: "chayns-app-layout__header",
|
|
36
|
-
children: /* @__PURE__ */ jsx("img", {
|
|
36
|
+
children: [/* @__PURE__ */ jsx("img", {
|
|
37
37
|
alt: "",
|
|
38
38
|
className: "chayns-app-layout__logo",
|
|
39
39
|
src: logo
|
|
40
|
-
})
|
|
40
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
41
|
+
className: "chayns-app-layout__header-content",
|
|
42
|
+
children: headerContent
|
|
43
|
+
})]
|
|
41
44
|
}),
|
|
42
45
|
/* @__PURE__ */ jsxs("aside", {
|
|
43
46
|
className: "chayns-app-layout__sidebar",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppLayout.js","names":[],"sources":["../../../src/components/app-layout/AppLayout.tsx"],"sourcesContent":["import { forwardRef, useId, useState } from 'react';\n\nimport type { AppLayoutProps } from './AppLayout.types.js';\nimport AppLayoutIcon from './app-layout-icon/AppLayoutIcon.js';\nimport NavigationItems from './navigation-items/NavigationItems.js';\n\nexport const AppLayout = forwardRef<HTMLDivElement, AppLayoutProps>(\n (\n {\n activeItemId,\n children,\n className,\n collapseLabel,\n collapsed,\n defaultCollapsed = false,\n expandLabel,\n items,\n logo,\n navigationLabel,\n onClick,\n onCollapsedChange,\n ...rootProps\n },\n ref,\n ) => {\n const baseId = useId();\n const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed);\n const [expandedIds, setExpandedIds] = useState<ReadonlySet<string>>(() => new Set());\n const isCollapsed = collapsed ?? internalCollapsed;\n const rootClassName = [\n 'chayns-app-layout',\n isCollapsed ? 'chayns-app-layout--collapsed' : undefined,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const handleCollapsedChange = () => {\n const nextCollapsed = !isCollapsed;\n if (collapsed === undefined) {\n setInternalCollapsed(nextCollapsed);\n }\n onCollapsedChange?.(nextCollapsed);\n };\n\n const handleToggle = (id: string) => {\n setExpandedIds((current) => {\n const next = new Set(current);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n };\n\n return (\n <div {...rootProps} className={rootClassName} ref={ref}>\n <header className=\"chayns-app-layout__header\">\n <img alt=\"\" className=\"chayns-app-layout__logo\" src={logo} />\n </header>\n <aside className=\"chayns-app-layout__sidebar\">\n <nav aria-label={navigationLabel} className=\"chayns-app-layout__navigation\">\n <NavigationItems\n activeItemId={activeItemId}\n collapsed={isCollapsed}\n expandedIds={expandedIds}\n items={items}\n onClick={onClick}\n onToggle={handleToggle}\n parentId={baseId}\n />\n </nav>\n <div className=\"chayns-app-layout__footer\">\n <button\n aria-label={isCollapsed ? expandLabel : collapseLabel}\n className=\"chayns-app-layout__collapse\"\n onClick={handleCollapsedChange}\n type=\"button\"\n >\n <AppLayoutIcon icon=\"fa-sidebar\" />\n </button>\n </div>\n </aside>\n <main className=\"chayns-app-layout__content\">{children}</main>\n </div>\n );\n },\n);\n\nAppLayout.displayName = 'AppLayout';\n"],"mappings":";;;;;AAMA,IAAa,YAAY,YAErB,EACE,cACA,UACA,WACA,eACA,WACA,mBAAmB,OACnB,aACA,OACA,MACA,iBACA,SACA,mBACA,GAAG,aAEL,QACG;CACH,MAAM,SAAS,MAAM;CACrB,MAAM,CAAC,mBAAmB,wBAAwB,SAAS,gBAAgB;CAC3E,MAAM,CAAC,aAAa,kBAAkB,+BAAoC,IAAI,IAAI,CAAC;CACnF,MAAM,cAAc,aAAa;CACjC,MAAM,gBAAgB;EACpB;EACA,cAAc,iCAAiC,KAAA;EAC/C;CACF,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,MAAM,8BAA8B;EAClC,MAAM,gBAAgB,CAAC;EACvB,IAAI,cAAc,KAAA,GAChB,qBAAqB,aAAa;EAEpC,oBAAoB,aAAa;CACnC;CAEA,MAAM,gBAAgB,OAAe;EACnC,gBAAgB,YAAY;GAC1B,MAAM,OAAO,IAAI,IAAI,OAAO;GAC5B,IAAI,KAAK,IAAI,EAAE,GACb,KAAK,OAAO,EAAE;QAEd,KAAK,IAAI,EAAE;GAEb,OAAO;EACT,CAAC;CACH;CAEA,OACE,qBAAC,OAAD;EAAK,GAAI;EAAW,WAAW;EAAoB;EAAnD,UAAA;GACE,
|
|
1
|
+
{"version":3,"file":"AppLayout.js","names":[],"sources":["../../../src/components/app-layout/AppLayout.tsx"],"sourcesContent":["import { forwardRef, useId, useState } from 'react';\n\nimport type { AppLayoutProps } from './AppLayout.types.js';\nimport AppLayoutIcon from './app-layout-icon/AppLayoutIcon.js';\nimport NavigationItems from './navigation-items/NavigationItems.js';\n\nexport const AppLayout = forwardRef<HTMLDivElement, AppLayoutProps>(\n (\n {\n activeItemId,\n children,\n className,\n collapseLabel,\n collapsed,\n defaultCollapsed = false,\n expandLabel,\n headerContent,\n items,\n logo,\n navigationLabel,\n onClick,\n onCollapsedChange,\n ...rootProps\n },\n ref,\n ) => {\n const baseId = useId();\n const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed);\n const [expandedIds, setExpandedIds] = useState<ReadonlySet<string>>(() => new Set());\n const isCollapsed = collapsed ?? internalCollapsed;\n const rootClassName = [\n 'chayns-app-layout',\n isCollapsed ? 'chayns-app-layout--collapsed' : undefined,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const handleCollapsedChange = () => {\n const nextCollapsed = !isCollapsed;\n if (collapsed === undefined) {\n setInternalCollapsed(nextCollapsed);\n }\n onCollapsedChange?.(nextCollapsed);\n };\n\n const handleToggle = (id: string) => {\n setExpandedIds((current) => {\n const next = new Set(current);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n };\n\n return (\n <div {...rootProps} className={rootClassName} ref={ref}>\n <header className=\"chayns-app-layout__header\">\n <img alt=\"\" className=\"chayns-app-layout__logo\" src={logo} />\n <div className=\"chayns-app-layout__header-content\">{headerContent}</div>\n </header>\n <aside className=\"chayns-app-layout__sidebar\">\n <nav aria-label={navigationLabel} className=\"chayns-app-layout__navigation\">\n <NavigationItems\n activeItemId={activeItemId}\n collapsed={isCollapsed}\n expandedIds={expandedIds}\n items={items}\n onClick={onClick}\n onToggle={handleToggle}\n parentId={baseId}\n />\n </nav>\n <div className=\"chayns-app-layout__footer\">\n <button\n aria-label={isCollapsed ? expandLabel : collapseLabel}\n className=\"chayns-app-layout__collapse\"\n onClick={handleCollapsedChange}\n type=\"button\"\n >\n <AppLayoutIcon icon=\"fa-sidebar\" />\n </button>\n </div>\n </aside>\n <main className=\"chayns-app-layout__content\">{children}</main>\n </div>\n );\n },\n);\n\nAppLayout.displayName = 'AppLayout';\n"],"mappings":";;;;;AAMA,IAAa,YAAY,YAErB,EACE,cACA,UACA,WACA,eACA,WACA,mBAAmB,OACnB,aACA,eACA,OACA,MACA,iBACA,SACA,mBACA,GAAG,aAEL,QACG;CACH,MAAM,SAAS,MAAM;CACrB,MAAM,CAAC,mBAAmB,wBAAwB,SAAS,gBAAgB;CAC3E,MAAM,CAAC,aAAa,kBAAkB,+BAAoC,IAAI,IAAI,CAAC;CACnF,MAAM,cAAc,aAAa;CACjC,MAAM,gBAAgB;EACpB;EACA,cAAc,iCAAiC,KAAA;EAC/C;CACF,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,MAAM,8BAA8B;EAClC,MAAM,gBAAgB,CAAC;EACvB,IAAI,cAAc,KAAA,GAChB,qBAAqB,aAAa;EAEpC,oBAAoB,aAAa;CACnC;CAEA,MAAM,gBAAgB,OAAe;EACnC,gBAAgB,YAAY;GAC1B,MAAM,OAAO,IAAI,IAAI,OAAO;GAC5B,IAAI,KAAK,IAAI,EAAE,GACb,KAAK,OAAO,EAAE;QAEd,KAAK,IAAI,EAAE;GAEb,OAAO;EACT,CAAC;CACH;CAEA,OACE,qBAAC,OAAD;EAAK,GAAI;EAAW,WAAW;EAAoB;EAAnD,UAAA;GACE,qBAAC,UAAD;IAAQ,WAAU;IAAlB,UAAA,CACE,oBAAC,OAAD;KAAK,KAAI;KAAG,WAAU;KAA0B,KAAK;IAAO,CAAA,GAC5D,oBAAC,OAAD;KAAK,WAAU;KAAqC,UAAA;IAAmB,CAAA,CACjE;;GACR,qBAAC,SAAD;IAAO,WAAU;IAAjB,UAAA,CACE,oBAAC,OAAD;KAAK,cAAY;KAAiB,WAAU;KAC1C,UAAA,oBAAC,iBAAD;MACgB;MACd,WAAW;MACE;MACN;MACE;MACT,UAAU;MACV,UAAU;KACX,CAAA;IACE,CAAA,GACL,oBAAC,OAAD;KAAK,WAAU;KACb,UAAA,oBAAC,UAAD;MACE,cAAY,cAAc,cAAc;MACxC,WAAU;MACV,SAAS;MACT,MAAK;MAEL,UAAA,oBAAC,eAAD,EAAe,MAAK,aAAc,CAAA;KAC5B,CAAA;IACL,CAAA,CACA;;GACP,oBAAC,QAAD;IAAM,WAAU;IAA8B;GAAe,CAAA;EAC1D;;AAET,CACF;AAEA,UAAU,cAAc"}
|
|
@@ -47,6 +47,11 @@ export interface AppLayoutProps extends Omit<ComponentPropsWithRef<'div'>, 'chil
|
|
|
47
47
|
* name.
|
|
48
48
|
*/
|
|
49
49
|
logo: string;
|
|
50
|
+
/**
|
|
51
|
+
* @description Optional consumer-provided content rendered in the remaining
|
|
52
|
+
* header area to the right of the logo.
|
|
53
|
+
*/
|
|
54
|
+
headerContent?: ReactNode;
|
|
50
55
|
/**
|
|
51
56
|
* @description Top-level navigation items, recursively composable via each
|
|
52
57
|
* item's own `children`. An empty array renders an empty navigation list.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppLayout.types.d.ts","sourceRoot":"","sources":["../../../src/components/app-layout/AppLayout.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,MAAM,EAAE,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,IAAI,EAAE,aAAa,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChG;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,KAAK,EAAE,aAAa,EAAE,CAAC;IAEvB;;;;OAIG;IACH,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAE9B;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAClD"}
|
|
1
|
+
{"version":3,"file":"AppLayout.types.d.ts","sourceRoot":"","sources":["../../../src/components/app-layout/AppLayout.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,MAAM,EAAE,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,IAAI,EAAE,aAAa,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChG;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC;IAE1B;;;OAGG;IACH,KAAK,EAAE,aAAa,EAAE,CAAC;IAEvB;;;;OAIG;IACH,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAE9B;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAClD"}
|
package/dist/styles.css
ADDED
package/dist/tabs.css
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
@layer chayns.components {
|
|
2
|
+
.chayns-tabs {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
container-type: inline-size;
|
|
6
|
+
inline-size: 100%;
|
|
7
|
+
block-size: 100%;
|
|
8
|
+
min-inline-size: 0;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.chayns-tabs__list {
|
|
12
|
+
display: flex;
|
|
13
|
+
gap: var(--sp-1);
|
|
14
|
+
align-items: stretch;
|
|
15
|
+
min-inline-size: 0;
|
|
16
|
+
overflow-x: auto;
|
|
17
|
+
background: transparent;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.chayns-tabs__bar {
|
|
21
|
+
display: flex;
|
|
22
|
+
align-items: stretch;
|
|
23
|
+
block-size: var(--ctrl-h);
|
|
24
|
+
min-inline-size: 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.chayns-tabs__item {
|
|
28
|
+
display: inline-flex;
|
|
29
|
+
flex: 0 0 auto;
|
|
30
|
+
align-items: stretch;
|
|
31
|
+
border-radius: var(--k12) var(--k12) 0 0;
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.chayns-tabs__tab {
|
|
36
|
+
display: inline-flex;
|
|
37
|
+
flex: 0 0 auto;
|
|
38
|
+
align-items: center;
|
|
39
|
+
justify-content: center;
|
|
40
|
+
gap: var(--sp-2);
|
|
41
|
+
block-size: var(--ctrl-h);
|
|
42
|
+
min-block-size: var(--ctrl-h);
|
|
43
|
+
min-inline-size: var(--ctrl-h);
|
|
44
|
+
padding-block: 0;
|
|
45
|
+
padding-inline: var(--sp-3) var(--sp-2);
|
|
46
|
+
border: 0;
|
|
47
|
+
border-radius: 0;
|
|
48
|
+
color: var(--on-accent);
|
|
49
|
+
font: inherit;
|
|
50
|
+
cursor: pointer;
|
|
51
|
+
background: transparent;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.chayns-tabs__item:has(.chayns-tabs__tab--active) {
|
|
55
|
+
background: var(--surface);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.chayns-tabs__item:not(:has(.chayns-tabs__tab--active)) {
|
|
59
|
+
background: color-mix(in srgb, var(--surface) 10%, transparent);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.chayns-tabs__remove,
|
|
63
|
+
.chayns-tabs__add {
|
|
64
|
+
display: inline-flex;
|
|
65
|
+
align-items: center;
|
|
66
|
+
justify-content: center;
|
|
67
|
+
inline-size: var(--ctrl-h);
|
|
68
|
+
block-size: var(--ctrl-h);
|
|
69
|
+
min-block-size: var(--ctrl-h);
|
|
70
|
+
padding: 0 var(--sp-2);
|
|
71
|
+
border: 0;
|
|
72
|
+
color: var(--on-accent);
|
|
73
|
+
font: inherit;
|
|
74
|
+
cursor: pointer;
|
|
75
|
+
background: transparent;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.chayns-tabs__remove {
|
|
79
|
+
inline-size: var(--icon);
|
|
80
|
+
padding: 0;
|
|
81
|
+
border-radius: 0;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.chayns-tabs__add {
|
|
85
|
+
flex: 0 0 auto;
|
|
86
|
+
border-radius: 0;
|
|
87
|
+
color: var(--on-accent);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.chayns-tabs__item:has(:focus-visible) {
|
|
91
|
+
outline: none;
|
|
92
|
+
box-shadow: inset 0 0 0 var(--focus-ring-size)
|
|
93
|
+
rgb(var(--focus-ring-rgb), var(--focus-ring-alpha-strong));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.chayns-tabs__tab:focus-visible,
|
|
97
|
+
.chayns-tabs__remove:focus-visible,
|
|
98
|
+
.chayns-tabs__add:focus-visible {
|
|
99
|
+
outline: none;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.chayns-tabs__icon {
|
|
103
|
+
display: inline-flex;
|
|
104
|
+
flex: none;
|
|
105
|
+
align-items: center;
|
|
106
|
+
justify-content: center;
|
|
107
|
+
inline-size: var(--icon);
|
|
108
|
+
block-size: var(--icon);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.chayns-tabs__remove .chayns-tabs__icon {
|
|
112
|
+
inline-size: var(--fs-meta);
|
|
113
|
+
block-size: var(--fs-meta);
|
|
114
|
+
font-size: var(--fs-meta);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.chayns-tabs__item:has(.chayns-tabs__tab--active) .chayns-tabs__tab,
|
|
118
|
+
.chayns-tabs__item:has(.chayns-tabs__tab--active) .chayns-tabs__remove {
|
|
119
|
+
color: var(--accent);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.chayns-tabs__panel {
|
|
123
|
+
flex: 1 1 auto;
|
|
124
|
+
min-inline-size: 0;
|
|
125
|
+
min-block-size: 0;
|
|
126
|
+
padding: var(--sp-4);
|
|
127
|
+
overflow: auto;
|
|
128
|
+
background: var(--surface);
|
|
129
|
+
color: var(--text);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
@container (max-width: 20rem) {
|
|
133
|
+
.chayns-tabs__label {
|
|
134
|
+
position: absolute;
|
|
135
|
+
inline-size: 1px;
|
|
136
|
+
block-size: 1px;
|
|
137
|
+
overflow: hidden;
|
|
138
|
+
clip-path: inset(50%);
|
|
139
|
+
white-space: nowrap;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chayns-ui/layout",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Accessible application layout components for chayns UI",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -23,14 +23,16 @@
|
|
|
23
23
|
"import": "./dist/index.js"
|
|
24
24
|
},
|
|
25
25
|
"./app-layout.css": "./dist/app-layout.css",
|
|
26
|
+
"./tabs.css": "./dist/tabs.css",
|
|
27
|
+
"./styles.css": "./dist/styles.css",
|
|
26
28
|
"./package.json": "./package.json"
|
|
27
29
|
},
|
|
28
30
|
"peerDependencies": {
|
|
29
|
-
"@chayns-ui/core": ">=0.3.
|
|
31
|
+
"@chayns-ui/core": ">=0.3.1",
|
|
30
32
|
"react": ">=18 <20"
|
|
31
33
|
},
|
|
32
34
|
"devDependencies": {
|
|
33
|
-
"@chayns-ui/core": "0.3.
|
|
35
|
+
"@chayns-ui/core": "0.3.1"
|
|
34
36
|
},
|
|
35
37
|
"engines": {
|
|
36
38
|
"node": ">=18"
|