retail-design-system 1.0.0

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 (110) hide show
  1. package/.github/workflows/release.yml +46 -0
  2. package/.oxfmtrc.json +17 -0
  3. package/.oxlintrc.json +132 -0
  4. package/.vscode/extensions.json +3 -0
  5. package/.vscode/settings.json +13 -0
  6. package/README.md +56 -0
  7. package/apps/storybook/.storybook/main.ts +8 -0
  8. package/apps/storybook/.storybook/preview.css +9 -0
  9. package/apps/storybook/.storybook/preview.ts +6 -0
  10. package/apps/storybook/package.json +24 -0
  11. package/apps/storybook/stories/button.stories.ts +118 -0
  12. package/apps/storybook/stories/input.stories.ts +127 -0
  13. package/apps/storybook/stories/label.stories.ts +98 -0
  14. package/apps/storybook/tsconfig.app.json +24 -0
  15. package/apps/storybook/tsconfig.json +4 -0
  16. package/apps/storybook/tsconfig.node.json +22 -0
  17. package/apps/storybook/vite.config.ts +15 -0
  18. package/apps/web/app/(sidebar)/components/[...slugs]/get-child-block.ts +17 -0
  19. package/apps/web/app/(sidebar)/components/[...slugs]/get-component-page-match.ts +56 -0
  20. package/apps/web/app/(sidebar)/components/[...slugs]/get-direct-child-block.ts +22 -0
  21. package/apps/web/app/(sidebar)/components/[...slugs]/layout.tsx +25 -0
  22. package/apps/web/app/(sidebar)/components/[...slugs]/page.tsx +32 -0
  23. package/apps/web/app/(sidebar)/components/[...slugs]/pascal-to-kebab-case.ts +9 -0
  24. package/apps/web/app/(sidebar)/components/button2/page.tsx +154 -0
  25. package/apps/web/app/(sidebar)/components/input/page.tsx +98 -0
  26. package/apps/web/app/(sidebar)/experiments/2025-10-22/mayhem-mode-card-badge.tsx +9 -0
  27. package/apps/web/app/(sidebar)/experiments/2025-10-22/mayhem-mode-coin-active-badge.tsx +14 -0
  28. package/apps/web/app/(sidebar)/experiments/2025-10-22/mayhem-mode-coin-inactive-badge.tsx +12 -0
  29. package/apps/web/app/(sidebar)/experiments/2025-10-22/mayhem-mode-create-coin.tsx +44 -0
  30. package/apps/web/app/(sidebar)/experiments/2025-10-22/mayhem-mode-dialog-icon.tsx +47 -0
  31. package/apps/web/app/(sidebar)/experiments/2025-10-22/page.tsx +167 -0
  32. package/apps/web/app/(sidebar)/experiments/2025-11-04/filters.tsx +90 -0
  33. package/apps/web/app/(sidebar)/experiments/2025-11-04/page.tsx +18 -0
  34. package/apps/web/app/(sidebar)/layout.tsx +17 -0
  35. package/apps/web/app/(sidebar)/primitives/colors/page.tsx +49 -0
  36. package/apps/web/app/favicon.ico +0 -0
  37. package/apps/web/app/layout.tsx +39 -0
  38. package/apps/web/app/page.tsx +14 -0
  39. package/apps/web/app/providers.tsx +15 -0
  40. package/apps/web/components/dialog.tsx +21 -0
  41. package/apps/web/components/logo.tsx +11 -0
  42. package/apps/web/components/logomark.tsx +21 -0
  43. package/apps/web/components/logotype.tsx +25 -0
  44. package/apps/web/components/notion/notion-block-content.tsx +401 -0
  45. package/apps/web/components/notion/notion-docs-blocks.tsx +18 -0
  46. package/apps/web/components/notion/notion-docs-code-page.tsx +20 -0
  47. package/apps/web/components/notion/notion-docs-layout.tsx +52 -0
  48. package/apps/web/components/notion/notion-revalidate-button-client.tsx +14 -0
  49. package/apps/web/components/notion/notion-revalidate-button.tsx +20 -0
  50. package/apps/web/components/notion/notion-rich-text-segments.tsx +55 -0
  51. package/apps/web/components/notion/notion-tabs.tsx +38 -0
  52. package/apps/web/components/notion/notion.ts +223 -0
  53. package/apps/web/components/sidebar-client.tsx +60 -0
  54. package/apps/web/components/sidebar-server.tsx +185 -0
  55. package/apps/web/components/tooltip.tsx +53 -0
  56. package/apps/web/components/topbar.tsx +14 -0
  57. package/apps/web/next.config.ts +10 -0
  58. package/apps/web/package.json +42 -0
  59. package/apps/web/postcss.config.mjs +5 -0
  60. package/apps/web/public/2025-10-22-dialog-banner.png +0 -0
  61. package/apps/web/public/pump-logomark.svg +7 -0
  62. package/apps/web/styles/custom.css +31 -0
  63. package/apps/web/styles/font.css +8 -0
  64. package/apps/web/styles/global.css +5 -0
  65. package/apps/web/styles/tailwind-reset.css +102 -0
  66. package/apps/web/styles/tailwind.css +140 -0
  67. package/apps/web/tsconfig.json +34 -0
  68. package/bun.lock +1249 -0
  69. package/bunfig.toml +2 -0
  70. package/package.json +41 -0
  71. package/packages/ui/global.d.ts +4 -0
  72. package/packages/ui/package.json +49 -0
  73. package/packages/ui/src/components/button/button-spinner.module.css +95 -0
  74. package/packages/ui/src/components/button/button-spinner.tsx +18 -0
  75. package/packages/ui/src/components/button/button.module.css +144 -0
  76. package/packages/ui/src/components/button/button.tsx +102 -0
  77. package/packages/ui/src/components/button-link/button-link.tsx +46 -0
  78. package/packages/ui/src/components/column/column.module.css +4 -0
  79. package/packages/ui/src/components/column/column.tsx +65 -0
  80. package/packages/ui/src/components/row/row.module.css +4 -0
  81. package/packages/ui/src/components/row/row.tsx +65 -0
  82. package/packages/ui/src/components/spacer/spacer.module.css +3 -0
  83. package/packages/ui/src/components/spacer/spacer.tsx +30 -0
  84. package/packages/ui/src/components/switch/switch.module.css +62 -0
  85. package/packages/ui/src/components/switch/switch.tsx +58 -0
  86. package/packages/ui/src/components/tabs/tabs-panel.module.css +4 -0
  87. package/packages/ui/src/components/tabs/tabs-panel.tsx +21 -0
  88. package/packages/ui/src/components/tabs/tabs.module.css +5 -0
  89. package/packages/ui/src/components/tabs/tabs.tsx +21 -0
  90. package/packages/ui/src/components/tabs-underline/tabs-underline-indicator.module.css +10 -0
  91. package/packages/ui/src/components/tabs-underline/tabs-underline-indicator.tsx +33 -0
  92. package/packages/ui/src/components/tabs-underline/tabs-underline-list.module.css +8 -0
  93. package/packages/ui/src/components/tabs-underline/tabs-underline-list.tsx +27 -0
  94. package/packages/ui/src/components/tabs-underline/tabs-underline-tab.module.css +24 -0
  95. package/packages/ui/src/components/tabs-underline/tabs-underline-tab.tsx +30 -0
  96. package/packages/ui/src/foundations/colors/colors.ts +475 -0
  97. package/packages/ui/src/foundations/colors/generate-css.ts +34 -0
  98. package/packages/ui/src/foundations/colors/retail-design-system.css +116 -0
  99. package/packages/ui/src/foundations/colors/tailwind-v3.ts +18 -0
  100. package/packages/ui/src/foundations/colors/tailwind-v4.css +116 -0
  101. package/packages/ui/src/index.ts +34 -0
  102. package/packages/ui/src/input.module.css +57 -0
  103. package/packages/ui/src/input.tsx +49 -0
  104. package/packages/ui/src/label.module.css +8 -0
  105. package/packages/ui/src/label.tsx +23 -0
  106. package/packages/ui/tsconfig.json +14 -0
  107. package/packages/ui/tsup.config.ts +31 -0
  108. package/scripts/clean.sh +69 -0
  109. package/scripts/sort-package-json.sh +30 -0
  110. package/turbo.json +15 -0
@@ -0,0 +1,116 @@
1
+ @theme {
2
+ --color-bg-accent: #86EFAC;
3
+ --color-bg-accent-inverse: #052E16;
4
+ --color-bg-decorative-blue: #60A5FA;
5
+ --color-bg-decorative-blue-inverse: #1E3A8A;
6
+ --color-bg-decorative-orange: #FB923C;
7
+ --color-bg-decorative-orange-inverse: #7C2D12;
8
+ --color-bg-decorative-pink: #F472B6;
9
+ --color-bg-decorative-pink-inverse: #831843;
10
+ --color-bg-decorative-purple: #C084FC;
11
+ --color-bg-decorative-purple-inverse: #581C87;
12
+ --color-bg-error: #F87171;
13
+ --color-bg-error-inverse: #450A0A;
14
+ --color-bg-info: #60A5FA;
15
+ --color-bg-info-inverse: #172554;
16
+ --color-bg-interactive: #86EFAC;
17
+ --color-bg-interactive-disabled: #052E16;
18
+ --color-bg-interactive-inverse: #052E16;
19
+ --color-bg-inverse: #272a2d;
20
+ --color-bg-muted: #212225;
21
+ --color-bg-muted-disabled: #18191b;
22
+ --color-bg-muted-secondary: #272a2d;
23
+ --color-bg-muted-secondary-disabled: #212225;
24
+ --color-bg-primary: #111113;
25
+ --color-bg-secondary: #18191b;
26
+ --color-bg-success: #82E28D;
27
+ --color-bg-success-inverse: #0E2E12;
28
+ --color-bg-tertiary: #212225;
29
+ --color-bg-warning: #FACC15;
30
+ --color-bg-warning-inverse: #422006;
31
+ --color-blue-400: #60A5FA;
32
+ --color-blue-500: #3B82F6;
33
+ --color-blue-900: #1E3A8A;
34
+ --color-blue-950: #172554;
35
+ --color-border-accent: #22C55E;
36
+ --color-border-error: #EF4444;
37
+ --color-border-info: #3B82F6;
38
+ --color-border-inverse: #edeef0;
39
+ --color-border-primary: #18191b;
40
+ --color-border-secondary: #212225;
41
+ --color-border-success: #22C55E;
42
+ --color-border-tertiary: #272a2d;
43
+ --color-border-warning: #EAB308;
44
+ --color-green-100: #DCFCE7;
45
+ --color-green-200: #BBF7D0;
46
+ --color-green-300: #86EFAC;
47
+ --color-green-400: #4ADE80;
48
+ --color-green-50: #F0FDF4;
49
+ --color-green-500: #22C55E;
50
+ --color-green-600: #16A34A;
51
+ --color-green-700: #15803D;
52
+ --color-green-800: #166534;
53
+ --color-green-900: #14532D;
54
+ --color-green-950: #052E16;
55
+ --color-neutral-200: #E4E4E7;
56
+ --color-neutral-400: #A1A1AA;
57
+ --color-neutral-50: #FAFAFA;
58
+ --color-orange-400: #FB923C;
59
+ --color-orange-900: #7C2D12;
60
+ --color-pink-400: #F472B6;
61
+ --color-pink-900: #831843;
62
+ --color-purple-400: #C084FC;
63
+ --color-purple-900: #581C87;
64
+ --color-red-400: #F87171;
65
+ --color-red-500: #EF4444;
66
+ --color-red-900: #7F1D1D;
67
+ --color-red-950: #450A0A;
68
+ --color-sprout-100: #DDF8E0;
69
+ --color-sprout-200: #C2F2C7;
70
+ --color-sprout-300: #A3EAAB;
71
+ --color-sprout-400: #82E28D;
72
+ --color-sprout-50: #F2FCF3;
73
+ --color-sprout-500: #5DDF6C;
74
+ --color-sprout-600: #3DCC4D;
75
+ --color-sprout-700: #2EAA3C;
76
+ --color-sprout-800: #25812F;
77
+ --color-sprout-900: #1A5821;
78
+ --color-sprout-950: #0E2E12;
79
+ --color-text-accent: #86EFAC;
80
+ --color-text-accent-muted: #14532D;
81
+ --color-text-error: #F87171;
82
+ --color-text-error-muted: #7F1D1D;
83
+ --color-text-info: #3B82F6;
84
+ --color-text-info-muted: #1E3A8A;
85
+ --color-text-inverse: #111113;
86
+ --color-text-muted: #363a3f;
87
+ --color-text-on-accent: #052E16;
88
+ --color-text-on-disabled: #43484e;
89
+ --color-text-on-error: #450A0A;
90
+ --color-text-on-info: #172554;
91
+ --color-text-on-muted: #edeef0;
92
+ --color-text-on-success: #0E2E12;
93
+ --color-text-on-warning: #422006;
94
+ --color-text-primary: #FAFAFA;
95
+ --color-text-secondary: #E4E4E7;
96
+ --color-text-success: #5DDF6C;
97
+ --color-text-success-muted: #1A5821;
98
+ --color-text-tertiary: #A1A1AA;
99
+ --color-text-warning: #EAB308;
100
+ --color-text-warning-muted: #713F12;
101
+ --color-yellow-400: #FACC15;
102
+ --color-yellow-500: #EAB308;
103
+ --color-yellow-900: #713F12;
104
+ --color-yellow-950: #422006;
105
+ --color-zinc-100: #b0b4ba;
106
+ --color-zinc-200: #696e77;
107
+ --color-zinc-300: #5a6169;
108
+ --color-zinc-400: #43484e;
109
+ --color-zinc-50: #edeef0;
110
+ --color-zinc-500: #363a3f;
111
+ --color-zinc-600: #2e3135;
112
+ --color-zinc-700: #272a2d;
113
+ --color-zinc-800: #212225;
114
+ --color-zinc-900: #18191b;
115
+ --color-zinc-950: #111113;
116
+ }
@@ -0,0 +1,34 @@
1
+ export { ButtonLink, type ButtonLinkProps } from "@/components/button-link/button-link"
2
+ export {
3
+ Button,
4
+ BUTTON_CLASS_NAME,
5
+ type ButtonIconProps,
6
+ type ButtonProps,
7
+ } from "@/components/button/button"
8
+ export { Column, COLUMN_CLASS_NAME, type ColumnProps } from "@/components/column/column"
9
+ export { Row, ROW_CLASS_NAME, type RowProps } from "@/components/row/row"
10
+ export { Spacer, SPACER_CLASS_NAME, type SpacerProps } from "@/components/spacer/spacer"
11
+ export { Switch, SWITCH_CLASS_NAME, type SwitchProps } from "@/components/switch/switch"
12
+ export {
13
+ TABS_UNDERLINE_LIST_CLASS_NAME,
14
+ TabsUnderlineList,
15
+ type TabsUnderlineListProps,
16
+ } from "@/components/tabs-underline/tabs-underline-list"
17
+ export {
18
+ TABS_UNDERLINE_TAB_CLASS_NAME,
19
+ TabsUnderlineTab,
20
+ type TabsUnderlineTabProps,
21
+ } from "@/components/tabs-underline/tabs-underline-tab"
22
+ export { Tabs, TABS_CLASS_NAME, type TabsProps } from "@/components/tabs/tabs"
23
+ export { TABS_PANEL_CLASS_NAME, TabsPanel, type TabsPanelProps } from "@/components/tabs/tabs-panel"
24
+ export {
25
+ composite,
26
+ type CompositeColor,
27
+ type CompositeColorName,
28
+ primitive,
29
+ type PrimitiveColor,
30
+ type PrimitiveColorName,
31
+ } from "@/foundations/colors/colors"
32
+ export { tailwindV3Colors } from "@/foundations/colors/tailwind-v3"
33
+ export { Input, INPUT_CLASS_NAME, type InputProps } from "@/input"
34
+ export { Label, LABEL_CLASS_NAME, type LabelProps } from "@/label"
@@ -0,0 +1,57 @@
1
+ /* ===================================================== */
2
+ /* Base */
3
+ /* ===================================================== */
4
+ .input {
5
+ width: 100%;
6
+ height: 40px;
7
+ padding: 0 12px;
8
+ font-family: var(--font-sans, sans-serif);
9
+ font-size: 14px;
10
+ font-weight: 400;
11
+ line-height: 1.5;
12
+ color: var(--color-text-primary);
13
+ text-decoration: none;
14
+ appearance: none;
15
+ cursor: text;
16
+ outline-width: 0;
17
+ outline-style: solid;
18
+ outline-color: var(--color-bg-accent);
19
+ outline-offset: 2px;
20
+ background-color: var(--color-bg-secondary);
21
+ border-color: var(--color-border-secondary);
22
+ border-style: solid;
23
+ border-width: 1px;
24
+ border-radius: 12px;
25
+ box-shadow: 0 1px rgba(0, 0, 0, 0.05);
26
+ transition-duration: 150ms;
27
+ transition-property: background-color, border-color, box-shadow, opacity;
28
+ }
29
+
30
+ .input::placeholder {
31
+ color: var(--color-text-muted);
32
+ user-select: none;
33
+ }
34
+
35
+ .input:disabled {
36
+ cursor: not-allowed;
37
+ opacity: 0.5;
38
+ }
39
+
40
+ .input:enabled:active,
41
+ .input:enabled:focus,
42
+ .input:enabled:hover,
43
+ .input:enabled[aria-pressed="true"] {
44
+ border-color: var(--color-zinc-600);
45
+ box-shadow: 0 1px transparent;
46
+ }
47
+
48
+ .input:focus-visible {
49
+ outline-width: 2px;
50
+ }
51
+
52
+ /* ===================================================== */
53
+ /* Password */
54
+ /* ===================================================== */
55
+ .input__password {
56
+ font-family: var(--font-mono, monospace);
57
+ }
@@ -0,0 +1,49 @@
1
+ import type { ComponentProps, JSX } from "react"
2
+ import styles from "@/input.module.css"
3
+
4
+ export interface InputProps extends Omit<
5
+ ComponentProps<"input">,
6
+ "aria-pressed" | "disabled" | "readOnly" | "required"
7
+ > {
8
+ isActive?: boolean
9
+ isDisabled?: boolean
10
+ isReadOnly?: boolean
11
+ isRequired?: boolean
12
+ }
13
+
14
+ export function Input(props: InputProps): JSX.Element {
15
+ const {
16
+ className: customClassName = "",
17
+ isDisabled = false,
18
+ isReadOnly = false,
19
+ isRequired = false,
20
+ type = "text",
21
+ ...rest
22
+ } = props
23
+
24
+ const isPassword = type === "password"
25
+
26
+ const combinedClassName = `
27
+ ${INPUT_CLASS_NAME.BASE}
28
+ ${isPassword ? INPUT_CLASS_NAME.PASSWORD : ""}
29
+ ${customClassName}
30
+ `
31
+ .replaceAll(/\s+/g, " ")
32
+ .trim()
33
+
34
+ return (
35
+ <input
36
+ className={combinedClassName}
37
+ disabled={isDisabled}
38
+ readOnly={isReadOnly}
39
+ required={isRequired}
40
+ type={type}
41
+ {...rest}
42
+ />
43
+ )
44
+ }
45
+
46
+ export const INPUT_CLASS_NAME = {
47
+ BASE: styles.input,
48
+ PASSWORD: styles.input__password,
49
+ } as const
@@ -0,0 +1,8 @@
1
+ /* ===================================================== */
2
+ /* Base */
3
+ /* ===================================================== */
4
+ .label {
5
+ width: fit-content;
6
+ font-size: 13px;
7
+ color: var(--color-gray-11, #646464);
8
+ }
@@ -0,0 +1,23 @@
1
+ // oxlint-disable jsx_a11y/label-has-associated-control
2
+
3
+ import type { ComponentProps, JSX } from "react"
4
+ import styles from "@/label.module.css"
5
+
6
+ export interface LabelProps extends ComponentProps<"label"> {}
7
+
8
+ export function Label(props: LabelProps): JSX.Element {
9
+ const { className: customClassName = "", ...rest } = props
10
+
11
+ const combinedClassName = `
12
+ ${LABEL_CLASS_NAME.BASE}
13
+ ${customClassName}
14
+ `
15
+ .replaceAll(/\s+/g, " ")
16
+ .trim()
17
+
18
+ return <label className={combinedClassName} {...rest} />
19
+ }
20
+
21
+ export const LABEL_CLASS_NAME = {
22
+ BASE: styles.label,
23
+ } as const
@@ -0,0 +1,14 @@
1
+ {
2
+ "compilerOptions": {
3
+ "esModuleInterop": true,
4
+ "jsx": "react-jsx",
5
+ "lib": ["dom", "esnext"],
6
+ "module": "esnext",
7
+ "moduleResolution": "bundler",
8
+ "noEmit": true,
9
+ "paths": {
10
+ "@/*": ["./src/*"]
11
+ },
12
+ "skipLibCheck": true
13
+ }
14
+ }
@@ -0,0 +1,31 @@
1
+ // oxlint-disable import/no-nodejs-modules
2
+
3
+ import { copyFileSync, mkdirSync } from "node:fs"
4
+ import path from "node:path"
5
+ import { defineConfig } from "tsup"
6
+
7
+ export default defineConfig({
8
+ clean: true,
9
+ dts: true,
10
+ entry: ["src/index.ts", "src/foundations/colors/tailwind-v3.ts"],
11
+ external: ["react", "react-dom"],
12
+ format: ["esm", "cjs"],
13
+ loader: {
14
+ ".css": "copy",
15
+ },
16
+ onSuccess: () => {
17
+ // Copy the tailwind-v3.css CSS file to the dist directory
18
+ let src = "src/foundations/colors/tailwind-v4.css"
19
+ let dest = "dist/foundations/colors/tailwind-v4.css"
20
+ mkdirSync(path.dirname(dest), { recursive: true })
21
+ copyFileSync(src, dest)
22
+
23
+ src = "src/foundations/colors/retail-design-system.css"
24
+ dest = "dist/foundations/colors/retail-design-system.css"
25
+ mkdirSync(path.dirname(dest), { recursive: true })
26
+ copyFileSync(src, dest)
27
+
28
+ console.log(`โœ“ Copied ${src} to ${dest}`)
29
+ return Promise.resolve()
30
+ },
31
+ })
@@ -0,0 +1,69 @@
1
+ #!/bin/bash
2
+
3
+ # Clean script to remove node_modules, .next, dist, and .turbo directories
4
+ # from all folders and subfolders in the project
5
+
6
+ set -e # Exit on any error
7
+
8
+ echo "๐Ÿงน Starting cleanup..."
9
+
10
+ # Function to remove directories if they exist
11
+ remove_if_exists() {
12
+ local dir_name="$1"
13
+ local dirs_found
14
+ local count=0
15
+
16
+ echo "๐Ÿ” Looking for ${dir_name} directories..."
17
+
18
+ # Find all instances of the directory
19
+ dirs_found=$(find . -name "$dir_name" -type d 2>/dev/null)
20
+
21
+ if [ -z "$dirs_found" ]; then
22
+ echo " โœ… No ${dir_name} directories found"
23
+ else
24
+ # Remove each directory and count them
25
+ while IFS= read -r dir; do
26
+ echo " ๐Ÿ—‘๏ธ Removing: ${dir}"
27
+ rm -rf "$dir"
28
+ ((count++))
29
+ done <<< "$dirs_found"
30
+
31
+ echo " โœ… Removed ${count} ${dir_name} director$([ $count -eq 1 ] && echo "y" || echo "ies")"
32
+ fi
33
+ echo
34
+ }
35
+
36
+ # Function to remove files if they exist
37
+ remove_files_if_exist() {
38
+ local file_name="$1"
39
+ local files_found
40
+ local count=0
41
+
42
+ echo "๐Ÿ” Looking for ${file_name} files..."
43
+
44
+ # Find all instances of the file
45
+ files_found=$(find . -name "$file_name" -type f 2>/dev/null)
46
+
47
+ if [ -z "$files_found" ]; then
48
+ echo " โœ… No ${file_name} files found"
49
+ else
50
+ # Remove each file and count them
51
+ while IFS= read -r file; do
52
+ echo " ๐Ÿ—‘๏ธ Removing: ${file}"
53
+ rm -f "$file"
54
+ ((count++))
55
+ done <<< "$files_found"
56
+
57
+ echo " โœ… Removed ${count} ${file_name} file$([ $count -eq 1 ] && echo "" || echo "s")"
58
+ fi
59
+ echo
60
+ }
61
+
62
+ remove_if_exists ".next"
63
+ remove_if_exists ".turbo"
64
+ remove_if_exists "dist"
65
+ remove_if_exists "node_modules"
66
+
67
+ remove_files_if_exist "bun.lock"
68
+
69
+ echo "๐ŸŽ‰ Cleanup completed successfully!"
@@ -0,0 +1,30 @@
1
+ #!/bin/bash
2
+
3
+ # Recursively finds and sorts all package.json files in the project
4
+
5
+ set -e # Exit on any error
6
+
7
+ echo "๐Ÿ” Finding all package.json files..."
8
+
9
+ # Find all package.json files recursively, excluding node_modules
10
+ package_files=$(find . -name "package.json" -not -path "*/node_modules/*" -type f)
11
+
12
+ if [ -z "$package_files" ]; then
13
+ echo "โŒ No package.json files found"
14
+ exit 1
15
+ fi
16
+
17
+ echo "๐Ÿ“ฆ Found package.json files:"
18
+ echo "$package_files" | sed 's/^/ /'
19
+
20
+ echo ""
21
+ echo "๐Ÿ”ง Sorting package.json files..."
22
+
23
+ # Sort each package.json file
24
+ for file in $package_files; do
25
+ echo " Sorting: $file"
26
+ bunx sort-package-json "$file"
27
+ done
28
+
29
+ echo ""
30
+ echo "โœ… All package.json files have been sorted!"
package/turbo.json ADDED
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "https://turbo.build/schema.json",
3
+ "envMode": "loose",
4
+ "tasks": {
5
+ "build": {
6
+ "dependsOn": ["^build"],
7
+ "outputs": ["!.next/cache/**", ".next/**", "dist/**", "storybook-static/**"]
8
+ },
9
+ "dev": {
10
+ "cache": false,
11
+ "persistent": true
12
+ }
13
+ },
14
+ "ui": "stream"
15
+ }