@lucaismyname/create-l1-stack 0.0.21 → 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/index.js +14 -14
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -341,6 +341,12 @@ async function applyContainerPreset(targetDir, language, presetKey) {
|
|
|
341
341
|
'components',
|
|
342
342
|
language === 'ts' ? 'TopNav.tsx' : 'TopNav.jsx'
|
|
343
343
|
)
|
|
344
|
+
const sidebarPath = path.join(
|
|
345
|
+
targetDir,
|
|
346
|
+
'src',
|
|
347
|
+
'components',
|
|
348
|
+
language === 'ts' ? 'SidebarLayout.tsx' : 'SidebarLayout.jsx'
|
|
349
|
+
)
|
|
344
350
|
|
|
345
351
|
const patchMaxW = async (filePath) => {
|
|
346
352
|
try {
|
|
@@ -357,6 +363,7 @@ async function applyContainerPreset(targetDir, language, presetKey) {
|
|
|
357
363
|
|
|
358
364
|
await patchMaxW(appPath)
|
|
359
365
|
await patchMaxW(topNavPath)
|
|
366
|
+
await patchMaxW(sidebarPath)
|
|
360
367
|
}
|
|
361
368
|
|
|
362
369
|
function notFoundPageTs() {
|
|
@@ -375,14 +382,6 @@ function errorBoundaryJs() {
|
|
|
375
382
|
return `import * as React from 'react'\n\nexport class ErrorBoundary extends React.Component {\n constructor(props) {\n super(props)\n this.state = { hasError: false }\n }\n\n static getDerivedStateFromError(error) {\n return { hasError: true, error }\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <div className=\"space-y-2\">\n <h1 className=\"text-2xl font-semibold tracking-tight\">Something went wrong</h1>\n <p className=\"text-muted-foreground\">An unexpected error occurred.</p>\n </div>\n )\n }\n\n return this.props.children\n }\n}\n`
|
|
376
383
|
}
|
|
377
384
|
|
|
378
|
-
function sidebarLayoutTs(containerMaxW) {
|
|
379
|
-
return `import { useMemo, useState } from 'react'\nimport { Link, NavLink, useLocation } from 'react-router-dom'\n\nconst navLinkClassName = ({ isActive }: { isActive: boolean }) =>\n [\n 'flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',\n isActive ? 'bg-accent text-accent-foreground' : 'text-muted-foreground hover:text-foreground hover:bg-accent/40',\n ].join(' ')\n\nexport default function SidebarLayout({ children }: { children: React.ReactNode }) {\n const [open, setOpen] = useState(false)\n const location = useLocation()\n\n useMemo(() => {\n setOpen(false)\n }, [location.pathname])\n\n return (\n <div className=\"min-h-dvh\">\n <header className=\"border-b md:hidden\">\n <div className=\"mx-auto flex h-14 ${containerMaxW} items-center justify-between px-4\">\n <Link to=\"/\" className=\"text-sm font-semibold\">\n L1 Stack\n </Link>\n <button\n type=\"button\"\n className=\"inline-flex items-center justify-center rounded-md border px-3 py-2 text-sm\"\n onClick={() => setOpen((v) => !v)}\n >\n Menu\n </button>\n </div>\n </header>\n\n <div className=\"mx-auto ${containerMaxW} px-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-[240px_1fr] md:gap-8\">\n <aside className=\"md:sticky md:top-6 md:h-[calc(100dvh-3rem)] md:py-6\">\n <div className={open ? 'block' : 'hidden md:block'}>\n <div className=\"py-6 md:py-0\">\n <div className=\"mb-6 hidden md:block\">\n <Link to=\"/\" className=\"text-sm font-semibold\">\n L1 Stack\n </Link>\n </div>\n <nav className=\"space-y-1\">\n <NavLink to=\"/\" end className={navLinkClassName}>\n Home\n </NavLink>\n <NavLink to=\"/integrations\" className={navLinkClassName}>\n Integrations\n </NavLink>\n </nav>\n </div>\n </div>\n </aside>\n\n <main className=\"py-10\">{children}</main>\n </div>\n </div>\n </div>\n )\n}\n`
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
function sidebarLayoutJs(containerMaxW) {
|
|
383
|
-
return `import { useMemo, useState } from 'react'\nimport { Link, NavLink, useLocation } from 'react-router-dom'\n\nconst navLinkClassName = ({ isActive }) =>\n [\n 'flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',\n isActive ? 'bg-accent text-accent-foreground' : 'text-muted-foreground hover:text-foreground hover:bg-accent/40',\n ].join(' ')\n\nexport default function SidebarLayout({ children }) {\n const [open, setOpen] = useState(false)\n const location = useLocation()\n\n useMemo(() => {\n setOpen(false)\n }, [location.pathname])\n\n return (\n <div className=\"min-h-dvh\">\n <header className=\"border-b md:hidden\">\n <div className=\"mx-auto flex h-14 ${containerMaxW} items-center justify-between px-4\">\n <Link to=\"/\" className=\"text-sm font-semibold\">\n L1 Stack\n </Link>\n <button\n type=\"button\"\n className=\"inline-flex items-center justify-center rounded-md border px-3 py-2 text-sm\"\n onClick={() => setOpen((v) => !v)}\n >\n Menu\n </button>\n </div>\n </header>\n\n <div className=\"mx-auto ${containerMaxW} px-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-[240px_1fr] md:gap-8\">\n <aside className=\"md:sticky md:top-6 md:h-[calc(100dvh-3rem)] md:py-6\">\n <div className={open ? 'block' : 'hidden md:block'}>\n <div className=\"py-6 md:py-0\">\n <div className=\"mb-6 hidden md:block\">\n <Link to=\"/\" className=\"text-sm font-semibold\">\n L1 Stack\n </Link>\n </div>\n <nav className=\"space-y-1\">\n <NavLink to=\"/\" end className={navLinkClassName}>\n Home\n </NavLink>\n <NavLink to=\"/integrations\" className={navLinkClassName}>\n Integrations\n </NavLink>\n </nav>\n </div>\n </div>\n </aside>\n\n <main className=\"py-10\">{children}</main>\n </div>\n </div>\n </div>\n )\n}\n`
|
|
384
|
-
}
|
|
385
|
-
|
|
386
385
|
async function applyLayout(targetDir, language, layoutKey, containerPresetKey) {
|
|
387
386
|
const appPath = path.join(targetDir, 'src', language === 'ts' ? 'App.tsx' : 'App.jsx')
|
|
388
387
|
const topNavPath = path.join(
|
|
@@ -419,12 +418,13 @@ async function applyLayout(targetDir, language, layoutKey, containerPresetKey) {
|
|
|
419
418
|
const containerMaxW = preset.maxW
|
|
420
419
|
|
|
421
420
|
if (layoutKey === 'sidebar') {
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
421
|
+
try {
|
|
422
|
+
const src = await fs.readFile(sidebarPath, 'utf8')
|
|
423
|
+
const next = src.replace(/__L1_CONTAINER_MAXW__/g, containerMaxW)
|
|
424
|
+
if (next !== src) await fs.writeFile(sidebarPath, next, 'utf8')
|
|
425
|
+
} catch {
|
|
426
|
+
// ignore
|
|
427
|
+
}
|
|
428
428
|
|
|
429
429
|
await fse.remove(topNavPath)
|
|
430
430
|
|