@granularjs/ui 0.3.2 → 0.3.4
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/LICENSE +201 -0
- package/dist/granular-ui.min.js +41 -10
- package/dist/granular-ui.min.js.map +3 -3
- package/package.json +2 -2
- package/src/components/Accordion.js +7 -3
- package/src/components/Tabs.js +12 -8
- package/src/theme/styles.js +39 -8
- package/src/utils.js +2 -1
- package/types/utils.d.ts +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@granularjs/ui",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "90+ production-ready UI components for Granular. Dark/light themes, CSS variables, accessible, zero dependencies beyond @granularjs/core.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/granular-ui.min.js",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"@granularjs/core": "^1.0.0"
|
|
30
30
|
},
|
|
31
31
|
"author": "Guilherme Ferreira",
|
|
32
|
-
"license": "
|
|
32
|
+
"license": "Apache-2.0",
|
|
33
33
|
"repository": {
|
|
34
34
|
"type": "git",
|
|
35
35
|
"url": "https://github.com/zerobytes/granular-ui.git"
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import { Div } from '@granularjs/core';
|
|
2
2
|
import { state, when, after } from '@granularjs/core';
|
|
3
|
-
import { cx, splitPropsChildren, resolveBool } from '../utils.js';
|
|
3
|
+
import { cx, splitPropsChildren, resolveBool, isReactive } from '../utils.js';
|
|
4
4
|
|
|
5
5
|
export function Accordion(...args) {
|
|
6
|
-
const { props, children } = splitPropsChildren(args, { opened: false });
|
|
6
|
+
const { props, rawProps, children } = splitPropsChildren(args, { opened: false });
|
|
7
7
|
const { opened, className, ...rest } = props;
|
|
8
|
-
const
|
|
8
|
+
const { opened: rawOpened } = rawProps;
|
|
9
|
+
const isControlledOutside = isReactive(rawOpened)
|
|
10
|
+
const openedState = isControlledOutside ? rawOpened : state(resolveBool(opened));
|
|
9
11
|
|
|
10
12
|
after(opened).change((next) => {
|
|
13
|
+
if(isControlledOutside) return;
|
|
11
14
|
openedState.set(resolveBool(next));
|
|
12
15
|
});
|
|
13
16
|
|
|
14
17
|
const toggle = () => {
|
|
18
|
+
if(isControlledOutside) return;
|
|
15
19
|
openedState.set(!openedState.get());
|
|
16
20
|
};
|
|
17
21
|
|
package/src/components/Tabs.js
CHANGED
|
@@ -7,8 +7,10 @@ export function Tabs(...args) {
|
|
|
7
7
|
orientation: 'horizontal',
|
|
8
8
|
variant: 'default',
|
|
9
9
|
sticky: true,
|
|
10
|
+
align: 'left',
|
|
11
|
+
size: 'md'
|
|
10
12
|
});
|
|
11
|
-
const { value, tabs, orientation, variant, sticky, className, style } = props;
|
|
13
|
+
const { value, tabs, orientation, variant, sticky, className, style, align, size } = props;
|
|
12
14
|
const { onChange } = rawProps;
|
|
13
15
|
|
|
14
16
|
const currentState = state(resolveValue(value) ?? resolveValue(tabs)?.[0]?.value ?? '');
|
|
@@ -161,13 +163,15 @@ export function Tabs(...args) {
|
|
|
161
163
|
|
|
162
164
|
return Div(
|
|
163
165
|
Div({
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
),
|
|
170
|
-
|
|
166
|
+
className: cx(
|
|
167
|
+
'g-ui-tabs',
|
|
168
|
+
classMap(orientation, { vertical: 'g-ui-tabs-vertical' }),
|
|
169
|
+
classVar('g-ui-tabs-variant-', variant, 'default'),
|
|
170
|
+
classVar('g-ui-tabs-align-', align, 'left'),
|
|
171
|
+
classVar('g-ui-tabs-size-', size, 'md'),
|
|
172
|
+
props.className ?? className
|
|
173
|
+
),
|
|
174
|
+
},
|
|
171
175
|
Div({ node: sentinelNode }),
|
|
172
176
|
Div({ style: spacerStyle }),
|
|
173
177
|
Div({ node: listNode, className: 'g-ui-tabs-list', style: stickyStyle },
|
package/src/theme/styles.js
CHANGED
|
@@ -1323,6 +1323,45 @@ body .g-ui-card-shadow-lg { box-shadow: var(--g-ui-shadow-lg); }
|
|
|
1323
1323
|
color: var(--g-ui-primary-fg);
|
|
1324
1324
|
}
|
|
1325
1325
|
|
|
1326
|
+
.g-ui-tabs-vertical {
|
|
1327
|
+
display: grid;
|
|
1328
|
+
grid-template-columns: 200px 1fr;
|
|
1329
|
+
gap: var(--g-ui-space-16);
|
|
1330
|
+
}
|
|
1331
|
+
.g-ui-tabs-vertical .g-ui-tabs-list {
|
|
1332
|
+
flex-direction: column;
|
|
1333
|
+
}
|
|
1334
|
+
.g-ui-tabs-align-left .g-ui-tabs-list {
|
|
1335
|
+
justify-content: flex-start;
|
|
1336
|
+
}
|
|
1337
|
+
.g-ui-tabs-align-center .g-ui-tabs-list {
|
|
1338
|
+
justify-content: center;
|
|
1339
|
+
}
|
|
1340
|
+
.g-ui-tabs-align-right .g-ui-tabs-list {
|
|
1341
|
+
justify-content: flex-end;
|
|
1342
|
+
}
|
|
1343
|
+
.
|
|
1344
|
+
.g-ui-tabs-size-xs .g-ui-tabs-tab {
|
|
1345
|
+
padding: var(--g-ui-space-6) var(--g-ui-space-10);
|
|
1346
|
+
font-size: 12px;
|
|
1347
|
+
}
|
|
1348
|
+
.g-ui-tabs-size-sm .g-ui-tabs-tab {
|
|
1349
|
+
padding: var(--g-ui-space-8) var(--g-ui-space-12);
|
|
1350
|
+
font-size:
|
|
1351
|
+
}
|
|
1352
|
+
.g-ui-tabs-size-md .g-ui-tabs-tab {
|
|
1353
|
+
padding: var(--g-ui-space-10) var(--g-ui-space-14);
|
|
1354
|
+
font-size: 16px;
|
|
1355
|
+
}
|
|
1356
|
+
.g-ui-tabs-size-lg .g-ui-tabs-tab {
|
|
1357
|
+
padding: var(--g-ui-space-12) var(--g-ui-space-16);
|
|
1358
|
+
font-size: 18px;
|
|
1359
|
+
}
|
|
1360
|
+
.g-ui-tabs-size-xl .g-ui-tabs-tab {
|
|
1361
|
+
padding: var(--g-ui-space-14) var(--g-ui-space-20);
|
|
1362
|
+
font-size: 20px;
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1326
1365
|
.g-ui-table {
|
|
1327
1366
|
width: 100%;
|
|
1328
1367
|
border-collapse: collapse;
|
|
@@ -3020,14 +3059,6 @@ body .g-ui-card-shadow-lg { box-shadow: var(--g-ui-shadow-lg); }
|
|
|
3020
3059
|
}
|
|
3021
3060
|
.g-ui-toast-title { font-weight: 600; }
|
|
3022
3061
|
|
|
3023
|
-
.g-ui-tabs-vertical {
|
|
3024
|
-
display: grid;
|
|
3025
|
-
grid-template-columns: 200px 1fr;
|
|
3026
|
-
gap: var(--g-ui-space-16);
|
|
3027
|
-
}
|
|
3028
|
-
.g-ui-tabs-vertical .g-ui-tabs-list {
|
|
3029
|
-
flex-direction: column;
|
|
3030
|
-
}
|
|
3031
3062
|
|
|
3032
3063
|
.g-ui-drawer-shadowed {
|
|
3033
3064
|
box-shadow: var(--g-ui-shadow);
|
package/src/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Renderer, isSignal, isState, isStatePath, isComputed, resolve, computed, after, concat } from '@granularjs/core';
|
|
2
2
|
|
|
3
|
-
function isReactive(value) {
|
|
3
|
+
export function isReactive(value) {
|
|
4
4
|
return isSignal(value) || isState(value) || isStatePath(value) || isComputed(value);
|
|
5
5
|
}
|
|
6
6
|
|
|
@@ -13,6 +13,7 @@ export function toPx(value) {
|
|
|
13
13
|
return typeof value === 'number' ? `${value}px` : value;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
|
|
16
17
|
export function splitPropsChildren(args, defaults) {
|
|
17
18
|
const props = {};
|
|
18
19
|
const children = [];
|
package/types/utils.d.ts
CHANGED