@_linked/cli 1.8.2 → 1.9.1

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 (182) hide show
  1. package/.github/workflows/publish.yml +23 -0
  2. package/CHANGELOG.md +18 -0
  3. package/defaults/setup-publish/dual-branch/github/workflows/publish.yml +26 -0
  4. package/defaults/setup-publish/github/workflows/publish.yml +27 -0
  5. package/jest.config.cjs +8 -4
  6. package/lib/esm/cli-methods.d.ts.map +1 -1
  7. package/lib/esm/cli-methods.js +15 -3
  8. package/lib/esm/cli-methods.js.map +1 -1
  9. package/lib/esm/vite-config.d.ts.map +1 -1
  10. package/lib/esm/vite-config.js +51 -16
  11. package/lib/esm/vite-config.js.map +1 -1
  12. package/package.json +8 -14
  13. package/tests/unit/safeYarn.test.ts +1 -1
  14. package/defaults/app-with-backend/.env-cmdrc.json +0 -19
  15. package/defaults/app-with-backend/.env.example +0 -20
  16. package/defaults/app-with-backend/.eslintignore +0 -5
  17. package/defaults/app-with-backend/.eslintrc.json +0 -40
  18. package/defaults/app-with-backend/.prettierignore +0 -4
  19. package/defaults/app-with-backend/.prettierrc.json +0 -27
  20. package/defaults/app-with-backend/.vscode/launch.json +0 -12
  21. package/defaults/app-with-backend/.yarn/plugins/@yarnpkg/plugin-version.cjs +0 -550
  22. package/defaults/app-with-backend/.yarn/releases/yarn-3.6.1.cjs +0 -874
  23. package/defaults/app-with-backend/gitignore.template +0 -27
  24. package/defaults/app-with-backend/linked.backend.datasets.example.json +0 -17
  25. package/defaults/app-with-backend/linked.backend.storage.ts +0 -35
  26. package/defaults/app-with-backend/linked.config.js +0 -7
  27. package/defaults/app-with-backend/package.json +0 -75
  28. package/defaults/app-with-backend/pm2-staging.config.js +0 -12
  29. package/defaults/app-with-backend/pm2.config.js +0 -12
  30. package/defaults/app-with-backend/public/favicon-144x144.png +0 -0
  31. package/defaults/app-with-backend/public/favicon-57x57.png +0 -0
  32. package/defaults/app-with-backend/public/favicon-72x72.png +0 -0
  33. package/defaults/app-with-backend/public/favicon.ico +0 -0
  34. package/defaults/app-with-backend/readme.md +0 -93
  35. package/defaults/app-with-backend/src/App.module.css +0 -83
  36. package/defaults/app-with-backend/src/App.tsx +0 -30
  37. package/defaults/app-with-backend/src/backend.ts +0 -9
  38. package/defaults/app-with-backend/src/components/Error.module.css +0 -9
  39. package/defaults/app-with-backend/src/components/Error.tsx +0 -11
  40. package/defaults/app-with-backend/src/components/PersonOverview.module.css +0 -100
  41. package/defaults/app-with-backend/src/components/PersonOverview.tsx +0 -97
  42. package/defaults/app-with-backend/src/components/PersonOverviewContext.tsx +0 -12
  43. package/defaults/app-with-backend/src/components/PersonPreview.module.css +0 -97
  44. package/defaults/app-with-backend/src/components/PersonPreview.tsx +0 -109
  45. package/defaults/app-with-backend/src/components/Spinner.module.css +0 -17
  46. package/defaults/app-with-backend/src/components/Spinner.tsx +0 -12
  47. package/defaults/app-with-backend/src/index.tsx +0 -34
  48. package/defaults/app-with-backend/src/layout/DefaultLayout.module.css +0 -15
  49. package/defaults/app-with-backend/src/layout/DefaultLayout.tsx +0 -12
  50. package/defaults/app-with-backend/src/layout/Header.module.css +0 -46
  51. package/defaults/app-with-backend/src/layout/Header.tsx +0 -27
  52. package/defaults/app-with-backend/src/linked.frontend.datasets.json +0 -12
  53. package/defaults/app-with-backend/src/linked.frontend.storage.ts +0 -36
  54. package/defaults/app-with-backend/src/package.ts +0 -16
  55. package/defaults/app-with-backend/src/pages/Home.module.css +0 -23
  56. package/defaults/app-with-backend/src/pages/Home.tsx +0 -14
  57. package/defaults/app-with-backend/src/pages/Page1.module.css +0 -111
  58. package/defaults/app-with-backend/src/pages/Page1.tsx +0 -196
  59. package/defaults/app-with-backend/src/pages/PageNotFound.module.css +0 -19
  60. package/defaults/app-with-backend/src/pages/PageNotFound.tsx +0 -14
  61. package/defaults/app-with-backend/src/pages/Signin.module.css +0 -20
  62. package/defaults/app-with-backend/src/pages/Signin.tsx +0 -16
  63. package/defaults/app-with-backend/src/routes.tsx +0 -78
  64. package/defaults/app-with-backend/src/theme.css +0 -91
  65. package/defaults/app-with-backend/src/types.ts +0 -14
  66. package/defaults/app-with-backend/src/utils/lazyWithPreload.tsx +0 -42
  67. package/defaults/app-with-backend/src/utils/preloadRoutes.ts +0 -38
  68. package/defaults/app-with-backend/tsconfig.json +0 -24
  69. package/defaults/app-with-backend/vite.config.ts +0 -13
  70. package/defaults/app-with-backend/yarnrc.yml.template +0 -8
  71. package/lib/cjs/cli-methods.d.ts +0 -75
  72. package/lib/cjs/cli-methods.d.ts.map +0 -1
  73. package/lib/cjs/cli-methods.js +0 -2655
  74. package/lib/cjs/cli-methods.js.map +0 -1
  75. package/lib/cjs/cli.d.ts +0 -3
  76. package/lib/cjs/cli.d.ts.map +0 -1
  77. package/lib/cjs/cli.js +0 -339
  78. package/lib/cjs/cli.js.map +0 -1
  79. package/lib/cjs/commands/build-package.d.ts +0 -9
  80. package/lib/cjs/commands/build-package.d.ts.map +0 -1
  81. package/lib/cjs/commands/build-package.js +0 -55
  82. package/lib/cjs/commands/build-package.js.map +0 -1
  83. package/lib/cjs/commands/safe-yarn.d.ts +0 -10
  84. package/lib/cjs/commands/safe-yarn.d.ts.map +0 -1
  85. package/lib/cjs/commands/safe-yarn.js +0 -66
  86. package/lib/cjs/commands/safe-yarn.js.map +0 -1
  87. package/lib/cjs/commands/setup-publish.d.ts +0 -23
  88. package/lib/cjs/commands/setup-publish.d.ts.map +0 -1
  89. package/lib/cjs/commands/setup-publish.js +0 -369
  90. package/lib/cjs/commands/setup-publish.js.map +0 -1
  91. package/lib/cjs/commands/start.d.ts +0 -6
  92. package/lib/cjs/commands/start.d.ts.map +0 -1
  93. package/lib/cjs/commands/start.js +0 -337
  94. package/lib/cjs/commands/start.js.map +0 -1
  95. package/lib/cjs/config-webpack-app.d.ts +0 -112
  96. package/lib/cjs/config-webpack-app.d.ts.map +0 -1
  97. package/lib/cjs/config-webpack-app.js +0 -427
  98. package/lib/cjs/config-webpack-app.js.map +0 -1
  99. package/lib/cjs/config-webpack.d.ts +0 -55
  100. package/lib/cjs/config-webpack.d.ts.map +0 -1
  101. package/lib/cjs/config-webpack.js +0 -417
  102. package/lib/cjs/config-webpack.js.map +0 -1
  103. package/lib/cjs/defineConfig.d.ts +0 -8
  104. package/lib/cjs/defineConfig.d.ts.map +0 -1
  105. package/lib/cjs/defineConfig.js +0 -12
  106. package/lib/cjs/defineConfig.js.map +0 -1
  107. package/lib/cjs/index.d.ts +0 -12
  108. package/lib/cjs/index.d.ts.map +0 -1
  109. package/lib/cjs/index.js +0 -43
  110. package/lib/cjs/index.js.map +0 -1
  111. package/lib/cjs/interfaces.d.ts +0 -140
  112. package/lib/cjs/interfaces.d.ts.map +0 -1
  113. package/lib/cjs/interfaces.js +0 -3
  114. package/lib/cjs/interfaces.js.map +0 -1
  115. package/lib/cjs/lifecycle.d.ts +0 -24
  116. package/lib/cjs/lifecycle.d.ts.map +0 -1
  117. package/lib/cjs/lifecycle.js +0 -187
  118. package/lib/cjs/lifecycle.js.map +0 -1
  119. package/lib/cjs/loaders/css-loader.d.mts +0 -2
  120. package/lib/cjs/loaders/css-loader.d.mts.map +0 -1
  121. package/lib/cjs/loaders/css-loader.mjs +0 -86
  122. package/lib/cjs/loaders/css-loader.mjs.map +0 -1
  123. package/lib/cjs/loaders/register-css-only.d.ts +0 -2
  124. package/lib/cjs/loaders/register-css-only.d.ts.map +0 -1
  125. package/lib/cjs/loaders/register-css-only.js +0 -11
  126. package/lib/cjs/loaders/register-css-only.js.map +0 -1
  127. package/lib/cjs/loaders/register.d.ts +0 -2
  128. package/lib/cjs/loaders/register.d.ts.map +0 -1
  129. package/lib/cjs/loaders/register.js +0 -11
  130. package/lib/cjs/loaders/register.js.map +0 -1
  131. package/lib/cjs/loaders/ts-loader.d.mts +0 -3
  132. package/lib/cjs/loaders/ts-loader.d.mts.map +0 -1
  133. package/lib/cjs/loaders/ts-loader.mjs +0 -125
  134. package/lib/cjs/loaders/ts-loader.mjs.map +0 -1
  135. package/lib/cjs/metadata.d.ts +0 -1
  136. package/lib/cjs/metadata.d.ts.map +0 -1
  137. package/lib/cjs/metadata.js +0 -155
  138. package/lib/cjs/metadata.js.map +0 -1
  139. package/lib/cjs/package.json +0 -144
  140. package/lib/cjs/plugins/check-imports.d.ts +0 -2
  141. package/lib/cjs/plugins/check-imports.d.ts.map +0 -1
  142. package/lib/cjs/plugins/check-imports.js +0 -68
  143. package/lib/cjs/plugins/check-imports.js.map +0 -1
  144. package/lib/cjs/plugins/declaration-plugin.d.ts +0 -15
  145. package/lib/cjs/plugins/declaration-plugin.d.ts.map +0 -1
  146. package/lib/cjs/plugins/declaration-plugin.js +0 -285
  147. package/lib/cjs/plugins/declaration-plugin.js.map +0 -1
  148. package/lib/cjs/plugins/externalise-modules.d.ts +0 -7
  149. package/lib/cjs/plugins/externalise-modules.d.ts.map +0 -1
  150. package/lib/cjs/plugins/externalise-modules.js +0 -190
  151. package/lib/cjs/plugins/externalise-modules.js.map +0 -1
  152. package/lib/cjs/plugins/lincd-tailwind-sources.d.ts +0 -3
  153. package/lib/cjs/plugins/lincd-tailwind-sources.d.ts.map +0 -1
  154. package/lib/cjs/plugins/lincd-tailwind-sources.js +0 -32
  155. package/lib/cjs/plugins/lincd-tailwind-sources.js.map +0 -1
  156. package/lib/cjs/plugins/watch-run.d.ts +0 -5
  157. package/lib/cjs/plugins/watch-run.d.ts.map +0 -1
  158. package/lib/cjs/plugins/watch-run.js +0 -45
  159. package/lib/cjs/plugins/watch-run.js.map +0 -1
  160. package/lib/cjs/preflight.css +0 -137
  161. package/lib/cjs/tailwind.config.d.ts +0 -8
  162. package/lib/cjs/tailwind.config.d.ts.map +0 -1
  163. package/lib/cjs/tailwind.config.js +0 -17
  164. package/lib/cjs/tailwind.config.js.map +0 -1
  165. package/lib/cjs/utils.d.ts +0 -77
  166. package/lib/cjs/utils.d.ts.map +0 -1
  167. package/lib/cjs/utils.js +0 -591
  168. package/lib/cjs/utils.js.map +0 -1
  169. package/lib/cjs/vite-config.d.ts +0 -20
  170. package/lib/cjs/vite-config.d.ts.map +0 -1
  171. package/lib/cjs/vite-config.js +0 -401
  172. package/lib/cjs/vite-config.js.map +0 -1
  173. package/lib/esm/loaders/register-css-only.d.ts +0 -2
  174. package/lib/esm/loaders/register-css-only.d.ts.map +0 -1
  175. package/lib/esm/loaders/register-css-only.js +0 -9
  176. package/lib/esm/loaders/register-css-only.js.map +0 -1
  177. package/lib/esm/loaders/register.d.ts +0 -2
  178. package/lib/esm/loaders/register.d.ts.map +0 -1
  179. package/lib/esm/loaders/register.js +0 -9
  180. package/lib/esm/loaders/register.js.map +0 -1
  181. package/lib/esm/package.json +0 -144
  182. /package/{babel.config.js → babel.config.cjs} +0 -0
@@ -1,196 +0,0 @@
1
- // Components showcase — demonstrates a slice of @_linked/primitives against
2
- // the active @_linked/css theme. Tweak tokens in src/theme.css to re-skin
3
- // everything on this page. (To make the route sign-in-protected later, see
4
- // the `requireAuth` line in src/routes.tsx.)
5
- import React, { useEffect, useState } from 'react';
6
- import { DefaultLayout } from '../layout/DefaultLayout';
7
- import { Button } from '@_linked/primitives/components/Button';
8
- import { Input } from '@_linked/primitives/components/Input';
9
- import { Switch } from '@_linked/primitives/components/Switch';
10
- import { Checkbox } from '@_linked/primitives/components/Checkbox';
11
- import { Slider } from '@_linked/primitives/components/Slider';
12
- import { Progress } from '@_linked/primitives/components/Progress';
13
- import { Avatar } from '@_linked/primitives/components/Avatar';
14
- import { Tabs } from '@_linked/primitives/components/Tabs';
15
- import { RadioGroup } from '@_linked/primitives/components/RadioGroup';
16
- import { Label } from '@_linked/primitives/components/Label';
17
- import { Separator } from '@_linked/primitives/components/Separator';
18
- import style from './Page1.module.css';
19
-
20
- export default function Page1() {
21
- const [progress, setProgress] = useState(60);
22
- const [sliderValue, setSliderValue] = useState([40]);
23
- const [checked, setChecked] = useState(true);
24
- const [switchOn, setSwitchOn] = useState(true);
25
- const [radio, setRadio] = useState('comfy');
26
- const [text, setText] = useState('');
27
- // Radix Tabs use React 18 useId() which can drift between SSR (StaticRouter)
28
- // and CSR (BrowserRouter) trees and trigger an aria-controls hydration
29
- // mismatch warning. Render the showcase only after mount to side-step this.
30
- const [mounted, setMounted] = useState(false);
31
- useEffect(() => setMounted(true), []);
32
-
33
- return (
34
- <DefaultLayout>
35
- <div className={style.Page}>
36
- <header className={style.Header}>
37
- <h2>Components</h2>
38
- <p>
39
- A small tour of <code>@_linked/primitives</code> rendered against
40
- the active <code>@_linked/css</code> theme. Tweak{' '}
41
- <code>src/theme.css</code> tokens to re-skin every component on
42
- this page.
43
- </p>
44
- </header>
45
-
46
- {mounted && (
47
- <Tabs.Root defaultValue="forms" className={style.Tabs}>
48
- <Tabs.List>
49
- <Tabs.Trigger value="forms">Forms</Tabs.Trigger>
50
- <Tabs.Trigger value="display">Display</Tabs.Trigger>
51
- <Tabs.Trigger value="buttons">Buttons</Tabs.Trigger>
52
- </Tabs.List>
53
-
54
- <Tabs.Content value="forms" className={style.TabPanel}>
55
- <section className={style.Card}>
56
- <h3>Inputs</h3>
57
- <div className={style.Field}>
58
- <Label htmlFor="demo-name">Name</Label>
59
- <Input
60
- id="demo-name"
61
- placeholder="Ada Lovelace"
62
- value={text}
63
- onChange={(e) => setText(e.target.value)}
64
- />
65
- </div>
66
- <Separator />
67
- <div className={style.Row}>
68
- <Switch
69
- checked={switchOn}
70
- onCheckedChange={(v) => setSwitchOn(Boolean(v))}
71
- />
72
- <Label>Enable notifications</Label>
73
- </div>
74
- <div className={style.Row}>
75
- <Checkbox
76
- checked={checked}
77
- onCheckedChange={(v) => setChecked(Boolean(v))}
78
- />
79
- <Label>I agree to the terms</Label>
80
- </div>
81
- </section>
82
-
83
- <section className={style.Card}>
84
- <h3>Density</h3>
85
- <RadioGroup.Root
86
- value={radio}
87
- onValueChange={setRadio}
88
- className={style.Stack}
89
- >
90
- <div className={style.Row}>
91
- <RadioGroup.Item value="compact" id="r-compact" />
92
- <Label htmlFor="r-compact">Compact</Label>
93
- </div>
94
- <div className={style.Row}>
95
- <RadioGroup.Item value="comfy" id="r-comfy" />
96
- <Label htmlFor="r-comfy">Comfortable</Label>
97
- </div>
98
- <div className={style.Row}>
99
- <RadioGroup.Item value="spacious" id="r-spacious" />
100
- <Label htmlFor="r-spacious">Spacious</Label>
101
- </div>
102
- </RadioGroup.Root>
103
- </section>
104
-
105
- <section className={style.Card}>
106
- <h3>Slider</h3>
107
- <Slider.Root
108
- value={sliderValue}
109
- onValueChange={setSliderValue}
110
- min={0}
111
- max={100}
112
- step={1}
113
- >
114
- <Slider.Track>
115
- <Slider.Range />
116
- </Slider.Track>
117
- <Slider.Thumb />
118
- </Slider.Root>
119
- <p className={style.Hint}>Value: {sliderValue[0]}</p>
120
- </section>
121
- </Tabs.Content>
122
-
123
- <Tabs.Content value="display" className={style.TabPanel}>
124
- <section className={style.Card}>
125
- <h3>Avatar</h3>
126
- <div className={style.AvatarRow}>
127
- <Avatar.Root>
128
- <Avatar.Fallback>AL</Avatar.Fallback>
129
- </Avatar.Root>
130
- <Avatar.Root>
131
- <Avatar.Fallback>GH</Avatar.Fallback>
132
- </Avatar.Root>
133
- <Avatar.Root>
134
- <Avatar.Fallback>RV</Avatar.Fallback>
135
- </Avatar.Root>
136
- </div>
137
- </section>
138
-
139
- <section className={style.Card}>
140
- <h3>Progress</h3>
141
- <Progress.Root value={progress} />
142
- <div className={style.Row}>
143
- <Button
144
- size="small"
145
- variant="outline"
146
- onClick={() => setProgress((p) => Math.max(0, p - 10))}
147
- >
148
- −10
149
- </Button>
150
- <Button
151
- size="small"
152
- variant="outline"
153
- onClick={() => setProgress((p) => Math.min(100, p + 10))}
154
- >
155
- +10
156
- </Button>
157
- <span className={style.Hint}>{progress}%</span>
158
- </div>
159
- </section>
160
- </Tabs.Content>
161
-
162
- <Tabs.Content value="buttons" className={style.TabPanel}>
163
- <section className={style.Card}>
164
- <h3>Variants</h3>
165
- <div className={style.ButtonRow}>
166
- <Button variant="solid">Solid</Button>
167
- <Button variant="outline">Outline</Button>
168
- <Button variant="ghost">Ghost</Button>
169
- <Button variant="link">Link</Button>
170
- </div>
171
- </section>
172
-
173
- <section className={style.Card}>
174
- <h3>Colors</h3>
175
- <div className={style.ButtonRow}>
176
- <Button color="primary">Primary</Button>
177
- <Button color="secondary">Secondary</Button>
178
- <Button color="tertiary">Tertiary</Button>
179
- </div>
180
- </section>
181
-
182
- <section className={style.Card}>
183
- <h3>Sizes</h3>
184
- <div className={style.ButtonRow}>
185
- <Button size="small">Small</Button>
186
- <Button size="medium">Medium</Button>
187
- <Button size="large">Large</Button>
188
- </div>
189
- </section>
190
- </Tabs.Content>
191
- </Tabs.Root>
192
- )}
193
- </div>
194
- </DefaultLayout>
195
- );
196
- }
@@ -1,19 +0,0 @@
1
- @import '@_linked/css/package.css';
2
-
3
- .Card {
4
- background: var(--bg-card);
5
- border-radius: var(--radius-card);
6
- box-shadow: var(--shadow-card);
7
- padding: --spacing(6);
8
- text-align: center;
9
- }
10
-
11
- .Card h2 {
12
- margin: 0 0 --spacing(3);
13
- }
14
-
15
- .Card p {
16
- color: var(--color-gray-700);
17
- line-height: 1.5;
18
- margin: 0;
19
- }
@@ -1,14 +0,0 @@
1
- import React from 'react';
2
- import { DefaultLayout } from '../layout/DefaultLayout';
3
- import style from './PageNotFound.module.css';
4
-
5
- export default function PageNotFound() {
6
- return (
7
- <DefaultLayout>
8
- <div className={style.Card}>
9
- <h2>Page not found</h2>
10
- <p>The page you were looking for does not exist.</p>
11
- </div>
12
- </DefaultLayout>
13
- );
14
- }
@@ -1,20 +0,0 @@
1
- @import '@_linked/css/package.css';
2
-
3
- .Card {
4
- background: var(--bg-card);
5
- border-radius: var(--radius-card);
6
- box-shadow: var(--shadow-card);
7
- padding: --spacing(6);
8
- max-width: 480px;
9
- margin: --spacing(8) auto;
10
- }
11
-
12
- .Card h2 {
13
- margin: 0 0 --spacing(3);
14
- }
15
-
16
- .Card p {
17
- color: var(--color-gray-700);
18
- line-height: 1.5;
19
- margin: 0;
20
- }
@@ -1,16 +0,0 @@
1
- import { DefaultLayout } from '../layout/DefaultLayout';
2
- import style from './Signin.module.css';
3
-
4
- export default function Signin() {
5
- return (
6
- <DefaultLayout>
7
- <div className={style.Card}>
8
- <h2>Sign in</h2>
9
- <p>
10
- See <a href="https://linked.cm">linked.cm</a> for different ways to
11
- sign in.
12
- </p>
13
- </div>
14
- </DefaultLayout>
15
- );
16
- }
@@ -1,78 +0,0 @@
1
- import type { RoutesConfig } from '@_linked/server/types/RouteConfig';
2
- import React, { lazy, Suspense } from 'react';
3
- import { Route, Routes } from 'react-router-dom';
4
- import { Spinner } from './components/Spinner';
5
- import PageNotFound from './pages/PageNotFound';
6
- import { lazyWithPreload } from './utils/lazyWithPreload';
7
-
8
- // Create preloadable lazy components for direct-entry routes
9
- const HomePage = lazyWithPreload(
10
- () => import(/* webpackChunkName: "home" */ './pages/Home')
11
- );
12
-
13
- const SigninPage = lazyWithPreload(
14
- () => import(/* webpackChunkName: "signin" */ './pages/Signin')
15
- );
16
-
17
- // Export preloadable components for server-side preloading
18
- export const PRELOADABLE_ROUTES = {
19
- home: HomePage,
20
- signin: SigninPage,
21
- };
22
-
23
-
24
- export const ROUTES: RoutesConfig = {
25
- home: {
26
- path: '/',
27
- component: HomePage.Component,
28
- label: 'Home',
29
- preloadChunks: ['home'],
30
- },
31
- page1: {
32
- path: '/page1',
33
- component: lazy(
34
- () => import(/* webpackChunkName: "page1" */ './pages/Page1')
35
- ),
36
- label: 'Components',
37
- preloadChunks: ['page1'],
38
- // To make this route sign-in-protected, install `@_linked/auth`, wire up
39
- // a `<ProvideAuth>` provider in App.tsx, import RequireAuth here, and
40
- // set `requireAuth: true` on this route.
41
- },
42
- signin: {
43
- path: '/signin',
44
- component: SigninPage.Component,
45
- label: 'Sign In',
46
- excludeFromMenu: true,
47
- preloadChunks: ['signin'],
48
- },
49
- };
50
-
51
- export default function AppRoutes() {
52
- return (
53
- <Routes>
54
- {Object.keys(ROUTES).map((routeName) => {
55
- const route = ROUTES[routeName];
56
- const Component = route.component;
57
-
58
- // define a render function that determines what to render based on the component and route.render
59
- const renderRoute = () =>
60
- // if a Component is defined, render it using JSX syntax (<Component />)
61
- // if not, check if a route.render function is defined and call that render function if available.
62
- // if neither Component nor route.render is defined, return null
63
- Component ? <Component /> : route.render ? route.render() : null;
64
-
65
- return (
66
- <Route
67
- key={route.path}
68
- path={route.path}
69
- element={
70
- <Suspense fallback={<Spinner />}>{renderRoute()}</Suspense>
71
- }
72
- />
73
- );
74
- })}
75
- <Route path="*" element={<PageNotFound />} />
76
- </Routes>
77
- );
78
- }
@@ -1,91 +0,0 @@
1
- /*
2
- * Theme overrides for ${name}.
3
- *
4
- * The default palette below is a teal-blue primary + mint-green secondary.
5
- * Override --color-primary-* / --color-secondary-* to your own brand.
6
- *
7
- * Available tokens (palette, surfaces, shadows, radii, spacing) are documented in:
8
- * https://github.com/linked-cm/css/blob/main/README.md
9
- * https://github.com/linked-cm/css/blob/main/docs/styling-and-themes.md
10
- */
11
-
12
- /* Tailwind v4 layers — split-import pattern to substitute the Linked preflight.
13
- See @_linked/css README "Why the split-import?" for details. */
14
- @layer theme, base, components, utilities;
15
- @import 'tailwindcss/theme.css' layer(theme);
16
- @import '@_linked/css/preflight.css';
17
- @import 'tailwindcss/utilities.css' layer(utilities);
18
-
19
- /* Apply Tailwind config from @_linked/cli — ensures all @_linked/* shapes
20
- are scanned for utility classes. */
21
- @config "@_linked/cli/tailwind.config.js";
22
-
23
- /* @_linked/css: framework theme defaults + utility mixins.
24
- App-specific @theme overrides below extend / replace these defaults. */
25
- @import '@_linked/css/theme-defaults.css';
26
- @import '@_linked/css/utilities.css';
27
-
28
- @theme {
29
- /* === Primary palette — Linked teal-blue === */
30
- --color-primary-50: #f7fbfd;
31
- --color-primary-100: #eef7fb;
32
- --color-primary-200: #d3ebf5;
33
- --color-primary-300: #a8d7ec;
34
- --color-primary-400: #71bbdd;
35
- --color-primary-500: #116d8d; /* base */
36
- --color-primary-600: #0a5f7d;
37
- --color-primary-700: #005970;
38
- --color-primary-800: #004d61;
39
- --color-primary-900: #001f28;
40
-
41
- /* === Secondary palette — mint green === */
42
- --color-secondary-50: #f9fdfc;
43
- --color-secondary-100: #f4fbf8;
44
- --color-secondary-200: #e6f5ef;
45
- --color-secondary-300: #ccebe0;
46
- --color-secondary-400: #b1e0cd;
47
- --color-secondary-500: #52a181; /* base */
48
- --color-secondary-600: #297a5c;
49
- --color-secondary-700: #146b4f;
50
- --color-secondary-800: #005d43;
51
- --color-secondary-900: #00201a;
52
-
53
- /* === Shadows === */
54
- --shadow-surface: var(--shadow-sm); /* Background panels, sections */
55
- --shadow-card: var(--shadow-md); /* Cards, organized content blocks */
56
- --shadow-popover: var(--shadow-lg); /* Tooltips, dropdowns, popovers */
57
- --shadow-modal: var(--shadow-2xl); /* Modals, overlays */
58
- --shadow-floating-action: var(--shadow-lg);
59
- --shadow-content: none; /* Buttons, inputs inside surfaces */
60
-
61
- /* === Backgrounds / Surfaces === */
62
- --bg-page: var(--color-gray-50);
63
- --bg-section: var(--color-gray-100);
64
- --bg-card: var(--color-white);
65
- --bg-popover: var(--color-white);
66
- --bg-modal: var(--color-white);
67
- --bg-sidebar: var(--color-gray-200);
68
- --bg-footer: var(--color-gray-300);
69
- --bg-overlay: var(--color-gray-900);
70
- --color-card: var(--color-white);
71
-
72
- /* === Border radius === */
73
- --radius-surface: var(--radius-sm);
74
- --radius-card: var(--radius-lg);
75
- --radius-element: var(--radius-md);
76
- --radius-popover: var(--radius-md);
77
- --radius-modal: var(--radius-2xl);
78
- --radius-floating-action: var(--radius-full);
79
- --radius-none: 0px;
80
-
81
- /* === Z-index === */
82
- --z-base: 0;
83
- --z-surface: 10;
84
- --z-popover: 30;
85
- --z-modal: 50;
86
- --z-overlay: 75;
87
- --z-tooltip: 100;
88
-
89
- /* === Spacing tokens === */
90
- --spacing-card: calc(var(--spacing) * 4);
91
- }
@@ -1,14 +0,0 @@
1
- declare module '*.css' {
2
- const styles: {
3
- readonly [key: string]: string;
4
- };
5
- // export type ClassName = string;
6
- export default styles;
7
- }
8
- declare module '*.scss' {
9
- const styles: {
10
- readonly [key: string]: string;
11
- };
12
- // export type ClassName = string;
13
- export default styles;
14
- }
@@ -1,42 +0,0 @@
1
- import { ComponentType, lazy } from 'react';
2
-
3
- export interface PreloadableComponent<T extends ComponentType<any>> {
4
- preload: () => Promise<{ default: T }>;
5
- Component: React.LazyExoticComponent<T>;
6
- }
7
-
8
- /**
9
- * Creates a lazy-loaded component with a preload function
10
- * This allows preloading the component before React needs it
11
- *
12
- * @example
13
- * const SigninPage = lazyWithPreload(() => import('./pages/Signin'));
14
- * // Later, before navigation or on server:
15
- * SigninPage.preload();
16
- */
17
- export function lazyWithPreload<T extends ComponentType<any>>(
18
- importFunc: () => Promise<{ default: T }>
19
- ): PreloadableComponent<T> {
20
- let modulePromise: Promise<{ default: T }> | null = null;
21
-
22
- const preload = () => {
23
- if (!modulePromise) {
24
- modulePromise = importFunc();
25
- }
26
- return modulePromise;
27
- };
28
-
29
- const Component = lazy(() => {
30
- // If preload was called, reuse the same promise
31
- // This ensures React uses the already-loaded module
32
- if (!modulePromise) {
33
- modulePromise = importFunc();
34
- }
35
- return modulePromise;
36
- });
37
-
38
- return {
39
- preload,
40
- Component,
41
- };
42
- }
@@ -1,38 +0,0 @@
1
- /**
2
- * Client-side script to preload lazy routes before hydration
3
- * This should be called BEFORE React's hydrateRoot()
4
- */
5
-
6
- // This will be populated by the server with the routes that need preloading
7
- declare global {
8
- interface Window {
9
- __PRELOAD_ROUTES__?: string[];
10
- }
11
- }
12
-
13
- export async function preloadMatchedRoute() {
14
- // Get the list of routes to preload from the server
15
- const routesToPreload = window.__PRELOAD_ROUTES__ || [];
16
-
17
- if (routesToPreload.length === 0) {
18
- return;
19
- }
20
-
21
- // Dynamically import the routes module to access PRELOADABLE_ROUTES
22
- const routesModule = await import('../routes');
23
- const { PRELOADABLE_ROUTES } = routesModule;
24
-
25
- // Preload each route
26
- const preloadPromises = routesToPreload
27
- .map((routeKey) => {
28
- const preloadableRoute = PRELOADABLE_ROUTES[routeKey];
29
- if (preloadableRoute && preloadableRoute.preload) {
30
- return preloadableRoute.preload();
31
- }
32
- return null;
33
- })
34
- .filter(Boolean);
35
-
36
- // Wait for all preloads to complete
37
- await Promise.all(preloadPromises);
38
- }
@@ -1,24 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "module": "esnext",
4
- "moduleResolution": "bundler",
5
- "sourceMap": true,
6
- "target": "es2018",
7
- "resolveJsonModule": true,
8
- "declaration": false,
9
- "experimentalDecorators": true,
10
- "emitDecoratorMetadata": true,
11
- "esModuleInterop": true,
12
- "resolveJsonModule": true,
13
- "jsx": "react-jsx",
14
- "types": ["node", "react", "react-dom"],
15
- "plugins": [
16
- {
17
- "name": "typescript-plugin-css-modules"
18
- }
19
- ],
20
- "pretty": true
21
- },
22
- "files": ["./src/index.tsx", "./src/types.ts"],
23
- "include": ["./src/backend.ts"]
24
- }
@@ -1,13 +0,0 @@
1
- // Vite config for new linked apps. Uses the shared createViteConfig
2
- // helper from @_linked/cli/vite-config so future Vite upgrades propagate
3
- // to every linked app via a cli bump.
4
- //
5
- // Run with:
6
- // yarn start (Vite dev — plan-010 default once stable)
7
- // yarn start:webpack (legacy webpack path — migration escape hatch)
8
- import {createViteConfig} from '@_linked/cli/vite-config';
9
-
10
- export default createViteConfig({
11
- port: 4040,
12
- cssMode: 'tailwind',
13
- });
@@ -1,8 +0,0 @@
1
- nodeLinker: "node-modules"
2
- npmRegistryServer: "https://registry.npmjs.org/"
3
-
4
- plugins:
5
- - path: .yarn/plugins/@yarnpkg/plugin-version.cjs
6
- spec: "@yarnpkg/plugin-version"
7
-
8
- yarnPath: .yarn/releases/yarn-3.6.1.cjs
@@ -1,75 +0,0 @@
1
- import type { PackageDetails } from './interfaces.js';
2
- /**
3
- * Dynamically import the app's backend storage configuration. Tries the
4
- * canonical `linked.backend.storage.{ts,js}` at app root first, then the
5
- * earlier `backend-storage-config.{ts,js}` (Iter3), then the legacy
6
- * `scripts/storage-config.js` (pre-rename). The fallback chain lets older
7
- * app clones keep booting through the rename.
8
- */
9
- import { ensureEnvironmentLoaded, loadBackendStorageConfig, getLincdPackages } from './lifecycle.js';
10
- export { ensureEnvironmentLoaded, loadBackendStorageConfig, getLincdPackages };
11
- export declare const createApp: (name: any, basePath?: string, options?: {
12
- appName?: string;
13
- appPrefix?: string;
14
- appDomain?: string;
15
- skipInstall?: boolean;
16
- }) => Promise<void>;
17
- export declare function warn(...messages: any[]): void;
18
- export declare function logError(...errors: any[]): void;
19
- export declare function developPackage(target: any, mode: any): void;
20
- export declare function runOnPackagesGroupedByDependencies(lincdPackages: any, onBuildStack: (packageGroup: any, dependencies: any) => (pkg: PackageDetails) => Promise<any>, onStackEnd: any, sync?: boolean): Promise<void>;
21
- export declare function buildAll(options: any): void;
22
- export declare const createOntology: (prefix: any, uriBase?: any, basePath?: string) => Promise<void>;
23
- export declare const addLineToIndex: (line: any, insertMatchString: string, root?: string, insertAtStart?: boolean) => string;
24
- export declare const setNameVariables: (name: any) => {
25
- hyphenName: any;
26
- camelCaseName: any;
27
- underscoreName: any;
28
- plainName: any;
29
- };
30
- /**
31
- * get __dirname for either ESM/CJS
32
- */
33
- export declare const getScriptDir: () => string;
34
- export declare const createShape: (name: any, basePath?: string) => Promise<void>;
35
- export declare const createSetComponent: (name: any, basePath?: string) => Promise<void>;
36
- export declare const createComponent: (name: any, basePath?: string) => Promise<void>;
37
- export declare const checkImports: (sourceFolder?: string, depth?: number, // Used to check if the import is outside the src folder
38
- invalidImports?: Map<string, {
39
- type: string;
40
- importPath: string;
41
- }[]>) => Promise<boolean>;
42
- export declare const depCheckStaged: () => Promise<void>;
43
- export declare const depCheck: (packagePath?: string) => Promise<unknown>;
44
- export declare const runScript: (scriptName: string, options: {
45
- spawn: boolean;
46
- }) => Promise<never>;
47
- export declare const runMethod: (packageName: string, method: string, options: {
48
- spawn: boolean;
49
- }) => Promise<void>;
50
- export declare const startServer: (initOnly?: boolean, ServerClass?: any) => Promise<any>;
51
- export declare const buildApp: () => Promise<never>;
52
- export declare const buildFrontend: () => Promise<void>;
53
- export declare const buildBackend: () => Promise<boolean>;
54
- export declare const upgradePackages: () => Promise<void>;
55
- export declare const createPackage: (name: any, uriBase?: any, basePath?: string) => Promise<void>;
56
- export declare const register: (registryURL: any) => Promise<void>;
57
- export declare const buildPackage: (target: any, target2: any, packagePath?: string, logResults?: boolean) => Promise<any>;
58
- export declare const compilePackage: (packagePath?: string) => Promise<void>;
59
- export declare const compilePackageESM: (packagePath?: string) => Promise<boolean>;
60
- export declare const compilePackageCJS: (packagePath?: string) => Promise<boolean | {
61
- error: any;
62
- }>;
63
- export declare var publishUpdated: (test?: boolean) => Promise<void>;
64
- export declare var publishPackage: (pkg?: any, test?: any, info?: any, publishVersion?: any) => Promise<string>;
65
- export declare var buildUpdated: (back: any, target: any, target2: any, useGitForLastModified?: boolean, test?: boolean) => Promise<void>;
66
- export declare var executeCommandForEachPackage: (packages: any, command: any, filterMethod: any, filterValue: any) => Promise<boolean>;
67
- export declare var addLinesToFile: (filePath: any, entries: any) => void;
68
- export declare var addCapacitor: (basePath?: string) => Promise<void>;
69
- export declare var executeCommandForPackage: (packageName: any, command: any) => void;
70
- /**
71
- * Function to remove files older than 10 seconds from the 'lib' folder.
72
- * @param {string} packagePath - The path to the package directory.
73
- */
74
- export declare const removeOldFiles: (packagePath: any) => Promise<boolean>;
75
- //# sourceMappingURL=cli-methods.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-methods.d.ts","sourceRoot":"","sources":["../../src/cli-methods.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAgBpD;;;;;;GAMG;AAKH,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAC,uBAAuB,EAAE,wBAAwB,EAAE,gBAAgB,EAAC,CAAC;AAoB7E,eAAO,MAAM,SAAS,GAAU,SAAI,EAAE,iBAAwB,EAAE,UAAS;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAM,kBAgL9J,CAAC;AAmBF,wBAAgB,IAAI,CAAC,GAAG,QAAQ,OAAA,QAK/B;AACD,wBAAgB,QAAQ,CAAC,GAAG,MAAM,OAAA,QAIjC;AACD,wBAAgB,cAAc,CAAC,MAAM,KAAA,EAAE,IAAI,KAAA,QAyB1C;AA2CD,wBAAgB,kCAAkC,CAChD,aAAa,KAAA,EACb,YAAY,EAAE,CACZ,YAAY,KAAA,EACZ,YAAY,KAAA,KACT,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,GAAG,CAAC,EAC1C,UAAU,KAAA,EACV,IAAI,UAAQ,GACX,OAAO,CAAC,IAAI,CAAC,CAqNf;AA+ID,wBAAgB,QAAQ,CAAC,OAAO,KAAA,QAkU/B;AA2ED,eAAO,MAAM,cAAc,GACzB,WAAM,EACN,aAAQ,EACR,iBAAwB,kBA6FzB,CAAC;AAGF,eAAO,MAAM,cAAc,GACzB,SAAI,EACJ,mBAAmB,MAAM,EACzB,OAAM,MAAsB,EAC5B,gBAAe,OAAe,WAsC/B,CAAC;AAiGF,eAAO,MAAM,gBAAgB,GAAa,SAAI;;;;;CAc7C,CAAC;AAgBF;;GAEG;AACH,eAAO,MAAM,YAAY,cAaxB,CAAC;AACF,eAAO,MAAM,WAAW,GAAU,SAAI,EAAE,iBAAwB,kBA2B/D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,SAAI,EAAE,iBAAwB,kBAmCtE,CAAC;AACF,eAAO,MAAM,eAAe,GAAU,SAAI,EAAE,iBAAwB,kBAuCnE,CAAC;AAKF,eAAO,MAAM,YAAY,GACvB,eAAc,MAA0B,EACxC,QAAO,MAAU,EAAE,wDAAwD;AAC3E,iBAAgB,GAAG,CAAC,MAAM,EAAE;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,EAAE,CAAa,qBA0G9E,CAAC;AAEF,eAAO,MAAM,cAAc,qBAuB1B,CAAC;AACF,eAAO,MAAM,QAAQ,GAAU,cAAa,MAAsB,qBAwDjE,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,YAAY,MAAM,EAClB,SAAS;IAAC,KAAK,EAAE,OAAO,CAAA;CAAC,mBAoB1B,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,aAAa,MAAM,EACnB,QAAQ,MAAM,EACd,SAAS;IAAC,KAAK,EAAE,OAAO,CAAA;CAAC,kBA2G1B,CAAC;AACF,eAAO,MAAM,WAAW,GACtB,WAAU,OAAe,EACzB,iBAAkB,iBA8DnB,CAAC;AACF,eAAO,MAAM,QAAQ,sBAKpB,CAAC;AACF,eAAO,MAAM,aAAa,qBAqHzB,CAAC;AACF,eAAO,MAAM,YAAY,wBAiExB,CAAC;AAEF,eAAO,MAAM,eAAe,qBAoK3B,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,SAAI,EACJ,aAAQ,EACR,iBAAwB,kBA4GzB,CAAC;AAqBF,eAAO,MAAM,QAAQ,GAAa,gBAAW,kBAuD5C,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,WAAM,EACN,YAAO,EACP,oBAA2B,EAC3B,aAAY,OAAc,iBAoN3B,CAAC;AACF,eAAO,MAAM,cAAc,GAAU,oBAA2B,kBAyB/D,CAAC;AACF,eAAO,MAAM,iBAAiB,GAAU,oBAA2B,qBAWlE,CAAC;AACF,eAAO,MAAM,iBAAiB,GAAU,oBAA2B;;EAelE,CAAC;AAEF,eAAO,IAAI,cAAc,GAAa,OAAM,OAAe,kBA0K1D,CAAC;AAsBF,eAAO,IAAI,cAAc,GACvB,SAAI,EACJ,UAAK,EACL,UAAK,EACL,oBAAe,oBA6DhB,CAAC;AAEF,eAAO,IAAI,YAAY,GACrB,SAAI,EACJ,WAAM,EACN,YAAO,EACP,wBAAuB,OAAe,EACtC,OAAM,OAAe,kBAqHtB,CAAC;AAeF,eAAO,IAAI,4BAA4B,GACrC,aAAQ,EACR,YAAO,EACP,iBAAY,EACZ,gBAAW,qBA4CZ,CAAC;AAOF,eAAO,IAAI,cAAc,GAAa,aAAQ,EAAE,YAAO,SAMtD,CAAC;AACF,eAAO,IAAI,YAAY,GAAmB,iBAAwB,kBA8FjE,CAAC;AAEF,eAAO,IAAI,wBAAwB,GAAa,gBAAW,EAAE,YAAO,SA6BnE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAU,gBAAW,qBA8B/C,CAAC"}