@skalfa/skalfa-app 1.0.0 → 1.0.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.
Files changed (87) hide show
  1. package/.env.example +43 -43
  2. package/.github/workflows/publish.yml +39 -0
  3. package/CONTRIBUTING.md +45 -0
  4. package/LICENSE +21 -0
  5. package/README.md +91 -28
  6. package/app/auth/edit/page.tsx +65 -65
  7. package/app/auth/login/page.tsx +63 -63
  8. package/app/auth/me/page.tsx +58 -58
  9. package/app/auth/register/page.tsx +69 -69
  10. package/app/auth/verify/page.tsx +53 -53
  11. package/app/dashboard/user/page.tsx +76 -76
  12. package/app/layout.tsx +37 -37
  13. package/app/manifest.ts +25 -0
  14. package/app/page.tsx +13 -13
  15. package/barrels.json +5 -5
  16. package/blueprints/starter.blueprint.json +102 -102
  17. package/bun.lock +916 -0
  18. package/components/base.components/chip/Chip.component.tsx +39 -39
  19. package/components/base.components/document/DocumentViewer.component.tsx +163 -163
  20. package/components/base.components/document/ExportExcel.component.tsx +340 -340
  21. package/components/base.components/document/ImportExcel.component.tsx +315 -315
  22. package/components/base.components/document/PrintTable.component.tsx +204 -204
  23. package/components/base.components/document/RenderPDF.component.tsx +415 -415
  24. package/components/base.components/input/Checkbox.component.tsx +109 -109
  25. package/components/base.components/input/Input.component.tsx +332 -332
  26. package/components/base.components/input/InputCheckbox.component.tsx +174 -174
  27. package/components/base.components/input/InputCurrency.component.tsx +163 -163
  28. package/components/base.components/input/InputDate.component.tsx +352 -352
  29. package/components/base.components/input/InputDatetime.component.tsx +260 -260
  30. package/components/base.components/input/InputDocument.component.tsx +351 -351
  31. package/components/base.components/input/InputImage.component.tsx +533 -533
  32. package/components/base.components/input/InputMap.component.tsx +317 -317
  33. package/components/base.components/input/InputNumber.component.tsx +192 -192
  34. package/components/base.components/input/InputOtp.component.tsx +169 -169
  35. package/components/base.components/input/InputPassword.component.tsx +236 -236
  36. package/components/base.components/input/InputRadio.component.tsx +175 -175
  37. package/components/base.components/input/InputTime.component.tsx +275 -275
  38. package/components/base.components/input/InputValues.component.tsx +68 -68
  39. package/components/base.components/input/Radio.component.tsx +102 -102
  40. package/components/base.components/input/Select.component.tsx +541 -541
  41. package/components/base.components/modal/BottomSheet.component.tsx +245 -245
  42. package/components/base.components/supervision/FormSupervision.component.tsx +433 -433
  43. package/components/base.components/supervision/TableSupervision.component.tsx +697 -697
  44. package/components/base.components/table/ControlBar.component.tsx +497 -497
  45. package/components/base.components/table/FilterComponent.tsx +518 -518
  46. package/components/base.components/table/Table.component.tsx +469 -469
  47. package/components/base.components/typography/TypographyArticle.component.tsx +26 -26
  48. package/components/base.components/typography/TypographyColumn.component.tsx +20 -20
  49. package/components/base.components/typography/TypographyContent.component.tsx +20 -20
  50. package/components/base.components/typography/TypographyTips.component.tsx +20 -20
  51. package/components/base.components/wrap/Draggable.component.tsx +303 -303
  52. package/components/base.components/wrap/IDBProvider.tsx +12 -12
  53. package/components/base.components/wrap/Image.component.tsx +9 -9
  54. package/components/base.components/wrap/ShortcutProvider.tsx +57 -57
  55. package/components/base.components/wrap/Swipe.component.tsx +93 -93
  56. package/components/index.ts +2 -2
  57. package/contexts/AppProvider.tsx +11 -11
  58. package/contexts/Auth.context.tsx +64 -64
  59. package/contexts/Toggle.context.tsx +44 -44
  60. package/next.config.ts +15 -1
  61. package/package.json +14 -13
  62. package/public/204.svg +19 -19
  63. package/public/500.svg +39 -39
  64. package/public/icon-192.png +0 -0
  65. package/public/icon-512.png +0 -0
  66. package/public/images/logo-fill.png +0 -0
  67. package/public/images/logo-full-fill.png +0 -0
  68. package/public/images/logo-full.png +0 -0
  69. package/public/images/logo.png +0 -0
  70. package/schema/idb/app.schema.ts +8 -8
  71. package/src-tauri/Cargo.toml +14 -0
  72. package/src-tauri/build.rs +3 -0
  73. package/src-tauri/capabilities/default.json +11 -0
  74. package/src-tauri/icons/128x128.png +0 -0
  75. package/src-tauri/icons/128x128@2x.png +0 -0
  76. package/src-tauri/icons/32x32.png +0 -0
  77. package/src-tauri/icons/icon.icns +0 -0
  78. package/src-tauri/icons/icon.ico +0 -0
  79. package/src-tauri/src/main.rs +7 -0
  80. package/src-tauri/tauri.conf.json +36 -0
  81. package/styles/globals.css +231 -231
  82. package/styles/tailwind.safelist +68 -68
  83. package/utils/commands/barrels.ts +27 -27
  84. package/utils/commands/light.ts +21 -21
  85. package/utils/commands/logger.ts +42 -42
  86. package/utils/commands/stubs/table-blueprint.stub +12 -12
  87. package/utils/commands/use-pdf.ts +29 -29
@@ -1,58 +1,58 @@
1
- "use client"
2
-
3
- import { useRouter } from "next/navigation";
4
- import { auth } from "@utils";
5
- import { useAuthContext } from "@contexts";
6
- import { ButtonComponent, CardComponent, ImageComponent } from "@components";
7
-
8
- export default function Login() {
9
- const router = useRouter();
10
- const {user} = useAuthContext();
11
-
12
- return (
13
- <>
14
- <div className="h-screen flex flex-col justify-center items-center">
15
- <h1 className="text-2xl font-extrabold italic">WELCOME TO NEXT-LIGHT v.3</h1>
16
- <p className="text-sm font-semibold mt-6">Your account!</p>
17
-
18
- <CardComponent className="mt-4 p-6 w-[400px] rounded-2xl">
19
- <div className="flex gap-4">
20
- {user?.image && (
21
-
22
- <div className="bg-slate-200 aspect-[3/4] w-full rounded flex justify-center items-center">
23
- <ImageComponent src={process.env.NEXT_PUBLIC_STORAGE_HOST + user?.image} width={400} height={600} alt="" />
24
- </div>
25
- )}
26
- <div className="flex flex-col gap-4">
27
- <div>
28
- <p className="text-xs font-semibold text-light-foreground">
29
- Name
30
- </p>
31
- <p>{user?.name}</p>
32
- </div>
33
- <div>
34
- <p className="text-xs font-semibold text-light-foreground">
35
- Email
36
- </p>
37
- <p>{user?.email}</p>
38
- </div>
39
-
40
- <ButtonComponent href="/auth/edit" label="Change" variant="light" block className="py-1.5" />
41
- <ButtonComponent
42
- label="Logout"
43
- variant="outline"
44
- paint="danger"
45
- className="py-1.5"
46
- block
47
- onClick={() => {
48
- auth.deleteAccessToken()
49
- router.push("/auth/login")
50
- }}
51
- />
52
- </div>
53
- </div>
54
- </CardComponent>
55
- </div>
56
- </>
57
- );
58
- }
1
+ "use client"
2
+
3
+ import { useRouter } from "next/navigation";
4
+ import { auth } from "@utils";
5
+ import { useAuthContext } from "@contexts";
6
+ import { ButtonComponent, CardComponent, ImageComponent } from "@components";
7
+
8
+ export default function Login() {
9
+ const router = useRouter();
10
+ const {user} = useAuthContext();
11
+
12
+ return (
13
+ <>
14
+ <div className="h-screen flex flex-col justify-center items-center">
15
+ <h1 className="text-2xl font-extrabold italic">WELCOME TO NEXT-LIGHT v.3</h1>
16
+ <p className="text-sm font-semibold mt-6">Your account!</p>
17
+
18
+ <CardComponent className="mt-4 p-6 w-[400px] rounded-2xl">
19
+ <div className="flex gap-4">
20
+ {user?.image && (
21
+
22
+ <div className="bg-slate-200 aspect-[3/4] w-full rounded flex justify-center items-center">
23
+ <ImageComponent src={process.env.NEXT_PUBLIC_STORAGE_HOST + user?.image} width={400} height={600} alt="" />
24
+ </div>
25
+ )}
26
+ <div className="flex flex-col gap-4">
27
+ <div>
28
+ <p className="text-xs font-semibold text-light-foreground">
29
+ Name
30
+ </p>
31
+ <p>{user?.name}</p>
32
+ </div>
33
+ <div>
34
+ <p className="text-xs font-semibold text-light-foreground">
35
+ Email
36
+ </p>
37
+ <p>{user?.email}</p>
38
+ </div>
39
+
40
+ <ButtonComponent href="/auth/edit" label="Change" variant="light" block className="py-1.5" />
41
+ <ButtonComponent
42
+ label="Logout"
43
+ variant="outline"
44
+ paint="danger"
45
+ className="py-1.5"
46
+ block
47
+ onClick={() => {
48
+ auth.deleteAccessToken()
49
+ router.push("/auth/login")
50
+ }}
51
+ />
52
+ </div>
53
+ </div>
54
+ </CardComponent>
55
+ </div>
56
+ </>
57
+ );
58
+ }
@@ -1,69 +1,69 @@
1
- "use client"
2
-
3
- import Link from "next/link";
4
- import { useRouter } from "next/navigation";
5
- import { ButtonComponent, CardComponent, FormSupervisionComponent } from "@components";
6
- import { useAuthContext } from "@contexts";
7
-
8
- export default function Register() {
9
- const router = useRouter();
10
- const {setRegisterToken} = useAuthContext();
11
-
12
- return (
13
- <>
14
- <div className="h-screen flex flex-col justify-center items-center">
15
- <h1 className="text-2xl font-extrabold italic">WELCOME TO NEXT-LIGHT v.3</h1>
16
- <p className="text-sm font-semibold mt-6">Create new account!</p>
17
-
18
- <CardComponent className="mt-4 p-6 w-[400px] rounded-2xl">
19
- <FormSupervisionComponent
20
- fields={[
21
- {
22
- construction: {
23
- name: "name",
24
- label: "Nama",
25
- placeholder: "Ex: Joko Gunawan",
26
- }
27
- },
28
- {
29
- construction: {
30
- name: "email",
31
- label: "E-mail",
32
- placeholder: "Ex: example@mail.com",
33
- }
34
- },
35
- {
36
- type: "enter-password",
37
- construction: {
38
- name: "password",
39
- label: "Password",
40
- placeholder: "Ex: secret123",
41
- }
42
- },
43
- ]}
44
- submitControl={{
45
- path: "register"
46
- }}
47
- onSuccess={(res) => {
48
- setRegisterToken(res?.data?.token)
49
- router.push("/auth/verify")
50
- }}
51
- footerControl={({loading}) => (
52
- <>
53
- <ButtonComponent
54
- type="submit"
55
- label="Create Account"
56
- block
57
- className="mt-4"
58
- loading={loading}
59
- />
60
-
61
- <p className="mt-4 text-center">Already have an account? <Link href="/auth/login" className="text-primary underline">Login</Link></p>
62
- </>
63
- )}
64
- />
65
- </CardComponent>
66
- </div>
67
- </>
68
- );
69
- }
1
+ "use client"
2
+
3
+ import Link from "next/link";
4
+ import { useRouter } from "next/navigation";
5
+ import { ButtonComponent, CardComponent, FormSupervisionComponent } from "@components";
6
+ import { useAuthContext } from "@contexts";
7
+
8
+ export default function Register() {
9
+ const router = useRouter();
10
+ const {setRegisterToken} = useAuthContext();
11
+
12
+ return (
13
+ <>
14
+ <div className="h-screen flex flex-col justify-center items-center">
15
+ <h1 className="text-2xl font-extrabold italic">WELCOME TO NEXT-LIGHT v.3</h1>
16
+ <p className="text-sm font-semibold mt-6">Create new account!</p>
17
+
18
+ <CardComponent className="mt-4 p-6 w-[400px] rounded-2xl">
19
+ <FormSupervisionComponent
20
+ fields={[
21
+ {
22
+ construction: {
23
+ name: "name",
24
+ label: "Nama",
25
+ placeholder: "Ex: Joko Gunawan",
26
+ }
27
+ },
28
+ {
29
+ construction: {
30
+ name: "email",
31
+ label: "E-mail",
32
+ placeholder: "Ex: example@mail.com",
33
+ }
34
+ },
35
+ {
36
+ type: "enter-password",
37
+ construction: {
38
+ name: "password",
39
+ label: "Password",
40
+ placeholder: "Ex: secret123",
41
+ }
42
+ },
43
+ ]}
44
+ submitControl={{
45
+ path: "register"
46
+ }}
47
+ onSuccess={(res) => {
48
+ setRegisterToken(res?.data?.token)
49
+ router.push("/auth/verify")
50
+ }}
51
+ footerControl={({loading}) => (
52
+ <>
53
+ <ButtonComponent
54
+ type="submit"
55
+ label="Create Account"
56
+ block
57
+ className="mt-4"
58
+ loading={loading}
59
+ />
60
+
61
+ <p className="mt-4 text-center">Already have an account? <Link href="/auth/login" className="text-primary underline">Login</Link></p>
62
+ </>
63
+ )}
64
+ />
65
+ </CardComponent>
66
+ </div>
67
+ </>
68
+ );
69
+ }
@@ -1,53 +1,53 @@
1
- "use client"
2
-
3
- import Link from "next/link";
4
- import { useRouter } from "next/navigation";
5
- import { ButtonComponent, CardComponent, FormSupervisionComponent } from "@components";
6
- import { useAuthContext } from "@contexts/.";
7
-
8
- export default function Verify() {
9
- const router = useRouter();
10
- const {registerToken} = useAuthContext();
11
-
12
- return (
13
- <>
14
- <div className="h-screen flex flex-col justify-center items-center">
15
- <h1 className="text-2xl font-extrabold italic">WELCOME TO NEXT-LIGHT v.3</h1>
16
- <p className="text-sm font-semibold mt-6">Verify your email!</p>
17
-
18
- <CardComponent className="mt-4 p-6 w-[400px] rounded-2xl">
19
- <FormSupervisionComponent
20
- fields={[
21
- {
22
- type: "otp",
23
- construction: {
24
- name: "token",
25
- }
26
- },
27
- ]}
28
- submitControl={{
29
- path: "verify",
30
- bearer: registerToken || "",
31
- }}
32
- onSuccess={() => {
33
- router.push("/auth/login")
34
- }}
35
- footerControl={({loading}) => (
36
- <>
37
- <ButtonComponent
38
- type="submit"
39
- label="Submit"
40
- block
41
- className="mt-4"
42
- loading={loading}
43
- />
44
-
45
- <p className="mt-4 text-center">Already have an account? <Link href="/auth/login" className="text-primary underline">Login</Link></p>
46
- </>
47
- )}
48
- />
49
- </CardComponent>
50
- </div>
51
- </>
52
- );
53
- }
1
+ "use client"
2
+
3
+ import Link from "next/link";
4
+ import { useRouter } from "next/navigation";
5
+ import { ButtonComponent, CardComponent, FormSupervisionComponent } from "@components";
6
+ import { useAuthContext } from "@contexts/.";
7
+
8
+ export default function Verify() {
9
+ const router = useRouter();
10
+ const {registerToken} = useAuthContext();
11
+
12
+ return (
13
+ <>
14
+ <div className="h-screen flex flex-col justify-center items-center">
15
+ <h1 className="text-2xl font-extrabold italic">WELCOME TO NEXT-LIGHT v.3</h1>
16
+ <p className="text-sm font-semibold mt-6">Verify your email!</p>
17
+
18
+ <CardComponent className="mt-4 p-6 w-[400px] rounded-2xl">
19
+ <FormSupervisionComponent
20
+ fields={[
21
+ {
22
+ type: "otp",
23
+ construction: {
24
+ name: "token",
25
+ }
26
+ },
27
+ ]}
28
+ submitControl={{
29
+ path: "verify",
30
+ bearer: registerToken || "",
31
+ }}
32
+ onSuccess={() => {
33
+ router.push("/auth/login")
34
+ }}
35
+ footerControl={({loading}) => (
36
+ <>
37
+ <ButtonComponent
38
+ type="submit"
39
+ label="Submit"
40
+ block
41
+ className="mt-4"
42
+ loading={loading}
43
+ />
44
+
45
+ <p className="mt-4 text-center">Already have an account? <Link href="/auth/login" className="text-primary underline">Login</Link></p>
46
+ </>
47
+ )}
48
+ />
49
+ </CardComponent>
50
+ </div>
51
+ </>
52
+ );
53
+ }
@@ -1,77 +1,77 @@
1
- import { TableSupervisionComponent} from "@components";
2
- import { Suspense } from "react";
3
-
4
- export default function Table() {
5
- return (
6
- <Suspense fallback={<div>Loading...</div>}>
7
- <TableSupervisionComponent
8
- title="User"
9
- fetchControl={{
10
- path: "users",
11
- }}
12
- columnControl={[
13
- {
14
- selector: "name",
15
- label: "Nama",
16
- sortable: true,
17
- filterable: true,
18
- width: "350px",
19
- },
20
- {
21
- selector: "email",
22
- label: "Email",
23
- sortable: true,
24
- width: "250px",
25
- },
26
- ]}
27
- detailControl={[
28
- {
29
- label: "Nama",
30
- item: "name",
31
- },
32
- {
33
- label: "Email",
34
- item: "email",
35
- }
36
- ]}
37
- formControl={{
38
- fields: [
39
- {
40
- construction: {
41
- name: "email",
42
- label: "E-mail",
43
- placeholder: "Ex: example@mail.com",
44
- validations: ["required"],
45
- },
46
- },
47
- {
48
- construction: {
49
- name: "name",
50
- label: "Name",
51
- placeholder: "Ex: Joko Gunawan",
52
- },
53
- },
54
- {
55
- construction: {
56
- name: "password",
57
- label: "Password",
58
- placeholder: "Ex: secret123",
59
- }
60
- },
61
- {
62
- construction: {
63
- type: "file",
64
- name: "image",
65
- label: "Picture",
66
- }
67
- },
68
- ],
69
- }}
70
- controlBar={["CREATE", "FILTER", "SEARCH", "SORT", "SELECTABLE", "IMPORT", "EXPORT", "PRINT", "REFRESH"]}
71
- responsiveControl={{
72
- mobile: true,
73
- }}
74
- />
75
- </Suspense>
76
- );
1
+ import { TableSupervisionComponent} from "@components";
2
+ import { Suspense } from "react";
3
+
4
+ export default function Table() {
5
+ return (
6
+ <Suspense fallback={<div>Loading...</div>}>
7
+ <TableSupervisionComponent
8
+ title="User"
9
+ fetchControl={{
10
+ path: "users",
11
+ }}
12
+ columnControl={[
13
+ {
14
+ selector: "name",
15
+ label: "Nama",
16
+ sortable: true,
17
+ filterable: true,
18
+ width: "350px",
19
+ },
20
+ {
21
+ selector: "email",
22
+ label: "Email",
23
+ sortable: true,
24
+ width: "250px",
25
+ },
26
+ ]}
27
+ detailControl={[
28
+ {
29
+ label: "Nama",
30
+ item: "name",
31
+ },
32
+ {
33
+ label: "Email",
34
+ item: "email",
35
+ }
36
+ ]}
37
+ formControl={{
38
+ fields: [
39
+ {
40
+ construction: {
41
+ name: "email",
42
+ label: "E-mail",
43
+ placeholder: "Ex: example@mail.com",
44
+ validations: ["required"],
45
+ },
46
+ },
47
+ {
48
+ construction: {
49
+ name: "name",
50
+ label: "Name",
51
+ placeholder: "Ex: Joko Gunawan",
52
+ },
53
+ },
54
+ {
55
+ construction: {
56
+ name: "password",
57
+ label: "Password",
58
+ placeholder: "Ex: secret123",
59
+ }
60
+ },
61
+ {
62
+ construction: {
63
+ type: "file",
64
+ name: "image",
65
+ label: "Picture",
66
+ }
67
+ },
68
+ ],
69
+ }}
70
+ controlBar={["CREATE", "FILTER", "SEARCH", "SORT", "SELECTABLE", "IMPORT", "EXPORT", "PRINT", "REFRESH"]}
71
+ responsiveControl={{
72
+ mobile: true,
73
+ }}
74
+ />
75
+ </Suspense>
76
+ );
77
77
  }
package/app/layout.tsx CHANGED
@@ -1,38 +1,38 @@
1
- import { ReactNode } from "react";
2
-
3
- import { Roboto } from "next/font/google";
4
- import "@styles/globals.css";
5
-
6
- import moment from "moment";
7
- import "moment/locale/id";
8
-
9
- import { config } from "@fortawesome/fontawesome-svg-core";
10
- import "@fortawesome/fontawesome-svg-core/styles.css";
11
-
12
- import { ContextAppProvider } from "@contexts/AppProvider";
13
- import { IDBProvider, ShortcutProvider } from "@components";
14
-
15
- moment.locale("id");
16
- config.autoAddCss = false;
17
-
18
-
19
- const font = Roboto({
20
- subsets: ["latin"],
21
- weight: ["100", "300", "400", "500", "700", "900"],
22
- });
23
-
24
-
25
- export default function AppLayout({ children }: { children: ReactNode }) {
26
- return (
27
- <html lang="id" className={font.className}>
28
- <body className="antialiased">
29
- <ContextAppProvider>
30
- <ShortcutProvider />
31
- <IDBProvider>
32
- {children}
33
- </IDBProvider>
34
- </ContextAppProvider>
35
- </body>
36
- </html>
37
- );
1
+ import { ReactNode } from "react";
2
+
3
+ import { Roboto } from "next/font/google";
4
+ import "@styles/globals.css";
5
+
6
+ import moment from "moment";
7
+ import "moment/locale/id";
8
+
9
+ import { config } from "@fortawesome/fontawesome-svg-core";
10
+ import "@fortawesome/fontawesome-svg-core/styles.css";
11
+
12
+ import { ContextAppProvider } from "@contexts/AppProvider";
13
+ import { IDBProvider, ShortcutProvider } from "@components";
14
+
15
+ moment.locale("id");
16
+ config.autoAddCss = false;
17
+
18
+
19
+ const font = Roboto({
20
+ subsets: ["latin"],
21
+ weight: ["100", "300", "400", "500", "700", "900"],
22
+ });
23
+
24
+
25
+ export default function AppLayout({ children }: { children: ReactNode }) {
26
+ return (
27
+ <html lang="id" className={font.className}>
28
+ <body className="antialiased">
29
+ <ContextAppProvider>
30
+ <ShortcutProvider />
31
+ <IDBProvider>
32
+ {children}
33
+ </IDBProvider>
34
+ </ContextAppProvider>
35
+ </body>
36
+ </html>
37
+ );
38
38
  }
@@ -0,0 +1,25 @@
1
+ import type { MetadataRoute } from "next";
2
+
3
+ export default function manifest(): MetadataRoute.Manifest {
4
+ return {
5
+ name: "Skalfa App",
6
+ short_name: "Skalfa",
7
+ description: "A premium hybrid web, desktop, and mobile application.",
8
+ start_url: "/",
9
+ display: "standalone",
10
+ background_color: "#0f172a",
11
+ theme_color: "#3b82f6",
12
+ icons: [
13
+ {
14
+ src: "/icon-192.png",
15
+ sizes: "192x192",
16
+ type: "image/png",
17
+ },
18
+ {
19
+ src: "/icon-512.png",
20
+ sizes: "512x512",
21
+ type: "image/png",
22
+ },
23
+ ],
24
+ };
25
+ }
package/app/page.tsx CHANGED
@@ -1,13 +1,13 @@
1
- export default function Home() {
2
- return (
3
- <>
4
- <div className="h-screen flex flex-col justify-center items-center">
5
- <h1 className="text-2xl font-extrabold italic">NEXT-LIGHT v.3</h1>
6
-
7
- <p className="text-sm -mt-1 font-semibold text-light-foreground">
8
- The Magic Starter Template
9
- </p>
10
- </div>
11
- </>
12
- );
13
- }
1
+ export default function Home() {
2
+ return (
3
+ <>
4
+ <div className="h-screen flex flex-col justify-center items-center">
5
+ <h1 className="text-2xl font-extrabold italic">NEXT-LIGHT v.3</h1>
6
+
7
+ <p className="text-sm -mt-1 font-semibold text-light-foreground">
8
+ The Magic Starter Template
9
+ </p>
10
+ </div>
11
+ </>
12
+ );
13
+ }
package/barrels.json CHANGED
@@ -1,6 +1,6 @@
1
- {
2
- "directory": ["components/base.components", "components/construct.components", "components/structure.components", "contexts", "app", "schema"],
3
- "delete": true,
4
- "exclude": ["index.ts"],
5
- "structure": "flat"
1
+ {
2
+ "directory": ["components/base.components", "components/construct.components", "components/structure.components", "contexts", "app", "schema"],
3
+ "delete": true,
4
+ "exclude": ["index.ts"],
5
+ "structure": "flat"
6
6
  }