@fragment-build/ui 2.2.0 → 3.0.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/README.md +19 -29
- package/components/grid/Grid.d.ts +8 -0
- package/components/grid/Grid.js +7 -0
- package/components/grid/Grid.js.map +1 -0
- package/components/grid/Grid.styles.d.ts +43 -0
- package/components/grid/Grid.styles.js +17 -0
- package/components/grid/Grid.styles.js.map +1 -0
- package/components/multi-switch/MultiSwitch.d.ts +6 -0
- package/components/multi-switch/MultiSwitch.js +6 -0
- package/components/multi-switch/MultiSwitch.js.map +1 -0
- package/components/multi-switch/MultiSwitch.styles.d.ts +43 -0
- package/components/multi-switch/MultiSwitch.styles.js +14 -0
- package/components/multi-switch/MultiSwitch.styles.js.map +1 -0
- package/components/theme-switch/ThemeSwitch.d.ts +6 -0
- package/components/theme-switch/ThemeSwitch.js +16 -0
- package/components/theme-switch/ThemeSwitch.js.map +1 -0
- package/constants.d.ts +12 -0
- package/constants.js +13 -0
- package/constants.js.map +1 -0
- package/context.d.ts +7 -0
- package/context.js +6 -0
- package/context.js.map +1 -0
- package/fragments/form/Form.d.ts +8 -0
- package/fragments/form/Form.js +12 -0
- package/fragments/form/Form.js.map +1 -0
- package/fragments/form/Form.styles.d.ts +25 -0
- package/fragments/form/Form.styles.js +7 -0
- package/fragments/form/Form.styles.js.map +1 -0
- package/fragments/form/FormSection.d.ts +12 -0
- package/fragments/form/FormSection.js +7 -0
- package/fragments/form/FormSection.js.map +1 -0
- package/fragments/form/FormSection.styles.d.ts +61 -0
- package/fragments/form/FormSection.styles.js +24 -0
- package/fragments/form/FormSection.styles.js.map +1 -0
- package/fragments/navbar/Navbar.d.ts +30 -0
- package/fragments/navbar/Navbar.js +26 -0
- package/fragments/navbar/Navbar.js.map +1 -0
- package/fragments/navbar/Navbar.styles.d.ts +55 -0
- package/fragments/navbar/Navbar.styles.js +12 -0
- package/fragments/navbar/Navbar.styles.js.map +1 -0
- package/fragments/page/PageHeader.d.ts +10 -0
- package/fragments/page/PageHeader.js +7 -0
- package/fragments/page/PageHeader.js.map +1 -0
- package/fragments/page/PageHeader.styles.d.ts +37 -0
- package/fragments/page/PageHeader.styles.js +9 -0
- package/fragments/page/PageHeader.styles.js.map +1 -0
- package/fragments/shell/Shell.d.ts +18 -0
- package/fragments/shell/Shell.js +12 -0
- package/fragments/shell/Shell.js.map +1 -0
- package/fragments/shell/Shell.styles.d.ts +37 -0
- package/fragments/shell/Shell.styles.js +18 -0
- package/fragments/shell/Shell.styles.js.map +1 -0
- package/fragments/sidebar/Sidebar.d.ts +39 -0
- package/fragments/sidebar/Sidebar.js +83 -0
- package/fragments/sidebar/Sidebar.js.map +1 -0
- package/fragments/sidebar/Sidebar.styles.d.ts +79 -0
- package/fragments/sidebar/Sidebar.styles.js +26 -0
- package/fragments/sidebar/Sidebar.styles.js.map +1 -0
- package/fragments/sidebar/SidebarNavigation.d.ts +19 -0
- package/fragments/sidebar/SidebarNavigation.js +51 -0
- package/fragments/sidebar/SidebarNavigation.js.map +1 -0
- package/fragments/widget/Widget.d.ts +15 -0
- package/fragments/widget/Widget.js +11 -0
- package/fragments/widget/Widget.js.map +1 -0
- package/fragments/widget/Widget.styles.d.ts +52 -0
- package/fragments/widget/Widget.styles.js +20 -0
- package/fragments/widget/Widget.styles.js.map +1 -0
- package/index.d.ts +12 -0
- package/index.js +2 -55
- package/index.js.map +1 -0
- package/package.json +44 -40
- package/provider.d.ts +7 -0
- package/provider.js +7 -0
- package/provider.js.map +1 -0
package/README.md
CHANGED
|
@@ -26,6 +26,7 @@ Fragment UI is a design system and React component library which provides alread
|
|
|
26
26
|
- [✨ Components](#-components)
|
|
27
27
|
- [⏳ Installation](#-installation)
|
|
28
28
|
- [🔧 Configuration](#-configuration)
|
|
29
|
+
- [`linkComponent`](#linkcomponent)
|
|
29
30
|
- [Next.js 13+](#nextjs-13)
|
|
30
31
|
- [🤝 Contributing](#-contributing)
|
|
31
32
|
- [👨💻 Development](#-development)
|
|
@@ -68,32 +69,12 @@ All done. Enjoy 🎉
|
|
|
68
69
|
|
|
69
70
|
## 🔧 Configuration
|
|
70
71
|
|
|
71
|
-
```ts
|
|
72
|
-
// fragment.ts
|
|
73
|
-
import { fragmentui } from '@fragment-build/tailwind.plugin';
|
|
74
|
-
|
|
75
|
-
export default fragmentui();
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
```ts
|
|
79
|
-
// hero.ts
|
|
80
|
-
import { heroui } from '@fragment-build/tailwind.plugin';
|
|
81
|
-
|
|
82
|
-
export default heroui();
|
|
83
|
-
```
|
|
84
|
-
|
|
85
72
|
```ts
|
|
86
73
|
// src/main.css
|
|
87
74
|
|
|
88
75
|
@import 'tailwindcss';
|
|
89
|
-
|
|
90
|
-
@
|
|
91
|
-
@plugin '../fragment.ts';
|
|
92
|
-
|
|
93
|
-
/* Note: You may need to change the path to fit your project structure */
|
|
94
|
-
@source '../node_modules/@heroui/theme/dist/**/*.{js,ts,jsx,tsx}';
|
|
95
|
-
@source '../node_modules/@fragment-build/ui/dist/**/*.{js,ts,jsx,tsx}';
|
|
96
|
-
@custom-variant dark (&:is(.dark *));
|
|
76
|
+
@import "@heroui/styles";
|
|
77
|
+
@import "@fragment-build/ui";
|
|
97
78
|
```
|
|
98
79
|
|
|
99
80
|
It is essential to add the FragmentUIProvider at the root of your application.
|
|
@@ -114,19 +95,28 @@ function App() {
|
|
|
114
95
|
}
|
|
115
96
|
```
|
|
116
97
|
|
|
117
|
-
|
|
98
|
+
#### `linkComponent`
|
|
118
99
|
|
|
119
|
-
|
|
100
|
+
Fragment UI renders navigation links internally (e.g. in `Navbar`, `Sidebar`). By default it uses a plain `<a>` tag. Pass a `linkComponent` to use your router's link component instead so navigation stays client-side:
|
|
120
101
|
|
|
121
|
-
```
|
|
122
|
-
|
|
102
|
+
```tsx
|
|
103
|
+
import Link from 'next/link';
|
|
104
|
+
import { FragmentUIProvider } from '@fragment-build/ui';
|
|
123
105
|
|
|
124
|
-
|
|
106
|
+
function App() {
|
|
107
|
+
return (
|
|
108
|
+
<FragmentUIProvider linkComponent={Link}>
|
|
109
|
+
<YourApplication />
|
|
110
|
+
</FragmentUIProvider>
|
|
111
|
+
);
|
|
112
|
+
}
|
|
125
113
|
```
|
|
126
114
|
|
|
127
|
-
|
|
115
|
+
Any component that accepts an `href` prop works — React Router's `<Link>`, TanStack Router's `<Link>`, etc.
|
|
116
|
+
|
|
117
|
+
### Next.js 13+
|
|
128
118
|
|
|
129
|
-
|
|
119
|
+
You need to [setup Tailwind 4 using PostCSS](https://tailwindcss.com/docs/installation/framework-guides/nextjs)
|
|
130
120
|
|
|
131
121
|
```ts
|
|
132
122
|
// postcss.config.mjs
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { grid } from './Grid.styles';
|
|
3
|
+
export const Grid = ({ children, ...props }) => {
|
|
4
|
+
const { base } = grid(props);
|
|
5
|
+
return _jsx("div", { className: base(), children: children });
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=Grid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grid.js","sourceRoot":"","sources":["../../src/components/grid/Grid.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAWrC,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAClE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAE7B,OAAO,cAAK,SAAS,EAAE,IAAI,EAAE,YAAG,QAAQ,GAAO,CAAC;AAClD,CAAC,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export declare const grid: import("tailwind-variants").TVReturnType<{
|
|
2
|
+
size: {
|
|
3
|
+
sm: {
|
|
4
|
+
base: string;
|
|
5
|
+
};
|
|
6
|
+
md: {
|
|
7
|
+
base: string;
|
|
8
|
+
};
|
|
9
|
+
lg: {
|
|
10
|
+
base: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
}, {
|
|
14
|
+
base: string;
|
|
15
|
+
}, undefined, {
|
|
16
|
+
size: {
|
|
17
|
+
sm: {
|
|
18
|
+
base: string;
|
|
19
|
+
};
|
|
20
|
+
md: {
|
|
21
|
+
base: string;
|
|
22
|
+
};
|
|
23
|
+
lg: {
|
|
24
|
+
base: string;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
}, {
|
|
28
|
+
base: string;
|
|
29
|
+
}, import("tailwind-variants").TVReturnType<{
|
|
30
|
+
size: {
|
|
31
|
+
sm: {
|
|
32
|
+
base: string;
|
|
33
|
+
};
|
|
34
|
+
md: {
|
|
35
|
+
base: string;
|
|
36
|
+
};
|
|
37
|
+
lg: {
|
|
38
|
+
base: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
}, {
|
|
42
|
+
base: string;
|
|
43
|
+
}, undefined, unknown, unknown, undefined>>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
export const grid = tv({
|
|
3
|
+
slots: {
|
|
4
|
+
base: 'fragment-grid',
|
|
5
|
+
},
|
|
6
|
+
variants: {
|
|
7
|
+
size: {
|
|
8
|
+
sm: { base: 'fragment-grid--sm' },
|
|
9
|
+
md: { base: 'fragment-grid--md' },
|
|
10
|
+
lg: { base: 'fragment-grid--lg' },
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
defaultVariants: {
|
|
14
|
+
size: 'md',
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=Grid.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grid.styles.js","sourceRoot":"","sources":["../../src/components/grid/Grid.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;IACrB,KAAK,EAAE;QACL,IAAI,EAAE,eAAe;KACtB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE;YACjC,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE;YACjC,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE;SAClC;KACF;IACD,eAAe,EAAE;QACf,IAAI,EAAE,IAAI;KACX;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ToggleButtonGroup as ToggleButtonGroupType } from '@heroui/react';
|
|
2
|
+
export interface MultiSwitchProps extends Omit<ToggleButtonGroupType['RootProps'], 'defaultSelectedKeys' | 'onSelectionChange' | 'selectionMode' | 'disallowEmptySelection'> {
|
|
3
|
+
defaultValue?: number;
|
|
4
|
+
onValueChange: (value: number) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare const MultiSwitch: import("react").ForwardRefExoticComponent<Omit<MultiSwitchProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { IconCheck, IconSlash, IconX } from '@tabler/icons-react';
|
|
4
|
+
import { ToggleButton, ToggleButtonGroup } from '@heroui/react';
|
|
5
|
+
export const MultiSwitch = forwardRef(({ defaultValue = 1, onValueChange, size = 'md', ...props }, ref) => (_jsxs(ToggleButtonGroup, { ref: ref, className: "fragment-multi-switch", selectionMode: "single", disallowEmptySelection: true, defaultSelectedKeys: [String(defaultValue)], onSelectionChange: (keys) => onValueChange(Number([...keys][0])), size: size, ...props, children: [_jsx(ToggleButton, { id: "0", isIconOnly: true, className: "fragment-multi-switch__btn--danger", children: _jsx(IconX, {}) }), _jsx(ToggleButton, { id: "1", isIconOnly: true, className: "fragment-multi-switch__btn--neutral", children: _jsx(IconSlash, {}) }), _jsx(ToggleButton, { id: "2", isIconOnly: true, children: _jsx(IconCheck, {}) })] })));
|
|
6
|
+
//# sourceMappingURL=MultiSwitch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiSwitch.js","sourceRoot":"","sources":["../../src/components/multi-switch/MultiSwitch.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAmD,MAAM,eAAe,CAAC;AAOjH,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAmC,CAAC,EACvE,YAAY,GAAG,CAAC,EAChB,aAAa,EACb,IAAI,GAAG,IAAI,EACX,GAAG,KAAK,EACT,EAAE,GAAG,EAAE,EAAE,CAAC,CACT,MAAC,iBAAiB,IAChB,GAAG,EAAE,GAAG,EACR,SAAS,EAAC,uBAAuB,EACjC,aAAa,EAAC,QAAQ,EACtB,sBAAsB,QACtB,mBAAmB,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAC3C,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAChE,IAAI,EAAE,IAAI,KACN,KAAK,aAET,KAAC,YAAY,IAAC,EAAE,EAAC,GAAG,EAAC,UAAU,QAAC,SAAS,EAAC,oCAAoC,YAAC,KAAC,KAAK,KAAG,GAAe,EACvG,KAAC,YAAY,IAAC,EAAE,EAAC,GAAG,EAAC,UAAU,QAAC,SAAS,EAAC,qCAAqC,YAC7E,KAAC,SAAS,KAAG,GACA,EACf,KAAC,YAAY,IAAC,EAAE,EAAC,GAAG,EAAC,UAAU,kBAC7B,KAAC,SAAS,KAAG,GACA,IACG,CACrB,CAAC,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export declare const multiSwitch: import("tailwind-variants").TVReturnType<{
|
|
2
|
+
size: {
|
|
3
|
+
sm: {
|
|
4
|
+
button: string;
|
|
5
|
+
};
|
|
6
|
+
md: {
|
|
7
|
+
button: string;
|
|
8
|
+
};
|
|
9
|
+
lg: {
|
|
10
|
+
button: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
}, {
|
|
14
|
+
button: string;
|
|
15
|
+
}, undefined, {
|
|
16
|
+
size: {
|
|
17
|
+
sm: {
|
|
18
|
+
button: string;
|
|
19
|
+
};
|
|
20
|
+
md: {
|
|
21
|
+
button: string;
|
|
22
|
+
};
|
|
23
|
+
lg: {
|
|
24
|
+
button: string;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
}, {
|
|
28
|
+
button: string;
|
|
29
|
+
}, import("tailwind-variants").TVReturnType<{
|
|
30
|
+
size: {
|
|
31
|
+
sm: {
|
|
32
|
+
button: string;
|
|
33
|
+
};
|
|
34
|
+
md: {
|
|
35
|
+
button: string;
|
|
36
|
+
};
|
|
37
|
+
lg: {
|
|
38
|
+
button: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
}, {
|
|
42
|
+
button: string;
|
|
43
|
+
}, undefined, unknown, unknown, undefined>>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
export const multiSwitch = tv({
|
|
3
|
+
slots: {
|
|
4
|
+
button: 'fragment-multi-switch__button',
|
|
5
|
+
},
|
|
6
|
+
variants: {
|
|
7
|
+
size: {
|
|
8
|
+
sm: { button: 'fragment-multi-switch__button--sm' },
|
|
9
|
+
md: { button: 'fragment-multi-switch__button--md' },
|
|
10
|
+
lg: { button: 'fragment-multi-switch__button--lg' },
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=MultiSwitch.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiSwitch.styles.js","sourceRoot":"","sources":["../../src/components/multi-switch/MultiSwitch.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;IAC5B,KAAK,EAAE;QACL,MAAM,EAAE,+BAA+B;KACxC;IACD,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,EAAE,EAAE,EAAE,MAAM,EAAE,mCAAmC,EAAE;YACnD,EAAE,EAAE,EAAE,MAAM,EAAE,mCAAmC,EAAE;YACnD,EAAE,EAAE,EAAE,MAAM,EAAE,mCAAmC,EAAE;SACpD;KACF;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useTheme } from 'next-themes';
|
|
3
|
+
import { IconMoon, IconSun } from '@tabler/icons-react';
|
|
4
|
+
import { Button } from '@heroui/react';
|
|
5
|
+
import { useEffect, useState } from 'react';
|
|
6
|
+
export const ThemeSwitch = (props) => {
|
|
7
|
+
const [mounted, setMounted] = useState(false);
|
|
8
|
+
const { theme, setTheme } = useTheme();
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
setMounted(true);
|
|
11
|
+
}, []);
|
|
12
|
+
if (!mounted)
|
|
13
|
+
return null;
|
|
14
|
+
return (_jsx(Button, { isIconOnly: true, size: "sm", variant: "tertiary", onPress: () => setTheme(theme === 'light' ? 'dark' : 'light'), ...props, children: theme === 'light' ? _jsx(IconSun, { size: 18 }) : _jsx(IconMoon, { size: 18 }) }));
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=ThemeSwitch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeSwitch.js","sourceRoot":"","sources":["../../src/components/theme-switch/ThemeSwitch.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAQ,EAAE,MAAM,EAAoB,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAQ5C,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,KAAK,EAAE,EAAE;IAC/D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAG,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAEzB,OAAO,CACL,KAAC,MAAM,IAAC,UAAU,QAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,UAAU,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAM,KAAK,YACrH,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,GAAI,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,GAAI,GAC5D,CACV,CAAC;AACJ,CAAC,CAAC"}
|
package/constants.d.ts
ADDED
package/constants.js
ADDED
package/constants.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,KAAK,EAAE,IAAI;CACZ,CAAA"}
|
package/context.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type LinkComponent = React.ElementType;
|
|
2
|
+
interface FragmentUIContextValue {
|
|
3
|
+
linkComponent: LinkComponent;
|
|
4
|
+
}
|
|
5
|
+
export declare const FragmentUIContext: import("react").Context<FragmentUIContextValue>;
|
|
6
|
+
export declare const useFragmentUI: () => FragmentUIContextValue;
|
|
7
|
+
export {};
|
package/context.js
ADDED
package/context.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAQlD,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAyB;IACrE,aAAa,EAAE,GAAG;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Primary UI component for Form Sections
|
|
4
|
+
*/
|
|
5
|
+
import React, { isValidElement } from 'react';
|
|
6
|
+
import { Separator } from '@heroui/react';
|
|
7
|
+
import { form } from './Form.styles';
|
|
8
|
+
export const Form = ({ children, ...props }) => {
|
|
9
|
+
const v = form();
|
|
10
|
+
return (_jsx("form", { ...props, children: children.filter(isValidElement).map((child, index) => index === 0 ? child : (_jsxs(React.Fragment, { children: [_jsx(Separator, { className: v.separator() }), child] }, index))) }));
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=Form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Form.js","sourceRoot":"","sources":["../../src/fragments/form/Form.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAMrC,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAClE,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IAEjB,OAAO,CACL,kBAAU,KAAK,YACZ,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC3E,MAAC,KAAK,CAAC,QAAQ,eACb,KAAC,SAAS,IAAC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,GAAI,EACtC,KAAK,KAFa,KAAK,CAGT,CAClB,CAAC,GACG,CACR,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const form: import("tailwind-variants").TVReturnType<{
|
|
2
|
+
[key: string]: {
|
|
3
|
+
[key: string]: import("tailwind-variants").ClassValue | {
|
|
4
|
+
separator?: import("tailwind-variants").ClassValue;
|
|
5
|
+
};
|
|
6
|
+
};
|
|
7
|
+
} | {
|
|
8
|
+
[x: string]: {
|
|
9
|
+
[x: string]: import("tailwind-variants").ClassValue | {
|
|
10
|
+
separator?: import("tailwind-variants").ClassValue;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
} | {}, {
|
|
14
|
+
separator: string;
|
|
15
|
+
}, undefined, {
|
|
16
|
+
[key: string]: {
|
|
17
|
+
[key: string]: import("tailwind-variants").ClassValue | {
|
|
18
|
+
separator?: import("tailwind-variants").ClassValue;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
} | {}, {
|
|
22
|
+
separator: string;
|
|
23
|
+
}, import("tailwind-variants").TVReturnType<unknown, {
|
|
24
|
+
separator: string;
|
|
25
|
+
}, undefined, unknown, unknown, undefined>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Form.styles.js","sourceRoot":"","sources":["../../src/fragments/form/Form.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;IACrB,KAAK,EAAE;QACL,SAAS,EAAE,0BAA0B;KACtC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Primary UI component for Form Sections
|
|
3
|
+
*/
|
|
4
|
+
import React from 'react';
|
|
5
|
+
export interface FormSectionProps {
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
title: string;
|
|
8
|
+
description?: React.ReactNode;
|
|
9
|
+
direction?: 'vertical' | 'horizontal';
|
|
10
|
+
fullWidth?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare const FormSection: React.FC<FormSectionProps>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { formSection } from './FormSection.styles';
|
|
3
|
+
export const FormSection = ({ children, title, description, ...props }) => {
|
|
4
|
+
const v = formSection(props);
|
|
5
|
+
return (_jsx("div", { className: v.base(), children: _jsxs("div", { className: v.main(), children: [_jsxs("div", { className: v.info(), children: [_jsx("h3", { children: title }), _jsx("div", { className: v.description(), children: description })] }), _jsx("div", { className: v.content(), children: children })] }) }));
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=FormSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormSection.js","sourceRoot":"","sources":["../../src/fragments/form/FormSection.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAUnD,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IACpG,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAE7B,OAAO,CACL,cAAK,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,YACtB,eAAK,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,aACtB,eAAK,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,aACtB,uBAAK,KAAK,GAAM,EAChB,cAAK,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,YAAG,WAAW,GAAO,IAChD,EACN,cAAK,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,YACxB,QAAQ,GACL,IACF,GACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export declare const formSection: import("tailwind-variants").TVReturnType<{
|
|
2
|
+
direction: {
|
|
3
|
+
horizontal: {
|
|
4
|
+
base: string;
|
|
5
|
+
};
|
|
6
|
+
vertical: {
|
|
7
|
+
base: string;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
fullWidth: {
|
|
11
|
+
true: {
|
|
12
|
+
base: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
}, {
|
|
16
|
+
base: string;
|
|
17
|
+
main: string;
|
|
18
|
+
info: string;
|
|
19
|
+
content: string;
|
|
20
|
+
description: string;
|
|
21
|
+
}, undefined, {
|
|
22
|
+
direction: {
|
|
23
|
+
horizontal: {
|
|
24
|
+
base: string;
|
|
25
|
+
};
|
|
26
|
+
vertical: {
|
|
27
|
+
base: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
fullWidth: {
|
|
31
|
+
true: {
|
|
32
|
+
base: string;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
}, {
|
|
36
|
+
base: string;
|
|
37
|
+
main: string;
|
|
38
|
+
info: string;
|
|
39
|
+
content: string;
|
|
40
|
+
description: string;
|
|
41
|
+
}, import("tailwind-variants").TVReturnType<{
|
|
42
|
+
direction: {
|
|
43
|
+
horizontal: {
|
|
44
|
+
base: string;
|
|
45
|
+
};
|
|
46
|
+
vertical: {
|
|
47
|
+
base: string;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
fullWidth: {
|
|
51
|
+
true: {
|
|
52
|
+
base: string;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
}, {
|
|
56
|
+
base: string;
|
|
57
|
+
main: string;
|
|
58
|
+
info: string;
|
|
59
|
+
content: string;
|
|
60
|
+
description: string;
|
|
61
|
+
}, undefined, unknown, unknown, undefined>>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
export const formSection = tv({
|
|
3
|
+
slots: {
|
|
4
|
+
base: 'fragment-form-section',
|
|
5
|
+
main: 'fragment-form-section__main',
|
|
6
|
+
info: 'fragment-form-section__info',
|
|
7
|
+
content: 'fragment-form-section__content',
|
|
8
|
+
description: 'fragment-form-section__description',
|
|
9
|
+
},
|
|
10
|
+
variants: {
|
|
11
|
+
direction: {
|
|
12
|
+
horizontal: { base: 'fragment-form-section--horizontal' },
|
|
13
|
+
vertical: { base: 'fragment-form-section--vertical' },
|
|
14
|
+
},
|
|
15
|
+
fullWidth: {
|
|
16
|
+
true: { base: 'fragment-form-section--full-width' },
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
direction: 'vertical',
|
|
21
|
+
fullWidth: false,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=FormSection.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormSection.styles.js","sourceRoot":"","sources":["../../src/fragments/form/FormSection.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;IAC5B,KAAK,EAAE;QACL,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,6BAA6B;QACnC,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE,gCAAgC;QACzC,WAAW,EAAE,oCAAoC;KAClD;IACD,QAAQ,EAAE;QACR,SAAS,EAAE;YACT,UAAU,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE;YACzD,QAAQ,EAAE,EAAE,IAAI,EAAE,iCAAiC,EAAE;SACtD;QACD,SAAS,EAAE;YACT,IAAI,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE;SACpD;KACF;IACD,eAAe,EAAE;QACf,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,KAAK;KACjB;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { AvatarImageProps, AvatarProps, DropdownItemProps, DropdownProps } from '@heroui/react';
|
|
2
|
+
/**
|
|
3
|
+
* Primary UI component for Dashboard Navbars
|
|
4
|
+
*/
|
|
5
|
+
interface NavbarNavigationItem {
|
|
6
|
+
label: string;
|
|
7
|
+
link: string;
|
|
8
|
+
onClick?: React.MouseEventHandler;
|
|
9
|
+
icon?: React.ReactNode;
|
|
10
|
+
endContent?: React.ReactNode;
|
|
11
|
+
badgeContent?: React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
interface NavbarItemUser {
|
|
14
|
+
avatar?: AvatarProps & AvatarImageProps;
|
|
15
|
+
name: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
dropdown?: Omit<DropdownProps, 'children'>;
|
|
18
|
+
dropdownItems?: (Omit<DropdownItemProps, 'children'> & {
|
|
19
|
+
label: string;
|
|
20
|
+
})[];
|
|
21
|
+
}
|
|
22
|
+
export interface NavbarProps {
|
|
23
|
+
startContent?: React.ReactNode;
|
|
24
|
+
endContent?: React.ReactNode;
|
|
25
|
+
navigation?: NavbarNavigationItem[];
|
|
26
|
+
user?: NavbarItemUser;
|
|
27
|
+
currentPath?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare const Navbar: React.FC<NavbarProps>;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createElement as _createElement } from "react";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { Avatar, Badge, Button, Dropdown, ScrollShadow, Tabs, Tooltip } from '@heroui/react';
|
|
4
|
+
import { IconDots } from '@tabler/icons-react';
|
|
5
|
+
import { useEffect, useState } from 'react';
|
|
6
|
+
import { useFragmentUI } from '../../context';
|
|
7
|
+
import { navbar } from './Navbar.styles';
|
|
8
|
+
const getActiveNav = (currentPath, navigation) => {
|
|
9
|
+
if (!currentPath)
|
|
10
|
+
return;
|
|
11
|
+
const possibleMatches = navigation.filter((navItem) => navItem.link.startsWith(currentPath)).sort((a, b) => b.link.length - a.link.length);
|
|
12
|
+
return possibleMatches.find((pMatch) => pMatch.link === currentPath) || possibleMatches[0];
|
|
13
|
+
};
|
|
14
|
+
export const Navbar = ({ navigation, user, startContent, endContent, currentPath }) => {
|
|
15
|
+
const v = navbar();
|
|
16
|
+
const { linkComponent: LinkComponent } = useFragmentUI();
|
|
17
|
+
const [activeNav, setActiveNav] = useState(getActiveNav(currentPath, navigation ?? []));
|
|
18
|
+
useEffect(() => setActiveNav(getActiveNav(currentPath, navigation ?? [])), [currentPath, navigation]);
|
|
19
|
+
const overflowItems = (navigation ?? []).slice(4);
|
|
20
|
+
const isOverflowActive = overflowItems.some((item) => activeNav?.link === item.link);
|
|
21
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: v.topbar(), children: [startContent, _jsx(ScrollShadow, { hideScrollBar: true, orientation: "horizontal", className: v.tabs(), children: _jsx(Tabs, { selectedKey: activeNav?.label, onSelectionChange: (key) => {
|
|
22
|
+
const nav = navigation?.find((item) => item.label === key);
|
|
23
|
+
setActiveNav(nav);
|
|
24
|
+
}, children: _jsx(Tabs.ListContainer, { children: _jsx(Tabs.List, { children: navigation?.map((item) => (_jsxs(Tabs.Tab, { id: item.label, className: v.tab(), render: (domProps) => _jsx(LinkComponent, { ...domProps, href: item.link }), children: [item.label, _jsx(Tabs.Indicator, {})] }, item.label))) }) }) }) }), _jsxs("div", { className: v.end(), children: [endContent, user && (_jsxs(Dropdown, { ...user.dropdown, children: [_jsx(Dropdown.Trigger, { children: _jsxs(Avatar, { ...user.avatar, children: [_jsx(Avatar.Image, { ...user.avatar }), _jsx(Avatar.Fallback, { children: user.name.charAt(0) })] }) }), _jsx(Dropdown.Popover, { className: "min-w-[256px]", placement: "bottom start", children: _jsx(Dropdown.Menu, { "aria-label": "User Actions", items: user.dropdownItems || [], children: (dropdownItem) => (_createElement(Dropdown.Item, { ...dropdownItem, key: dropdownItem.label }, dropdownItem.label)) }) })] }))] })] }), _jsxs("nav", { className: v.bottomNav(), children: [navigation?.slice(0, 4).map((navItem) => (_jsxs(Tooltip, { children: [_jsx(Tooltip.Content, { placement: "top", offset: 10, children: navItem.label }), _jsx(Button, { render: (props) => _jsx(LinkComponent, { href: navItem.link, children: _jsx("button", { ...props }) }), isIconOnly: true, variant: activeNav?.link === navItem.link ? 'tertiary' : 'ghost', fullWidth: true, children: _jsxs(Badge.Anchor, { children: [navItem.icon, typeof navItem.badgeContent === 'string' && navItem.badgeContent ? (_jsx(Badge, { variant: "primary", color: "accent", size: "sm", className: v.bottomNavBadge(), children: navItem.badgeContent })) : null] }) })] }, navItem.label))), overflowItems.length > 0 && (_jsxs(Dropdown, { children: [_jsx(Dropdown.Trigger, { children: _jsx(Button, { variant: isOverflowActive ? 'tertiary' : 'ghost', isIconOnly: true, fullWidth: true, children: _jsx(IconDots, {}) }) }), _jsx(Dropdown.Popover, { placement: "top end", children: _jsx(Dropdown.Menu, { "aria-label": "More navigation", children: overflowItems.map((item) => (_jsxs(Dropdown.Item, { href: item.link, children: [item.icon, item.label] }, item.label))) }) })] }))] })] }));
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=Navbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Navbar.js","sourceRoot":"","sources":["../../src/fragments/navbar/Navbar.tsx"],"names":[],"mappings":"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"}
|