@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.
Files changed (74) hide show
  1. package/README.md +19 -29
  2. package/components/grid/Grid.d.ts +8 -0
  3. package/components/grid/Grid.js +7 -0
  4. package/components/grid/Grid.js.map +1 -0
  5. package/components/grid/Grid.styles.d.ts +43 -0
  6. package/components/grid/Grid.styles.js +17 -0
  7. package/components/grid/Grid.styles.js.map +1 -0
  8. package/components/multi-switch/MultiSwitch.d.ts +6 -0
  9. package/components/multi-switch/MultiSwitch.js +6 -0
  10. package/components/multi-switch/MultiSwitch.js.map +1 -0
  11. package/components/multi-switch/MultiSwitch.styles.d.ts +43 -0
  12. package/components/multi-switch/MultiSwitch.styles.js +14 -0
  13. package/components/multi-switch/MultiSwitch.styles.js.map +1 -0
  14. package/components/theme-switch/ThemeSwitch.d.ts +6 -0
  15. package/components/theme-switch/ThemeSwitch.js +16 -0
  16. package/components/theme-switch/ThemeSwitch.js.map +1 -0
  17. package/constants.d.ts +12 -0
  18. package/constants.js +13 -0
  19. package/constants.js.map +1 -0
  20. package/context.d.ts +7 -0
  21. package/context.js +6 -0
  22. package/context.js.map +1 -0
  23. package/fragments/form/Form.d.ts +8 -0
  24. package/fragments/form/Form.js +12 -0
  25. package/fragments/form/Form.js.map +1 -0
  26. package/fragments/form/Form.styles.d.ts +25 -0
  27. package/fragments/form/Form.styles.js +7 -0
  28. package/fragments/form/Form.styles.js.map +1 -0
  29. package/fragments/form/FormSection.d.ts +12 -0
  30. package/fragments/form/FormSection.js +7 -0
  31. package/fragments/form/FormSection.js.map +1 -0
  32. package/fragments/form/FormSection.styles.d.ts +61 -0
  33. package/fragments/form/FormSection.styles.js +24 -0
  34. package/fragments/form/FormSection.styles.js.map +1 -0
  35. package/fragments/navbar/Navbar.d.ts +30 -0
  36. package/fragments/navbar/Navbar.js +26 -0
  37. package/fragments/navbar/Navbar.js.map +1 -0
  38. package/fragments/navbar/Navbar.styles.d.ts +55 -0
  39. package/fragments/navbar/Navbar.styles.js +12 -0
  40. package/fragments/navbar/Navbar.styles.js.map +1 -0
  41. package/fragments/page/PageHeader.d.ts +10 -0
  42. package/fragments/page/PageHeader.js +7 -0
  43. package/fragments/page/PageHeader.js.map +1 -0
  44. package/fragments/page/PageHeader.styles.d.ts +37 -0
  45. package/fragments/page/PageHeader.styles.js +9 -0
  46. package/fragments/page/PageHeader.styles.js.map +1 -0
  47. package/fragments/shell/Shell.d.ts +18 -0
  48. package/fragments/shell/Shell.js +12 -0
  49. package/fragments/shell/Shell.js.map +1 -0
  50. package/fragments/shell/Shell.styles.d.ts +37 -0
  51. package/fragments/shell/Shell.styles.js +18 -0
  52. package/fragments/shell/Shell.styles.js.map +1 -0
  53. package/fragments/sidebar/Sidebar.d.ts +39 -0
  54. package/fragments/sidebar/Sidebar.js +83 -0
  55. package/fragments/sidebar/Sidebar.js.map +1 -0
  56. package/fragments/sidebar/Sidebar.styles.d.ts +79 -0
  57. package/fragments/sidebar/Sidebar.styles.js +26 -0
  58. package/fragments/sidebar/Sidebar.styles.js.map +1 -0
  59. package/fragments/sidebar/SidebarNavigation.d.ts +19 -0
  60. package/fragments/sidebar/SidebarNavigation.js +51 -0
  61. package/fragments/sidebar/SidebarNavigation.js.map +1 -0
  62. package/fragments/widget/Widget.d.ts +15 -0
  63. package/fragments/widget/Widget.js +11 -0
  64. package/fragments/widget/Widget.js.map +1 -0
  65. package/fragments/widget/Widget.styles.d.ts +52 -0
  66. package/fragments/widget/Widget.styles.js +20 -0
  67. package/fragments/widget/Widget.styles.js.map +1 -0
  68. package/index.d.ts +12 -0
  69. package/index.js +2 -55
  70. package/index.js.map +1 -0
  71. package/package.json +44 -40
  72. package/provider.d.ts +7 -0
  73. package/provider.js +7 -0
  74. 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
- @plugin '../hero.ts';
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
- ### Next.js 13+
98
+ #### `linkComponent`
118
99
 
119
- When using Next.js you will need to add a file to re-export Fragment UI using `'use client';` to tell Next.js to render them as client components.
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
- ```ts
122
- 'use client';
102
+ ```tsx
103
+ import Link from 'next/link';
104
+ import { FragmentUIProvider } from '@fragment-build/ui';
123
105
 
124
- export { ... } from '@fragment-build/ui';
106
+ function App() {
107
+ return (
108
+ <FragmentUIProvider linkComponent={Link}>
109
+ <YourApplication />
110
+ </FragmentUIProvider>
111
+ );
112
+ }
125
113
  ```
126
114
 
127
- Now just import all the components you need from this file.
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
- And you need to [setup Tailwind 4 using PostCSS](https://tailwindcss.com/docs/installation/framework-guides/nextjs)
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,8 @@
1
+ /**
2
+ * Primary UI component for selecting a color
3
+ */
4
+ export interface GridProps {
5
+ children: React.ReactNode;
6
+ size: 'sm' | 'md' | 'lg';
7
+ }
8
+ export declare const Grid: React.FC<GridProps>;
@@ -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,6 @@
1
+ import { type ButtonProps } from '@heroui/react';
2
+ /**
3
+ * Primary UI component for selecting a color
4
+ */
5
+ export type ThemeSwitchProps = ButtonProps;
6
+ export declare const ThemeSwitch: React.FC<ThemeSwitchProps>;
@@ -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
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Breakpoints from Tailwind V2
3
+ *
4
+ * @see https://tailwindcss.com/docs/breakpoints
5
+ */
6
+ export declare const breakpointsTailwind: {
7
+ sm: number;
8
+ md: number;
9
+ lg: number;
10
+ xl: number;
11
+ '2xl': number;
12
+ };
package/constants.js ADDED
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Breakpoints from Tailwind V2
3
+ *
4
+ * @see https://tailwindcss.com/docs/breakpoints
5
+ */
6
+ export const breakpointsTailwind = {
7
+ sm: 640,
8
+ md: 768,
9
+ lg: 1024,
10
+ xl: 1280,
11
+ '2xl': 1536
12
+ };
13
+ //# sourceMappingURL=constants.js.map
@@ -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
@@ -0,0 +1,6 @@
1
+ import { createContext, useContext } from 'react';
2
+ export const FragmentUIContext = createContext({
3
+ linkComponent: 'a',
4
+ });
5
+ export const useFragmentUI = () => useContext(FragmentUIContext);
6
+ //# sourceMappingURL=context.js.map
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,8 @@
1
+ /**
2
+ * Primary UI component for Form Sections
3
+ */
4
+ import React from 'react';
5
+ export interface FormProps extends React.FormHTMLAttributes<HTMLFormElement> {
6
+ children: React.ReactNode[];
7
+ }
8
+ export declare const Form: React.FC<FormProps>;
@@ -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,7 @@
1
+ import { tv } from 'tailwind-variants';
2
+ export const form = tv({
3
+ slots: {
4
+ separator: 'fragment-form__separator',
5
+ },
6
+ });
7
+ //# sourceMappingURL=Form.styles.js.map
@@ -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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"}